Przejdź do głównej zawartości

Sterownik pieca C.O.

 
Kolega modernizując u siebie w mieszkaniu system ogrzewania poprosił mnie o wykonanie jakiegoś sterownika do pieca C.O. wraz ze sterowaniem dmuchawy. Tak powstał niewielki regulator, który miał mieć na celu prostotę i czytelność.

Elementy użyte do budowy sterownika to:
  • LCD 2x16 HD44780
  • ATMEGA8 - zastosowany procesor
  • DS18B20 - czujnik mierzący temperaturę na piecu
  • przekaźnik na 5V

Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu.

Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą.

Po wejściu w menu możemy dodatkowo zmienić:
  • temperaturę wyłączenia dmuchawy. Jeżeli piec jest zimny i włączymy opcję rozpalania to po osiągnięciu już stosunkowo niewielkiej temperatury dmuchawa zostanie wyłączona
  • histerezę pracy regulatora
  • maksymalne czasy pracy pompy i dmuchawy

Wszystko zostało zamknięte w obudowie natynkowej, a sterownik umieszczony obok pieca w pomieszczeniu gospodarczym.

Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania.
Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty.

Tutaj jest pokazany schemat i wzór płytki:

Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt.

Najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza.
uint8_t BigDigitDefChar[][8] = {
                {15,7,32,32,32,32,3,7},
                {32,32,32,32,32,32,7,15},
                {28,30,30,30,30,30,30,28},
                {7,15,15,15,15,15,15,7},
                {31,31,32,32,32,32,32,32},
                {32,32,32,32,32,32,31,31},
                {31,31,32,32,32,32,31,31},
                {30,28,32,32,32,32,24,28}
};

for(uint8_t i=0;i<8;i++) lcd_defchar(i,BigDigitDefChar[i]);

Następnie tworzymy tablicę która poskleja nam te segmenty w cyfry.
char* BigDigit[][2]={
                {"\x83\x84\x82","\x83\x85\x82"},        //0
                {"  \x82","  \x82"},                    //1
                {"\x80\x86\x82","\x83\x85\x85"},        //2
                {"\x80\x86\x82","\x81\x85\x82"},        //3
                {"\x83\x85\x82","  \x82"},              //4
                {"\x83\x86\x87","\x81\x85\x82"},        //5
                {"\x83\x86\x87","\x83\x85\x82"},        //6
                {"\x83\x84\x82","  \x82"},              //7
                {"\x83\x86\x82","\x83\x85\x82"},        //8
                {"\x83\x86\x82","\x81\x85\x82"}         //9
 
};

Teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tę funkcję tak aby przekazać do niej pozycję kursora.
void lcd_big_int(int val)
{
        uint8_t pp,x,y;
 
        char bufor[17];
        char *wsk=itoa(val, bufor, 10);  //zamieniamy całą liczbę na pojedyncze znaki ACSII np. 1234 -> '1','2','3','4'
 
        register uint8_t znak;
        while ( (znak=*(wsk++)) )    //pętla jest powtarzana po wszystkich indeksach tablicy bufor, aż napotka '\0'
        {
                pp = check_BF() & 0b01111111;  //odczytujemy aktualną pozycję kursora - busy flag wyświetlacza
 
                y = pp & 0xF0;    //wyodrębniamy nr wiersza
                x = pp & 0x0F;    //wyodrębniamy pozycję x
 
                znak -= 0x30;    //zamieniamy kod ascii na rzeczywistą wartość dziesiętną np '7' -> 7; będzie to nasz indeks do tablicy
                lcd_str(BigDigit[znak][0]);     //ładujemy na wyświetlacz górną część cyfry
                lcd_write_cmd( (0x80 + y + 0x40 + x) );   //wracamy kursorem na domyślną pozycję x, ale o jeden wiersz niżej
               
                lcd_str(BigDigit[znak][1]);   //ładujemy na wyświetlacz dolną część cyfry
                lcd_write_cmd( (0x80 + y + x + 0x03) );  //ustawiamy kursor zaraz za cyfrą w wierszu domyślnym, czyli takim w którym wywołano funkcję
        }
}

uint8_t check_BF(void)
{
        CLR_RS;
        return _lcd_read_byte();
}

Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.

Komentarze

Popularne posty z tego bloga

Smart Domofon

W tym artykule chciałem pokazać możliwość przerobienia zwykłego i praktycznie dowolnego domofonu na "smart" . Nie ma znaczenia jaki producent oraz czy jest on cyfrowy czy może analogowy. Odpowiednie przerobienie to kwestia analizy płytki PCB posiadanej słuchawki. Jedne słuchawki są bardzo wygodne do przeróbek, a niektóre wymagają więcej pracy.

Tablica Manipulacyjna

W przeróżnych pudełkach zawsze walają się u mnie jakieś przełączniki, pokrętła i innego rodzaju elementy. Córka (3 lata) od zawsze lubiła pstrykać wszelkimi guzikami. Wychodząc z mieszkania to ona zawsze przywołuje windę i wybiera piętro.

Kontroler czujników obecności - EspHome

Prezentowany moduł powstał z potrzeby obsługi wszystkich przewodowych czujników ruchu oraz czujników otwarcia. Sterownik jest zbudowany w oparciu o ESP32 LoLin. Dodatkowo obsługuje on domofon oraz dzwonek do drzwi. Całość jest oprogramowans z wykorzystaniem EspHome z pełną integracją z Home Assistant.