基于STM32的温湿度及光强度检测系统-带蓝牙监控

 本设计的硬件构成:

本设计由STM32单片机核心板+光敏感应电+OLED显示屏电路+DHT11温湿度传感器+继电器电路+散热风扇驱动电路+蜂鸣器电路+蓝牙模块电路+按键电路+电源电路组成。

功能介绍:

1、采用OLED12864显示屏作为显示屏,用于显示当前温度、湿度、及光照强度;显示各个参数的设定值;

2、光照强度使用光敏电阻对环境光进行感应;温度、湿度采用DHT11数字温度传感器对环境温度、湿度进行采集。

3、光照强度有上限值和下限值,当环境光强超出设定值时,蜂鸣器导通报警;如在设定值以内,蜂鸣器关闭;用户可通过按键对光照强度的上限值和下限值进行调整。

4、当温度和湿度均有上限值和下限值;散热风扇用于对温度或湿度进行调节;当温度或者湿度高于设定的上限值时,散热风扇电路导通,风扇工作,加热继电器关闭,蜂鸣器导通报警;

5、当温度或者湿度低于设定的下限值时,加热继电器开启,加热丝工作,风扇关闭,蜂鸣器导通报警;

6、当温度和湿度均在上下限值以内,散热风扇、加热继电器、蜂鸣器均关闭不工作;

7、设有三个按键,按键1为设置键,按键按下进入设置状态;按键2为在设置状态下的加一键(非设置状态下无效);按键3为在设置状态下的减一键(非设置状态下无效);

8、系统的蓝牙模块可实现与手机APP的连接;连接后,手机可实时获取系统的状态

主要物料清单及型号:

显示屏:OLED-0.96寸;

单片机:STM32F103C8T6;

温湿度传感器:DHT11;

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

热敏电阻:5512;

继电器:SRD-05VDC;

蓝牙模块:HC-05/06;

部分程序源码:

int main(void)
{ 
   u8 key=0;
   u8 buffer[5],i=10;
  
  delay_init();         //延时函数初始化    
  uart_init(9600);     //串口初始化为9600
  KEY_Init();      //初始化按键
  OLED_Init();
  OLED_ColorTurn(0);//0正常显示,1 反色显示
  OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
   DHT11_Init();
   LED_Init();
    Adc_Init();
  delay_ms(200);
   
   TIM3_Int_Init(49,7199);//50ms 
   OLED_Clear();

  OLED_ShowString(0,0,"    ",16);
   OLED_ShowChinese(32,0,12,16);//温湿度
   OLED_ShowChinese(48,0,13,16);//温湿度
   OLED_ShowChinese(64,0,14,16);//温湿度
   OLED_ShowChinese(80,0,15,16);//温湿度
   OLED_ShowString(96,0,"    ",16);

  OLED_ShowChinese(0,16,16,16);//温湿度
  OLED_ShowChinese(16,16,17,16);
  OLED_ShowString(32,16,": 00.0",16);
  OLED_ShowChinese(80,16,21,16);
  
  
  OLED_ShowChinese(0,32,18,16);//温湿度
  OLED_ShowChinese(16,32,17,16);
  OLED_ShowString(32,32,": 00.0%",16);
  
  OLED_ShowChinese(0,48,19,16);//温湿度
  OLED_ShowChinese(16,48,20,16);
  OLED_ShowString(32,48,": 0000Lux",16);
  
  OLED_Refresh();
  buzzer=0;
    delay_ms(500);
  buzzer=1;
  while(1)
  { 
    key=KEY_Scan(0);
    key_handle(key);
    if(disFlag==1)     //显示标志
    {
      disFlag = 0;
      DHT11_Read_Data(&temp,&humi);//
      light=Get_Adc_Average(9,10);
      if(light>350)
        light=(light-350)*1.1;
      else
        light=0;
      if((temp>settemp)||(humi>sethumi))
      {
        buzzer=0;
        fan=0;
        heat=1;
      }
      else if((temp<settemp2)||(humi<sethumi2))
      {
        buzzer=0;
        fan=1;
        heat=0;
      }
      else if((light>setlight))
      {
        buzzer=0;
      }
      else if((light<setlight2))
      {
        buzzer=0;
      }
      else 
      {
        buzzer=1;
        fan=1;
        heat=1;
      }
      if(set==0)
        Display_State();
    }  
    
    if(appFlag==1)
    {
      appFlag=0;
      printf("当前温度: ");
      SendData(temp/10+0x30);
      SendData(temp%10+0x30);
      printf(".0℃\r\n");
      printf("当前湿度: ");
      SendData(humi/10+0x30);
      SendData(humi%10+0x30);
      printf(".0 % \r\n");
      printf("当前光强: ");
      SendData(light/1000+0x30);
      SendData(light%1000/100+0x30);
      SendData(light%100/10+0x30);
      SendData(light%10+0x30);
      printf("Lux\r\n");
      printf("\r\n");
      
      printf("温度上限: ");
      SendData(settemp/10+0x30);
      SendData(settemp%10+0x30);
      printf("℃\r\n");
      printf("湿度上限: ");
      SendData(sethumi/10+0x30);
      SendData(sethumi%10+0x30);
      printf("% \r\n");
      printf("光强上限: ");
      SendData(setlight/1000+0x30);
      SendData(setlight%1000/100+0x30);
      SendData(setlight%100/10+0x30);
      SendData(setlight%10+0x30);
      printf("Lux\r\n");
      printf("\r\n");
      
      printf("温度下限: ");
      SendData(settemp2/10+0x30);
      SendData(settemp2%10+0x30);
      printf("℃\r\n");
      printf("湿度下限: ");
      SendData(sethumi2/10+0x30);
      SendData(sethumi2%10+0x30);
      printf("% \r\n");
      printf("光强下限: ");
      SendData(setlight2/1000+0x30);
      SendData(setlight2%1000/100+0x30);
      SendData(setlight2%100/10+0x30);
      SendData(setlight2%10+0x30);
      printf("Lux\r\n");
      printf("\r\n");
    
    }
  }                          
}

资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值