![]() |
![]() |
#1 |
Member
|
![]()
Решил сделать устройство, которое бы регулировало климат в комнате дома, для начала одной, если пройдет успешно внедрю во все остальные.
В комнате имеем: 1. Батарея с терморегулятором 2. Кондиционер 3. Пароувлажнитель. На данном этапе сделал пока только управление батареей: Вместо термоголовки устанавливается электропривод типа Открыто/Закрыто, нормальное положение открыто, фирмы Watts. ![]() Инфу пока вывожу на дисплей 16*2 вмонтированный в крышку распределительной коробки, управление осуществляется тремя кнопками(они пока не подписаны, слева направо: 1.Set, 2."+", 3."-" ![]() при нажатии сменяются 3 режима: 1. Отображаются действительные показания температуры и влажности: ![]() 2. установка требуемой температуры: ![]() 3. установка требуемой влажности: ![]() При установке нужной температуры, Ардуинка сравнивает ее с текущей, если она находится в диапазоне +/-2 градуса, то ничего не происходит, если температура поднимется( а она будет подниматься, т.к. у нас нормальное положение клапана открыто) на 2 градуса выше установленной, на пин 13(пока поставил его для проверки светодиодом) подается HIGH, пин 13 подключен к реле, через реле подключен электропривод, который перекрывает батарею, если же температура падает на 2 градуса от заданной, на пин 13 подается LOW, реле размыкается, клапан открывает батарею и теплоноситель опять начинает ее нагревать. Конечно дисплей и кнопки выглядят по-колхозному, но это тестовый вариант, для того чтобы понять нужно оно или нет и будет ли оно стабильно работать, потом планирую сделать на базе сенсорного дисплея 3,2 дюйма: С пароувлажнителем проблем не будет, подключу его тоже через реле на включение/выключение. Вот с кондером есть проблемы, пока разбираюсь в кодах пульта, основная проблема в том, что пульт похоже выдает все параметры: скорость, вращения, температуру, направление жалюзи и пр. вообщем все что можно на нем установить. Если кто-то имеет информацию по тому как с ардуинки рулить кондером буду очень благодарен. и еще, датчиков температуры в комнате будет 2, если кто знает где их лучше установить, просьба подсказать, пока планирую в двух более-менее нейтральных углах воткнуть. Принцип работы: среднее значение между ними. Вообще в планах к этой же дуинке подключить беспроводной либо блютуз приемник/передатчик, для сбора всей инфы в центре, и к нейже реле, для возможности централизованно выключать/включать освещение и реализовать эффект присутствия на момент длительного отсутствия. Вот скетч устройства на данном этапе, конструктивная критика и предложения приветствуются Код:
#include "DHT.h" #include <LiquidCrystal.h> #define DHTPIN 10 // пин подключения датчика //Установка типа вашего датчика #define DHTTYPE DHT11 // DHT 11 //#define DHTTYPE DHT22 // DHT 22 (AM2302) //#define DHTTYPE DHT21 // DHT 21 (AM2301) LiquidCrystal lcd(12, 11, 2, 3, 4, 5); int ledPin = 13;//выбор пина к которому подключено реле с термоголовкой int ButSetPin = A0;//Кнопка Set к пину А0 int ButMinPin = A1;//Кнопка "-" к пину А1 int ButMaxPin = A2;//Кнопка "+" к пину А2 DHT dht(DHTPIN, DHTTYPE); int h=45;//Задаем начальный параметр влажности int t=22;//Начальный параметр влажности int regim = 0;//Стартовый режим отображения дисплея //Вспомогательные флаги для кнопок int flag = 0; int flagmin = 0; int flagr = 0; void setup() { lcd.begin(16, 2); dht.begin(); pinMode(ledPin, OUTPUT); } void loop() { //Читаем температуру и влажность с датчика float humi = dht.readHumidity(); float temp = dht.readTemperature(); //Переключаем режимы отображения дисплея и ввода данных if(digitalRead(ButSetPin) == HIGH && flagr == 0) { regim ++; flagr = 1; if(regim > 2) // Если номер режима превышает требуемого { // то отсчет начинается с нуля regim = 0; } } if(digitalRead(ButSetPin) == LOW && flagr == 1) { flagr = 0; } //==================В режиме 0 выводим действительные данные температуры и влажности if(regim == 0) { lcd.setCursor(0,0); lcd.print("HUMI:"); lcd.print(humi); lcd.print(" %"); lcd.setCursor(0,1); lcd.print("TEMP:"); lcd.print(temp); lcd.print(" C"); } //======================В режиме 1 задаем нужную влажность if(regim == 1) { if(digitalRead(ButMaxPin) == HIGH && flag ==0) { h++; flag =1; } if(digitalRead(ButMaxPin) == LOW && flag == 1) { flag = 0; } if(digitalRead(ButMinPin) == HIGH && flagmin==0) { h--; flagmin = 1; } if(digitalRead(ButMinPin) == LOW && flagmin == 1) { flagmin = 0; } lcd.setCursor(0,0); lcd.print("Set HUMI: "); lcd.setCursor(0,1); lcd.print("HUMI: "); lcd.print(h); lcd.print(" % "); } //==============================В режиме 2 выставляем нужную температуру if(regim == 2) { if(digitalRead(ButMaxPin) == HIGH) { t++; } if(digitalRead(ButMinPin) == HIGH) { t--; } lcd.setCursor(0,0); lcd.print("Set TEMP: "); lcd.setCursor(0,1); lcd.print("TEMP: "); lcd.print(t); lcd.print(" C "); } if(t>temp-1.5) { digitalWrite(ledPin, HIGH); } else digitalWrite(ledPin, LOW); // Если данные с датчика не верные, пишем ошибку if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } } Последний раз редактировалось dimasinnet; 12.11.2013 в 21:23. |
![]() |
![]() |
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2) | |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|