你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于stm32c8t6的智能加湿系统

[复制链接]
STMCU小助手 发布时间:2022-10-27 17:35
一、硬件部分

~US{9PQYR6H2}($P]4B@15N.png

图1 c8t6

56ef8cda98304a4bb6a6925e6032a8c1.png

图2 加湿器

3479a9a9c48440a9aad110270c9b97c2.png

图3 oled

9bc1c8cec1294bd5b1d720b018445f15.png

图4 水位传感器

aa29624f18914e76a87d1fb3538f4894.png

图5 继电器

a20b7187703b49f8a3ac1a386b97722e.png

图6 dht11

4bd4ec4d653b4ae292ae9878ec0290b2.png

图7 蜂鸣器

cf155d6867f9477a960b07bceb677713.png

二、软件部分

1开发环境 烧入 调试工具

bec6cdbadc994ff7bfd3b17a836da234.png

2 主程序

  1. /************************************智能加湿器系统********************************

  2. 1、可以通过按键设置湿度阈值。
  3. 2、可以通过按键设置湿度阈值。

  4. 3、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。
  5. 4、如果当前湿度低于阈值,则加湿器打开,否则加湿器断开。3、液晶屏幕可以实时显示湿度和湿度阈值。

  6. 5、环境湿度测量范围:20%-95% RH,测量误差:±5%。5、具有容器水位检测功能。
  7. 6、环境湿度测量范围:20%~95%RH,测量误差:±5%。5、具有容器水位检测功能。

  8. 系统采用3个不同颜色的LED灯表示三种不同的湿度状态
  9. 湿度<40  40 < s湿度< 60  湿度 > 60

  10. *******************************************************************************
  11. Author:xiao yin
  12. Date:2022-4
  13. *******************************************************************************/
  14. #include "stm32f10x.h"
  15. #include "usart.h"
  16. #include "oled.h"
  17. #include "delay.h"
  18. #include "led.h"
  19. #include "adc.h"
  20. #include "key.h"
  21. #include "buzzer.h"
  22. #include "string.h"
  23. #include "jdq.h"
  24. #include "dht11.h"
  25. #include "water.h"


  26. uint16_t i;
  27. uint8_t k;
  28. uint8_t kk;
  29. uint8_t kkk; //温湿度变量相关
  30. unsigned char keyvalue;//按键返回值
  31. unsigned char flag;//界面切换标志
  32. unsigned char flag_function = 0;//函数功能标志位
  33. unsigned char interface_flag = 0; //在温湿度实现界面标志
  34. unsigned char m_humidity = 20; //修改湿度变量 设置初值
  35. unsigned char Relay = 1;// 继电器状态标志  默认为关   0开
  36. unsigned char water = 20; //水位高度
  37. unsigned char hfier = 1;//  加湿器状态标志  默认为关   0 开
  38. extern unsigned int ad_value;
  39. extern unsigned int val;

  40. void main_interface(void);  //主界面
  41. void Interface2(void);  //湿度数值界面
  42. void Key_Mode(void); //模式切换


  43. /*********************************************界面显示函数*****************************/
  44. //主页面
  45. void main_interface(void)
  46. {
  47. //                OLED_Clear(0);
  48. //                delay_ms(10);

  49.                 OLED_ShowCHinese_six(6,0,0);//智
  50.                 OLED_ShowCHinese_six(26,0,1);//能
  51.                 OLED_ShowCHinese_six(46,0,2);//加
  52.                 OLED_ShowCHinese_six(66,0,3);//湿
  53.                 OLED_ShowCHinese_six(82,0,4);//系
  54.                 OLED_ShowCHinese_six(98,0,5);//统         
  55.                 OLED_ShowNum(6,3,2022,4,16);
  56.                 OLED_ShowCHinese_TWO(40,3,0);//年
  57.                 OLED_ShowNum(50,3,4,2,16);
  58.                 OLED_ShowCHinese_TWO(74,3,1);//月
  59.                 OLED_ShowNum(92,3,12,2,16);
  60.                 OLED_ShowCHinese_TWO(108,3,2);//日         
  61.                 OLED_ShowCHinese_six(35,6,6); //名字显示
  62.                 OLED_ShowCHinese_six(55,6,7);
  63.                 OLED_ShowCHinese_six(75,6,8);
  64.          
  65. }

  66. //界面2 温湿度显示及湿度修改值
  67. void Interface2(void)
  68. {
  69.         //以字符串的形式显示
  70.         OLED_ShowString(35,1,(unsigned char *)"C_T:",3); // Current_Temperature 当前温度
  71.         OLED_ShowCHinese_Three(85,0,11); //C
  72.         
  73.         OLED_ShowString(35,3,(unsigned char *)"C_H:",3); // Current_Humidity 当前湿度
  74.         OLED_ShowCHinese_Three(85,2,13); //.
  75.         
  76.         OLED_ShowString(35,5,(unsigned char *)"M_H:",3); // Modi_Humidity 修改当前湿度
  77.         OLED_ShowCHinese_Three(85,5,13); //.        
  78. }

  79. //界面三 水位、继电器、加湿器状态显示
  80. void Interface3(void)
  81. {
  82.         //以字符串的形式显示
  83.         OLED_ShowString(35,1,(unsigned char *)"Relay:",6); //Realy 状态 0-》开 on 1 -》关 off
  84.         OLED_ShowNum(88,1,Relay,1,3); //状态值
  85.         
  86.         OLED_ShowString(35,3,(unsigned char *)"Hfier:",6); // 加湿器状态 0->开On  1-》关 0ff
  87.         OLED_ShowNum(88,3,hfier,1,3);//状态值
  88.         OLED_ShowString(35,5,(unsigned char *)"Water:",6); // 水位高度
  89.         OLED_ShowNum(88,5,water/100,1,3); //状态值
  90.         OLED_ShowNum(96,5,water/10%10,1,3);
  91.         OLED_ShowNum(102,5,water%10,1,3);
  92. }


  93. /******************************三种LED控制********************************/
  94. void Led_Switch(void)
  95. {
  96.         //1.湿度 < 40
  97.         if(kk < 40)
  98.         {
  99.                         Led1_on();
  100.                         //printf("led1_on\n");
  101.         }
  102.         else
  103.         {
  104.                 Led1_off();
  105.                 //printf("led1_off\n");
  106.         }
  107.         
  108.         //2.40 < 湿度 < 60
  109.         if((kk > 40) &&(kk < 60))
  110.         {
  111.                 Led2_on();
  112.                 //printf("led2_on\n");
  113.         }               
  114.         else
  115.         {
  116.                 Led2_off();
  117.                 //printf("led2_off\n");
  118.         }
  119.         
  120.         //3.湿度 > 60
  121.         if(kk > 60)
  122.         {
  123.                         Led3_on();
  124.                 //printf("led3_on\n");
  125.         }
  126.         else
  127.         {
  128.                
  129.                 Led3_off();
  130.                 //printf("led3_off\n");
  131.         }
  132.                
  133. }

  134. //温度获取函数
  135. void Get_Temperature(void)
  136. {
  137. //                uint16_t i;
  138. //                uint8_t k;
  139. //                uint8_t kk;
  140. //                uint8_t kkk;
  141. //上面定义为全局 其他地方要用到
  142.                 DHT11_UpdateData();
  143.                
  144.                 i =  Rxbuff[0]+ Rxbuff[1]+Rxbuff[2]+ Rxbuff[3];
  145.     if(Rxbuff[4] ==i)
  146.                 {
  147.                           k=Rxbuff[2];
  148.                         kk=Rxbuff[0];
  149.                         kkk=Rxbuff[3];
  150.                         OLED_ShowNum(68,1,k/10,3,3);
  151.                         OLED_ShowNum(76,1,k%10,3,3);
  152.                         OLED_ShowNum(68,3,kk/10,3,3);
  153.                         OLED_ShowNum(76,3,kk%10,3,3);
  154.                         OLED_ShowNum(68,5,m_humidity/10,3,3);  //修改湿度值显示
  155.                         OLED_ShowNum(76,5,m_humidity%10,3,3);

  156.                 }
  157.                                 Led_Switch();
  158.                         //printf("t:%d  %d\n",k,kk);  //测试的时候通过串口打印数据
  159. }


  160. /************************************功能函数********************************************/

  161. //通过按键来进行界面的切换
  162. void Key_Mode(void)
  163. {
  164.         keyvalue = KEY_Scan(); //按键1来进行模式的切换
  165.         
  166.         if(keyvalue == 1) //判断按键1是否被按下 向上进行界面切换
  167.         {
  168.                 Buzzer_On();
  169.                 delay_ms(100);
  170.                 Buzzer_Off();
  171.                 delay_ms(100);
  172.                 flag++;        
  173.                 if(flag > 3) //界面边界处理
  174.                 {
  175.                         flag = 1;
  176.                 }
  177.         }        
  178.         if(keyvalue == 4)  //向下进行界面切换
  179.         {
  180.                 Buzzer_On();
  181.                 delay_ms(100);
  182.                 Buzzer_Off();
  183.                 delay_ms(100);        
  184.                 flag--;
  185.                 if(flag < 1)  //界面边界处理
  186.                 {
  187.                         flag = 3;
  188.                 }
  189.         }
  190.         if(flag == 2) //按键处理 进行湿度修改
  191.         {
  192.                
  193.                 if(keyvalue == 2)
  194.                 {
  195.                         Buzzer_On();
  196.                         delay_ms(100);
  197.                         Buzzer_Off();
  198.                         delay_ms(100);
  199.                         m_humidity +=2; //每次加2
  200.                         if(m_humidity >= 95) //边界处理最大95
  201.                         {
  202.                                         m_humidity = 20;  //超过最大值重新置为初值
  203.                         }
  204.                         
  205.                 }
  206.                
  207.                 if(keyvalue == 3)
  208.                 {
  209.                         Buzzer_On();
  210.                         delay_ms(100);
  211.                         Buzzer_Off();
  212.                         delay_ms(100);
  213.                         m_humidity -= 2;//每次减2
  214.                         if(m_humidity <= 20) //边界最小处理
  215.                         {
  216.                                         m_humidity = 95; //小于最小值设置为最大值
  217.                         }        
  218.                 }
  219.         }
  220.                
  221. }


  222. void Relay_Controal(void)
  223. {
  224.                 unsigned char i =0;//次数
  225.                 //通过比较当前湿度与我们设置的阈值 和水位控制继电器的开与断
  226.          //当前湿度小于我们所设置的阈值 打开继电器进行加湿
  227.                 if((kk < m_humidity) &&((water !=0)))
  228.                 {
  229.                         Relayopen();
  230.                         Relay = 0; //打开标志
  231.                         hfier = 0; //加湿标志
  232.                 }
  233.                 else if(kk > m_humidity)//关闭
  234.                 {
  235.                         Relayoff();
  236.                         Relay = 1; //关闭标志
  237.                         hfier = 1; //加湿标志
  238.                 }        
  239.         //水位为0 是发出警报
  240.                 else        if(water == 0)
  241.                         {
  242.                                 Relayoff();
  243.                                 Relay = 1; //关闭标志
  244.                                 hfier = 1; //加湿标志
  245.                                 for(i =0;i<5;i++)
  246.                                 {
  247.                                         Buzzer_On();
  248.                                         delay_ms(100);
  249.                                         Buzzer_Off();
  250.                                         delay_ms(100);
  251.                                 }
  252.                         }               
  253. }

  254. /*****************************************主函数*********************************/
  255. int main(void)
  256. {               
  257.          KEY_GPIO_INIT();//按键初始化
  258.          USART_INIT(115200);
  259.          LED_GPIO_INIT();// led初始化
  260.          InitRelay();
  261.          ADC1_Init(); //水位传感器初始化
  262.          Buzzer_GPIO_Init();//蜂鸣器初始化
  263.          OLED_Init();                        //初始化OLED  
  264.          OLED_Clear(0);        
  265.          Relayoff();        
  266.         while(1)
  267.         {

  268.                 Key_Mode();
  269.                 switch(flag)
  270.                 {
  271.                         case 1: OLED_Clear(0);main_interface();break;
  272.                         case 2: OLED_Clear(0);Get_Temperature();Interface2();break;
  273.                         case 3: OLED_Clear(0);Interface3();break;
  274.                         default:
  275.                                 break;
  276.                 }
  277.                 Relay_Controal();
  278.                 Led_Switch();
  279.                 water = water_Get_Value();

  280.         }
  281. }
复制代码

三、效果图


接线有点乱 整体效果还是有的

ab2cb9f738524a8abf543e0b03d9f0af.jpg

81f2cff405e640fb8ca470f8df58cfe7.png
e6216eb71d264581826485a2adfd5e69.png

————————————————
版权声明:@slow-walker


收藏 评论0 发布时间:2022-10-27 17:35

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版