Vzhledem k tomu, že moje současná řídící jednotka dosluhuje, rozhodl jsem se vytvořit jinou pomocí arduina.
Kód který je níže, je funkční a v podstatě by šel už nyní v nouzi použít. Display nepotřebuji, ovládání tlačítky také ne, v podstatě stačí, když bude tupě provádět, co se mu řekne.
Jsem absolutní začátečník, tak prosím neukamenovat
- neumím nastavit hysterezi (tedy nastavímeli teplotu kotle pro sepnutí relé na 60° a hystereze bude 4°, dojde při poklesu teploty pod 60 k cyklům topení do dosažení teploty 64°, mezi teplotami 60-64 se nebude dít nic)
- potřebuji, aby po nastavené době došlo k jednomu cyklu topení v případě, že během nastavené doby kotel netopil (kvůli nebezpeči vyhasnutí)
-potřebuji, aby po nastavené době došlo k odstavení kotle, pokud během této doby nedosáhne požadované teploty (není nezbytné)
Bylo by obtížné posílat výpis ze sériové linky online přes wifi? (při použití desky WemosD1)
Použito UNO a dvojitý relé modul
Uvedený kód je asi hrozný, ale funguje až na výše uvedené.
Děkuji.
Honza
Kód: Vybrat vše
//Řídící jednotka pro automatický kotel
#include <OneWire.h>
#include <DallasTemperature.h>
// nastavení čísla vstupního pinu
const int pinCidlaDS = 4; // vytvoření instance oneWireDS z knihovny OneWire
OneWire oneWireDS(pinCidlaDS); // vytvoření instance senzoryDS z knihovny DallasTemperature
DallasTemperature senzoryDS(&oneWireDS);
int rel1 = 12; //pin rele ventilatoru
int rel2 = 11; //pin rele podavace
int HYS = 4; //hystereze ve °C
int tepVYP = 25; //pozadovana teplota kotle ve °C (pro vypnuti podavace a ventilatoru)
int tepHAV = 28; //havarijni teplota kotle ve °C pro odstaveni zarizeni na 10 dni
int presPAL = 5000; //prestavka v dodavce paliva v ms
int dodPAL = 2000; //doba dodavky paliva v ms
int dobMER = 1000; //perioda mereni teploty natopeneho kotle v ms
int dobPROD = 3600000 //doba prodlevy v ms - po uplynutí této doby se provede 1 cyklus přiložení a profouknutí
//pokud nedošlo za uvedenou dobu k cyklu topení
int dobTOP = 3600000 //doba topení v ms - po uplynutí této doby dojde k odstaveni zarizeni na 10 dni
//protože kotel nebyl schopen dosáhnout za tuto dobu požadovanou teplotu
void setup(void)
{
Serial.begin(9600);
senzoryDS.begin();
pinMode(rel1, OUTPUT);
pinMode(rel2, OUTPUT);
}
void loop(void)
{
// načtení informací ze všech připojených čidel na daném pinu
senzoryDS.requestTemperatures();
// výpis teploty na sériovou linku, při připojení více čidel
// na jeden pin můžeme postupně načíst všechny teploty
// pomocí změny čísla v závorce (0) - pořadí dle unikátní adresy čidel
Serial.print("Teplota kotle je ");
Serial.print(senzoryDS.getTempCByIndex(0));
Serial.println("° Celsia");
Serial.print("Pozadovana teplota je ");
Serial.print(tepVYP);
Serial.print("° Celsia");
Serial.println(" ");
if (senzoryDS.getTempCByIndex(0) >= tepHAV)
{digitalWrite(rel1, HIGH);
digitalWrite(rel2, HIGH);
Serial.println ("!!!!!!!!!!!!Pretopeni kotle!!!!!!!!!!!!!!");
delay (864000000);}
if (senzoryDS.getTempCByIndex(0) == -127.00)
Serial.println ("Chyba čidla");
if ((senzoryDS.getTempCByIndex(0) < tepVYP-HYS) && (senzoryDS.getTempCByIndex(0) != -127.00))
{digitalWrite(rel1, LOW);
digitalWrite(rel2, HIGH);
Serial.println ("Topim - ventilator zapnut");
Serial.println ("Podavac vypnut");
delay(presPAL); //prestavka v dodavce paliva
digitalWrite(rel2, LOW);
Serial.println ("Podavac zapnut");
delay(dodPAL); //bezi dodavka paliva
digitalWrite(rel2, HIGH);}
else {digitalWrite(rel1, HIGH);
digitalWrite(rel2, HIGH);
Serial.println ("Netopim");
delay (dobMER);}
}