Термостат на Arduine

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

Ответить
paf
Сообщения: 56
Зарегистрирован: Ср янв 09, 2013 7:39 pm
Благодарил (а): 0
Поблагодарили: 2 раза

Термостат на Arduine

Сообщение paf » Ср янв 23, 2013 9:36 pm

Не кидайте тапками... :cry:
Я половины словов не знаю :)
Это заготовка. На свой лад пока. Помогите код причесать?

Код: Выделить всё

#include <Wire.h>
#include <DS1307.h>
#include <OneWire.h> 
 
 OneWire  ds(10);  // on pin 10. Датчики DS18b20 в режиме нормального питания
   byte i;   
   byte present = 0; 
   byte data[12]; 
   byte addr[2][8]; 
   bool isSubZero; 
   int Temp1,Temp; 
   float celsius;
   int ust = 23;                       // температура день
   int time_eco_bg = 22;               // время эконом режима начало
   int time_eco_end = 5;               // время эконом режима конец
   int time_act;                       // действительное время по DS1307
  
 void temper() 

 { 
   ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[0]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp & 0x8000) 
   {   isSubZero = true; 
    Temp = (Temp ^ 0xffff) + 1; 
   } 
   float temp = (6 * Temp) + Temp / 4; 
   if(isSubZero) temp = 0 - temp; 
   ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0x44,1); 
   present = ds.reset(); 
   ds.select(addr[1]); 
   ds.write(0xBE); 
   for ( i = 0; i < 9; i++) 
   { 
     data[i] = ds.read(); 
   } 
   Temp1=(data[1]<<8)+data[0]; 
   isSubZero = false; 
   if (Temp1 & 0x8000) 
   {   isSubZero = true; 
    Temp1 = (Temp1 ^ 0xffff) + 1; 
   } 
   float temp1 = (6 * Temp1) + Temp1 / 4; 
   if(isSubZero) temp1 = 0 - temp1; 
   Serial.print(" Outdoor ");              // Для контроля 
   Serial.print(temp1/100);                // не нашел
   Serial.println(" C");                   // правильного
   Serial.print(" Home ");                 // места
   Serial.print(temp/100);
   Serial.println(" C");
   // return(temp1/100);                   // было так
   //  return(temp/100); 
 
  
  
  celsius = (temp/100);                     // то же 
   time_act = RTC.get(DS1307_HR,true);      //
   Serial.print(" ust = ");                 // 
   Serial.print(ust);                       // вроде не 
   Serial.print(" time_act =  ");           // 
   Serial.println(time_act);                // на месте... 
 } 

 void setup()  
 {    
 Serial.begin(9600); 
     if ( !ds.search(addr[0])) 
   { 
    ds.reset_search(); 
   } 
    if ( !ds.search(addr[1])) 
   { 
    ds.reset_search(); 
   } 
  pinMode(2, OUTPUT);                          //управл. 1 реле
  pinMode(4, OUTPUT);                          //управл. 2 реле
  pinMode(7, OUTPUT);                          //управл. 3 реле
  
 } 

 void loop()                      
 { 
 temper();  
 
 if (time_act > time_eco_end && time_act < time_eco_bg) // с этим то же бы
 {
     ust = 23;
 }
 else
 {
     ust = 22;
 }
 
 if (celsius >= ust)
{
  digitalWrite(2, HIGH);
}
else
{
  digitalWrite(2, LOW);
}
if (celsius > (ust-1))
{
  digitalWrite(4, HIGH);
}
else
{
  digitalWrite(4, LOW);
} 
if (celsius > (ust-2))
{
  digitalWrite(7, HIGH);
}
else
{
  digitalWrite(7, LOW);                      // вынести куда-то...
}
 
   
   delay(90000); 
 }
Т.е. это как бы Ардуина на которую повешены датчики температуры. Домашний и уличный. И часы на DS1307.
В эконом режиме с 22 по 6 часов снижает на температуру...
А-а! Забыл пояснить... три реле...
Это три рожка горелки котла. Модуляция пламени, почти.
....С этими часами, намашешься! http://arduino.ru/forum/programmirovani ... ment-22002 здесь правильная либа и примеры.
Теперь бы вытащить данные в MajorDoMo...
Вообще-то мысль была такая. Ардуина управляется со своих кнопок и имеет дисплей. Но и с сервера иметь возможность изменения режимов. Таким образом, контроллер работает по заданной программе и сервер ему не нужен. Проблемы с сервером не отражаются на работе вверенных контроллеру процессов.
С уважением, Петр.
Ответить