Wielokanałowy termometr

Wielokanałowy termometr
Pobierz PDF Download icon
Wydawałoby się, że nie ma bardziej banalnego projektu niż termometr elektroniczny. Sam kilka zaprojektowałem i wykonałem. Jednak do skonstruowania kolejnego termometru skłoniła mnie potrzeba - potrzebowałem termometru mającego możliwość dołączenia różnej liczby czujników. Dodatkowo była wymagana funkcja termostatu z ustawianą histerezą i progiem zadziałania, elastycznie włączana dla jednego z dostępnych kanałów pomiarowych.

Zgodnie z założeniami, termometr miał być wielokanałowy, więc trzeba było zapewnić możliwość dołączenia kilku czujników do mikrokontrolera. Liczbę używanych czujników można zaprogramować, ale lepiej, gdyby termometr sam potrafił automatycznie wykryć ile kanałów pomiarowych jest aktywnych.

Na rynku jest dostępny olbrzymi wybór elektronicznych czujników temperatury z interfejsami cyfrowymi. Są one łatwe w aplikacji i co ważne - kalibrowane w procesie produkcyjnym. Ponadto, są wyposażone w cyfrowy interfejs przeznaczony do przesyłania zmierzonej temperatury w "gotowej" postaci do mikrokontrolera.

Wiele z dostępnych czujników spełniało założenia projektu, ale jeden z nich dało się zastosować szczególnie łatwo - znany i popularny czujnik DS18B20. Interfejs 1-Wire, w który jest wyposażony ten układ, pozwala na dołączenie wielu czujników do jednej linii portu mikrokontrolera.

Każdy z nich ma unikalny 64-bitowy numer seryjny zapisany w trakcie produkcji. Można napisać procedurę, która w czasie inicjowania systemu automatycznie wykryje i zidentyfikuje wszystkie dołączone czujniki. W trakcie eksploatacji termometru jest możliwe dołączanie i odłączanie czujników. Wystarczy po zmianie ich liczby wyłączyć i włączyć termometr, aby oprogramowanie jest wykryło i aktywowało.

DS18B20 jest umieszczany miedzy innymi w popularnej, "tranzystorowej" obudowie TO-92. Termometr ma tylko 3 wyprowadzenia: masę, plus zasilania i linia DQ - dwukierunkowa magistrala 1-Wire. W wersji uproszonej układ można zasilić z linii DQ - wtedy potrzebne są tylko 2 przewody.

Niestety, układ ma też swoje wady. Uproszczona magistrala wymaga skomplikowanej obsługi z koniecznością precyzyjnego odmierzania czasów rzędu kilku mikrosekund. Zazwyczaj obsługa 1-Wire blokuje mikrokontroler i nie jest możliwe wykonywanie w trakcie odczytywania pomiarów realizowanie innych czynności.

Dla szybkich mikrokontrolerów 16- lub 32-bitowych można napisać program obsługi magistrali będący automatem stanu wykonywanym w obsłudze przerwań, ale jest on bardziej skomplikowany i trudny do uruchomienia. W termometrach wykonujących tylko pomiar temperatury prędkość wykonywanie pomiarów nie jest problemem i można stosować typowe procedury blokujące czas procesora.

Sterownik i wyświetlacz

Rysunek 1. Schemat ideowy termometru

Schemat termometru pokazano na rysunku 1. Po wyborze czujnika temperatury następnym krokiem był wybór mikrokontrolera. Pierwsze próby i wstępne testy oprogramowania wykonałem na płytce Nucleo w środowisku Mbed. Taki zestaw jest rewelacyjny do testów, ale w tym wypadku trudno go użyć w wymaganej aplikacji.

Do budowy prototypu termometru wybrałem 16-bitowy mikrokontroler PIC24FJ64GA002 w obudowie do montażu przewlekanego. 16-bitowa jednostka jest dosyć szybka i ma wystarczającą pamięć programu do realizacji urządzenia.

Wbrew pozorom, jak potem zobaczymy, program sterujący jest dość rozbudowany, a zastosowanie co prawda małego, ale jednak graficznego wyświetlacza z trzema różnymi wielkościami czcionek wymaga sporej pamięci i określonej szybkości działania. Szybkość ta jest niezbędna do płynnego wyświetlania informacji na ekranie.

