0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于CW32单片机的智能家居系统设计

武汉芯源半导体 来源:武汉芯源半导体 2023-12-20 10:00 次阅读

一、实验简介

智能家居系统是一款功能丰富、易于使用的智能家居解决方案,可以通过检测温湿度、光照强度和空气质量等参数,为我们提供更加舒适、健康、安全的居住环境,让用户享受更加智能的生活体验。

该系统采用CW32F030单片机作为核心控制器,通过各种传感器实时监测室内环境参数,并根据预设的阈值进行相应控制。例如,当室内光照不足时,系统会自动打开灯光,确保室内光线充足。室内温湿度数据和空气质量通过屏幕显示,并实时上传到云平台,以实现远程监控。

二、实验器材

本实验使用到了CW32-48F大学计划开发板、ESP8266WIFI模块、DHT11温湿度模块、MQ-135空气检测传感器、光敏电阻模块、热释电传感器模块、LED交通灯模块及Keil5开发环境。

开发板上预留了ESP8266WIFI模块接口,通过串口与ESP8266通信

8d5624a6-9edb-11ee-8b88-92fbcf53809c.png

开发板上预留了DHT11模块接口

8d6581ee-9edb-11ee-8b88-92fbcf53809c.png

【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); //清除标志位
  }
}

四、效果演示

8d773ac4-9edb-11ee-8b88-92fbcf53809c.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 控制器
    +关注

    关注

    112

    文章

    15223

    浏览量

    171188
  • 智能家居
    +关注

    关注

    1912

    文章

    9150

    浏览量

    179355
  • 开发板
    +关注

    关注

    25

    文章

    4429

    浏览量

    93992
  • CW32
    +关注

    关注

    1

    文章

    122

    浏览量

    225

原文标题:基于CW32的智能家居系统

文章出处:【微信号:武汉芯源半导体,微信公众号:武汉芯源半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于CW32的门禁综合系统

    基于CW32单片机的门禁综合系统是一款功能强大的智能门禁解决方案,它提供了三种开锁方式:密码开锁、指纹开锁和刷卡开锁,为用户提供方便、安全的门禁控制。该
    的头像 发表于 12-28 11:43 1264次阅读
    基于<b class='flag-5'>CW32</b>的门禁综合<b class='flag-5'>系统</b>

    基于CW32智能家居系统

    智能家居系统是一款功能丰富、易于使用的智能家居解决方案,可以通过检测温湿度、光照强度和空气质量等参数,为我们提供更加舒适、健康、安全的居住环境,让用户享受更加智能的生活体验。 该
    的头像 发表于 12-28 12:14 1336次阅读
    基于<b class='flag-5'>CW32</b>的<b class='flag-5'>智能家居</b><b class='flag-5'>系统</b>

    基于AVR单片机智能家居控制系统设计

    基于AVR单片机智能家居控制系统设计
    发表于 08-18 15:27

    怎样去设计一种基于单片机智能家居语音控制系统

    基于单片机智能家居语音控制系统,该系统可通过语音控制家用电器或其它电器的开启与关闭;(内附有原理图,单片机源代码,开题报告,语音芯片源代码
    发表于 07-20 06:59

    基于51单片机实现智能家居产品

    ♥51单片机也可以实现一个小小的智能家居√(smart-home)开源所有代码♥文章目录♥51单片机也可以实现一个小小的智能家居√(smart-home)开源所有代码♥一
    发表于 09-08 06:21

    利用单片机实现智能家居的报告

    利用单片机实现智能家居的报告模块分别有红外报警器,电子温度计,遥控开关,电动窗帘,主机底板。项目任务说明(一)专案背景智能家居是以住宅为平台,利用综合布线技术、自动控制技术、音视频技术将家居
    发表于 09-08 07:56

    怎样去设计一个基于51单片机的简易智能家居系统

    怎样去设计一个基于51单片机的简易智能家居系统呢?基于51单片机的简易智能家居系统是由哪些部分组
    发表于 12-21 07:56

    单片机智能家居设计

    跪求基于单片机STM32F103ZET6的智能家居控制系统设计(包含灯光,传感器,报警,驱动电路设计原理图)
    发表于 03-29 08:34

    CW32单片机智能马桶的应用介绍

    智能科技的迅速发展使得我们的日常生活变得更加便捷和舒适。智能马桶作为其中一种智能家居产品,通过单片机接受和处理来自传感器的数据,然后通过控制模块对
    发表于 12-20 10:06

    CW32单片机低电压检测器的使用介绍

    CW32单片机低电压检测器的使用介绍
    的头像 发表于 09-18 10:56 621次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>低电压检测器的使用介绍

    CW32单片机UART波特率设置介绍

    CW32单片机UART波特率设置介绍
    的头像 发表于 10-24 17:35 492次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>UART波特率设置介绍

    CW32单片机UART基本数据收发功能介绍

    CW32单片机UART基本数据收发功能介绍
    的头像 发表于 10-24 16:50 408次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>UART基本数据收发功能介绍

    CW32单片机I2C接口读写EEPROM芯片介绍

    CW32单片机I2C接口读写EEPROM芯片介绍
    的头像 发表于 11-09 17:42 589次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>I2C接口读写EEPROM芯片介绍

    CW32单片机智能马桶的应用介绍

    智能科技的迅速发展使得我们的日常生活变得更加便捷和舒适。智能马桶作为其中一种智能家居产品,通过单片机接受和处理来自传感器的数据,然后通过控制模块对
    的头像 发表于 12-20 10:02 357次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>在<b class='flag-5'>智能</b>马桶的应用介绍

    CW32单片机智能马桶的应用介绍

    智能科技的迅速发展使得我们的日常生活变得更加便捷和舒适。智能马桶作为其中一种智能家居产品,通过单片机接受和处理来自传感器的数据,然后通过控制模块对
    的头像 发表于 12-20 10:09 257次阅读
    <b class='flag-5'>CW32</b><b class='flag-5'>单片机</b>在<b class='flag-5'>智能</b>马桶的应用介绍