- wskazywanie aktualnego czasu w formacie 24-godzinnym,
- możliwość odmierzania czasu w dół, od zadanej wartości do zera (tryb timera),
- możliwość załączenia alarmu dźwiękowo-wizualnego o zadanej porze (tryb budzika),
- możliwość wyświetlenia aktualnej temperatury (tryb termometru),
- pięciostopniowa regulacja jasności wyświetlaczy LED,
- pomiar temperatury w zakresie -55…+125ºC,
- cyfrowy, niewymagający kalibracji czujnik temperatury,
- nastawy przechowywane w nieulotnej pamięci EEPROM,
- czytelne cyfry o wysokości 20,56 mm,
- bateryjne podtrzymywanie odliczania czasu,
- zasilanie napięciem stałym 9…15 V,
- pobór prądu do 150 mA.
Każdy, kto oglądał hollywoodzkie filmy wie, jak (zdaniem filmowców) powinna wyglądać bomba zegarowa. Duże, czerwone wyświetlacze siedmiosegmentowe LED, mnóstwo przewodów wokół płytki zawierającej masę komponentów elektronicznych i całość przyczepiona paskami taśmy klejącej do lasek dynamitu. Również czerwonego. Jeszcze groźniej taki sprzęt wygląda, jeżeli zawiera nieopisane złącza i przyciski.
Dla tych, którzy chcieliby mieć w swoim otoczeniu tak wyglądający sprzęt, ale nie pałają żądzą unicestwienia ludzkości, prezentuję taki oto gadżet. Wygląda jak bomba, odmierza jak bomba, ale to praktyczny zegar z budzikiem, timerem i termometrem w jednym! Na płytce są wprawdzie wycięcia, które umożliwiają zamocowanie jej do imitacji lasek dynamitu lub innego ładunku wybuchowego, ale równie dobrze można ją osadzić w zupełnie innej obudowie, wyglądającej zupełnie niewinnie.
Dla kogo jest ten układ? Chociażby dla miłośników klimatów gamingowych, którzy lubią dekoracje rodem ze swoich ulubionych strzelanek. Albo fani książek w klimacie postapokaliptycznym.
Może też stanowić uzupełnienie rozgrywki ASG lub paintballowej jako „bomba”, którą trzeba „rozbroić” przed upływem zadanego czasu (w trybie timera). Będzie też stanowić oryginalny podarunek od początkującego adepta elektroniki, który mógłby ją samodzielnie złożyć. Pomysłów jest naprawdę wiele!
Budowa układu
Schemat ideowy omawianego układu znajduje się na rysunku 1. Głównym podzespołem zawiadującym pracą urządzenia jest mikrokontroler typu ATmega8A-PU z 8-bitowym rdzeniem AVR, taktowanym sygnałem o częstotliwości około 8 MHz, dla którego wzorcem jest wbudowany generator RC. Rdzeń mikrokontrolera nie realizuje zadań krytycznych czasowo, więc taki wzorzec jest dla niego wystarczający. Z kolei do odmierzania czasu służy licznik taktowany sygnałem o znacznie wyższej stabilności, pochodzącym z rezonatora kwarcowego Q1, przez co układ może odmierzać czas z dużą dokładnością – co przecież jest głównym zadaniem tego urządzenia.
Sześć wyświetlaczy siedmiosegmentowych LED jest sterowanych multipleksowo. Poszczególne segmenty każdej cyfry załącza rejestr przesuwny typu 74HC595, zaś kolejne cyfry są zasilane przez klucze tranzystorowe T1…T6. Wejście OE (Output Enable) zostało podciągnięte do wysokiego stanu logicznego przy użyciu rezystora R1, przez co tuż po włączeniu zasilania nie jest zauważalne nieestetyczne mignięcie cyfr – ich katody są wówczas po prostu odłączone.
Użyte w projekcie wyświetlacze typu LED-AD8021BMR-B nie mają dwukropków, te zrealizowano więc za pomocą dodatkowych diod LED4…LED7. Prąd każdej z nich jest ustalony przez indywidualny rezystor w taki sposób, by ich jasność była zbliżona do jasności segmentów wyświetlaczy. Tranzystor T7 załącza wszystkie te diody (dwa dwukropki) jednocześnie, zaś dzięki tranzystorowi T8 realizowane jest ich ściemnianie. Wejście OE układu 74HC595 (nóżka 13) w stanie niskim aktywuje wszystkie wyjścia jednocześnie, toteż tranzystor PNP zachowa się w taki sam sposób: obniżenie potencjału jego bazy spowoduje załączenie diod. Sterowanie przez mikrokontroler przebiegiem PWM daje ładnie wyglądający efekt zredukowania jasności. Kondensator C1 przyspiesza przełączanie T8.
Na płytce znajduje się również sygnalizator dźwiękowy SG1. Swoim piszczeniem oznajmia pobudkę lub zakończenie odliczania czasu przez timer. Aby jego załączanie nie powodowało poboru prądu o relatywnie wysokim natężeniu z wyjścia mikrokontrolera, użyto prostego klucza opartego na tranzystorze T9. Rozłączenie zacisków zworki JP1 umożliwi wyłączenie dźwięków bez ingerencji w pozostałe funkcjonalności układu.
Cyfrowy czujnik temperatury typu DS18B20 należy podłączyć do zacisków złącza J2. Napięcie zasilające ten czujnik jest filtrowane przez prosty filtr RC składający się z rezystora R24 i kondensatorów C9 oraz C10, co poprawia stabilność pracy czujnika. Dla ochrony wejścia mikrokontrolera przez uszkodzeniem, do którego mogłyby doprowadzić indukujące się w przewodzie zakłócenia, zostały dodane diody ograniczające napięcie do zakresu –0,7…+5,7 V. Rezystor R23 ogranicza prąd tych diod. Z kolei rezystor R26 ogranicza prąd diod zabezpieczających wbudowanych w mikrokontroler, gdyż ich napięcie przewodzenia jest nieco niższe niż użytych w układzie 1N4148. Rezystor R25 jest wymagany do prawidłowego działania magistrali komunikującej się z czujnikiem. Jednocześnie wartości R23 i R26 zostały tak dobrane, że wprowadzane przez nie spadki napięcia (i spowodowane tym przesunięcie się poziomów napięcia logicznej wartości „0” i „1”) oraz opóźnienia w przełączaniu nie mają negatywnego wpływu na działanie układu.
Do obsługi urządzenia przewidziano sześć przycisków monostabilnych S1…S6. Pierwszy z nich może być zdublowany, ponieważ to przycisk wyłączający alarm zarówno budzika, jak i timera – da się go wyprowadzić w inne miejsce. Wystarczy podłączyć drugi przycisk monostabilny do zacisków złącza J3. Rezystor R27 podciąga wejście mikrokontrolera do wysokiego stanu logicznego w stanie spoczynku (rozwarcia styków). Z kolei rolą R28 jest ograniczenie prądu płynącego przez wbudowane w mikrokontroler diody zabezpieczające, gdyby w przewodach łączących przycisk z płytką zaindukowało się jakieś napięcie. Tutaj wystarczy uproszczone zabezpieczenie w postaci pojedynczego rezystora, ponieważ czas przełączania nie ma tu żadnego znaczenia, w przeciwieństwie do magistrali 1-Wire, z użyciem której komunikuje się czujnik DS18B20.
Pozostałe przyciski monostabilne mają własne rezystory podciągające, wbudowane w drabinkę RN1 lub zewnętrzne, jak w przypadku S5 i S6. Wyprowadzenia mikrokontrolera, które w czasie pracy nadzorują stan styków przycisków S2…S4, mogą również służyć do jego zaprogramowania za pośrednictwem złącza J1.
Ostatnim blokiem na schemacie jest zasilacz. Napięcie stałe, przewidziane do zasilania układu, można podłączyć do złącza J4 lub J5. Dioda D3 odcina zasilanie w przypadku pomylenia polaryzacji owego napięcia. Stabilizator liniowy typu 7805 dostarcza napięcia 5,3 V dla układów cyfrowych. Moc strat na nim jest na tyle niska, że nie ma potrzeby stosowania przetwornicy impulsowej – jego metalowa wkładka wraz z niewielkim radiatorem wystarczą do odprowadzania ciepła z jego struktury. Podniesienie napięcia o 0,3 V względem wartości nominalnej jest zrealizowane poprzez włączenie diody D4 w linię GND stabilizatora, co powoduje podniesienie potencjału widzianej przez niego masy układu. Rezystor R33 polaryzuje tę diodę prądem o natężeniu kilku miliamperów, aby spadek napięcia na niej nie był zbyt niski.
Po co w ogóle takie zabiegi? Za stabilizatorem US3 znajduje się diodowy selektor napięć. W warunkach normalnej pracy cały układ jest zasilany poprzez diodę D5, na której występuje spadek napięcia około 0,3 V. Podłączając do jej anody potencjał +5,3 V ze stabilizatora, na katodzie uzyskamy niemal równe 5 V. Ewentualna różnica rzędu kilkudziesięciu miliwoltów, wynikająca z niejednakowych napięć przewodzenia diod D4 i D5, nie ma tutaj znaczenia. Przy okazji napięcie odkładające się na rezystorze R32 zostanie przez mikrokontroler zinterpretowane jako wysoki stan logiczny, ponieważ układ może być zasilany napięciem 9 V lub wyższym – po podzieleniu przez dzielnik R31+R32 da to potencjał 4,5 V lub wyższy, który zostanie ograniczony przez diodę zabezpieczającą wejście mikrokontrolera.
W momencie zaniku zasilania sieciowego dioda D5 ulega zatkaniu, zaś otwiera się D6, do której może być podłączony komplet trzech baterii AA lub AAA o sumarycznym napięciu 4,5 V. Na mikrokontroler trafia wówczas napięcie o wartości około 4,2 V, co jest całkowicie wystarczające do podtrzymania jego pracy. Dzielnik rezystorowy R31+R32 nie jest wtedy zasilany, co mikrokontroler interpretuje jako niski stan logiczny, więc wyłącza wyświetlacze i blokuje pozostałe funkcjonalności. Sam rdzeń nie jest usypiany, ponieważ przyjęto założenie, że przerwy w dostawie zasilania nie będą bardzo długie – rzędu kilku godzin – więc energooszczędność nie jest tutaj priorytetem. Czas przełączenia między źródłami zasilającymi jest na tyle krótki (proces ten realizują wyłącznie diody Schottky’ego), że zawarte na płytce kondensatory odsprzęgające o zróżnicowanej pojemności w zupełni wystarczą do podtrzymania ciągłości zasilania mikrokontrolera.
Montaż i uruchomienie
Układ został zmontowany na dwustronnej płytce drukowanej o wymiarach 160 mm × 100 mm. Jej wzór ścieżek oraz schemat montażowy pokazuje rysunek 2. Montaż proponuję rozpocząć od elementów o najmniejszej wysokości obudowy, czyli rezystorów i diod, które znajdują się na spodniej (Bottom) stronie płytki. Pozostałe elementy, które są umieszczone na tej samej stronie laminatu, można montować według wysokości ich obudowy. Pod układy scalone US1 i US2 proponuję zastosować podstawki, aby ułatwić ich wymianę w razie uszkodzenia. Stabilizator US3 powinien zostać przykręcony do odpowiedniego radiatora, gdyż moc strat w nim może sięgać 1,5 W.
Po wlutowaniu tych elementów, skontrolowaniu poprawności montażu i starannym przycięciu wystających końcówek należy wlutować podzespoły na wierzchniej stronie płytki (Top). Są to: wyświetlacze, diody LED, przyciski i sygnalizator dźwiękowy. Część pól lutowniczych, które zostały już obsadzone elementami, zostanie przykryta przez wyświetlacze, stąd konieczność zachowania takiej kolejności montażu. W przeciwnym razie byłoby to zadanie znacznie utrudnione. Zmontowany układ od strony wierzchniej widać na fotografii tytułowej, z kolei tę samą płytkę od strony spodniej można zobaczyć na fotografii 1.
Na etapie uruchamiania konieczne jest zaprogramowanie pamięci Flash mikrokontrolera dostarczonym wsadem oraz zmiana ustawień fusebitów. Oto ich nowe wartości:
Low Fuse = 0xA4
High Fuse = 0xD9
Szczegóły są widoczne na rysunku 3, który zawiera widok okna konfiguracji tychże bitów w programie BitBurner. W ten sposób zostanie uruchomiony wbudowany generator RC o częstotliwości oscylacji około 8 MHz oraz Brown-Out Detector, który wprowadzi mikrokontroler w stan zerowania, jeżeli jego napięcie zasilające spadnie poniżej 2,7 V. To znacznie zmniejsza ryzyko zawieszenia się mikrokontrolera podczas uruchamiania.
Poprawnie zaprogramowany układ jest gotowy do działania po podłączeniu zasilania do zacisków złącza J4 lub J5. Powinno to być napięcie stałe, dobrze filtrowane, najlepiej stabilizowane.
Może pochodzić na przykład z zasilacza wtyczkowego z typowym wtykiem DC 2,1/5,5. Jego wartość powinna wynosić nie mniej niż 9 V (z uwagi na dropout stabilizatora) oraz nie więcej niż 15 V (z powodu wydzielanego w tymże stabilizatorze ciepła). Pobór prądu z tego źródła nie przekracza 150 mA i jest zależny od jasności wyświetlaczy – maksymalnie ściemniony układ pobiera tylko około 20 mA. Podtrzymanie odliczania po zaniku zasilania jest możliwe po podłączeniu źródła napięcia 4,5 V do zacisków złącza J6. Może to być zestaw trzech baterii AA lub AAA w niewielkim koszyku. Pobór prądu z nich w czasie normalnej pracy jest równy zero, z kolei podczas podtrzymywania wynosi około 6,5 mA. Nawet tanie baterie AAA pozwolą na kilka dni pracy układu w tym stanie. Jeżeli zależy nam na pomiarze temperatury przez układ, do złącza J2 należy podłączyć cyfrowy czujnik typu DS18B20. Może to być gotowy moduł z hermetycznie zaizolowanym czujnikiem i przewodem w podwójnej izolacji.
Rysunek 4 zawiera szczegółowe informacje dotyczące rozmieszczenia otworów montażowych na powierzchni płytki. Wśród nich jest sześć otworów okrągłych o średnicy 3,2 mm, które znajdują się w rogach płytki oraz na środkach jej dłuższych krawędzi. Poza tym na PCB zostały umieszczone cztery podłużne otwory z zaokrąglonymi rogami, które można wykorzystać do przyczepienia płytki parcianymi lub skórzanymi pasami do imitacji ładunku wybuchowego. Nic też nie stoi na przeszkodzie, by skorzystać z nich jako klasycznych otworów montażowych pod śruby M4.
Na rysunku 5 znajduje się rozmieszczenie sześciu przycisków monostabilnych i sygnalizatora akustycznego. Z kolei rysunek 6 zawiera położenie wyświetlaczy LED oraz diod elektroluminescencyjnych, które pełnią funkcję dwukropków. Dzięki tym rysunkom można precyzyjnie wyciąć otwory pod poszczególne elementy oraz ulokować półprzezroczysty filtr dla podzespołów optoelektronicznych na przedniej ściance obudowy.
Eksploatacja
Po włączeniu zasilania układ pokaże na matrycach aktualny czas w formacie hh:mm:ss – fotografia 2. Dwukropki będą stale świeciły. Jeżeli nie było bateryjnego podtrzymania zasilania, odliczanie rozpocznie się od wartości 00:00:00. Zegar zacznie odliczać sekunda po sekundzie. W tym stanie można wykonać kilka czynności.
Najważniejszą funkcją w tym czasie jest możliwość ustawienia aktualnego czasu. To zadanie jest możliwe, kiedy przez cały czas trzyma się przycisk S4 (CLOCK) oraz jeden z przycisków S2 (HOUR) lub S3 (MIN), które inkrementują, odpowiednio, liczbę godzin lub minut. Przy każdej inkrementacji zerowany jest sekundnik. Zarówno godziny, jak i minuty są przewijane „w kółko” niezależnie od siebie, czyli przeskoczenie liczby minut z wartości 59 na 00 nie powoduje zmiany liczby godzin. Po zwolnieniu przycisku S4 (CLOCK) układ wraca do normalnej pracy. Takie proste zabezpieczenie chroni przed przypadkową zmianą czasu.
Jeżeli zostanie wciśnięty przycisk S2 (HOUR) lub S3 (MIN), na wyświetlaczach od razu pokaże się aktualna temperatura zmierzona czujnikiem – fotografia 3. Dwukropki gasną. Rozdzielczość pomiaru wynosi 0,1ºC w przedziale –55…+99,9ºC oraz 1ºC dla temperatury 100ºC lub wyższej. Wynik pomiaru zawsze jest prezentowany w stopniach Celsjusza. Odświeżanie tej wartości następuje co 1 s. W przypadku błędnego podłączenia czujnika bądź jego uszkodzenia zamiast cyfr pokażą się poziome kreski. Taka sama sytuacja wystąpi przez kilka sekund po włączeniu zasilania, kiedy układ testuje komunikację z czujnikiem. Po zwolnieniu trzymanego przycisku układ wraca do wyświetlania czasu.
W tym stanie możliwe jest wykonanie prostej, acz przydatnej regulacji. Wystarczy wcisnąć i przez chwilę (ok. 150 ms) przytrzymać przycisk S1 (ON/OFF). Zarówno wyświetlacze, jak i dwukropki ulegną ściemnieniu. Po zwolnieniu tego przycisku można wcisnąć go ponownie, by jeszcze bardziej zredukować jasność. Kroków regulacji jest pięć – po ostatnim, najciemniejszym wyświetlacze przejdą do pełnej jasności i cykl ten będzie można zacząć od nowa. W ten sposób można zarówno zredukować pobór mocy przez układ, jak i zmniejszyć naświetlenie pomieszczenia, w którym się owa „bomba” znajduje.
Po wciśnięciu i przytrzymaniu przycisku S6 (ALARM) układ przechodzi do regulacji pory załączenia budzika. Dwukropki gasną, a na wyświetlaczach pokazywana jest godzina oraz minuta załączenia się budzika. Podobnie jak w przypadku aktualnego czasu, tak i tutaj jeden z przycisków S2 (HOUR) lub S3 (MIN) inkrementuje, odpowiednio, liczbę godzin lub minut. Ale samo ustawienie pory budzenia to nie wszystko, gdyż trzeba taki budzik włączyć. Odbywa się to poprzez wciśnięcie w tym stanie przycisku S1 (ON/OFF), cały czas trzymając S6 – układ uruchomi budzenie wtedy, kiedy liczba godzin i minut zrówna się z tymi, które aktualnie odmierza zegar. Po zwolnieniu wszystkich przycisków na wyświetlaczach pokazujących czas pozostanie informacja o czuwającym budziku w postaci załączonej ostatniej kropki – fotografia 4.
Kiedy nadejdzie pora budzenia, układ będzie to sygnalizował przerywanym dźwiękiem oraz migającymi wyświetlaczami i dwukropkami, które osiągną na tę chwilę pełną jasność. Na wyświetlaczach zostanie pokazana pora budzenia, a nie aktualny czas. Żadne inne operacje, jak podgląd temperatury czy ustawianie czasu, nie są w tym stanie możliwe. Urządzenie może pozostawać w tym trybie dowolnie długo, dopóki użytkownik nie wciśnie na chwilę przycisku S1 (ON/OFF). Wtedy budzik wyłączy się, zakończy się również jego czuwanie (kropka z fotografii 4 zgaśnie), zaś sam układ powróci do wyświetlania aktualnego czasu z uprzednio zadaną jasnością wyświetlaczy.
Ostatnia funkcjonalność prezentowanego układu to timer. Ustawia się go poprzez przytrzymanie przycisku S5 (TIMER) oraz wciskanie jednego z przycisków S2 (HOUR) lub S3 (MIN), które inkrementują, jak poprzednio, liczbę godzin lub minut. Na wyświetlaczach będzie ustawiona liczba godzin i minut, a liczba sekund zawsze będzie zerem. Uruchomienie odliczania czasu w dół odbywa się tak samo, jak włączenie budzika, czyli po krótkim wciśnięciu przycisku S1 (ON/OFF) podczas trzymania wciśniętego S5 (TIMER). Czas będzie liczony w dół sekunda po sekundzie, co będą również sygnalizowały migające dwukropki. Kiedy układ dojdzie do stanu 00:00:00, włączy ciągły dźwięk sygnalizatora – można to przyrównać do „wybuchu” bomby. Wcześniejsze anulowanie odliczania też jest możliwe, wystarczy wcisnąć na chwilę S1 (ON/OFF). Podobnie dzieje się z powrotem do normalnej pracy po zakończeniu odliczania.
Możliwa jest taka sytuacja, kiedy podczas ustawionego budzika zostanie włączony timer i skończy on odliczanie tuż przed nadejściem alarmu z budzika lub odwrotnie – włączy się budzik, timer będzie liczył dalej i dotrze do zera. Wówczas dźwięk sygnalizatora będzie nieco inny, ale żaden z tych alarmów nie zostanie pominięty. Wyjście z nich będzie możliwe po dwukrotnym wciśnięciu przycisku S1 (ON/OFF). Układ najpierw wyjdzie z jednego alarmu, potem z drugiego.
Nastawy układu, czyli jasność oraz pora budzenia i czas do odliczenia timerem, są zapamiętywane w nieulotnej pamięci EEPROM. Nawet po całkowitym wyłączeniu zasilania zostaną one przywrócone. Bateryjnie podtrzymywane jest odliczanie bieżącego czasu oraz informacja o aktywacji budzika – gdyby w nocy przez chwilę zabrakło zasilania sieciowego, rano układ wywiąże się z powierzonego mu zadania.
Michał Kurzela, EP
- R1, R27…R32: 10 kΩ
- R2…R9: 330 Ω
- R10…R22, R25, R33: 2,2 kΩ
- R23, R24, R26: 100 Ω
- RN1: 4 × 10 kΩ SIL5
- C1: 1 nF, raster 5 mm, MKT
- C2, C5, C6, C10, C12, C13: 100 nF, raster 5 mm, MKT
- C3, C4, C9: 100 μF 16 V, raster 2,5 mm
- C7, C8: 22 pF, raster 5 mm, monolityczne
- C11, C14: 220 μF 25 V, raster 2,5 mm
- D1, D2: 1N4148
- D3…D6: 1N5819
- LED1…LED3: LED-AD8021BMR-B
- LED4…LED7: czerwona 5 mm, np. LED F5 R
- T1…T6, T8: BC556 TO92
- T7, T9: BC546 TO92
- US1: 74HC595 DIP16
- US2: ATmega8A-PU DIP28
- US3: 7805 TO220
- J1: goldpin 5 pin męski, 2,54 mm, THT
- J2: ARK3/500
- J3, J4, J6: ARK2/500
- J5: gniazdo zasilania THT 2,1 mm, np. GN DC2.1/5.5
- Czujnik DS18B20, np. DS18B20 MOD-1
- JP1: goldpin 2 pin, męski, 2,54 mm THT + zworka
- Q1: rezonator kwarcowy 32,768 kHz, THT
- RAD1: RAD DY-CN 20MM + śruba M3×5 mm
- S1…S6: microswitch 12×12 9 mm np. TS12-130
- SG1: PIEZO GEN 5V
- Jedna podstawka DIP28, wąska
- Jedna podstawka DIP16