问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于STM32的智能加湿器设计

创作时间:
作者:
@小白创作中心

基于STM32的智能加湿器设计

引用
CSDN
1.
https://blog.csdn.net/qq_44987481/article/details/140547415

**随着经济技术的不断进步,人们对生活品质的追求也越来越高。在寒冷干燥的冬季,尤其是中国北部地区,人们频繁地使用暖气和空调,会导致皮肤干燥,从而引起感冒和其他一些疾病。在夏天,因为经常开空调,所以也会有这种现象,此时需要使用加湿器来改善人体的舒适度。本文将详细介绍基于STM32的智能加湿器设计项目,包括硬件选择、系统功能、软件实现等。

1、设计要求

设计采用了一种基于单片机的智能加湿器系统,其以STM32F103C8T6和温湿度传感器DHT11为核心,通过湿度传感器对湿度信号进行采集和转换,然后通过单片机对数据进行分析处理,实现智能切换加湿功能。另外,通过继电器对加湿器进行控制,可以达到对加湿器的准确控制。

2、系统功能

  1. 往蓄水容器中加入适量的水。
  2. 按下开关按钮后,设备开始工作。
  3. 由于单片机上自带电复位电路、手动复位电路 (复位按键) 、晶振电路(给单片机提供时钟周期)。在OLCD屏上可以显示当前时间。
  4. 开始工作后,当传感器测出来的湿度小于设定的湿度下限值时,继电器工作控制加湿器工作加湿,当大于湿度上限值时继电器关闭加湿器停止加湿。LCD液晶,第一行显示环境湿度值,第二行,显示湿度的上下限值。
  5. 同时当湿度小于设置的湿度下限值时蜂鸣器和指示灯产生声光报警提示,当大于下限值时会自动取消报警,当产生报警时可以手动取消报警,但不会影响加湿器的工作。
  6. 可通过单片机上按键设置湿度的上下限报警值并具有掉电保存功能,保存在单片机内部,上电无需重新设置参数。

3、演示视频和实物

4、系统设计框图

5、软件设计流程图

6、原理图

7、主程序

#include "stm32f10x.h"  
#include <stdio.h>
#include <string.h>
#include "sys.h"  
#include "delay.h"
#include "OLED.h"
#include "dht11.h"      //温湿度传感器
#include "Key.h"
#include "jidianqi.h"
#include "Serial.h"
#include "LED.h"
#include "Buzzer.h"
#include "Store.h"
uint8_t KeyNum;      //存储按键值
u8 state,state1,flag=1; 
int main(void)
{
        u8 t = 0;  
      uint32_t bufe[3];
      u8 temp,humi;
    
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   // 设置中断优先级分组为组2:2位抢占优先级,2位子优先级
    delay_init();	   //延时函数初始化
      SystemInit();
      
      Key_Init();    //按键初始化
        LED_Init();
      JIDIANQI_Init();	
        OLED_Init(); 
      DHT11_Init();
      Buzzer_Init();
      Store_Init();
        OLED_ShowChinese(1,1,3);      //湿度
        OLED_ShowChinese(1,2,4);
      OLED_ShowString(1,5,":");
    
        OLED_ShowChinese(2,1,0);      //湿度上限
        OLED_ShowChinese(2,2,1);
        OLED_ShowChinese(2,3,14);     
        OLED_ShowChinese(2,4,16);
        OLED_ShowString(2,9,":");
        
        OLED_ShowChinese(3,1,0);      //湿度下限
        OLED_ShowChinese(3,2,1);
        OLED_ShowChinese(3,3,15);      
        OLED_ShowChinese(3,4,16);
        OLED_ShowString(3,9,":");
        
        OLED_ShowChinese(4,1,17);      
        OLED_ShowChinese(4,2,18);
        OLED_ShowString(4,5,":");
        
      
    while (1)
    {			
            if(t%10==0)
            {
              DHT11_Read_Data(&temp,&humi);   //读取温湿度数据并在OLED上显示
              bufe[0]=temp;	
              bufe[1]=humi;
              OLED_ShowNum(1,6,bufe[1],2);    //湿度
              OLED_ShowString(1,8,"%");		
            }
                t++;	
      KeyNum = Key_GetNum();
          if (KeyNum == 1)    
            {
                delay_ms(20);
                if (KeyNum == 1)
                {
                    state++;
                    if(state>1)
                    {
                            state=0;
                    }
                } 
            }
            if(state==0)
            {
               OLED_ShowChinese(4,4,13);   // 关
             	 LED1_OFF();
            }
            if(state==1)
            {
                    OLED_ShowChinese(4,4,12);   // 开
                LED1_ON();
                                    if (KeyNum == 2) Store_Data[1]++;     //6个按键设置湿度值
                                    if (KeyNum == 3) Store_Data[1]--;									
                                    if( Store_Data[1]>100) Store_Data[1]=0;	
                  
                
                                    OLED_ShowNum(2, 10, Store_Data[1], 2);
                                    OLED_ShowString(2, 12, "%");
                                    if (KeyNum == 4)Store_Data[2]++;     //6个按键设置湿度值
                                    if (KeyNum == 5)Store_Data[2]--;									
                                    if(Store_Data[2]>100)Store_Data[2]=0;
                  
                
                                    OLED_ShowNum(3, 10, Store_Data[2], 2);
                                    OLED_ShowString(3, 12, "%");
                          Store_Save();
                                    
                
                                    if (KeyNum == 6)    
                                    {
                                        delay_ms(20);
                                        if (KeyNum == 6)
                                        {
                                                state1++;
                                            if(state1>1)
                                            {
                                                state1=0;
                                            }
                                        } 
                                    }
                                        if(state1==0)
                                    {
                                        Buzzer_OFF();	
                                         LED2_OFF();				
                                 }
                                        if(state1==1)
                                    {
                                            Buzzer_ON();
                                            LED2_ON();
                                    }		
                                                
                                    if(bufe[1]<=Store_Data[1])         
                                    {
                                         JIDIANQI2_OFF(); 
                                        if(flag==1)
                                        {
                                             state1=1;	
                                                flag=0;					
                                        }			  			 
                                    }
                                    if(bufe[1]>Store_Data[1])  
                                    {
                                            state1=0;
                                            flag=1;
                                    }
                                    if(bufe[1]>=Store_Data[2]) 
                                    {
                                         JIDIANQI2_ON();	
                                         Buzzer_OFF();				
                                    }
                
            }
            
    }
}
  

8、总结

本系统电路结构简单,易于理解,检测精度高,工作稳定,具有一定的应用价值。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号