Rdzeń mikrokontrolera jest taktowany częstotliwością 32 MHz za pomocą wewnętrznego oscylatora RC o częstotliwości 8 MHz powielonej przez 4 w układzie PLL i zasilany napięciem +2,5 V. Aby można było zasilać mikrokontroler napięciem +3,3 V w strukturę układu wbudowano odpowiedni regulator.

Jest on załączany poziomem na wejściu DISVREG. Wyzerowanie wejścia DISVREG powoduje włączenie stabilizatora. Do wyprowadzenia VCAP/VCORE trzeba dołączyć kondensator o pojemności 10 mF i małej rezystancji ESR. Jeżeli wyprowadzenie DSVREG będzie ustawione, to do wejścia VCAP/VCORE trzeba dołączyć źródło napięcia +2,5 V zasilające rdzeń mikrokontrolera. Ja zasiliłem mikrokontroler napięciem +3,3 V i wykorzystałem wbudowany stabilizator.

Pamięć mikrokontrolera można programować w układzie wykorzystując do tego celu złącze ICSP z wyprowadzeniami zgodnymi z programatorem/debugerem PICKit3. Ponieważ mikrokontroler nie ma wbudowanej pamięci nieulotnej przeznaczonej dla użytkownika, to do zapisywania nastaw termometru wykorzystałem pamięć EEPROM typu 24C04 z interfejsem I²C. Komunikację mikrokontrolera pracującego w trybie master z pamięcią zapewnia sprzętowy interfejs I2C2 (linie SCL2 i SDA2). Rezystory R6 i R7 realizują wymagane przez standard I²C podciąganie do plusa zasilania linii danych i zegarowej.

W interfejsie użytkownika przeznaczonym do odczytu temperatury i ustawiania termostatu zastosowałem mały, graficzny wyświetlacz OLED i impulsator ze stykiem zwieranym po wciśnięciu ośki. Wyświetlacz jest zasilany napięciem +3,3V i komunikuje się z mikrokontrolerem za pomocą interfejsu SPI z dodatkową linią C/D.

Impulsator ma typowe 2 styki: "A" (dołączone do port RB15) i "B" (do portu RB14). Linie A i B są podciągane do plusa zasilania za pomocą rezystorów R5 i R8. Styk zwierny impulsatora jest połączony z linią RB13. Jeśli styk nie jest zwarty, to na RB13 jest poziom wysoki wymuszony przez rezystor R9. Po zwarciu styku (wciśnięciu ośki) na RB13 jest wymuszany poziom niski.

Układem wykonawczym termostatu jest przekaźnik typu AZ822 z cewką na napięcie 5 VDC. Po ustawieniu linii RA0 tranzystor Q1 przechodzi w stan przewodzenia powodując zadziałanie przekaźnik R1. AZ822 ma 2 pary styków przełączanych wyprowadzonych na listwę J1. Zależnie od potrzeb można wykorzystać styki zwarte lub rozwarte.

Cały układ jest zasilany ze stabilizatora LM1117-3.3. Na płytce nie przewidziano mostka prostowniczego i kondensatorów filtrujących. Całość powinna być zasilana z zasilacza o napięciu +5 V. Można do tego celu wykorzystać niepotrzebną ładowarkę do telefonu komórkowego.

Starsze ładowarki maja napięcie wyjściowe ok. 7...8 V, nowsze zazwyczaj 5 V. Ja wykorzystałem ładowarkę od starego telefonu Alcatel, w której zamontowałem stabilizator 78L05. Oczywiście, można zasilić płytkę wyższym napięciem, ale wtedy trzeba zmienić przekaźnik R1.

Wykaz elementów

R2...R7 3,3 kV (1206)
C1, C2: 22 pF (0805)
C3...C5: 10 mF/10 V (3216)
C6, C7: 100 nF (1206)
T1: BC237
D1: BAV21
U1: PIC24FJ64GA002-I/SP
U2 LM1117-3.3 (TO-252)
U3: 24C04
Listwa goldpin
R1: przekaźnik A822-5VDC
Impulsator Piher

Wyświetlacz OLED

Fotografia 2. Moduł wyświetlacza

