- zakres mierzonych temperatur: 10…34°C,
- rozdzielczość pomiaru temperatury: 1°C,
- dokładność pomiaru temperatury: ±0,5°C,
- dwa tryby wyświetlania:
- wyświetlenie linijki LED o płynnie zmieniającym się kolorze w miarę wzrostu temperatury (wyświetlenie paska diod LED podobnego do widma światła widzialnego),
- zapalenie się linijki diod LED w jednym kolorze, którego barwa zależeć będzie od mierzonej temperatury otoczenia,
- napięcie zasilania: 9…12 VDC,
- maksymalny prąd obciążenia: 0,25 A.
Historia powstania tego projektu jest dość interesująca, choć zapewne nie nazbyt oryginalna. Otóż był taki czas, że szukałem jakiegoś ciekawego i zarazem praktycznego gadżetu elektronicznego, który mógłbym zastosować w domowym zaciszu. Dość szybko zdałem sobie sprawę z faktu, iż mimo wielu lat praktyki w projektowaniu systemów mikroprocesorowych w zasadzie nigdy nie wykonałem projektu termometru elektronicznego jako samodzielnego urządzenia. Zwykle była to funkcjonalność zaszyta w jakimś mniej lub bardziej skomplikowanym systemie docelowym. W sumie nie powinno to dziwić, wszak na rynku dostępnych jest mnóstwo urządzeń tego typu, które same w sobie nie są ani nazbyt oryginalne a już na pewno nieszczególnie skomplikowane. Pomyślałem, że nadszedł czas na mój autorski projekt o takiej ograniczonej funkcjonalności, a że lubię robić wszystko po swojemu zdecydowałem, iż zaprojektuję urządzenie inne, niż te dostępne w handlu.
Powiecie, iż nie ma w tym nic nowego, termometry z linijką LED to żadne odkrycie, ja jednak użyję diod LED typu RGB by zmieniającej się temperaturze towarzyszyła płynna zmiana koloru linijki LED i to w dwóch wersjach użytkowych. Pierwszy tryb pozwalał będzie na wyświetlenie linijki LED o płynnie zmieniającym się kolorze w miarę wzrostu temperatury generując wyświetlenie paska diod LED podobnego do widma światła widzialnego (nazwany trybem RGB), zaś drugi tryb pozwalał będzie na zapalenie się linijki diod LED w jednym kolorze, którego barwa zależeć będzie od mierzonej temperatury otoczenia (nazwany trybem COLOR).
Co więcej, projekt płytki drukowanej podporządkuję urządzeniu źródłowemu co oznacza, iż będzie on do złudzenia przypominał tradycyjny termometr pokojowy, przy czym zawężę zakres mierzonych temperatur do przedziału 10…34°C, co odpowiada zwyczajowym temperaturom, jakie notujemy w naszych mieszkaniach. Zawężenie to wynika wyłącznie z konieczności ograniczenia liczby diod LED (do 25 sztuk) tak, by wynikowy termometr nie był zbyt wysoki, gdyż, co już podkreślałem, ma imitować swój analogowy pierwowzór.
W tym miejscu stanąłem przed wyzwaniem wyboru odpowiednich elementów wykonawczych, a więc sterownika diod LED, jak i samych diod. Jak wiemy, aby płynnie sterować kolorem diody LED typu RGB należy zastosować 3 kanałowy sterownik PWM. Wynika z tego, że skoro przewiduję zastosowanie 25 elementów tego typu to liczba niezbędnych kanałów wzrasta nam do 75. Trudno wyobrazić sobie mikrokontroler, który sprostałby tym wymaganiom a jeszcze trudniej wyobrazić sobie projekt płytki drukowanej o niewielkiej wielkości (wszak ma przypominać termometr pokojowy), na której upakowalibyśmy tyle odrębnych ścieżek. Co oczywiste, można byłoby zastosować jakiegoś rodzaju sterowanie matrycowe by ograniczyć liczbę koniecznych połączeń, ale biorąc pod uwagę liczbę wymaganych kanałów PWM i oczekiwaną rozdzielczość takiego sygnału (8-bitów) trudno mi sobie wyobrazić efektywne sterowanie bez użycia dość dużych prądów, by uzyskać wynikową jasność na akceptowalnym poziomie. Zresztą nawet w takim przypadku nie rozwiązujemy problemu ze skomplikowaniem rysunku obwodu drukowanego.
Pat? Otóż nie. Dość szybko zdałem sobie sprawę, iż jedynym sensownym rozwiązaniem tego rodzaju problemu konstrukcyjnego będzie zastosowanie adresowalnych diod LED RGB, których konstrukcja pozwala na uniknięcie wszystkich wspomnianych problemów. Diody takie, oprócz wyprowadzeń zasilających, wyposażone są w jakiś szeregowy interfejs komunikacyjny, przy użyciu którego dokonujemy ustawień koloru jej świecenia. Interfejs, o którym mowa, zaimplementowany jest w taki sposób (zarówno w kwestii sprzętowej, jak i logicznej), że diody takie połączone w łańcuchy mogą być indywidualnie adresowane, a co za tym idzie, każda z nich ma niezależne sterowanie. Sam przebieg PWM niezbędny do regulacji koloru jej świecenia generowany jest sprzętowo dzięki sterownikowi zabudowanemu na pokładzie takiego elementu.
Przejdźmy zatem do konkretów. Pierwszą myślą, jaka przyszła mi w tym czasie do głowy było zastosowanie bardzo popularnych i tanich elementów tego typu pod postacią diod z rodziny WS2811/WS2812 (i podobnych) lecz jednoprzewodowy interfejs komunikacyjny, w jaki je wyposażono wymaga dość sztywnych restrykcji czasowych (timingów) oraz, co wynika poniekąd z pierwszej właściwości, udostępnia dość ograniczone prędkości transmisji. Oczywiście w tak prostym zastosowaniu, jak termometr nie ma to praktycznie żadnego znaczenia, gdyż układ nasz nie robi nic więcej poza pomiarem i wyświetlaniem temperatury, więc można byłoby zastosować najprostszą implementację tego rodzaju medium transmisyjnego bazujące na funkcjach opóźniających (typu _delay_us), czyli blokującą działanie programu głównego na czas transmisji danych, lecz wiecie już, że… lubię zrobić wszystko po swojemu.