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 domofonu na wersję "smart" . W cyfrowych domofonach z punktu widzenia automatyzacji pewną trudnością jest to, że należy najpierw podnieść słuchawkę, aby móc otworzyć drzwi do klatki wejściowej. Moje pierwsze wersje takich przeróbek oparte były na przekaźnikach, które symulowały podniesienie słuchawki i naciśnięcie przycisku otwarcia rygla drzwi.   Podszedłem do tematu na nowo. Odkurzyłem oscyloskop i wykonałem analizę protokołu komunikacyjnego między kasetą domofonu a unifonem w mieszkaniu. W efekcie zaprojektowałem niewielki układ, który podpinamy kilkoma przewodami do naszej słuchawki. Nie ma już potrzeby stosowania przekaźników w celu symulowania osoby odbierającej.

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.

Sterownik rolet zewnętrznych

Kolejny element domowej automatyki to dziesięciokanałowy sterownik rolet zamknięty w jednej obudowie montowanej na szynę DIN. Użyty kontroler to moduł  ESP-WROOM-32  osadzony na płytce ewaluacyjnej  ESP32-DevKit .