Prezentacja wyników kilku pomiarów temperatury wymaga zastosowania wyświetlacza. Początkowo rozważałem użycie standardowego wyświetlacza alfanumerycznego ze sterownikiem HD44780. Potrzebowałem takiego o rozdzielczości przynajmniej 4×16 linii, jednak był on za duży.

Zastosowałem mały, stosunkowo tani wyświetlacz graficzny o przekątnej 1,3", rozdzielczości 128×64 piksele, wykonany w technologii OLED. Mimo niewielkich rozmiarów okazało się, że matryca OLED zapewnia bardzo dobrą czytelność nawet z większej odległości.

Wyświetlacz składa się z matrycy OLED i sterownika SH1106 umieszczonych na płytce szklanej z wyprowadzeniami elektrycznymi w formie taśmy elastycznej. Całość przymocowano na stałe do płytki drukowanej, na której umieszczono wszystkie niezbędne dodatkowe elementy: pola lutownicze do przylutowania taśmy wyświetlacza, stabilizator LDO napięcia +3,3 V, oraz goldpiny do podłączenia zasilania i sygnałów magistrali SPI przeznaczonej do podłączenia mikrokontrolera - hosta (fotografia 2).

Układ SH1106 jest specjalizowanym sterownikiem matryc OLED/PLED o maksymalnej rozdzielczości 132×64 piksele. Wbudowany driver steruje 132 segmentami i 64 kolumnami matrycy typu Common Cathode. Sterownik ma tryb oszczędzania energii Sleep mode z poborem prądu nieprzekraczającym 5 mA i może pracować w szerokim zakresie temperatury od -40 do +85°C.

Listing 1. Programowa obsługa SPI

Listing 2. Zapis danej do rejestru sterującego

Listing 3. Zapis danej do pamięci obrazu

Do komunikacji z mikrokontrolerem można wybrać równoległą, 8-bitowa magistralę mogącą pracować w trybach przemysłowych zgodnych z Intel8080 lub Motorola 6800, lub dwa interfejsy szeregowe: SPI i I²C. Wyboru aktywnego interfejsu dokonuje się przez wymuszenie poziomów logicznych na wejściach konfiguracyjnych IM0...IM2. W naszym wypadku na stałe wybrano interfejs SPI i nie ma innej możliwości. Magistrala sterująca składa się z linii:

  • Danych wyjściowych MOSI (z punktu widzenia mikrokontrolera).
  • Zegara taktującego transmisją CLK.
  • Wyboru układu na magistrali CS.

Rysunek 3. Przebiegi czasowe na magistrali SPI wyświetlacza.

Dodatkowo, interfejs uzupełniono o linie sterującą C/D. Przebiegi czasowe podczas przesyłania danej 8-bitowej pokazano na rysunku 3. Dane są przesyłane od najstarszego bitu i wpisywane do wyświetlacza narastającym zboczem sygnału zegarowego CLK. Linia !CS musi być wtedy wyzerowana. Stan linii C/D określa czy dane trafią do pamięci obrazu (C/D=1), czy do rejestrów sterujących (C/D=0).

Obsługę magistrali SPI zrealizowano programowo - odpowiednią procedurę pokazano na listingu 1. Dwie kolejne procedury to procedura zapisu danej do pamięci obrazu wyświetlacza OledData (listing 2) i zapisu danej do rejestru sterującego SH1106 OledCmd (listing 3). Sterownik wyświetlacza graficznego wymaga zainicjowania.

Tabela 1. Ważniejsze komendy sterownika SH1106

Konieczność inicjalizacji wynika na przykład z możliwości ustalania współrzędnej początkowej (0,0) zależnie od mocowania mechanicznego panelu, różnych źródeł zasilania driverów matrycy (wewnętrzna przetwornica lub napięcie zewnętrzne), poziomu kontrastu, częstotliwości odświeżania itp. Inicjalizacja polega na wysłaniu szeregu komend ustalających początkowe parametry pracy. W tabeli 1 wymieniono ważniejsze komendy sterownika SH1106.

Dysponując wykazem komend musimy tak zainicjować sterownik, aby pracował poprawnie z panelem wyświetlacza. Ponieważ część komend wymaga dodatkowego argumentu, to wszystkie bajty komend inicjalizacji łącznie z niezbędnymi argumentami umieszczono w buforze Buffer_Init. Zawartość bufora z pierwszym bajtem kontrolnym 0x80 jest wysyłana do sterownika wyświetlacza przez funkcję I2C_Master_BufferWrite. Zawartość bufora została pokazano na listingu 3, a procedurę inicjalizacji na listingu 4.

Inicjalizacje można podzielić na kilka etapów:

  • Wyzerowanie liczników: kolumn, stron pamięci i linii początkowej. Domyślnie, po włączeniu zasilania (POR) te liczniki są wyzerowane.
  • Ustawienie powiązania zawartości pamięci RAM obrazu z pozycją na panelu OLED (orientacja wyświetlania).
  • Ustawienie kontrastu, przetwornicy DC/DC zasilającej drivery i częstotliwości taktowania oraz włączenie wyświetlenia.

Matryca wyświetlacza jest monochromatyczna i jednemu pikselowi odpowiada pojedynczy bit w pamięci obrazu. Pamięć ma wielkość 132×64 bity, ale w rzeczywistości jest zorganizowana bajtowo. Host wysyła kolejne bajty po magistrali SPI pod lokacje określone przez liczniki kolumn i stron.

Jeden bajt w pamięci obrazu odpowiada pionowej linijce o długości 8 pikseli. Najmłodszy bit tego bajta jest pikselem położonym najwyżej w linijce, a bit najstarszy pikselem położonym najniżej. Położenie linijki w poziomie określa licznik kolumn zmieniający się w zakresie 0...131, a położenie w pionie określa licznik stron zmienia się w zakresie 0...7.

Listing 4. Inicjalizacja wyświetlacza

Listing 5 Ustawienie licznika kolumn

Listing 6. Ustawienie licznika stron

Po ustaleniu numeru strony kolejne zapisywane bajty tworzą pasek o szerokości 8 pikseli. Każdy zapis danej powoduje inkrementację licznika kolumn i nowa dana jest zapisywana po kolejna lokację. Kiedy licznik kolumn osiągnie wartość 131, to po następnym zapisie danych jest zerowany.

Przepełnienie licznika kolumn nie powoduje inkrementacji licznika stron i jeżeli ni zmodyfikujemy go wykorzystując do tego celu komendę "ustawienie licznika stron", to kolejne wpisy do pamięci będą nadpisywać dane począwszy od pozycji zerowej (wyzerowanie licznika kolumn). To ważna właściwość, o której trzeba pamiętać. Na listingach 5 i 6 zostały pokazane procedury ustawienia licznika kolumn i licznika stron.

Pamięć EEPROM

Rysunek 4. Zapis danej do pamięci

Pamięć EEPROM typu 24C04 ma wbudowany interfejs I²C. Do komunikacji z pamięcią użyto sprzętowego interfejsu I2C2 wbudowanego w mikrokontroler. Dostęp jest realizowany przez 2 sekwencje - zapisu i odczytu pojedynczej komórki pamięci.

Zapisanie komórki pamięci zaczyna się sekwencją Start. Po niej jest wysyłany adres slave z bitem R/W=0. Kolejne 2 bajty to adres komórki i bajt do zapisania w pamięci. Jako ostatnia jest wysyłana sekwencja Stop. Całość pokazano na rysunku 4. Na listingu 7 pokazano procedurę zapisywania danej do komórki pamięci pod konkretny adres. Dla linii adresowych A0=A1=A2=0 adres slave jest równy 0xA0.

Rysunek 5. Sekwencja odczytania danych z pamięci

Odczytywanie danej z konkretnej lokalizacji rozpoczyna się od wysłania sekwencji Start, adresu slave z bitem RW=0, a po nim bajtu z adresem w pamięci EEPROM. Po tym na magistralę jest ponownie wysyłana sekwencja Start, a po niej adres slave z bitem RW=1 informującym pamięć, że ma odesłać dane. Po wysłaniu tego adresu mikrokontroler wywołuje sekwencję odczytania danej z pamięci i kończy wszystko wysłaniem sekwencji Stop.

Listing 7. Zapis danej do komórki pamięci EEPROM

Listing 8. Sekwencja odczytywania danej z pamięci EEPROM

Czujnik temperatury DS18B20

