具有Web GUI的智能調節器管理系統,可控制設備周圍的空氣溫度并提高風扇速度。控制單元連接到Wi-Fi網絡,可以通過其中的任何設備進行管理。此外,未來還計劃在幾個控制單元之間提供某種類型的網狀網絡通信。系統基于ESP8266 SoC。軟件完全模塊化結構。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ圖片20180619105358.png (177.67 KB, 下載次數: 66)
下載附件
仿真原理圖
2018-6-19 10:54 上傳
單片機程序源碼:
- /*
- * AirConditioner.cpp
- */
- #include "AirConditioner.h"
- /* AirConditioner */
- bool AirConditioner::power;
- bool AirConditioner::mode;
- byte AirConditioner::speed;
- byte AirConditioner::set_temp;
- byte AirConditioner::delta_temp;
- float AirConditioner::cur_temp;
- byte AirConditioner::PowerPin;
- byte AirConditioner::LowSpeedPin;
- byte AirConditioner::MedSpeedPin;
- byte AirConditioner::HiSpeedPin;
- Thermometer* AirConditioner::sensor;
- AirConditioner::AirConditioner(byte PowerPin, byte LowSpeedPin, byte MedSpeedPin, byte HiSpeedPin, byte SensorPin, byte SensorResolution) {
- this->PowerPin = PowerPin;
- this->LowSpeedPin = LowSpeedPin;
- this->MedSpeedPin = MedSpeedPin;
- this->HiSpeedPin = HiSpeedPin;
- this->initGPIO();
- this->sensor = new Thermometer(SensorPin, SensorResolution);
- this->power = PowerOff;
- this->mode = Cooling;
- this->speed = LowSpeed;
- this->set_temp = set_temp_def;
- this->delta_temp = delta_temp_def;
- this->cur_temp = 0;
- }
- void AirConditioner::initGPIO() {
- pinMode(this->PowerPin, OUTPUT);
- noPullup(this->PowerPin);
- digitalWrite(this->PowerPin, Off);
- pinMode(this->LowSpeedPin, OUTPUT);
- noPullup(this->LowSpeedPin);
- digitalWrite(this->LowSpeedPin, Off);
- pinMode(this->MedSpeedPin, OUTPUT);
- noPullup(this->MedSpeedPin);
- digitalWrite(this->MedSpeedPin, Off);
- pinMode(this->HiSpeedPin, OUTPUT);
- noPullup(this->HiSpeedPin);
- digitalWrite(this->HiSpeedPin, Off);
- }
- void AirConditioner::start() {
- this->executeConditioner.initializeMs(1000, AirConditioner::execConditioner).start();
- }
- void AirConditioner::setPower(bool power) {
- digitalWrite(AirConditioner::PowerPin, power);
- }
- void AirConditioner::setSpeed(byte speed) {
- switch (speed) {
- case 0x01:
- digitalWrite(AirConditioner::LowSpeedPin, On);
- digitalWrite(AirConditioner::MedSpeedPin, Off);
- digitalWrite(AirConditioner::HiSpeedPin, Off);
- break;
- case 0x02:
- digitalWrite(AirConditioner::LowSpeedPin, Off);
- digitalWrite(AirConditioner::MedSpeedPin, On);
- digitalWrite(AirConditioner::HiSpeedPin, Off);
- break;
- case 0x03:
- digitalWrite(AirConditioner::LowSpeedPin, Off);
- digitalWrite(AirConditioner::MedSpeedPin, Off);
- digitalWrite(AirConditioner::HiSpeedPin, On);
- break;
- default:
- digitalWrite(AirConditioner::LowSpeedPin, Off);
- digitalWrite(AirConditioner::MedSpeedPin, Off);
- digitalWrite(AirConditioner::HiSpeedPin, Off);
- break;
- }
- }
- void AirConditioner::updateTemp() {
- AirConditioner::cur_temp = AirConditioner::sensor->getTemp();
- }
- void AirConditioner::execThermostat() {
- bool enabled_by_scheduler = getSchedulerStatus();
- if(enabled_by_scheduler) {
- if(AirConditioner::power == PowerOn && !AirConditioner::sensor->sensor_error) {
- if(AirConditioner::mode == Cooling){
- if(AirConditioner::cur_temp >= (AirConditioner::set_temp + AirConditioner::delta_temp))
- AirConditioner::setSpeed(AirConditioner::speed);
- else
- AirConditioner::setSpeed(Stopped);
- }
- if(AirConditioner::mode == Heating) {
- if(AirConditioner::cur_temp <= (AirConditioner::set_temp - AirConditioner::delta_temp))
- AirConditioner::setSpeed(AirConditioner::speed);
- else
- AirConditioner::setSpeed(Stopped);
- }
- }
- else if(AirConditioner::power == PowerOn && AirConditioner::sensor->sensor_error) {
- AirConditioner::setSpeed(Stopped);
- AirConditioner::setPower(Off);
- }
- else
- AirConditioner::setSpeed(Stopped);
- }
- else
- AirConditioner::setSpeed(Stopped);
- }
- void AirConditioner::execConditioner() {
- AirConditioner::updateTemp();
- AirConditioner::execThermostat();
- }
- float AirConditioner::getTemp() {
- return AirConditioner::cur_temp;
- }
- String AirConditioner::getSettings() {
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root = jsonBuffer.createObject();
- JsonObject& settings = jsonBuffer.createObject();
- root["settings"] = settings;
- settings["power"] = (bool) this->power;
- settings["mode"] = (bool) this->mode;
- settings["speed"] = this->speed;
- settings["set_temp"] = this->set_temp;
- settings["set_temp_min"] = set_temp_min;
- settings["set_temp_max"] = set_temp_max;
- settings["set_temp_def"] = set_temp_def;
- settings["delta_temp"] = this->delta_temp;
- settings["delta_temp_min"] = delta_temp_min;
- settings["delta_temp_max"] = delta_temp_max;
- settings["delta_temp_def"] = delta_temp_def;
- String jsonString;
- root.printTo(jsonString);
- return jsonString;
- }
- void AirConditioner::setSettings(String jsonString) {
- if(jsonString.length() != 0) {
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root = jsonBuffer.parseObject(jsonString);
- JsonObject& settings = root["settings"];
- this->power = settings["power"];
- this->setPower(this->power);
- this->mode = settings["mode"];
- if((settings["speed"] >= Stopped) && (settings["speed"] <= HiSpeed))
- this->speed = settings["speed"];
- else
- this->speed = Stopped;
- if((settings["set_temp"] >= set_temp_min) && (settings["set_temp"] <= set_temp_max))
- this->set_temp = settings["set_temp"];
- else
- this->set_temp = set_temp_def;
- if((settings["delta_temp"] >= delta_temp_min) && (settings["delta_temp"] <= delta_temp_max))
- this->delta_temp = settings["delta_temp"];
- else
- this->delta_temp = delta_temp_def;
- Settings.save(this->getSettings(), DEV_SETTINGS);
- }
- }
- String AirConditioner::getState() {
- DynamicJsonBuffer jsonBuffer;
- JsonObject& root = jsonBuffer.createObject();
- byte speed = 0x00;
- if(digitalRead(LowSpeedPin))
- speed = 0x01;
- if(digitalRead(MedSpeedPin))
- speed = 0x02;
- if(digitalRead(HiSpeedPin))
- speed = 0x03;
- JsonObject& status = jsonBuffer.createObject();
- root["status"] = status;
- status["power"] = (bool) digitalRead(PowerPin);
- status["mode"] = (bool) this->mode;
- status["speed"] = speed;
- status["set_temp"] = this->set_temp;
- JsonObject& info = jsonBuffer.createObject();
- root["info"] = info;
- info["cur_temp"] = (float) this->cur_temp;
- info["err_sensor"] = (bool) this->sensor->sensor_error;
- String jsonString;
- root.printTo(jsonString);
- return jsonString;
- }
- void AirConditioner::stopModule() {
- if(this->executeConditioner.isStarted())
- this->executeConditioner.stop();
- this->setSpeed(Stopped);
- this->setPower(PowerOff);
- }
- void AirConditioner::saveConfig() {
- Settings.save(this->getSettings(), DEV_SETTINGS);
- }
- void AirConditioner::onSystemRestart() {
- this->stopModule();
- this->saveConfig();
- }
復制代碼
0.png (45.2 KB, 下載次數: 64)
下載附件
2018-6-19 18:11 上傳
全部資料51hei下載地址:
Smart-Air-master.zip
(7.39 MB, 下載次數: 5)
2018-6-19 10:54 上傳
點擊文件名下載附件
5 下載積分: 黑幣 -5
|