基于蓝牙的STM32单片机的温湿度+一氧化碳报警系统设计

  本设计的硬件构成:

本设计由STM32单片机核心板+LCD1602液晶显示屏+MQ-7一氧化碳传感器+蜂鸣器+LM358运算放大器+ DHT11温湿度传感器+按键电路+蓝牙模块设计组成。

功能介绍:

1、本设计采用LCD1602显示屏作为系统的显示屏,用于显示当前检测的环境温度、湿度和CO浓度;设置状态下,显示各个参数的设置值。

2、温度、湿度数据的检测采用DHT11数字温湿度传感器;CO浓度采用MQ-7传感器,模拟型传感器,通过单片机ADC对模拟信号进行转换,最终转化为CO浓度。

3、系统三个按键功能分别为:按键1:设置键,按下后进入CO浓度报警值设置,再按下进入温度报警值设置,再按下进入湿度报警值设置;按键2为设置状态下的加1键,非设置状下CO浓度清零键;按键3为设置状态下的减一键。

4、如果系统检测温度、湿度、CO浓度其中一个超过设置值时,蜂鸣器开启报警;如均在设定值以内,蜂鸣器关闭。

5、蓝牙模式实现系统与手机APP的互联;手机连接蓝牙模块,可实时查看系统的各个参数的数据。

主要物料清单及型号:

显示屏:LCD1602;

单片机:STM32F103C8T6;

温湿度传感器:DHT11;

蜂鸣器:5V有源蜂鸣器;

一氧化碳传感器:MQ-7;

蓝牙模块:HC-05/06;

部分程序源码:

//=============================================================================
//函数名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//============================================================================
int main(void)
{
    u8 key=0;
    delay_init();         //延时函数初始化     
    uart_init(9600);    
    KEY_Init();      //初始化按键
    Adc_Init();          //ADC初始化    
    TIM3_Int_Init(49,7199);//50ms  
    Lcd_GPIO_init();  //初始化lcd引脚
    Lcd_Init();      //初始化lcd屏幕
    Lcd_Puts(0,0,"    WELCOME     ");
    LED_GPIO_Config();//初始化LED
    BEEP=0;
    delay_ms(500);
    BEEP=1;
    delay_ms(500);  
    while (1)
    {
      if(set==0)
        key=KEY_Scan(0);  //得到键值
      else
        key=KEY_Scan(1);  //得到键值
      KEY_Handle(key);   
      if(Res=='A')
      {
        Res=0;
        if(refresh_en==1)
        {
          refresh_en=0;
          printf("Stop Refresh!!\r\n");       //APP停止刷新当前状态
        }
        else
          refresh_en=1;        
      }         
      if(time5ms>=300 && set==0)
      {
        time5ms=0;
        if (dht11_read_data(buffer) == 0)
        {
            hum = buffer[0];
            temp = buffer[2];  
        }
        
        CO_Value = Get_CO_Average(20);
        if(CO_Value>CO_Cali)
          CO_Value=CO_Value-CO_Cali;
        else
          CO_Value=0;
          
        if(set==0)
          display(CO_Value,temp,hum);
        if(refresh_en==1)
          APP_data_refresh();    //刷新APP数据
        
        if(warn_flag>0 && set==0)     //是否为报警状态
        {
          if(warn_flag%2==0)        //蜂鸣器报警
          { 
            BEEP=0;    //开启蜂鸣器
          }
          else
            BEEP=1;    //关闭蜂鸣器
          warn_flag++;
        }
        else
        {
          warn_flag=0;
          BEEP=1;
        }
      }
           
      if(set==0)      //如果为非设置状态,进入报警判断
      {
        if(co_alarm<CO_Value)     //判断一氧化碳浓度报警值
        {
          if(warn_flag==0)
          {
            warn_flag=1;
            warn_type=2;
          }
        }
        else
        {
          warn_type=0;
          warn_flag=0;
          warn_en=0;
        }
      } 
    }
}

资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值