Arduino schéma - arduino.sk

Plynový kotol – Millis | | Delay

Vaše nápady a pomoc s Vašimi projektami
Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Plynový kotol – Millis | | Delay

Poslaťod kosice4 » Ned 25. Okt 2015 16:14:28

Plánujem nahradiť pôvodný modul elektroniky v plynovom kotli arduinom.
Čo je podľa vás bezpečnejšie na riadenie plynového kotla použiť, funkciu Millis alebo Delay ?
Nieže millis pretečie, alebo delay zmrzne a susedia budú lietať :D
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Plynový kotol – Millis | | Delay

Poslaťod budvar10 » Pon 26. Okt 2015 9:10:28

Delay v podstate odstaví procesor do slučky, preto je lepšie používať na dlhšie časové úseky porovnávane údaju od millis. Na časové úseky rádovo do desiatok milisekúnd, by som asi použil delay. Pretečenie millis hrozí len pri úseku nad cca 49,71 dňa, ale na takéto počítanie času už by som šiel do time knižnice (sekundová báza). Ostatne asi pri tomto projekte sa "time" asi nevyhneš.

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Plynový kotol – Millis | | Delay

Poslaťod kosice4 » Pon 26. Okt 2015 19:53:31

@ budvar10 určite veľmi dobrý nápad s TimerOne.h :D
Len s tým nemám ja moc skúsenosť :(
Zatiaľ len rozpracovaný projekt s použitím funkcie delay. Miesto sondy na testovanie a zapnutie / vypnutie kotla zatiaľ používam tlačítko.
Ak by prípadne niekto mal chuť mi aspoň časť kódu prehodiť na TimerOne potešilo by ma.

#include <TimerOne.h>
#include <Wire.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include <WProgram.h>

OneWire oneWire(12);

int Armatura = 3;
int Cerpadlo = 6;
int VFzapalovanie = 2;
int IonizacnaSonda = A2;

int tlc_1 = 7; //Nano 7 /Mega 47
int tlc_2 = 8; //Nano 8 /Mega 49
int tlc_3 = 4; //Nano 4 /Mega 43
int tlc_4 = 5; //Nano 5 /Mega 45

float Tepl = 22; // požadovaná teplota kedy zapne Kotol
float Hys = 0.2;
int MaxTeplKotol = 85;

float Tepl_Vonku_T;
float Tepl_Dnu_T;
float Tepl_Kotol_T;
float Tepl_Dymovod_T;

DallasTemperature sensors(&oneWire);

DeviceAddress Tepl_Vonku = {0x28, 0xE1, 0x38, 0xC8, 0x05, 0x00, 0x00, 0xAA};
DeviceAddress Tepl_Dnu = {0x28, 0xFF, 0x64, 0xFB, 0x10, 0x14, 0x00, 0x3E};
DeviceAddress Tepl_Kotol = {0x28, 0xE1, 0x38, 0xC8, 0x05, 0x00, 0x00, 0xAA};
DeviceAddress Tepl_Dymovod = {0x28, 0xE1, 0x38, 0xC8, 0x05, 0x00, 0x00, 0xAA};

void setup(){
lcd.init();
lcd.backlight();

sensors.begin();
sensors.setResolution(Tepl_Vonku, 11);
sensors.setResolution(Tepl_Dnu, 11);
sensors.setResolution(Tepl_Kotol, 11);
sensors.setResolution(Tepl_Dymovod, 11);

Serial.begin(115200);

pinMode(tlc_1, INPUT_PULLUP);
pinMode(tlc_2, INPUT_PULLUP);
pinMode(tlc_3, INPUT_PULLUP);
pinMode(tlc_4, INPUT_PULLUP);
pinMode(IonizacnaSonda, INPUT);

pinMode(Armatura, OUTPUT);
pinMode(Cerpadlo, OUTPUT);
pinMode(VFzapalovanie, OUTPUT);

Uvitanie(); ///////////////////////////////////////////////////////
}

void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
}

void loop(){
sensors.requestTemperatures();
Tepl_Dnu_T = sensors.getTempC(Tepl_Dnu);
Tepl_Vonku_T = sensors.getTempC(Tepl_Vonku);
Tepl_Kotol_T = sensors.getTempC(Tepl_Kotol);
Tepl_Dymovod_T = sensors.getTempC(Tepl_Dymovod);

Display(); ///////////////////////////////////////////////////////
Zapni_Kotol(); ///////////////////////////////////////////////////

if((digitalRead(tlc_4) == LOW)) { // ak držím akože nehorí oheň
Vypni_Kotol(); ///////////////////////////////////////////////////
}

if((digitalRead(tlc_2) == LOW)) {
Vypni_Kotol(); ///////////////////////////////////////////////////
}

if (Tepl_Kotol_T > MaxTeplKotol) {
Vypni_Kotol();
}

if (Tepl_Dymovod_T > 120) {
Vypni_Kotol();
}
}

