Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Климатические системы

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.11.2013, 20:35   #1
dimasinnet
Member
 
Регистрация: 27.08.2013
Адрес: Челябинск
Сообщений: 44
Вес репутации: 0
dimasinnet is an unknown quantity at this point
Отправить сообщение для dimasinnet с помощью Skype™
По умолчанию Автоклимат в комнате на Ардуино

Решил сделать устройство, которое бы регулировало климат в комнате дома, для начала одной, если пройдет успешно внедрю во все остальные.

В комнате имеем:
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");
  } 
}
Миниатюры
Нажмите на изображение для увеличения
Название: $T2eC16VHJHwFG1tPDczfBRwdHsQ8!!~~60_3.JPG
Просмотров: 9775
Размер:	46.9 Кб
ID:	1273  

Последний раз редактировалось dimasinnet; 12.11.2013 в 21:23.
dimasinnet вне форума   Ответить с цитированием
 


Здесь присутствуют: 3 (пользователей: 0 , гостей: 3)
 
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 17:15. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика