ESP8266+blinker制作功能强大带温度保护的热风机-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 840|回复: 0

[分享] ESP8266+blinker制作功能强大带温度保护的热风机

[复制链接]
发表于 2022-5-26 10:34 | 显示全部楼层 |阅读模式
设计制作一个小房间使用的热风机,要求可以远程监控并且安全可靠,用ESP8266 D1 MINI+blinker制作,成本低,功能强大,自动温度控制,自动定时控制,远程手机控制,手机显示工作状态,为提高安全性给热风机加了多种温度保护,该保护可以在热风机因任何原因温度高,如风机转速下降、停转、进出风口遮挡,可立即自动断开电源停止加热,大大提高热风机的安全性。
元件:
热风机: 微信图片_202205260944598.jpg
热敏电阻:
热敏电阻安装: 微信图片_202205260944592.jpg
连接元件: 微信图片_202205260944597.jpg
用一个小盒装上: 微信图片_202205260944595.jpg
接线示意图: 示意图.jpg

源程序:

  1. #define BLINKER_WIFI
  2. #define BLINKER_ALIGENIE_SENSOR

  3. #include <Blinker.h>
  4. #include <DHT.h>

  5. char auth[] = "41b7axxxxxxxx";//Blinker号


  6. char ssid[] = "www";
  7. char pswd[] = "0123456789";
  8. /*新建数据类型组件对象*/
  9. BlinkerNumber HUMI("humi");
  10. BlinkerNumber TEMP("temp");
  11. BlinkerNumber TEMPBH("tempbh");//温度保护

  12. BlinkerNumber QDCS("qdcs");//启动次数
  13. BlinkerButton Button1("btn-qt");//启动停止
  14. BlinkerButton Button2("btn-bh");//保护恢复

  15. BlinkerText TEXT1("tex-qt");//显示状态
  16. BlinkerText TEXT2("tex-fs");//显示风扇状态
  17. BlinkerText TEXT3("tex-jr");//显示加热状态
  18. BlinkerText TEXT4("tex-bh");//显示保护状态

  19. BlinkerSlider SliderWD("ran-wd");//设定温度
  20. BlinkerSlider SliderWDHC("ran-wdhc");//设定温度回差
  21. //定义PIN
  22. #define BH_TEMIPIN A0//温度保护传感器
  23. #define DHTPIN D7    //DHT 11传感器      
  24. #define RELAY1 D5//继电器1信号引脚-风扇
  25. #define RELAY2 D6//继电器2信号引脚-加热器

  26. #define DHTTYPE DHT11   // DHT 11
  27. //#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
  28. //#define DHTTYPE DHT21   // DHT 21 (AM2301)

  29. DHT dht(DHTPIN, DHTTYPE);
  30. //定义变量
  31. float humi_read = 0, temp_read = 0;
  32. String B,QT,FS,JR;
  33. int ZDQT=0,XTQD=0,qdcs=0;//选择开关,系统启动标记,启动次数
  34. int WD=16,WDHC=1,WDBH=0,WDBH_JS=0,WDBH_DZ=0,WDBH_DZ1=0;

  35. void SliderWD_callback(int32_t value)
  36. {
  37.     BLINKER_LOG("get slider value: ", value);
  38.     WD = value;
  39. }

  40. void SliderWDHC_callback(int32_t value)
  41. {
  42.     BLINKER_LOG("get slider value: ", value);
  43.     WDHC = value;
  44. }

  45. void heartbeat()//心跳
  46. {
  47.     HUMI.print(humi_read);
  48.     TEMP.print(temp_read);
  49.     QDCS.print(qdcs);
  50.     TEMPBH.print(WDBH);
  51.     SliderWD.print(WD);
  52.     SliderWDHC.print(WDHC);

  53.     TEXT1.print(QT);
  54.     TEXT2.print(FS);
  55.     TEXT3.print(JR);
  56.     TEXT4.print(WDBH_DZ);
  57. }

  58. void dataStorage()//存数据
  59. {
  60.     Blinker.dataStorage("temp", temp_read);
  61.     Blinker.dataStorage("humi", humi_read);
  62.     Blinker.dataStorage("tempbh", WDBH);
  63. }
  64. // 按下按键即会执行该函数
  65. void button1_callback(const String & state) //启停,显示选择开关状态(系统指示灯)
  66. {
  67.   BLINKER_LOG("get button state: ", state);
  68.      Blinker.vibrate();                //振动
  69.   if (state == "on") {
  70.     digitalWrite(LED_BUILTIN,HIGH );//灭
  71.     // 反馈开关状态
  72.     Button1.color("#6666ff");
  73.     Button1.print("on");
  74.     ZDQT=1;//运行
  75.     QT="运行";
  76.     TEXT1.print(QT);   
  77.   } if (state == "off") {
  78.     digitalWrite(LED_BUILTIN, LOW);//亮
  79.     // 反馈开关状态
  80.     Button1.color("#708090");
  81.     Button1.print("off");
  82.     ZDQT=0;//停
  83.     QT="停止";
  84.     TEXT1.print(QT);
  85.     XTQD=0;//停止
  86.     TZJR();   
  87.   }
  88.     Blinker.delay(300);
  89. }
  90. void button2_callback(const String & state)//保护复位
  91. {
  92.      Blinker.vibrate();                //振动
  93.   BLINKER_LOG("get button state: ", state);
  94.   if (state == "press")
  95.   {
  96.     WDBH_JS=0;WDBH_DZ=0;WDBH_DZ1=0;
  97.   }
  98.   Blinker.delay(300);
  99. }

  100. void QDJR()//启动加热
  101. {
  102.     digitalWrite(RELAY1, LOW);//开风扇
  103.     FS="运行";TEXT2.print(FS);
  104.     Blinker.delay(1000);
  105.     digitalWrite(RELAY2, LOW);//开加热
  106.     JR="运行";TEXT3.print(JR);
  107.     qdcs++;
  108.     Blinker.delay(300);
  109. }
  110. void TZJR()//停止加热
  111. {
  112.     digitalWrite(RELAY2,HIGH);//停加热
  113.     JR="停止";TEXT3.print(JR);
  114.     Blinker.delay(10000);
  115.     digitalWrite(RELAY1, HIGH);//停风扇
  116.     FS="停止";TEXT2.print(FS);
  117.     Blinker.delay(300);
  118. }
  119. void setup()
  120. {   // 初始化串口
  121.    Serial.begin(115200);
  122.    BLINKER_DEBUG.stream(Serial);
  123.    BLINKER_DEBUG.debugAll();//开启调试
  124.     //系统指示灯
  125.     pinMode(LED_BUILTIN, OUTPUT);
  126.     digitalWrite(LED_BUILTIN, LOW);//亮
  127.     QT="停止";
  128.     TEXT1.print(QT);
  129.     Button1.color("#708090");
  130.     Button1.print("off");
  131.     //Relay
  132.     pinMode(RELAY1, OUTPUT);
  133.     digitalWrite(RELAY1, HIGH);
  134.     FS="停止";TEXT2.print(FS);
  135.     pinMode(RELAY2, OUTPUT);
  136.     digitalWrite(RELAY2,HIGH );
  137.     JR="停止";TEXT3.print(JR);
  138.     // 初始化blinker
  139.     Blinker.begin(auth, ssid, pswd);
  140.     Blinker.attachHeartbeat(heartbeat);//运行心跳函数
  141.     Blinker.attachDataStorage(dataStorage);//开启历史数据

  142.     Button1.attach(button1_callback);//回调
  143.     Button2.attach(button2_callback);
  144.     SliderWD.attach(SliderWD_callback);
  145.     SliderWDHC.attach(SliderWDHC_callback);
  146.     dht.begin();
  147. }

  148. void loop()
  149. {
  150.     Blinker.run();

  151.     float h = dht.readHumidity();
  152.     float t = dht.readTemperature();

  153.     if (isnan(h) || isnan(t))
  154.     {
  155.         BLINKER_LOG("Failed to read from DHT sensor!");
  156.     }
  157.     else
  158.     {
  159.         BLINKER_LOG("Humidity: ", h, " %");
  160.         BLINKER_LOG("Temperature: ", t, " *C");
  161.         humi_read = h;
  162.         temp_read = t;
  163.     }

  164.    //if(WDBH_DZ==0){ WDBH=analogRead(BH_TEMIPIN);}
  165.     WDBH=analogRead(BH_TEMIPIN);
  166.    
  167.     if(WDBH>950||WDBH<150){if(WDBH_JS++>1){WDBH_DZ=1;}TEMPBH.print(WDBH);}//WDBH>950保护值,可调整
  168.     else{WDBH_JS=0;}
  169.     if(WDBH_DZ==1&&WDBH_DZ1==0){ WDBH_DZ1=1;digitalWrite(RELAY2,HIGH ); digitalWrite(RELAY1, HIGH);TEXT4.print(WDBH_DZ);TZJR();}

  170.     if(ZDQT==1&&XTQD==0&&WDBH_DZ==0&&temp_read<WD)//启动一次
  171.     {XTQD=1;QDJR();
  172.       // if(temp_read<WD){QDJR();}   
  173.     }
  174.     if(temp_read>(WD+WDHC)&&XTQD==1)
  175.     {TZJR();XTQD=0; }
  176.    
  177.    
  178.       Blinker.delay(2000);  
  179. }
复制代码
手机上的设置: 微信图片_202205260949353.jpg 微信图片_202205260949354.jpg 微信图片_20220526094935.jpg
定时设置: 微信图片_202205260949352.jpg 选择“动作配置”再选“自动生成” 微信图片_202205260949351.jpg

过热保护值根据调试实际情况更改。


用到的元件

用到的元件
微信图片_202205260944593.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 09:43 , Processed in 0.075431 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表