piątek, 10 stycznia 2020

Sterownik świateł choinkowych odtwarzający melodie najpopularniejszych polskich kolęd

Opisywany sterownik, bazujący na Arduino Pro Mini, współpracuje z LED-owymi lampkami choinkowymi. Dotyczy to lampek bez własnego kontrolera, które świecą stale po podłączeniu do zasilania sieciowego. Dodatkowo sterownik umożliwia odtwarzanie melodyjek z kolędami przy jednoczesnym sterowaniu oświetleniem. Subiektywnie wybrałem dziesięć najpopularniejszych polskich kolęd.



Składanie i uruchamianie układu wymaga uwagi i ostrożności, ponieważ układ pracuje z napięciem sieciowym 220V. Ostatnio miałem wątpliwą przyjemność poczuć je na własnej skórze wieki temu, bo gdzieś w czasach szkoły średniej. Nadal jednak pamiętam, że to nic przyjemnego ;)


Funkcjonalność

Sterownik może pracować w jednym z dwóch trybów:
  • okresowe włączanie wg. jednego z ustalonych z góry schematów (rysunek poniżej). Dodatkowo możliwa jest regulacja czasu migania. Na schematach: 1 i 2, litera f  oznacza błysk o czasie trwania 100ms. Tyle samo wynosi czas wyłączenia. W przypadku schematu 2-go i kolejnych schematów - n oznacza regulowany czas trwania błysku od 0,5 do 3s z krokiem 0,5s. Domyślnie czas n wynosi 0,5s, natomiast czas błysku f jest z góry ustalony w kodzie i nie daje się regulować z poziomu klawiatury. Przełączanie się między poniższymi schematami migania umożliwia przycisk żółty, a regulację czasu n - przycisk czerwony.
Schematy migania w trybie bez melodyjek
  • włączanie oświetlenia w takt melodyjek. W tym trybie przycisk żółty umożliwia wyciszenie melodyjek -  samo miganie pozostaje. Z kolei przycisk czerwony daje możliwość regulacji czasu trwania błysków w ten sposób, że zmienia czas trwania błysku w stosunku do czasu odtwarzania pojedynczej nuty. Można odjąć czas od 50ms (domyślnie) do 300ms z krokiem 50ms. Obrazowo mówiąc, wzrasta wówczas dynamika migania świateł. 

Elementy

Wybór padł na Pro Mini bo jest mały i generalnie wyzbywam się układów bez złącza USB. Programowanie z użyciem konwertera USB-UART już mnie trochę męczy;)


Schemat

Punkty przedstawione na schemacie jako: x2, x3 oznaczają liczbę wtyków w szybkozłączce. Użyty buzzer jest pasywny.
Schemat blokowy kontrolera

Opis

Do "składania" sterownika podszedłem minimalistycznie, ograniczając liczbę kabli do dwóch. Jeden z nich odpowiada za zasilanie sieciowe, a drugi zakończony jest gniazdem sieciowym do podłączenia lampek. Mając "pod ręką" napięcie sieciowe, użyłem modułu zasilacza AC/DC 5V na rzecz zewnętrznego zasilacza, aby ograniczyć do niezbędnego minimum kable wychodzące z urządzenia.

Do kontrolowania sterownika posłużyła mi klawiatura membranowa z trzema przyciskami.0 Przycisk zielony zmienia tryb pracy urządzania, natomiast żółty i czerwony wpływają na pewne parametry wybranego trybu pracy. To tyle, jeśli chodzi o interfejs użytkownika. Skromnie i prosto. Po montażu taśmą klejącą dwustronną, przyciski wymagają dość dużego nacisku.

Co do kolęd, niestety nie mam dobrego słuchu i słychać pewne mankamenty. W kodzie można zwiększać indywidualnie dla każdej melodii jej tempo. Poza tym, ewentualnie, modyfikować definicje poszczególnych nut.

Przy uruchamianiu, podłączenie przekaźnika i modułu zasilacza sieciowego, można zostawić na sam koniec, ograniczając w ten sposób ekspozycję na niebezpieczne napięcie sieciowe ;) Sam przekaźnik jest sterowany pinem 13-tym do którego fabrycznie jest wpięta dioda LED na płytce Arduino (na Uno jak i Pro Mini). Tak więc bez wpinania przekaźnika, widać jak LED miga przy zmianie ustawień poprzez klawiaturę bądź przy modyfikacjach kodu.


Kod

Kod zamieszczam w repie ChristmasTreeLightsDriver na bitbukecie. Z racji na objętość (ok. 500linii) nie wstawiam go na stronę.

Sposób tworzenia melodii dla kolęd oparłem na innych przykładach melodii z repa na githubie robsoncouto/arduino-songs (1). Modyfikować można ewentualnie tempo danej melodii i nuty. Zapis nutowy brany z google i w sumie nie było większych problemów, choć w paru przypadkach zmieniałem F na Fis (NOTE_F4 na NOTE_FS4), żeby melodia lepiej brzmiała. Poza tym jest już w tym zestawie melodii Silent Night, czyli nasz Cicha Noc.

Czas odmierzam zależnie od trybu pracy. Dla melodii opieram się o przerwania których źródłem jest licznik 1 (częstotliwość przerwań ustawiona na 50Hz). W drugim trybie (bez melodii) o funkcję millis(), chociaż dla uspójnienia (przy okazji jakiejś kolejnej modyfikacji kodu), pozostanę przy pierwszym rozwiązaniu, czyli przerwaniu pochodzącym z licznika.

Obsługa klawiatury też odbywa się w oparciu o przerwanie, tym razem wywołane zmianą stanu na pinie 2, wspólnym dla wszystkich trzech przycisków. Jest tu w ogóle trochę magii, bo pin 2 i pozostałe połączone z klawiaturą, zmieniają w czasie pracy swoje działanie (z wejściowych na wyjściowe i odwrotnie). Ten sposób obsługi przycisków jest opisany dokładnie w artykule 10 Buttons Using 1 Interrupt. Na przykładzie z tego artykułu wzorowałem się pisząc obsługę klawiatury.



Usprawnienia

Po zmontowaniu przychodzi mi na myśl kilka rzeczy:
  • zapamiętywanie ostatnio wybranych ustawień w pamięci EEPROM i odtwarzanie ich po włączeniu urządzenia
  • wizualizacja ustawień (pewnie jakiś mały wyświetlacz LCD)
  • LED na wyjściu modułu zasilania sygnalizujący włączone zasilanie

Źródła

Brak komentarzy:

Prześlij komentarz