一、實(shí)驗(yàn)簡(jiǎn)介
本智能家居系統(tǒng)是一款功能豐富、易于使用的智能家居解決方案,可以通過(guò)檢測(cè)溫濕度、光照強(qiáng)度和空氣質(zhì)量等參數(shù),為我們提供更加舒適、健康、安全的居住環(huán)境,讓用戶享受更加智能的生活體驗(yàn)。
該系統(tǒng)采用CW32F030單片機(jī)作為核心控制器,通過(guò)各種傳感器實(shí)時(shí)監(jiān)測(cè)室內(nèi)環(huán)境參數(shù),并根據(jù)預(yù)設(shè)的閾值進(jìn)行相應(yīng)控制。例如,當(dāng)室內(nèi)光照不足時(shí),系統(tǒng)會(huì)自動(dòng)打開(kāi)燈光,確保室內(nèi)光線充足。室內(nèi)溫濕度數(shù)據(jù)和空氣質(zhì)量通過(guò)屏幕顯示,并實(shí)時(shí)上傳到云平臺(tái),以實(shí)現(xiàn)遠(yuǎn)程監(jiān)控。
二、實(shí)驗(yàn)器材
本實(shí)驗(yàn)使用到了CW32-48F大學(xué)計(jì)劃開(kāi)發(fā)板、ESP8266WIFI模塊、DHT11溫濕度模塊、MQ-135空氣檢測(cè)傳感器、光敏電阻模塊、熱釋電傳感器模塊、LED交通燈模塊及Keil5開(kāi)發(fā)環(huán)境。
開(kāi)發(fā)板上預(yù)留了ESP8266WIFI模塊接口,通過(guò)串口與ESP8266通信。
開(kāi)發(fā)板上預(yù)留了DHT11模塊接口
【MQ-135空氣傳感器模塊與單片機(jī)接線】:
VCC-- 5V
GND-- GND
DO -- ×
AO -- PA0
【光敏電阻模塊與單片機(jī)接線】:
VCC-- 3.3V
GND-- GND
DO -- ×
AO -- PA4
【熱釋電人體感應(yīng)模塊與單片機(jī)接線】:
VCC-- 3.3V
GND-- GND
OUT -- PB10
【LED交通燈模塊與單片機(jī)接線】:
R -- PA6
Y -- PA5
G -- PB11
GND-- GND
三、核心代碼
main.c: /*傳感器數(shù)據(jù)*/ uint16_t ppm=0; //空氣中甲苯濃度 uint8_t humidity=0; //濕度 uint8_t temperture=0; //溫度 uint8_t Light_intensity=0; //光照強(qiáng)度(0~100) uint16_t adc_result[2]={0}; //保存ADC序列轉(zhuǎn)換結(jié)果 /*標(biāo)識(shí)控制位*/ _Bool Flag_5s=0; //5s計(jì)時(shí) uint16_t time5scnt=0; //5s計(jì)數(shù) uint16_t time2scnt=0; //2s計(jì)數(shù) _Bool averyflag=0; //ADC序列采集完成標(biāo)志位 _Bool send_flag=0; //數(shù)據(jù)上云控制位 /*自定義函數(shù)*/ void PIR_Proc(void); //檢測(cè)人是否存在 void DHT11_Proc(void); //采集溫濕度 void MQ135_Proc(void); //檢測(cè)空氣質(zhì)量 void Photo_Proce(void); //檢測(cè)亮度 void System_Init(void); //系統(tǒng)初始化 void Send2OneNet(void); //數(shù)據(jù)上云 void Interface(void); //數(shù)據(jù)顯示界面 void LED_Proc(uint8_t led,uint8_t state); //LED燈 /*主程序*/ int main(void) { System_Init(); //系統(tǒng)初始化 Interface(); //界面顯示 while(1) { PIR_Proc(); //人 DHT11_Proc(); //溫濕度 MQ135_Proc(); //空氣質(zhì)量 Photo_Proce(); //光強(qiáng) Send2OneNet(); //數(shù)據(jù)上云 ADC_SoftwareStartConvCmd(ENABLE); //啟動(dòng)ADC轉(zhuǎn)換 Delay_ms(500); } } /*子程序*/ void System_Init(void) //系統(tǒng)初始化函數(shù) { Lcd_Init(); TFT_Welcome(); //開(kāi)機(jī)界面 LED_Init(); PIR_Init(); //熱釋電傳感器初始化 DHT11_Init(); //溫濕度傳感器初始化 Buzzer_Init(); //蜂鳴器初始化 while(DHT11_Check()); //檢測(cè)DHT11是否已連接 BTIM_Init(); // Usart1_Init(115200); //調(diào)試串口 Usart2_Init(115200); //ESP8266串口 ESP8266_Init(); //ESP8266初始化 ADC_Configuration(); //ADC序列多次轉(zhuǎn)換模式配置 } void Interface(void) //界面顯示函數(shù) { Lcd_Clear(BLUE); Gui_DrawFont_GBK16(0,8,WHITE,BLUE," 智能家居系統(tǒng) "); Gui_DrawLine(0,32,128,32,GRAY1); //分割線 Gui_DrawFont_GBK16(0,48,WHITE,BLUE," 當(dāng)前溫度:"); Gui_DrawFont_GBK16(0,80,WHITE,BLUE," 當(dāng)前濕度:"); Gui_DrawFont_GBK16(0,112,WHITE,BLUE," 空氣質(zhì)量:"); } void PIR_Proc(void) //人體檢測(cè)函數(shù) { if(ReadPIR()) //有人在 { Flag_5s=1; //在中斷中開(kāi)始5s計(jì)時(shí) LED_Proc(LED_Yellow,1); //打開(kāi)黃燈 } else //沒(méi)有人 { Flag_5s=0; //清除計(jì)時(shí)標(biāo)識(shí) time5scnt=0; //清零計(jì)數(shù)值 Buzzer(0); //關(guān)閉蜂鳴器 LED_Proc(LED_Red,0); //關(guān)閉紅燈 LED_Proc(LED_Yellow,0); //關(guān)閉紅燈 } if(time5scnt>=500) //計(jì)數(shù)值超過(guò)500,5秒計(jì)時(shí)到 { time5scnt=0; //清零計(jì)數(shù)值 Buzzer(1); //打開(kāi)蜂鳴器 LED_Proc(LED_Red,1); //打開(kāi)紅燈 } } void DHT11_Proc(void) //溫濕度采集函數(shù) { char display[8]=" "; DHT11_Read_Data(&temperture,&humidity); //采集溫濕度 sprintf(display,"%d ℃",temperture); TFTShowString(3,11,display); sprintf(display,"%d %%",humidity); TFTShowString(5,11,display); } void MQ135_Proc(void) //空氣質(zhì)量檢測(cè)函數(shù) { double v_dat=0; if(averyflag) //ADC轉(zhuǎn)換完成 { adc_result[0]/=10; //采集10次求平均值 v_dat=(double)adc_result[0]*3.3/4960.0; //AD值傳換成電壓 ppm = pow((3.4880*10*v_dat)/(5-v_dat),(1.0/0.3203)); //計(jì)算甲苯濃度(參數(shù)因環(huán)境而異) if(v_dat<0.3) Gui_DrawFont_GBK16(90,112,WHITE,BLUE,"優(yōu)"); //依據(jù)電壓值人為劃分空氣質(zhì)量等級(jí) else if(v_dat<0.5) Gui_DrawFont_GBK16(90,112,WHITE,BLUE,"良"); else Gui_DrawFont_GBK16(90,112,WHITE,BLUE,"差"); } } void Photo_Proce(void) //光照強(qiáng)度采集函數(shù) { double v_dat=0; if(averyflag) //ADC轉(zhuǎn)換完畢 { adc_result[1]/=10; //求平均值 Light_intensity=(1.0-(float)adc_result[1]/4096.0)*100.0; //轉(zhuǎn)換成光照強(qiáng)度(僅供參考) v_dat=(double)adc_result[1]*3.3/4960.0; //轉(zhuǎn)換成電壓值 if(v_dat>1.5) LED_Proc(LED_Green,1); //自定義閾值,光照強(qiáng)度過(guò)低打開(kāi)綠燈 else LED_Proc(LED_Green,0); } } void LED_Proc(uint8_t led,uint8_t state) //LED控制函數(shù) { if(led==LED_Red) GPIO_WritePin(CW_GPIOA,GPIO_PIN_6,(GPIO_PinState)(state)); else if(led==LED_Yellow) GPIO_WritePin(CW_GPIOA,GPIO_PIN_5,(GPIO_PinState)(state)); else if(led==LED_Green) GPIO_WritePin(CW_GPIOB,GPIO_PIN_11,(GPIO_PinState)(state)); } void Send2OneNet(void) //數(shù)據(jù)上傳函數(shù) { if(send_flag) { OneNet_SendData(); //數(shù)據(jù)上傳到OneNET ESP8266_Clear(); //清除緩存 send_flag=0; } } void BTIM1_IRQHandler(void) //基本定時(shí)器1中斷 { if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV)) { if(++time2scnt>200) {send_flag=1;time2scnt=0;} //2s計(jì)時(shí) if(Flag_5s) time5scnt++; //5s計(jì)時(shí) BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); //清除標(biāo)志位 } }
四、效果演示
審核編輯:湯梓紅
-
控制器
+關(guān)注
關(guān)注
113文章
16799瀏覽量
181920 -
智能家居
+關(guān)注
關(guān)注
1932文章
9701瀏覽量
188426 -
開(kāi)發(fā)板
+關(guān)注
關(guān)注
25文章
5342瀏覽量
100417 -
CW32
+關(guān)注
關(guān)注
1文章
232瀏覽量
1002
原文標(biāo)題:基于CW32的智能家居系統(tǒng)
文章出處:【微信號(hào):武漢芯源半導(dǎo)體,微信公眾號(hào):武漢芯源半導(dǎo)體】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
基于CW32的門(mén)禁綜合系統(tǒng)

基于CW32的智能家居系統(tǒng)

怎樣去設(shè)計(jì)一種基于單片機(jī)的智能家居語(yǔ)音控制系統(tǒng)
基于51單片機(jī)實(shí)現(xiàn)智能家居產(chǎn)品
怎樣去設(shè)計(jì)一個(gè)基于51單片機(jī)的簡(jiǎn)易智能家居系統(tǒng)呢
單片機(jī),智能家居設(shè)計(jì)
CW32單片機(jī)在智能馬桶的應(yīng)用介紹
cw32和stm32的區(qū)別
CW32單片機(jī)在智能馬桶的應(yīng)用介紹

CW32單片機(jī)在智能馬桶的應(yīng)用介紹

評(píng)論