加入星計劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴散
  • 作品版權(quán)保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入

【RT-Thread作品秀】桌面式智能家居控制系統(tǒng)

2021/01/05
1007
服務(wù)支持:
技術(shù)交流群

完成交易后在“購買成功”頁面掃碼入群,即可與技術(shù)大咖們分享疑惑和經(jīng)驗、收獲成長和認(rèn)同、領(lǐng)取優(yōu)惠和紅包等。

虛擬商品不可退

當(dāng)前內(nèi)容為數(shù)字版權(quán)作品,購買后不支持退換且無法轉(zhuǎn)移使用。

加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論
放大
方塊圖(6)
  • 方案介紹
  • 相關(guān)文件
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜
  1. 開發(fā)背景

隨著顯示器件的多樣化,人機交互界面也在不斷地進行著變更,如今在TFT顯示屏上進行圖標(biāo)化的功能管理已成為一種趨勢,為此以ART-Pi STM32H750開發(fā)板硬件平臺,來構(gòu)建一個以圖標(biāo)界面進行功能管理的桌面式智能家居控制系統(tǒng),該系統(tǒng)的主要功能如圖1所示,整體構(gòu)成如圖2所示。

 

 

 

 

 

 

圖1  功能結(jié)構(gòu)圖

 

 

 

 

 

 

 

 

 

 

 

 

圖2  整體構(gòu)成圖

功能規(guī)劃:

RTC: 利用MCU內(nèi)部的RTC實現(xiàn)電子時鐘的計時功能,可用于定時控制固態(tài)繼電器來驅(qū)動家用電器的開關(guān)。

ADC: 利用MCU內(nèi)部的A/D轉(zhuǎn)換器對外部的模擬量進行采集,并可繪制出數(shù)據(jù)波形圖。在連接土壤濕度傳感器的情況下,可對家庭養(yǎng)植的綠色植物進行補水控制,當(dāng)然這需要小型水泵的配合。

PWM調(diào)光:利用MCU內(nèi)部的定時器通過占空比的設(shè)置來控制光源的明亮程度,也可利用亮度強弱變化的呼吸燈效果來輔助睡眠。

環(huán)境溫濕度檢測: 使用數(shù)字式溫濕度傳感器DHT22對家居的溫濕度狀態(tài)進行檢測,若配置2個DHT22的情況下,還可將2個DHT22分別放置在居室內(nèi)外,以檢測冬季供暖與墻體的保溫性能。

環(huán)境光照度檢測: 使用數(shù)字式光照度傳感器BH1750對居室的日照狀態(tài)進行檢測,從而對日照采光情況提供一個可靠的依據(jù)。

樂曲播放: 利用MCU內(nèi)部的UART向MP3功能模塊來發(fā)送指令,從而對播放的樂曲加以選擇。受板載按鍵只有一個的制約,這里只采用單鍵控制,若對按鍵加以擴展,則可實現(xiàn)雙向的選擇處理及音量的調(diào)控。

開關(guān)控制: 利用MCU的GPIO口,在連接固態(tài)繼電器的情況下,可通過按鍵來控制家居的小電器進行開關(guān)控制,也可與RTC計時器相配合來進行定時控制電器的開關(guān)。

圖像顯示: 該功能要依托W25Q16之類的FLASH存儲器件或是TF卡來輔助存儲圖片數(shù)據(jù),受時間的制約該功能只預(yù)備了一個功能調(diào)用的接口,具體的功能實現(xiàn)有待于輔助存儲功能的實現(xiàn)。

   2.硬件設(shè)計

    該系統(tǒng)的整體硬件結(jié)構(gòu)如圖3所示,主要由顯示模塊、語音模塊、繼電控制模塊及傳感器模塊等組成。

圖3  原理構(gòu)成圖

     1)顯示部分

        顯示部分是通過SPI接口的TFT屏來實現(xiàn)的,這樣比較節(jié)省GPIO資源,其連接關(guān)系如圖4所示。

圖4  TFT顯示電路原理圖

   2)音頻播放部分

        音頻播放是通過MP3播放模塊來實現(xiàn),這樣有利于節(jié)省MCU資源并可形成并行的處理關(guān)系。MP3播放模塊是采用通訊方式來控制MP3播放模塊。除連接5V電源外,只需將MP3播放模塊的RX引腳與PA9連接。