Czujnik temperatury DS18B20 był wielokrotnie opisywany na łanach Elektroniki Praktycznej. Nie będę tu powielał szeroko dostępnych informacji o wewnętrznej budowie czujnika i interfejsie 1-Wire. W naszym urządzeniu do jednej magistrali 1-Wire dołączamy wiele czujników. Program najpierw musi wykryć ile czujników jest do niej dołączonych oraz odczytać i zapamiętać ich identyfikatory. Potem, na podstawie tablicy identyfikatorów, cyklicznie odczytywać i wyświetlać temperaturę każdego z czujników.

Napisanie procedury identyfikacji nie jest zadaniem łatwym, ale firma Maxim udostępnia notę katalogową numer 162 "Interfacing DS18X20/DS1822 1-wire Temperature Sensor In a Microcontroller Enviroment". Są w niej dokładnie opisane czynności, które należy wykonać żeby identyfikacja została wykonana prawidłowo. Oprócz wyczerpującego opisu zamieszczono też przykładowe fragmenty programów. Procedury obsługi magistrali 1-Wire i wyszukiwania termometrów na magistrali są napisane w oparciu o informacje zawarte w tej nocie.

Listing 9. Procedury zerowania magistrali, oraz zapisu i odczytu bitu z magistrali

Listing 10. Inicjalizacja linii DQ i wyszukiwanie czujników

Listing 11. Wyszukiwanie czujników

Na listingu 9 pokazano procedury: zerowania magistrali DS._reset, zapisania bitu na magistrali write_bit oraz odczytanie bitu red_bit. Opóźnienia czasowe są generowane przez funkcję biblioteczną kompilatora MPLAB XC16.

Do realizacji magistrali 1-Wire wykorzystano właściwości portów mikrokontrolerów PIC. Kierunek przesyłania danych poprzez linię portu jest określony za pomocą ustawienia/wyzerowania odpowiedniego bitu w rejestrze TRISx. Jeżeli na przykład bit TRISB4 dla linii portu RB4 jest wyzerowany, to linia jest wyjściowa, a jeżeli ustawiony to linia jest wejściowa.

Drugi rejestr PORT odpowiada za odczytywanie poziomu na linii wejściowej lub zapisywanie wyjściowej. Załóżmy, że do rejestru PORTB4 linii RB4 zapiszemy zero, a linia będzie podciągnięta do plusa zasilania przez rezystor. Po wpisaniu do TRISB zera linia staje się wyjściową i wystąpi na niej poziom niski. Kiedy do TRISB4 wpiszemy jedynkę, to linia staje się wejściową i rezystor wymusza na niej poziom wysoki. Manipulowanie stanem linii jest realizowane przez zapisywanie rejestru TRISB4. Inicjalizacja portów pokazano na listingu 10.

Listing 12. Wyszukiwanie pierwszego czujnika na magistrali

Listing 13. Wyszukiwanie kolejnych czujników

Listing 14. Odczyt temperatury z rejestrów czujnika

Pokazana na listingu 11 procedura Find devices wyszukuje czujniki dołączone do magistrali 1-Wire i tworzy tablicę FoundROM z odczytanymi numerami seryjnymi DS18B20. Procedury First i Next używane do wyszukiwania zostały pokazane na listingach 12 i 13.

Kiedy czujniki są zidentyfikowane, to trzeba z każdego z nich odczytać temperaturę i przekonwertować ją na wartość w stopniach Celsjusza. Odczytywanie temperatury realizuje funkcja ReadRawTemp pokazana na listingu 14. Jej argumentem jest kolejny numer urządzenia.

Działanie termometru

Zgodnie z założeniami, do magistrali 1-Wire można dołączać kilka czujników. Teoretycznie, ich liczba może być duża, ale ze względu na możliwości wyświetlania na zastosowanym wyświetlaczu nie powinno ich być więcej niż 4. Program dopuszcza zastosowanie maksymalnie 20 czujników.

