找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1651|回复: 0
打印 上一主题 下一主题
收起左侧

具有Web GUI与Wi-Fi的智能调节器控制管理系统设计资料

[复制链接]
跳转到指定楼层
楼主
具有Web GUI的智能调节器管理系统,可控制设备周围的空气温度并提高风扇速度。控制单元连接到Wi-Fi网络,可以通过其中的任何设备进行管理。此外,未来还计划在几个控制单元之间提供某种类型的网状网络通信。系统基于ESP8266 SoC。软件完全模块化结构。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机程序源码:
  1. /*
  2. * AirConditioner.cpp
  3. */

  4. #include "AirConditioner.h"

  5. /* AirConditioner */
  6.                         bool AirConditioner::power;
  7.                         bool AirConditioner::mode;
  8.                         byte AirConditioner::speed;
  9.                         byte AirConditioner::set_temp;
  10.                         byte AirConditioner::delta_temp;
  11.                    float AirConditioner::cur_temp;
  12.                     byte AirConditioner::PowerPin;
  13.                         byte AirConditioner::LowSpeedPin;
  14.                         byte AirConditioner::MedSpeedPin;
  15.                         byte AirConditioner::HiSpeedPin;
  16.         Thermometer* AirConditioner::sensor;

  17. AirConditioner::AirConditioner(byte PowerPin, byte LowSpeedPin, byte MedSpeedPin, byte HiSpeedPin, byte SensorPin, byte SensorResolution) {

  18.         this->PowerPin                = PowerPin;
  19.         this->LowSpeedPin        = LowSpeedPin;
  20.         this->MedSpeedPin        = MedSpeedPin;
  21.         this->HiSpeedPin        = HiSpeedPin;

  22.         this->initGPIO();

  23.         this->sensor                = new Thermometer(SensorPin, SensorResolution);

  24.         this->power                        = PowerOff;
  25.         this->mode                        = Cooling;
  26.         this->speed                        = LowSpeed;
  27.         this->set_temp                = set_temp_def;
  28.         this->delta_temp        = delta_temp_def;
  29.         this->cur_temp                = 0;


  30. }

  31. void AirConditioner::initGPIO() {
  32.         pinMode(this->PowerPin, OUTPUT);
  33.         noPullup(this->PowerPin);
  34.         digitalWrite(this->PowerPin, Off);

  35.         pinMode(this->LowSpeedPin, OUTPUT);
  36.         noPullup(this->LowSpeedPin);
  37.         digitalWrite(this->LowSpeedPin, Off);

  38.         pinMode(this->MedSpeedPin, OUTPUT);
  39.         noPullup(this->MedSpeedPin);
  40.         digitalWrite(this->MedSpeedPin, Off);

  41.         pinMode(this->HiSpeedPin, OUTPUT);
  42.         noPullup(this->HiSpeedPin);
  43.         digitalWrite(this->HiSpeedPin, Off);
  44. }

  45. void AirConditioner::start() {

  46.         this->executeConditioner.initializeMs(1000, AirConditioner::execConditioner).start();
  47. }

  48. void AirConditioner::setPower(bool power) {

  49.         digitalWrite(AirConditioner::PowerPin, power);
  50. }
  51. void AirConditioner::setSpeed(byte speed) {

  52.         switch (speed) {
  53.                 case 0x01:
  54.                         digitalWrite(AirConditioner::LowSpeedPin, On);
  55.                         digitalWrite(AirConditioner::MedSpeedPin, Off);
  56.                         digitalWrite(AirConditioner::HiSpeedPin,  Off);
  57.                         break;
  58.                 case 0x02:
  59.                         digitalWrite(AirConditioner::LowSpeedPin, Off);
  60.                         digitalWrite(AirConditioner::MedSpeedPin, On);
  61.                         digitalWrite(AirConditioner::HiSpeedPin,  Off);
  62.                         break;
  63.                 case 0x03:
  64.                         digitalWrite(AirConditioner::LowSpeedPin, Off);
  65.                         digitalWrite(AirConditioner::MedSpeedPin, Off);
  66.                         digitalWrite(AirConditioner::HiSpeedPin,  On);
  67.                         break;
  68.                 default:
  69.                         digitalWrite(AirConditioner::LowSpeedPin, Off);
  70.                         digitalWrite(AirConditioner::MedSpeedPin, Off);
  71.                         digitalWrite(AirConditioner::HiSpeedPin,  Off);
  72.                         break;
  73.         }
  74. }

  75. void AirConditioner::updateTemp() {

  76.         AirConditioner::cur_temp = AirConditioner::sensor->getTemp();
  77. }
  78. void AirConditioner::execThermostat() {

  79.         bool enabled_by_scheduler = getSchedulerStatus();

  80.         if(enabled_by_scheduler) {
  81.                 if(AirConditioner::power == PowerOn && !AirConditioner::sensor->sensor_error) {
  82.                         if(AirConditioner::mode == Cooling){
  83.                                 if(AirConditioner::cur_temp >= (AirConditioner::set_temp + AirConditioner::delta_temp))
  84.                                         AirConditioner::setSpeed(AirConditioner::speed);
  85.                                 else
  86.                                         AirConditioner::setSpeed(Stopped);
  87.                         }
  88.                         if(AirConditioner::mode == Heating) {
  89.                                 if(AirConditioner::cur_temp <= (AirConditioner::set_temp - AirConditioner::delta_temp))
  90.                                         AirConditioner::setSpeed(AirConditioner::speed);
  91.                                 else
  92.                                         AirConditioner::setSpeed(Stopped);
  93.                         }
  94.                 }
  95.                 else if(AirConditioner::power == PowerOn && AirConditioner::sensor->sensor_error) {
  96.                         AirConditioner::setSpeed(Stopped);
  97.                         AirConditioner::setPower(Off);
  98.                 }
  99.                 else
  100.                         AirConditioner::setSpeed(Stopped);
  101.         }
  102.         else
  103.                 AirConditioner::setSpeed(Stopped);
  104. }
  105. void AirConditioner::execConditioner() {

  106.         AirConditioner::updateTemp();
  107.         AirConditioner::execThermostat();
  108. }

  109. float AirConditioner::getTemp() {

  110.         return AirConditioner::cur_temp;
  111. }

  112. String AirConditioner::getSettings() {

  113.         DynamicJsonBuffer jsonBuffer;
  114.         JsonObject& root = jsonBuffer.createObject();

  115.         JsonObject& settings           = jsonBuffer.createObject();
  116.         root["settings"]                   = settings;
  117.         settings["power"]                   = (bool) this->power;
  118.         settings["mode"]                   = (bool) this->mode;
  119.         settings["speed"]                   = this->speed;
  120.         settings["set_temp"]           = this->set_temp;
  121.         settings["set_temp_min"]   = set_temp_min;
  122.         settings["set_temp_max"]   = set_temp_max;
  123.         settings["set_temp_def"]   = set_temp_def;
  124.         settings["delta_temp"]           = this->delta_temp;
  125.         settings["delta_temp_min"] = delta_temp_min;
  126.         settings["delta_temp_max"] = delta_temp_max;
  127.         settings["delta_temp_def"] = delta_temp_def;

  128.         String jsonString;
  129.         root.printTo(jsonString);

  130.         return jsonString;
  131. }
  132. void AirConditioner::setSettings(String jsonString) {

  133.         if(jsonString.length() != 0) {
  134.                 DynamicJsonBuffer jsonBuffer;

  135.                 JsonObject& root = jsonBuffer.parseObject(jsonString);
  136.                 JsonObject& settings = root["settings"];

  137.                 this->power = settings["power"];
  138.                 this->setPower(this->power);
  139.                 this->mode = settings["mode"];

  140.                 if((settings["speed"] >= Stopped) && (settings["speed"] <= HiSpeed))
  141.                         this->speed = settings["speed"];
  142.                 else
  143.                         this->speed = Stopped;

  144.                 if((settings["set_temp"] >= set_temp_min) && (settings["set_temp"] <= set_temp_max))
  145.                         this->set_temp = settings["set_temp"];
  146.                 else
  147.                         this->set_temp = set_temp_def;

  148.                 if((settings["delta_temp"] >= delta_temp_min) && (settings["delta_temp"] <= delta_temp_max))
  149.                         this->delta_temp = settings["delta_temp"];
  150.                 else
  151.                         this->delta_temp = delta_temp_def;

  152.                 Settings.save(this->getSettings(), DEV_SETTINGS);
  153.         }
  154. }

  155. String AirConditioner::getState() {

  156.         DynamicJsonBuffer jsonBuffer;
  157.         JsonObject& root = jsonBuffer.createObject();

  158.         byte speed = 0x00;
  159.         if(digitalRead(LowSpeedPin))
  160.                 speed = 0x01;
  161.         if(digitalRead(MedSpeedPin))
  162.                 speed = 0x02;
  163.         if(digitalRead(HiSpeedPin))
  164.                 speed = 0x03;

  165.          JsonObject& status = jsonBuffer.createObject();
  166.                  root["status"] = status;

  167.                 status["power"] = (bool) digitalRead(PowerPin);
  168.                  status["mode"] = (bool) this->mode;
  169.                 status["speed"] = speed;
  170.          status["set_temp"] = this->set_temp;

  171.            JsonObject& info = jsonBuffer.createObject();
  172.                    root["info"]        = info;

  173.            info["cur_temp"] = (float) this->cur_temp;
  174.          info["err_sensor"] = (bool) this->sensor->sensor_error;

  175.         String jsonString;
  176.         root.printTo(jsonString);

  177.         return jsonString;
  178. }

  179. void AirConditioner::stopModule() {

  180.         if(this->executeConditioner.isStarted())
  181.                 this->executeConditioner.stop();

  182.         this->setSpeed(Stopped);
  183.         this->setPower(PowerOff);
  184. }
  185. void AirConditioner::saveConfig() {

  186.         Settings.save(this->getSettings(), DEV_SETTINGS);
  187. }
  188. void AirConditioner::onSystemRestart() {
  189.         this->stopModule();
  190.         this->saveConfig();
  191. }
复制代码


全部资料51hei下载地址:
Smart-Air-master.zip (7.39 MB, 下载次数: 5)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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