圖5  MP3播放模塊引腳圖

     3)控制部分

     為了進行電器的控制,使用帶光隔的繼電器模塊以防止繼電器對MCU的干擾,對稍大功率的電器,則使用固態(tài)繼電器來控制。

     4)傳感器部分

      為了進行物理信號的檢測,可選取不同類型的傳感器,例如對綠植的管控是采用土壤濕度傳感器,屬模擬量的傳感器,相應(yīng)的接口電路如圖6和圖7所示。此外,對數(shù)字式的傳感器的使用,則可省去數(shù)值標(biāo)度的麻煩,DHT22和BH1750就屬于這一類型。

圖6 土壤濕度檢測模塊接口

 

 

 

 

 

 

圖7 土壤濕度傳感器

     5)按鍵部分

      按鍵是人機交互的主要器件,為便于控制所用的是開發(fā)板上用戶USER,若增添更多的處理,則需要自行擴展更多的按鍵。

    3. 軟件設(shè)計

    1)界面設(shè)計

      操作界面是人機交互的窗口,系統(tǒng)的主界面如圖8所示,主要以圖標(biāo)的形式來標(biāo)識功能,并通過文字的反顯來指示待選的功能,主菜單下的相關(guān)界面如圖8~圖10所示。

圖8 主界面

 

 

 

 

 

 

 

圖9 RTC計時

圖10  MP3播放選擇

2)功能實現(xiàn)

在功能管理方面,是采用模塊化的設(shè)計方法并通過功能函數(shù)調(diào)用來實現(xiàn)。在功能設(shè)計中,既涉及到外部功能模塊的使用,也涉及到MCU內(nèi)部的RTC、A/D、UART、GPIO等。

界面生成程序:

void jm(void)
{
        LCD_Clear(WHITE);
        show_tbh(20,240,0);
        showhanzi16h(80,280,3,1);
        showhanzi16h(80,264,4,1);
        show_tbh(20,180,1);
        show_tbh(20,120,2);
        show_tbh(20,60,3); 
        showhanzi16h(80,100,5,1);
        showhanzi16h(80,84,6,1);
        show_tbh(120,60,4);
        show_tbh(120,120,5);
        show_tbh(120,180,6);
        show_tbh(120,240,7);
        showhanzi16h(180,280,13,1);
        showhanzi16h(180,264,14,1);        
        showhanzi16h(180,220,11,1); 
        showhanzi16h(180,204,12,1);    
        showhanzi16h(180,160,9,1);
        showhanzi16h(180,144,10,1);    
        showhanzi16h(180,100,7,1);
        showhanzi16h(180,84,8,1);    

        BACK_COLOR=WHITE; 
        POINT_COLOR=RED; 
        LCD_ShowCharh(80,160,'R',1);
        LCD_ShowCharh(80,152,'T',1);
        LCD_ShowCharh(80,144,'C',1);
        LCD_ShowCharh(80,220,'P',1);
        LCD_ShowCharh(80,212,'W',1);
        LCD_ShowCharh(80,204,'M',1);    
}

圖標(biāo)布置程序:

void show_tbh(unsigned int x,unsigned int y,unsigned int n)
{  
    unsigned int i,j,k;
    unsigned int da;
    k=0;
    for(i=0;i<50;i++)
    {    
        for(j=0;j<50;j++)
        {
            if(n==0) da=gImage_tb[k*2];
            if(n==1) da=gImage_pwm[k*2];
            if(n==2) da=gImage_rtc[k*2];
            if(n==3) da=gImage_a2d[k*2];
            if(n==4) da=gImage_tft[k*2];
            if(n==5) da=gImage_sz[k*2];
            if(n==6) da=gImage_kz[k*2];
            if(n==7) da=gImage_dht[k*2];
            da<<=8;
            if(n==0) da|=gImage_tb[k*2+1];
            if(n==1) da|=gImage_pwm[k*2+1];
            if(n==2) da|=gImage_rtc[k*2+1];
            if(n==3) da|=gImage_a2d[k*2+1];
            if(n==4) da|=gImage_tft[k*2+1];
            if(n==5) da|=gImage_sz[k*2+1];
            if(n==6) da|=gImage_kz[k*2+1];
            if(n==7) da|=gImage_dht[k*2+1];
            POINT_COLOR=da;    
            LCD_DrawPoint(x+i,y+j);
            k++;  
        }
    }
}