Po uruchomieniu mikrokontrolera są wykonywane inicjalizacje: wyświetlacza OLED, interfejsu I²C do komunikacji z pamięcią, interfejsu 1-Wire. Następnie jest wykonywana procedura FindDevices wyszukująca czujniki na magistrali i program przechodzi do wyświetlania jednego z trzech ekranów temperatury:

  1. Ekran 1 (fotografia 6), na którym jest wyświetlana liczba wykrytych czujników, kanał pomiarowy, do którego dołączono funkcję termostatu, a w kolejnych wierszach temperatury mierzone przez dołączone czujniki.
  2. Ekran 2 (fotografia 7), który jest przeznaczony do realizowania funkcji termometru domowego wyświetlającego dwie temperatury: wewnętrzna i zewnętrzną. Temperatura wewnętrzna jest odczytywana z pierwszego czujnika na liście, a temperatura zewnętrzna z drugiego czujnika na liście. Żeby "ekran 2" działał poprawnie, jest potrzebne dołączenie przynajmniej dwóch czujników do magistrali.
  3. Ekran 3 (fotografia 8) spełnia funkcję termometru pokojowego z linijką przedstawiająca graficznie tendencje zmian temperatury w pomieszczeniu.

Po włączeniu zasilania z pamięci EEPROM jest odczytywany numer ekranu, który był aktywny przed wyłączeniem i zostaje on przywrócony. Przełączanie pomiędzy ekranami jest wykonywane za pomocą naciskania ośki impulsatora.

Fotografia 6. Ekran 1

Fotografia 7. Ekran 2

Fotografia 8. Ekran3

Do wyświetlania informacji na "ekranie 1" jest wykorzystana najmniejsza czcionka - 8×6 pikseli. Komunikaty nie są przez to dobrze czytelne, ale na ekranie można zmieścić najwięcej informacji. Na listingu 15 pokazano procedurę realizująca funkcje "ekranu 1".

Na początku, z pamięci EEPROM są odtwarzane nastawy termostatu: temperatura progu, histereza i kanał termostatu. Potem jest wyświetlana liczba wykrytych czujników i kanał pomiarowy, do którego jest dołączony termostat. Pomiar temperatury i jej wyświetlanie są realizowane w pętli nieskończonej. Pomiar temperatury jest wykonywany co 2 sekundy. Po każdym z cykli pomiarowych sprawdzany jest warunek zadziałania termostatu.

"Ekran 2" do wyświetlania mierzonych temperatur używa czcionki o średniej wielkości 16×10 pikseli. Widoczność tak wyświetlanych informacji jest zadawalająca nawet z odległości kilku metrów. W założeniu "ekran 2" ma pełnić funkcję domowego tremometru do pomiaru temperatury wewnętrznej i zewnętrznej. Rozdzielczość pomiaru ograniczono do jednego miejsca po przecinku. Procedurę realizującą "ekran 2" zamieszczono na listingu 16.

Listing. 15 Funkcja ekran 1

Listing 16. Funkcja ekran 2

"Ekran 3" używa największej czcionki do wyświetlania temperatury z pierwszego czujnika na liście. Oprócz wartości cyfrowej w dolnej części wyświetlacza jest wyświetlany rodzaj analogowego wskaźnika tendencji zmian temperatury. Po każdym pomiarze odczytana wartość jest reprezentowana przez słupek o szerokości 2 pikseli i wysokości od 1 do 24 pikseli.

Założyłem, że temperatura pokojowa będzie się zmieniała w zakresie od +18...30°C z rozdzielczością 0,5°C. Daje to 12 stopni z rozdzielczością 0,5 stopnia, czyli 24 zmiany co 0,5°C. Przyrost o 0,5 °C powoduje zwiększenie wysokości słupka o 1 piksel. W podobny sposób można dobrać zmianę długości słupków dla innego zakresu temperatury.

Maksymalna wysokość słupków (24 piksele) jest podyktowana rozdzielczością i wielkością matrycy wyświetlacza. Zwiększenie maksymalnej wysokości o kolejne 8 pikseli, a co za tym idzie zwiększenie dokładność wskazań, nie było możliwe do wyświetlenia.

Funkcja termostatu

Rysunek 9. Działanie termostatu

Termometr ma wbudowaną funkcję termostatu z histerezą. Działanie termostatu określają: kanał pomiarowy, dla którego włączono funkcję termostatu, temperatura progowa Tt i wartość histerezy. Jeżeli podczas inicjalizacji temperatura jest niższa od temperatury progowej Tt, to przekaźnik jest załączony.

