Drugi projekat je za centralno grejanje na gas.
Problemi
1. neujednacene temperature po sobama
2. u dnevnoj sobi nema radijatora nego samo FanCoil koji brzo izduva toplotu sa sebe pa duva ladno.
3. razlicite temperature su potrebne za grejanje po danu i noci
Resenje
1. regulacija ventila na sabirnici (potreban akutator iliti motoric ventila sabirnice) za svaku sobu
2. regulacija FanCoil-a da ne izduvava dok ne dobije odredjenu temperaturu na sacu
3. prekidac za rezim rada noc/dan (temperature se podesavaju odvojeno za dnevni a odvojeno za nocni rezim)
4. LCD (2004) na kom pisu sve temperature i stanje ventila za svaku sobu
Ovaj projekat je tek ugradjen kod kolege, mozda ima nekih mana ali resavacemo ih kad se pokazu.
/*
korisceni pinovi:
pin 13 -
pin 12 -
pin 11 - nema RELE Decija
pin 10 - zeleno bela BELA DIODA ventil Decija
pin 9 - NARANDzASTA OneWire DS18b20 sonda (klasican je 4.7 KoHm)
(na duzinu od 40m UTP-a otpornik 2.35 KoHm) ne ici ispod 1.2 KoHm !!!!!!!!
pune boje + & data, bele masa - (faradejev kavez)
pin 8 - nema ZUTA DIODA ventil spavaca
pin 7 - plava RELE ventil spavaca
pin 6 - nema ZELENA DIODA ventil dnevna
pin 5 - zuta RELE ventil dnevna
pin 4 - nema CRVENA DIODA kotao
pin 3 - siva RELE kotao
pin 2 - ljubicasta RELE fan coil
pin A5 - SCL LiquidCrystal_I2C zuta
pin A4 - SDA LiquidCrystal_I2C plava
pin A3 - led nocnog rezima
pin A2 - prekidac za nocni rezim (izmedju mase i data 10 KoHm)
pin A1 - greska led (redno sa plusa posle diode 220 oHm)
pin A0 -
*/
//koriscene biblioteke
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
float FanCoilGornja = 47; //da ne pali ventil fan coil ispod npr40
float FanCoilDonja = 43; //da ne pali ventil fan coil ispod npr40
float DnevnaGornja = 23.50; //kada da gasi ventil za dnevnu npr24
float DnevnaDonja = 23; //kada da pali ventil za dnevnu npr23
float SpavacaGornja = 22.50; //kada da gasi ventil za spavacu npr23
float SpavacaDonja = 22; //kada da pali ventil za spavacu npr22
float DecijaGornja = 3; //kada da gasi ventil za Decija npr23
float DecijaDonja = 2; //kada da pali ventil za Decija npr22
float Error = 10; //greska u citanju sondi npr10
//Nocni rezim
float FanCoilGornjaNocna = 47; //nocni da ne pali ventil fan coil ispod npr40
float FanCoilDonjaNocna = 43; //nocni da ne pali ventil fan coil ispod npr40
float DnevnaGornjaNocna = 21.50; //nocni kada da gasi ventil za dnevnu npr24
float DnevnaDonjaNocna = 21; //nocni kada da pali ventil za dnevnu npr23
float SpavacaGornjaNocna = 20.50; //nocni kada da gasi ventil za spavacu npr23
float SpavacaDonjaNocna = 20; //nocni kada da pali ventil za spavacu npr22
float DecijaGornjaNocna = 3; //nocni kada da gasi ventil za Decija npr23
float DecijaDonjaNocna = 2; //nocni kada da pali ventil za Decija npr22
float ErrorNocna = 10; //nocni greska u citanju sondi npr10
#define ONE_WIRE_BUS 9 // pin na koji ulaze senzori
OneWire oneWire(ONE_WIRE_BUS); // koriscenje dallas-a i oneWire
DallasTemperature sensors(&oneWire);
int FanCoil = 2; // pin izlaza fan coil-a
int Kotao = 3; //pin izlaza za kotao
int KotaoLed = 4; //pin izlaza za led diodu kotla
int DnevnaVentil = 5; //pin izlaza za ventil dnevne
int DnevnaVentilLed = 6; //pin izlaza za led diodu ventila dnevne
int SpavacaVentil = 7; //pin izlaza za ventil spavace
int SpavacaVentilLed = 8; //pin izlaza za led diodu ventila spavace
int DecijaVentil = 10; //pin izlaza za ventil Decija
int DecijaVentilLed = 11; //pin izlaza za led diodu ventila prizemlja
int ErrorLed = A1; //
int NocniRezim = A2; // pin nocni rezim
int NocniRezimLed = A3; // LED nocni rezim
int FanCoilState;
int DnevnaVentilState;
int SpavacaVentilState;
int KotaoState;
int DecijaVentilState;
int NocniRezimState;
LiquidCrystal_I2C lcd(0x27,20,4); //podesavanje LCD-a 20 slova x4 reda
//_______________________________________________________________________________________________________
void setup ()
{
Serial.begin(9600); //startuj serial port
sensors.begin();
//podesi pinove da budu izlazi
pinMode (FanCoil, OUTPUT);
pinMode (Kotao, OUTPUT);
pinMode (KotaoLed, OUTPUT);
pinMode (DnevnaVentil, OUTPUT);
pinMode (DnevnaVentilLed, OUTPUT);
pinMode (SpavacaVentil, OUTPUT);
pinMode (SpavacaVentilLed, OUTPUT);
pinMode (DecijaVentil, OUTPUT);
pinMode (DecijaVentilLed, OUTPUT);
pinMode (ErrorLed, OUTPUT);
pinMode (NocniRezim, INPUT);
pinMode (NocniRezimLed, OUTPUT);
// pri paljenju stanje relea ugaseno
digitalWrite(FanCoil, HIGH);
digitalWrite(Kotao, HIGH);
digitalWrite(DnevnaVentil, HIGH);
digitalWrite(SpavacaVentil, HIGH);
digitalWrite(DecijaVentil, HIGH);
//digitalWrite(GreskaLed, LOW);
lcd.init(); // analiziraj LCD
// Stampaj na LCD-u
lcd.backlight();
lcd.setCursor (2,0);
lcd.print("*made in SERBIA*");
lcd.setCursor (5,1);
lcd.print("by bobahru");
lcd.setCursor (3,2);
lcd.print("064/412-68-66");
lcd.setCursor (2,3);
lcd.print("
[email protected]");
delay(15000); //zadrzavanje poruke pri paljenju
lcd.clear(); //ocisti LCD
}
//citanje temperature sa senzora i pretvaranje u vrednost
float sensorValue (byte deviceAddress[])
{
float tempC = sensors.getTempC (deviceAddress);
float temp = (DallasTemperature::toFahrenheit(tempC));
return temp;
delay(10000);
}
//________________________________________________________________________________________________________________
void loop ()
{
//sve vrednosti senzora
sensors.requestTemperatures();
//0,1,2 je broj senzora, pretvoriti u ime
float FanCoilTemp = (sensors.getTempCByIndex(0));
float DnevnaTemp = (sensors.getTempCByIndex(1));
float SpavacaTemp = (sensors.getTempCByIndex(2));
float DecijaTemp = (sensors.getTempCByIndex(3));
Serial.print ("Kotao stanje__________ ");
Serial.println (KotaoState);
Serial.println ("");
Serial.print ("Fan Coil temp ");
Serial.println (FanCoilTemp);
Serial.print ("FanCoil stanje________ ");
Serial.println (FanCoilState);
Serial.print ("Dnevna temp__ ");
Serial.println (DnevnaTemp);
Serial.print ("Dnevna ventil stanje__ ");
Serial.println (DnevnaVentilState);
Serial.print ("Spavaca temp_ ");
Serial.println (SpavacaTemp);
Serial.print ("Spavaca ventil stanje__");
Serial.println (SpavacaVentilState);
Serial.print ("Decija temp ");
Serial.println (DecijaTemp);
Serial.print ("Decija ventil stanje");
Serial.println (DecijaVentilState);
Serial.print ("Nocni rezim stanje");
Serial.println (NocniRezimState);
Serial.println ("");
Serial.println ("");
Serial.println ("");
//prvi red
lcd.setCursor (0,0);
lcd.print("Dnevna Soba:");
lcd.setCursor (13,0);
lcd.print (DnevnaTemp);
lcd.setCursor (19,0);
lcd.print(DnevnaVentilState);
//drugi red
lcd.setCursor (0,1);
lcd.print("Spavaca Soba:");
lcd.setCursor (13,1);
lcd.print (SpavacaTemp);
lcd.setCursor (19,1);
lcd.print(SpavacaVentilState);
//treci red
lcd.setCursor (0,2);
lcd.print("Decija Soba:");
lcd.setCursor (13,2);
lcd.print (DecijaTemp);
lcd.setCursor (19,2);
lcd.print(DecijaVentilState);
//cetvrti red red
lcd.setCursor (0,3);
lcd.print("Fan Coil:");
lcd.setCursor (13,3);
lcd.print(FanCoilTemp);
lcd.setCursor (19,3);
lcd.print(FanCoilState);
NocniRezimState = digitalRead(NocniRezim); // stanje prekidaca za nocni rezim 1 ili 0
//dnevni rezim (obican rezim)
if (NocniRezimState == 0)
{
{digitalWrite(NocniRezimLed,LOW);} // nocni rezim stanje led obavestenje ugaseno
//Fan Coil pali/gasi
{
if (FanCoilTemp >FanCoilGornja) {digitalWrite(FanCoil,LOW); FanCoilState = 1;}
if (FanCoilTemp <FanCoilDonja) {digitalWrite(FanCoil,HIGH); FanCoilState = 0;}
}
//Dnevna ventil pali/gasi
{
if (DnevnaTemp <DnevnaDonja) {digitalWrite(DnevnaVentil,LOW); DnevnaVentilState = 1;
digitalWrite(DnevnaVentilLed,HIGH);}
if (DnevnaTemp >DnevnaGornja) {digitalWrite(DnevnaVentil,HIGH); DnevnaVentilState = 0;
digitalWrite(DnevnaVentilLed,LOW);}
}
//Spavaca ventil pali/gasi
{
if (SpavacaTemp <SpavacaDonja) {digitalWrite(SpavacaVentil,LOW); SpavacaVentilState = 1;
digitalWrite(SpavacaVentilLed,HIGH);}
if (SpavacaTemp >SpavacaGornja) {digitalWrite(SpavacaVentil,HIGH); SpavacaVentilState = 0;
digitalWrite(SpavacaVentilLed,LOW);}
}
//Decija ventil pali/gasi
{
if (DecijaTemp <DecijaDonja) {digitalWrite(DecijaVentil,LOW); DecijaVentilState = 1;
digitalWrite(DecijaVentilLed,HIGH);}
if (DecijaTemp >DecijaGornja) {digitalWrite(DecijaVentil,HIGH); DecijaVentilState = 0;
digitalWrite(DecijaVentilLed,LOW);}
}
//Komanda za kotao, bilo koji ventil da je upaljen upali i kotao
{
if ((DnevnaVentilState) || (SpavacaVentilState) || (DecijaVentilState))
{digitalWrite(Kotao,LOW); KotaoState = 1;
digitalWrite(KotaoLed,HIGH);}
else
{digitalWrite(Kotao,HIGH); KotaoState = 0;
digitalWrite(KotaoLed,LOW);}
}
}
// nocni rezim
if (NocniRezimState == 1)
{
{digitalWrite(NocniRezimLed,HIGH);} // nocni rezim stanje led obavestenje upaljeno
//Fan Coil pali/gasi
{
if (FanCoilTemp >FanCoilGornjaNocna) {digitalWrite(FanCoil,LOW); FanCoilState = 1;}
if (FanCoilTemp <FanCoilDonjaNocna) {digitalWrite(FanCoil,HIGH); FanCoilState = 0;}
}
//Dnevna ventil pali/gasi
{
if (DnevnaTemp <DnevnaDonjaNocna) {digitalWrite(DnevnaVentil,LOW); DnevnaVentilState = 1;
digitalWrite(DnevnaVentilLed,HIGH);}
if (DnevnaTemp >DnevnaGornjaNocna) {digitalWrite(DnevnaVentil,HIGH); DnevnaVentilState = 0;
digitalWrite(DnevnaVentilLed,LOW);}
}
//Spavaca ventil pali/gasi
{
if (SpavacaTemp <SpavacaDonjaNocna) {digitalWrite(SpavacaVentil,LOW); SpavacaVentilState = 1;
digitalWrite(SpavacaVentilLed,HIGH);}
if (SpavacaTemp >SpavacaGornjaNocna) {digitalWrite(SpavacaVentil,HIGH); SpavacaVentilState = 0;
digitalWrite(SpavacaVentilLed,LOW);}
}
//Decija ventil pali/gasi
{
if (DecijaTemp <DecijaDonjaNocna) {digitalWrite(DecijaVentil,LOW); DecijaVentilState = 1;
digitalWrite(DecijaVentilLed,HIGH);}
if (DecijaTemp >DecijaGornjaNocna) {digitalWrite(DecijaVentil,HIGH); DecijaVentilState = 0;
digitalWrite(DecijaVentilLed,LOW);}
}
//Komanda za kotao, bilo koji ventil da je upaljen upali i kotao
{
if ((DnevnaVentilState) || (SpavacaVentilState) || (DecijaVentilState))
{digitalWrite(Kotao,LOW); KotaoState = 1;
digitalWrite(KotaoLed,HIGH);}
else
{digitalWrite(Kotao,HIGH); KotaoState = 0;
digitalWrite(KotaoLed,LOW);}
}
}
// komanda za gresku u sondama, neispravno citanje sondi temperatura manja od ERROR zadata na pocetku petlje
{
if ((SpavacaTemp <Error) || (FanCoilTemp <Error) || (DecijaTemp <Error) || (DnevnaTemp <Error))
{digitalWrite(ErrorLed,HIGH);}
}
delay(1000);
}
Sve ce to moj prijatelj Milan da ti objasni on je kolektor.
Lektor Ziko,lektor.