void Uvitanie(){
lcd.setCursor(0,0);
lcd.print("Kotol Plyn");
lcd.setCursor(0, 1);
lcd.print("............. ");
delay(1000);
lcd.clear();
}///////////////////////////////////////////////////////////

void Display(){
lcd.setCursor(0,0);
lcd.print("????");
lcd.setCursor(0, 1);
lcd.print("Dnu.");
lcd.print(Tepl_Dnu_T, 1);
}///////////////////////////////////////////////////////////

void Zapni_Kotol(){
if((digitalRead(tlc_1) == LOW)) {
digitalWrite(Cerpadlo,1);
digitalWrite(Armatura,1);

if((digitalRead(tlc_4) == LOW)) { // ak držím akože neide sonda
digitalWrite(VFzapalovanie,1);

delay(1000);
digitalWrite(VFzapalovanie,0);
delay(500);
}
}
}///////////////////////////////////////////////////////////

void Vypni_Kotol(){
digitalWrite(Armatura,0);
delay(1000);
digitalWrite(Cerpadlo,0);
}///////////////////////////////////////////////////////////
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Obrázok užívateľa
Príspevky: 300
Registrovaný: Pon 19. Nov 2012 12:01:08
Bydlisko: HC/BA

Re: Plynový kotol – Millis | | Delay

Poslaťod tomXX » Uto 27. Okt 2015 9:33:36

Ja mám podobné plány keď mi zomrie doska v elektrokotli, ale to je relatívne bezpečnejšie ako plynový. Má to aj podozrivo funkčnú ekvitermiku, to by som určite použil tiež. Ale je pravda, že pri takýchto projektoch si treba dať poriadny pozor, lebo to nie je nejaké blikanie LEDkou... Držím palce.
blog.sitepoint.sk - zaujímavé riešenia okolo Arduina

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Plynový kotol – Millis | | Delay

Poslaťod budvar10 » Str 28. Okt 2015 9:51:43

Ja som nemal konkrétne na mysli TimerOne (neviem či to je niečo podobné) ale 'time' pre posix čas v sekundách ako na normálnych OS, aby si vedel koľko je hodín, delay v sekundách alebo minútach atď. Ten môže byť odvodený od millis.
Inak niečo podobné už staviam aj ja, asi rok :roll:, mám tam aj takú jednoduchú ekvitermiku. Čo ti môžem poradiť je to, aby si svojim zariadením nevyradil normálnu činnosť kotla, t.j. aby všetky bezpečnostné prvky a aj normálna funkcionalita ostali naďalej funkčné a keď dôjde k akejkoľvek poruche tvojho zariadenia, aby všetko fungovalo tak akoby tam žiadne nebolo. Treba to len šikovne obísť.

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Plynový kotol – Millis | | Delay

Poslaťod kosice4 » Str 28. Okt 2015 10:55:11

@ tomXX dík :)
@ budvar10 ja plánujem úplne vyhodiť z kotla riadiacu jednotku a nahradiť ju arduinom.
Ktoré bezpečnostné prvky pôvodné z kotla máš konkrétne na mysli ?
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Plynový kotol – Millis | | Delay

Poslaťod budvar10 » Str 28. Okt 2015 11:03:21

Určite tam by mala byť ochrana proti prehriatiu, automatické uzatvorenie plynového ventilu pri poruche, výpadku napájania...
O akom kotle sa konkrétne bavíme?

Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Re: Plynový kotol – Millis | | Delay

Poslaťod kosice4 » Str 28. Okt 2015 11:24:09

Ďakujem, plánujem arduino dať do Junkers Euroline - Novostar ZW 23-1 AE.
Plynová armatúra Honeywell VK4105G.
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Obrázok užívateľa
Príspevky: 133
Registrovaný: Štv 06. Nov 2014 12:06:09

Re: Plynový kotol – Millis | | Delay

Poslaťod budvar10 » Str 28. Okt 2015 13:43:33

Zožeň si v prvom rade schému a poriadne naštuduj ako by sa dalo premostiť spínanie kotla. Určite však riadiacu jednotku nevyhadzuj, s tým nie sú žarty. Ten kotol má asi obyčajné mechanické spínanie, to by mohlo ísť.
Regulátor sa nastaví na min., t.j. nikdy nezopne, pokiaľ reguláciu bude zabezpečovať Arduino.

Späť na Projekty vo fáze vývoja