MP3樂曲選擇播放程序:

        if(i==0)
        {
         setVolume(18);
         for(j=0;j<10;j++)
         {
                   USART1->TDR=cmd6[j]; 
                   while((USART1->ISR&0X40)==0);
         }
        showhanzi16h(180,100,7,1);
        showhanzi16h(180,84,8,1);
        showhanzi16h(80,280,3,0);
        showhanzi16h(80,264,4,0);
        delay_ms(200);    
        LCD_Clear(WHITE);
        BACK_COLOR=WHITE;
        POINT_COLOR=RED;
        LCD_ShowCharh(60,280,'1',0);
        LCD_ShowCharh(60,260,'-',0);

        LCD_ShowCharh(80,280,'2',0);    
        LCD_ShowCharh(80,260,'-',0);
        LCD_ShowCharh(100,280,'3',0);    
        LCD_ShowCharh(100,260,'-',0);

        LCD_ShowCharh(120,280,'4',0);    
        LCD_ShowCharh(120,260,'-',0);
        LCD_ShowCharh(140,280,'5',0);    
        LCD_ShowCharh(140,260,'-',0);
        LCD_ShowCharh(160,280,'6',0);    
        LCD_ShowCharh(160,260,'-',0);

        LCD_ShowCharh(180,280,'7',0);    
        LCD_ShowCharh(180,260,'-',0);
        showhanzi16h(60,240,39,1); 
        showhanzi16h(60,220,40,1);
        showhanzi16h(60,200,41,1);
        showhanzi16h(80,240,19,1);
        showhanzi16h(80,220,20,1);
        showhanzi16h(100,240,35,1);
        showhanzi16h(100,220,36,1);
        showhanzi16h(100,200,37,1);
        showhanzi16h(100,180,38,1);
        showhanzi16h(120,240,33,1);
        showhanzi16h(120,220,34,1);
        showhanzi16h(140,240,29,1);
        showhanzi16h(140,220,30,1);
        showhanzi16h(140,200,31,1);
        showhanzi16h(140,180,32,1);
        showhanzi16h(160,240,21,1);  
        showhanzi16h(160,220,22,1);

        showhanzi16h(180,240,42,1);
        showhanzi16h(180,220,43,1);
         j=0;
        while(j<7) 
        {
                if(KEY1==0)
                {
                       if(j>0) 
                       {
                            LCD_ShowCharh(40+20*j,300,' ',0);    
                            LCD_ShowCharh(40+20*j,292,' ',0);
                            showhanzi16h(60+20*j,300,27,1);    
                        }
                        else
                        {
                             showhanzi16h(60,300,27,1);  // Èý½Ç + 20
                        }
                        if(j<5) 
                        {                            
                          playn(j+1);      
                          for(k=0;k<10;k++)
                          {    
                              USART1->TDR=cmd3[k];
                               while((USART1->ISR&0X40)==0);
                          }
                        }
                        j++;
                 }                        
                 delay_ms(200);
         }    
        for(k=0;k<10;k++)
        {    
                 USART1->TDR=cmd5[k];
                 while((USART1->ISR&0X40)==0);
        }
        LCD_Clear(WHITE);
        jm();
        showhanzi16h(180,100,7,1);
        showhanzi16h(180,84,8,1);
        showhanzi16h(80,280,3,0);
        showhanzi16h(80,264,4,0);    

        }

4. 功能測試

        在功能測試中,測試方法的選擇是較為重要的,應(yīng)加以合理地選擇。

       為了進行MP3播放模塊的控制,可先通過虛擬串口來驗證指令的發(fā)送功能,待功能得到驗證后再將虛擬串口通訊改為實際的MP3模塊控制能節(jié)省許多的驗證時間。虛擬串口的驗證效果如圖11所示,說明指令發(fā)送是正確的。在連接MP3播放模塊后,有效地證明了控制的有效性。

圖11  Play指令測試

對RTC計時功能的測試如圖12所示,對DHT22的溫濕度測試如圖13所示。

 

 

 

 

 

 

圖12 RTC計時

 

 

 

 

 

 

 

圖13 溫濕度測試

對BH1750的照度測試如圖14所示,對波形繪制功能的驗證如圖15所示。

圖14 照度測試

 

 

 

 

 

 

圖15 波形繪制功能驗證

結(jié)語

       盡管設(shè)計已初具規(guī)模,但受時間和技術(shù)水平的限制,還存在著待補充和完善的地方,例如STM32H750的閃存只有128K,相對來說還是比較小,要想完全達(dá)到設(shè)計目標(biāo),W25Q16和TF卡之類的外存使用還是十分必要的,它可以有效地解決圖標(biāo)、中文字庫及數(shù)碼相框的存儲問題,有利于界面的美觀和中文化。

視頻內(nèi)容:

1.硬件基本構(gòu)成

 

2.樂曲的選擇播放

 

 

3.整體的功能瀏覽

 

 

4.PWM調(diào)節(jié)下的呼吸燈效果:

 

 

 

 

 

 

  • T.jpg
    描述:關(guān)鍵器件引腳連接
  • main.c
    描述:系統(tǒng)主程序

相關(guān)推薦

電子產(chǎn)業(yè)圖譜