![]() |
|
|
#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. |
|
|
|
| Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|
|