一、实验简介
本智能家居系统是一款功能丰富、易于使用的智能家居解决方案,可以通过检测温湿度、光照强度和空气质量等参数,为我们提供更加舒适、健康、安全的居住环境,让用户享受更加智能的生活体验。
该系统采用CW32F030单片机作为核心控制器,通过各种传感器实时监测室内环境参数,并根据预设的阈值进行相应控制。例如,当室内光照不足时,系统会自动打开灯光,确保室内光线充足。室内温湿度数据和空气质量通过屏幕显示,并实时上传到云平台,以实现远程监控。
二、实验器材
本实验使用到了CW32-48F大学计划开发板、ESP8266WIFI模块、DHT11温湿度模块、MQ-135空气检测传感器、光敏电阻模块、热释电传感器模块、LED交通灯模块及Keil5开发环境。
开发板上预留了ESP8266WIFI模块接口,通过串口与ESP8266通信。
开发板上预留了DHT11模块接口
【MQ-135空气传感器模块与单片机接线】:
VCC-- 5V
GND-- GND
DO -- ×
AO -- PA0
【光敏电阻模块与单片机接线】:
VCC-- 3.3V
GND-- GND
DO -- ×
AO -- PA4
【热释电人体感应模块与单片机接线】:
VCC-- 3.3V
GND-- GND
OUT -- PB10
【LED交通灯模块与单片机接线】:
R -- PA6
Y -- PA5
G -- PB11
GND-- GND
三、核心代码
main.c: /*传感器数据*/ uint16_t ppm=0; //空气中甲苯浓度 uint8_t humidity=0; //湿度 uint8_t temperture=0; //温度 uint8_t Light_intensity=0; //光照强度(0~100) uint16_t adc_result[2]={0}; //保存ADC序列转换结果 /*标识控制位*/ _Bool Flag_5s=0; //5s计时 uint16_t time5scnt=0; //5s计数 uint16_t time2scnt=0; //2s计数 _Bool averyflag=0; //ADC序列采集完成标志位 _Bool send_flag=0; //数据上云控制位 /*自定义函数*/ void PIR_Proc(void); //检测人是否存在 void DHT11_Proc(void); //采集温湿度 void MQ135_Proc(void); //检测空气质量 void Photo_Proce(void); //检测亮度 void System_Init(void); //系统初始化 void Send2OneNet(void); //数据上云 void Interface(void); //数据显示界面 void LED_Proc(uint8_t led,uint8_t state); //LED灯 /*主程序*/ int main(void) { System_Init(); //系统初始化 Interface(); //界面显示 while(1) { PIR_Proc(); //人 DHT11_Proc(); //温湿度 MQ135_Proc(); //空气质量 Photo_Proce(); //光强 Send2OneNet(); //数据上云 ADC_SoftwareStartConvCmd(ENABLE); //启动ADC转换 Delay_ms(500); } } /*子程序*/ void System_Init(void) //系统初始化函数 { Lcd_Init(); TFT_Welcome(); //开机界面 LED_Init(); PIR_Init(); //热释电传感器初始化 DHT11_Init(); //温湿度传感器初始化 Buzzer_Init(); //蜂鸣器初始化 while(DHT11_Check()); //检测DHT11是否已连接 BTIM_Init(); // Usart1_Init(115200); //调试串口 Usart2_Init(115200); //ESP8266串口 ESP8266_Init(); //ESP8266初始化 ADC_Configuration(); //ADC序列多次转换模式配置 } void Interface(void) //界面显示函数 { Lcd_Clear(BLUE); Gui_DrawFont_GBK16(0,8,WHITE,BLUE," 智能家居系统 "); Gui_DrawLine(0,32,128,32,GRAY1); //分割线 Gui_DrawFont_GBK16(0,48,WHITE,BLUE," 当前温度:"); Gui_DrawFont_GBK16(0,80,WHITE,BLUE," 当前湿度:"); Gui_DrawFont_GBK16(0,112,WHITE,BLUE," 空气质量:"); } void PIR_Proc(void) //人体检测函数 { if(ReadPIR()) //有人在 { Flag_5s=1; //在中断中开始5s计时 LED_Proc(LED_Yellow,1); //打开黄灯 } else //没有人 { Flag_5s=0; //清除计时标识 time5scnt=0; //清零计数值 Buzzer(0); //关闭蜂鸣器 LED_Proc(LED_Red,0); //关闭红灯 LED_Proc(LED_Yellow,0); //关闭红灯 } if(time5scnt>=500) //计数值超过500,5秒计时到 { time5scnt=0; //清零计数值 Buzzer(1); //打开蜂鸣器 LED_Proc(LED_Red,1); //打开红灯 } } void DHT11_Proc(void) //温湿度采集函数 { 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) //空气质量检测函数 { double v_dat=0; if(averyflag) //ADC转换完成 { 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)); //计算甲苯浓度(参数因环境而异) if(v_dat<0.3) Gui_DrawFont_GBK16(90,112,WHITE,BLUE,"优"); //依据电压值人为划分空气质量等级 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) //光照强度采集函数 { double v_dat=0; if(averyflag) //ADC转换完毕 { adc_result[1]/=10; //求平均值 Light_intensity=(1.0-(float)adc_result[1]/4096.0)*100.0; //转换成光照强度(仅供参考) v_dat=(double)adc_result[1]*3.3/4960.0; //转换成电压值 if(v_dat>1.5) LED_Proc(LED_Green,1); //自定义阈值,光照强度过低打开绿灯 else LED_Proc(LED_Green,0); } } void LED_Proc(uint8_t led,uint8_t state) //LED控制函数 { 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) //数据上传函数 { if(send_flag) { OneNet_SendData(); //数据上传到OneNET ESP8266_Clear(); //清除缓存 send_flag=0; } } void BTIM1_IRQHandler(void) //基本定时器1中断 { if(BTIM_GetITStatus(CW_BTIM1,BTIM_IT_OV)) { if(++time2scnt>200) {send_flag=1;time2scnt=0;} //2s计时 if(Flag_5s) time5scnt++; //5s计时 BTIM_ClearITPendingBit(CW_BTIM1,BTIM_IT_OV); //清除标志位 } }
四、效果演示
审核编辑:汤梓红
-
控制器
+关注
关注
112文章
16297浏览量
177782 -
智能家居
+关注
关注
1928文章
9546浏览量
184846 -
开发板
+关注
关注
25文章
5024浏览量
97348 -
CW32
+关注
关注
1文章
203浏览量
617
原文标题:基于CW32的智能家居系统
文章出处:【微信号:武汉芯源半导体,微信公众号:武汉芯源半导体】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论