[ bobahruma @ 10.01.2017. 16:09 ] @
Pocetnik sam u arduinu, ali sam napravio par projekata za kontrolu centralnog grejanja i pokazali su se kao uspesni i korisni, pa bi da ih podelim sa vama. |
[ bobahruma @ 10.01.2017. 16:09 ] @
[ beogard @ 10.01.2017. 16:18 ] @
Samo izvoli! :)
[ bobahruma @ 10.01.2017. 16:23 ] @
Prvi projekat je za centralno grejanje na drva. Jedan kotao, dve kuce.
Problemi 1. u kuci koja je blize kotlarnici je prevruce, a u drugoj normalno. 2. ponekad se desava da zaglavi regulator promaje, zato je opasno gasiti pumpe. 3. mora da se ide u kotlarnicu da se vidi kada treba ponovo loziti. Resenja 1. regulacija obe pumpe naspram temperature u kucama. 2. alarm pregrevanja (pali obe pumpe bez obzira na temperature u kucama i pali malu pistalicu da obavesti pregrevanje kotla) 3. LCD displej koji pokazuje temperaturu obe kuce i temperaturu vode koja izlazi iz kotla i temperaturu vode koja ulazi u kotao. led diode pokazuju koja je pumpa trenutno upaljena /* korisceni pinovi: pin 13 - pin 12 - pin 11 - pin 10 - pin 9 - OneWire DS18b20 sonda siva pin 8 - crvena ZUTA DIODA Markova pumpa pin 7 - plava rele Markova pumpa pin 6 - crna ZELENA DIODA Dejanova pumpa pin 5 - zuta rele Dejanova pumpa pin 4 - siva CRVENA DIODA alarm pregrevanje pin 3 - bela rele alarm pregevanje pin 2 - buzzer pin A5 - SCL LiquidCrystal_I2C zuta pin A4 - SDA LiquidCrystal_I2C plava pin A3 - pin A2 - pin A1 - pin A0 - */ //koriscene biblioteke #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal_I2C.h> float AlarmPali = 65.00; //kada da pali alarm npr80 float AlarmGasi = 60.00; //kada da gasi alarm npr70 float DejanKucaGornja = 24.00; //kada da gasi Dejanovu pumpu npr24 float DejanKucaDonja = 23.50; //kada da pali Dejanovu pumpu npr23 float MarkoKucaGornja = 23.00; //kada da gasi Markovu pumpu npr23 float MarkoKucaDonja = 22.50; //kada da pali markovu pumpu npr22 int FrekvencijaBuzzera = 2200; //frekvencija - glasnoca buzzera npr2200 int DuzinaPistanja = 500; //duzina pistanja u ms npr500 int PauzaPistanja = 3000; //duzina pauze izmadju dva pistanja u ms npr3000 // pin na koji ulaze senzori #define ONE_WIRE_BUS 9 OneWire oneWire(ONE_WIRE_BUS); // koriscenje dallas-a i oneWire DallasTemperature sensors(&oneWire); int Buzzer = 2; // pin izlaza buzzer-a int AlarmPregrevanje = 3; //pin izlaza za alarm int AlarmPregrevanjeLed = 4; //pin izlaza za led diodu alarma int DejanPumpa = 5; //pin izlaza za Dejanovu pumpu int DejanPumpaLed = 6; //pin izlaza za led diodu Dejanoe pumpe int MarkoPumpa = 7; //pin izlaza za Markovu pumpu int MarkoPumpaLed = 8; //pin izlaza za led diodu Markove pumpe int AlarmPregrevanjestate; int DejanPumpastate; int MarkoPumpastate; //podesavanje LCD-a 16 slova x2 reda LiquidCrystal_I2C lcd(0x27,16,2); //_______________________________________________________________________________________________________ void setup () { //startuj serial port Serial.begin(9600); // startuj onewire biblioteku sensors.begin(); //podesi pinove da budu izlazi pinMode (Buzzer, OUTPUT); pinMode (AlarmPregrevanje, OUTPUT); pinMode (AlarmPregrevanjeLed, OUTPUT); pinMode (DejanPumpa, OUTPUT); pinMode (DejanPumpaLed, OUTPUT); pinMode (MarkoPumpa, OUTPUT); pinMode (MarkoPumpaLed, OUTPUT); // pri paljenju stanje relea ugaseno digitalWrite(AlarmPregrevanje, HIGH); digitalWrite(DejanPumpa, HIGH); digitalWrite(MarkoPumpa, HIGH); lcd.init(); // analiziraj LCD // Stampaj na LCD-u lcd.backlight(); lcd.setCursor (3,0); lcd.print("by bobahru"); lcd.setCursor (1,1); lcd.print("064/412-68-66"); 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(5000); } //________________________________________________________________________________________________________________ void loop () { //sve vrednosti senzora sensors.requestTemperatures(); //0,1,2,3 je broj senzora, pretvoriti u ime float PecOdlaz = (sensors.getTempCByIndex(0)); float PecDolaz = (sensors.getTempCByIndex(1)); float DejanKuca = (sensors.getTempCByIndex(2)); float MarkoKuca = (sensors.getTempCByIndex(3)); Serial.print ("Pec Odlaz "); Serial.println (PecOdlaz); Serial.print ("Pec Dolaz "); Serial.println (PecDolaz); Serial.print ("Dejan Kuca "); Serial.println (DejanKuca); Serial.print ("Marko Kuca "); Serial.println (MarkoKuca); Serial.print ("Alarm Pregrevanje"); Serial.println (AlarmPregrevanjestate); Serial.print ("stanje Dejanove pumpe "); Serial.println (DejanPumpastate); Serial.print ("stanje Markove pumpe "); Serial.println (MarkoPumpastate); Serial.println (""); lcd.setCursor (0,0); //prvi red lcd.print("D:"); lcd.setCursor (2,0); lcd.print (DejanKuca); lcd.setCursor (9,0); lcd.print("M:"); lcd.setCursor (11,0); lcd.print (MarkoKuca); lcd.setCursor (0,1); lcd.print("T:"); //drugi red lcd.setCursor (2,1); lcd.print (PecOdlaz); lcd.setCursor (9,1); lcd.print("H:"); lcd.setCursor (11,1); lcd.print(PecDolaz); //alarm pregrevanja if (PecOdlaz >AlarmPali && AlarmPregrevanjestate ==0) { digitalWrite(DejanPumpa,LOW); DejanPumpastate = 1; digitalWrite(DejanPumpaLed,HIGH); digitalWrite(MarkoPumpa,LOW); MarkoPumpastate = 1; digitalWrite(MarkoPumpaLed,HIGH); digitalWrite(AlarmPregrevanje,LOW); AlarmPregrevanjestate = 1; digitalWrite(AlarmPregrevanjeLed,HIGH); } if (PecOdlaz <AlarmGasi && AlarmPregrevanjestate == 1) { digitalWrite(DejanPumpa,HIGH); DejanPumpastate = 0; digitalWrite(DejanPumpaLed,LOW); digitalWrite(MarkoPumpa,HIGH); MarkoPumpastate = 0; digitalWrite(MarkoPumpaLed,LOW); digitalWrite(AlarmPregrevanje,HIGH); AlarmPregrevanjestate = 0; digitalWrite(AlarmPregrevanjeLed,LOW); } //Dejan pupma if (AlarmPregrevanjestate == 0) { if (DejanKuca <DejanKucaDonja) {digitalWrite(DejanPumpa,LOW); DejanPumpastate = 1; digitalWrite(DejanPumpaLed,HIGH);} if (DejanKuca >DejanKucaGornja) {digitalWrite(DejanPumpa,HIGH); DejanPumpastate = 0; digitalWrite(DejanPumpaLed,LOW);} } //Marko pupma if (AlarmPregrevanjestate == 0) { if (MarkoKuca <MarkoKucaDonja) {digitalWrite(MarkoPumpa,LOW); MarkoPumpastate = 1; digitalWrite(MarkoPumpaLed,HIGH);} if (MarkoKuca >MarkoKucaGornja) {digitalWrite(MarkoPumpa,HIGH); MarkoPumpastate = 0; digitalWrite(MarkoPumpaLed,LOW);} } //komanda za buzzer if (AlarmPregrevanjestate == 1) { tone(Buzzer, FrekvencijaBuzzera, DuzinaPistanja); delay(PauzaPistanja); // noTone(2); //delay(1000); } delay(1000); } [ bobahruma @ 10.01.2017. 16:54 ] @
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); } [ bobahruma @ 10.01.2017. 16:59 ] @
zaboravio sam da kazem koriscen arduino uno (sve lepo staje u njega) i sonde ds18b20
[ pena2008 @ 29.01.2017. 16:19 ] @
Jako zanimljivo.
[ pena2008 @ 29.01.2017. 16:40 ] @
Jako zanimljivo i kako se pokazalo u praksi.
[ jablan @ 29.01.2017. 16:43 ] @
@bobahruma Koristi [code] tagove kad kačiš kod. Takođe, preporučujem da okačiš kod na github, da bi olakšao ljudima da ga koriste. [ bobahruma @ 29.01.2017. 21:19 ] @
Nije jos savrseno.
Postoje problemi sa duzinom utp-a od sondi kada ide blizu naponskih vodova (nije strasno ali ponekad preskoci ocitavanje jedne sonde). Dok se ne postavi na lice mesta ne zna se sta ce biti sa podacima koji dolaze sa sondi. Odlucio sam to da resim sa jos jednim arduinom (nano) koji ce da salje temperature od najudaljenijih sondi preko serial porta. Videcemo kako ce se Serial veza ponasati na tu duzinu pored naponskih vodova. Uskoro cu postaviti i taj kod. Inace kod radi odlicno pomogao je oko kontrole temperature. Ako iko razmislja o kontroli centralnog grejanja pomocu arduina, tu sam da pomognem. [ JECHAM @ 30.01.2017. 22:29 ] @
Može li nešto od ovoga da pokrece motor na mešnom ventilu i tako reguliše temperaturu vode ka radijatorima?
[ bobahruma @ 30.01.2017. 22:44 ] @
Kakav motor na ventilu imas?
[ mali genije @ 31.01.2017. 09:30 ] @
Citat: bobahruma: zaboravio sam da kazem koriscen arduino uno (sve lepo staje u njega) i sonde ds18b20 Bilo bi lepo da okacis sliku da vidimo kako to izgleda i meni treba takvo resenje kod mene. Pozzz [ JECHAM @ 31.01.2017. 13:33 ] @
Citat: bobahruma: Kakav motor na ventilu imas? Imam Seltron AVC05 220v 120sekundi. Nije mi problem hardverski deo(izlazi arduina na optocupler ili neki tranzistor, pa reley ili triac) [ veselinovic @ 31.01.2017. 14:19 ] @
Citat: bobahruma: Nije jos savrseno. Postoje problemi sa duzinom utp-a od sondi kada ide blizu naponskih vodova (nije strasno ali ponekad preskoci ocitavanje jedne sonde). Dok se ne postavi na lice mesta ne zna se sta ce biti sa podacima koji dolaze sa sondi. Odlucio sam to da resim sa jos jednim arduinom (nano) koji ce da salje temperature od najudaljenijih sondi preko serial porta. Videcemo kako ce se Serial veza ponasati na tu duzinu pored naponskih vodova. Uskoro cu postaviti i taj kod. Inace kod radi odlicno pomogao je oko kontrole temperature. Ako iko razmislja o kontroli centralnog grejanja pomocu arduina, tu sam da pomognem. Nano i obavezno 485 protokol. Ili da pribjegnes softverskom rjesenju. Kako je sistem grijanja veoma inertan to se nista strasno nece desiti ako mjerenje ponovis 100-tinjak puta ( recimo 128) i nadjes srednju vrijednost, a prije toga odbacis potpuno sulude reultate. [ bobahruma @ 31.01.2017. 15:05 ] @
Citat: JECHAM: Imam Seltron AVC05 220v 120sekundi. Nije mi problem hardverski deo(izlazi arduina na optocupler ili neki tranzistor, pa reley ili triac) Vidim da nije los motor ima raznih kombinacija. Mogao bi sa arduinom da kontrolises rad motora. Koju temperaturu bi konkretno da meris? u sistemu ili u prostorijama? Kod za ovo ne bi trebalo da bude komplikovan. Okaci sliku kontakata motora i semu koju si dobio uz motor, pa cemo videti sta treba da se uradi. [ bobahruma @ 31.01.2017. 15:22 ] @
Citat: mali genije: Bilo bi lepo da okacis sliku da vidimo kako to izgleda i meni treba takvo resenje kod mene. Pozzz Evo slika u upload-u [ bobahruma @ 31.01.2017. 15:43 ] @
Citat: veselinovic: Nano i obavezno 485 protokol. Ili da pribjegnes softverskom rjesenju. Kako je sistem grijanja veoma inertan to se nista strasno nece desiti ako mjerenje ponovis 100-tinjak puta ( recimo 128) i nadjes srednju vrijednost, a prije toga odbacis potpuno sulude reultate. Docicemo i do 485 protokola, hteo sam sto manje da komplikujem izradu. Kod mene radi super jedan arduino i cetiri sonde Kod kolege imamo problem zbog smetnji, i sad cemo probati serial komunikaciju. Sledece sto cu probati je 485 protokol pa zatim neki wireless. Za sve to treba vremena i naravno opreme i dosta ispitivanja (bez tri-cetiri dana na stolu ne postavljam nista na lice mesta). Sto se tice netacnih rezultata, to sam vec izbacio, ali onda se desava da se npr. temperatura dnevne pojavi na mestu spavace(znaci nije u pitanju netacno ocitavanje nego lepo preskoci jednu sondu i sve se temp. izmesaju). I za ovo ima resenje, zakucas sonde sa mac adresom, ali onda je komplikovano nekom ko se bas toliko ne razume da promeni sondu u slucaju crkavanja iste. [ JECHAM @ 31.01.2017. 19:34 ] @
Citat: bobahruma: Vidim da nije los motor ima raznih kombinacija. Mogao bi sa arduinom da kontrolises rad motora. Koju temperaturu bi konkretno da meris? u sistemu ili u prostorijama? Kod za ovo ne bi trebalo da bude komplikovan. Okaci sliku kontakata motora i semu koju si dobio uz motor, pa cemo videti sta treba da se uradi. Za pokretanje motora trebaju 2 releja ili 2 triaca, jer svaki smer(levo ili desno) ima svoju žicu Merio bi sve temperature oko četvorokrakog ventila(4 sonde) i spoljnu i sobnu(još 2 sonde). Postoji verzija Una sa 8 analognih ulaza(A0-A7) i ostaju 2 za i2c vezu sa LCD-om, ili ako je običan UNO koristiti samo 4 temperature(polaz od kotla,polaz ka radijatorima, sobna i spoljna Koristio bi LM35 kao senzore i svaki na analogni ulaz(strujna petlja) http://www.elitesecurity.org/t494245-Arduino-merenje-temperature Motorić bi trebao da reguliše polaz ka radijatorima(1 sonda LM35), zavisno od -zadata temperatura polaza(najosnovnija verzija koja ne prati sobnu i spoljnu temperaturu.) -da prati spoljnu temperaturu i na osnovu toga podešava polaznu - da prati spoljnu i sobnu i tako koriguje polaz(najjača verzija) [ bobahruma @ 31.01.2017. 22:52 ] @
Ja bi za pocetak krenuo od najjednostavnije varijente ( -zadata temperatura polaza(najosnovnija verzija koja ne prati sobnu i spoljnu temperaturu.) ) pa polako dogradjivao.
Ako tek pocinjes sa pisanjem koda za centralno, mogu ti pomoci oko osnovne varijante. Za onu najjacu verziju treba dosta vremena i testiranja na stolu. P.S. za cega su kontakti 4,5,6? (sta njih kontrolise, mozda kada motor dodje u jednu stranu do kraja, da ga neko (nesto) ugasi da ne bi izgoreo od opterecenja)? -samo predpostavka- [ mzm @ 25.02.2017. 12:06 ] @
Pinovi 4,5,6 sluze za ukljucenje pumpe kada pocne otvaranje ventila i suprotno.
[ mzm @ 25.02.2017. 12:44 ] @
Citat: JECHAM: Citat: bobahruma: Kakav motor na ventilu imas? Imam Seltron AVC05 220v 120sekundi. Nije mi problem hardverski deo(izlazi arduina na optocupler ili neki tranzistor, pa reley ili triac) Treba ti PID kontrola za tu namenu. Odradio sam za moje grejanje, doduse na protoboard-u. Otvaranje i zatvaranje ventila za sad simuliraju dve led diode dok mi ne stignu SSR i dok ne prebacim sve na pcb sa atmega 328. Ima 4 SSR-a, dva DS18B20. Odradio sam shemu i ubacio MAX31855 za merenje spoljne temperature na osnovu koje ce automatski podesavati temperaturu ka radijatorima, ali jos nisam napisao kod za spoljnu temp. [Ovu poruku je menjao mzm dana 25.02.2017. u 14:10 GMT+1] Copyright (C) 2001-2024 by www.elitesecurity.org. All rights reserved.
|