Plynový kotol – Millis | | Delay
Príspevkov: 9
• Stránka 1 z 1
Plynový kotol – Millis | | Delay
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ť
Č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ť

Ďakujem za pomoc posjirka, Diego, Xeram a barado 

Re: Plynový kotol – Millis | | Delay
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š.
Re: Plynový kotol – Millis | | Delay
@ budvar10 určite veľmi dobrý nápad s TimerOne.h
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);
}///////////////////////////////////////////////////////////

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 

Re: Plynový kotol – Millis | | Delay
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
Re: Plynový kotol – Millis | | Delay
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
, 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ť.
Inak niečo podobné už staviam aj ja, asi rok

Re: Plynový kotol – Millis | | Delay
@ 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 ?

@ 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 

Re: Plynový kotol – Millis | | Delay
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?
O akom kotle sa konkrétne bavíme?
Re: Plynový kotol – Millis | | Delay
Ďakujem, plánujem arduino dať do Junkers Euroline - Novostar ZW 23-1 AE.
Plynová armatúra Honeywell VK4105G.
Plynová armatúra Honeywell VK4105G.
Ďakujem za pomoc posjirka, Diego, Xeram a barado 

Re: Plynový kotol – Millis | | Delay
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.
Regulátor sa nastaví na min., t.j. nikdy nezopne, pokiaľ reguláciu bude zabezpečovať Arduino.
Príspevkov: 9
• Stránka 1 z 1