- Konstrukcja oparta na mikrokontrolerze ATmega4808
- Pomiar temperatury otoczenia: czujnik DS18B20
- Dokładność pomiaru temperatury: ±0,5°C
- Sterowanie: enkoder obrotowy
- Wyświetlacz: LCD TFT 128×160 px
- Wyjścia przekaźnikowe: 2×DPDT 250 V/8 A
- Wbudowany zegar czasu rzeczywistego (DS3231) z podtrzymaniem (CR2032)
Sterowanie naszym piecem odbywa się na prostej zasadzie włącz/wyłącz. Nie jest to zbyt efektywna metoda sterowania (piec pracuje albo z pełną mocą, albo nie pracuje wcale), lecz do podstawowych zastosowań okazuje się ona w zupełności wystarczająca. Termostat mierzy temperaturę w reprezentatywnym pomieszczeniu i jeżeli ta spadnie poniżej ustawionej wartości, to piec jest włączany. Po osiągnięciu docelowej temperatury piec jest wyłączany. Żeby zapobiec zbyt częstemu uruchamianiu pieca, w procesie sterowania wprowadzono programowaną histerezę. Zastosowanie sterownika mikroprocesorowego pozwoliło na dodanie możliwości programowania czasowego temperatur w trybie dzień/noc.
Założenia projektowe
Pomiar temperatury
Pomiar temperatury otoczenia przez sterownik mikroprocesorowy wydaje się rzeczą banalną. Na rynku jest dostępnych wiele czujników elektronicznych komunikujących się za pomocą magistrali szeregowych SPI czy I²C. Stosowane są też czujniki konwertujące mierzoną temperaturę na napięcie, mierzone następnie przez przetwornik analogowo-cyfrowy mikrokontrolera i przeliczane na wartość temperatury. Ja wybrałem popularny i niezawodny czujnik DS18B20 z magistralą 1-Wire. Czujnik jest wystarczająco dokładny do realizacji pomiaru temperatury w pomieszczeniu (±0,5°C). Magistrala 1-Wire umożliwia umieszczenie czujnika w odległości nawet powyżej 1 metra od sterownika, co jest pożądaną cechą w tym zastosowaniu. Zbyt blisko umieszczony czujnik będzie wskazywał temperaturę zawyżoną przez ciepło wytwarzane przez układy termostatu. Przy odpowiednim oprogramowaniu do jednej magistrali można podłączyć wiele czujników i identyfikować je po numerach seryjnych.
Sterownik mikroprocesorowy
Wybór mikrokontrolera do budowy sterownika został podyktowany głównie zastosowanym interfejsem użytkownika. Ponieważ zdecydowałem się użyć kolorowego, graficznego wyświetlacza LCD, procesor musiał mieć odpowiednie zasoby – przede wszystkim sporą pamięć Flash, by móc pomieścić wzorce wyświetlanych znaków i dość rozbudowane oprogramowanie.
Wybrany wyświetlacz jest sterowany przez magistralę SPI. Płynne wyświetlanie na ekranie zmieniających się danych wymaga pewnej minimalnej szybkości wykonywania operacji. Zdecydowałem się na szybki, 8-bitowy mikrokontroler ATmega4808 produkowany przez firmę Microchip (dawniej Atmel). Spełniał on wszystkie wymagania co do zasobów i szybkości. Poza tym, po przejęciu Atmela przez Microchip, można już pracować nad oprogramowaniem w znanym mi środowisku Microchip MPLAB X IDE, korzystając z bezpłatnej wersji kompilatora języka C (MPLAB XC8) oraz sprzętowego programatora-debuggera MPALB PicKit 4.
Zegar czasu rzeczywistego
Pomiar czasu rzeczywistego jest wykorzystywany do realizacji programu sterowania dzień/noc. Zegar RTC można zrealizować na kilka sposobów, zazwyczaj używając wbudowanego w mikrokontroler modułu RTC lub stosując zewnętrzny układ RTC komunikujący się z mikrokontrolerem przez magistralę I²C lub SPI (tak jest np. w przypadku układu DS1703). W każdej tego typu implementacji musimy zmierzyć się z problemem dokładności taktowania zegara przez układ rezonatora kwarcowego.
To dość trudne zadanie do wykonania w warunkach amatorskich ze względu na trudności z zakupem odpowiedniego rezonatora kwarcowego. Zazwyczaj kupujemy rezonatory o nominalnej częstotliwości, nie wiedząc, jaka jest jego dokładność, dryft temperaturowy czy pojemność. W rezultacie zegar działa, ale jego dokładność jest w praktyce niezbyt dobra i trudno ją poprawić. Żeby uniknąć opisywanych problemów, zastosowałem układ zegara czasu rzeczywistego DS3231 z wbudowanym w strukturę kalibrowanym i kompensowanym termicznie oscylatorem kwarcowym. Bez żadnych zabiegów układ zapewnia dokładność na poziomie ±2ppm w temperaturze od 0°C do 40°C, co daje w teorii błąd ±1 min na rok!