Załóżmy, że temperatura rośnie i osiąga wartość Tt. Wtedy przekaźnik się wyłącza i jest wyłączony do momentu, kiedy temperatura nie spadnie do wartości Tt-Th (rysunek 9). Wprowadzenie histerezy jest niezbędne, bo w przeciwnym przypadku niewielkie zmiany temperatury w pobliżu Tt powodowałyby nieprzerwane załączanie i wyłączanie przekaźnika.

Fotografia 10. Ekran ustawień termostatu

Fotografia 11. Ekran 1 z sygnalizacja zadziałania termostatu

Termostat jest w pełni programowany. Można ustawić histerezę od 0,1°C do 2,5°C z krokiem co 0,1°C oraz temperaturę progową w całym zakresie pomiarowym. Do programowania jest przeznaczony "ekran 4" - fotografia 10. Można go wywołać z każdego z ekranów pomiaru temperatury przez obrót ośki impulsatora w dowolna stronę.

Listing 17. Testowanie funkcji termostatu

Programowanie termostatu rozpoczynamy od wybrania kanału pomiarowego. Termometr wykrył wcześniej ile czujników jest dołączonych i nie można wybrać kanału wyższego, niż maksymalny numer wykrytego kanału. Wszystkie parametry ustawia się przez obracanie, a zatwierdza przyciśnięciem ośki impulsatora.

Po ustawieniu kanału przechodzimy do ustawiania histerezy, a następnie do ustawiania temperatury progowej. Nastawy są zapisywane do pamięci EEPROM i odtwarzane po włączeniu zasilania. Procedurę sprawdzania termostatu CheckTermostat pokazano na listingu 17. Jest ona wywoływana po każdym cyklu pomiaru temperatury.

Jej argumentem jest wartość temperatury zmierzona w zaprogramowanym kanale pomiarowym. Termostat działa w zaprogramowanym kanale pomiarowym niezależnie od wybranego ekranu wyświetlania temperatury. Jeżeli wybierzemy "ekran 1" ze wszystkimi mierzonymi temperaturami, to po zadziałaniu termostatu (przekaźnik załączony) w wierszu z temperaturą kanału, do którego przypisano funkcje termostatu pojawi się symbol gwiazdki - fotografia 11.

Jeżeli do magistrali 1-Wire mamy dołączone 4 czujniki i termostat jest przypisany do kanału 4, a wyświetlamy pierwsze dwie temperatury "ekranem 2", to termostat będzie działał, ale na ekranie nie będzie żadnej informacji o tym czy przekaźnik zadziałał, czy nie. Jeżeli termostat będzie w kanale 1 lub 2, to symbol gwiazdki pojawi się przy wyświetlanych temperaturach.

Montaż i uruchomienie

Prototyp termometru został zmontowany na kawałku uniwersalnej płytki drukowanej i w takiej postaci jest obecnie eksploatowany. Połączeń do wykonania jest sporo i dlatego zaprojektowałem płytkę drukowaną, której projekt można znaleźć w materiałach dodatkowych dołączonych do artykułu. Jest ona przystosowana do zamontowania w obudowie Z7AP. Montaż nie jest trudny, większość elementów jest przystosowana do montażu przewlekanego.

Mikrokontroler najlepiej zamontować w podstawce. Po zmontowaniu płytki trzeba ją zasilić napięciem stabilizowanym +5 V ze źródła o wydajności min 100 mA i sprawdzić poprawność napięcia +3,3 V. Jeżeli wszystko jest w porządku, to umieszczamy w podstawce zaprogramowany mikrokontroler, dołączamy wyświetlacz i czujniki DS18B20.

Poprawnie zmontowany układ nie wymaga uruchamiania i regulacji. Czujniki temperatury dołączone do magistrali identyfikujemy poprzez ich podgrzewanie i obserwowanie wskazań zmian temperatury na "ekranie 1". Zidentyfikowane czujniki można oznaczyć (na przykład na kablu połączeniowym). Maksymalną długość kabla łączącego czujnik z termometrem trzeba wyznaczyć eksperymentalnie. Trzeba zawsze dążyć do tego, aby kabel łączący czujniki z termometrem był jak najkrótszy.

Tomasz Jabłoński, EP

Artykuł ukazał się w
Kwiecień 2015
DO POBRANIA
Pobierz PDF Download icon
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio październik 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje wrzesień 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich wrzesień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów