Řídící jednotka pro automatický kotel
Napsal: 14 říj 2018, 15:41
				
				Ahoj.
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
			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);}
}