Dzisiaj o czymś o czym chyba nie wspominałem, czyli o module pilota. O co chodzi? Zapraszam do czytania.
Wymagania i zarys tematu
Moduł ten ma składać się z odbiornika i nadajnika podczerwieni. Jego zadaniem jest przesyłanie odebranych danych do centralki, a z kolei po otrzymaniu odpowiedniej komendy ma zadziałać jak pilot. Centralka to Raspberry Pi. Kanał komunikacji to prawdopodobnie RS485, ale ostatnio po wykryciu problemów z prędkością transmisji nie jestem już jego taki pewien. W każdym razie fajnie by było go wyabstrahować i uniezależnić się od sposobu transmisji – ale to może nie być takie proste w C/C++.
Moduł ten byłby umieszczony na dedykowanej płytce razem z modułem WS2812B i innymi, które powstaną w przyszłości. Pomysł na to mam taki, że moduł (jeżeli chodzi o kod) tak naprawdę będzie biblioteką C++ i na potrzeby konkretnej płytki będą one składane w pliku szkicu w następujący sposób:
#include <SmartHub.Modules.h> #include <SmartHub.Modules.WS2812B.h> #include <SmartHub.Modules.XXX.h> #define SSerialTxControl 5 // RS485 Direction control #define SSerialRX 6 // Serial Receive pin #define SSerialTX 7 // Serial Transmit pin #define PIXEL_PIN 10 // Digital IO pin connected to the NeoPixels. #define PIXEL_COUNT 12 ModulesCollection modules = new ModulesCollection(); void setup() { modules.add(new WS2812BModule(PIXEL_COUNT, PIXEL_PIN)); modules.add(new XXXModule()); modules.init(); } void loop() { modules.loop(); }
Planuje mieć moduł podczerwieni zamontowany w sufitach podwieszanych, żeby móc sterować telewizorem z poziomu telefonu (moduł jako nadajnik) lub sterować światłem za pomocą starego pilota (moduł jako odbiornik). Jako, że i tak w suficie będą sterowniki do listw LED WS2812B, to po co robić je na oddzielnej płytce jak można je spakować razem w jednej obudowie. Tak samo prawdopodobnie będzie z czujnikami ruchu i pewnie jeszcze kilkoma modułami.
Co będzie potrzebne
Głównymi elementami potrzebnymi do zbudowania prototypu będzie nadajnik i odbiornik podczerwieni. Ja początkowo kupiłem odbiorniki i nie chciało mi działać wysyłanie kodu pilota 🙂 Myślałem, że coś źle robię w kodzie, a tu okazuje się, że to błąd w myśleniu – dotyczący części sprzętowej. Nadajnik wylutowałem ze starego pilota jak do tego doszedłem, żeby szybko przetestować to niedopatrzenie. W znalezieniu problemu pomógł mi opis jakiegoś przykładu w bibliotece IRemote, która służy do obsługi podczerwieni na Arduino.
Nie będę w tym momencie wrzucał własnego kodu, bo byłby on banalny, a ze względu na to, że nie mam podjętej decyzji dotyczącej architektury związanej z wysyłaniem komend to bezsensowne. Skorzystamy z przykładu IRrecord z biblioteki. Polega on na tym, że po odebraniu kodu z jakiegoś pilota jest on zapisywany w pamięci. Po przyciśnięciu przycisku jest on wysyłany za pomocą diody nadawczej. Zamiast przycisku może być kabel, który trzeba na chwilę podłączyć do zasilania (5V).
Diodę nadawczą należy podłączyć dłuższą nóżką do pinu 11 (RECV_PIN), a krótszą do masy. Przycisk należy podłączyć z jednej strony do pinu 12 (BUTTON_PIN), a z drugiej do zasilania (5V).
Podłączenie diody odbiorczej poniżej:
Co dalej?
Dalej pozostaje stworzenie prototypu, żeby przetestować zasięg nadajnika i odbiornika. Być może montaż ich w suficie nie będzie miał sensu, ale wydaje mi się, że wystarczy odpowiednio je umiejscowić i nie będzie problemu. To oczywiście czeka na rozwiązanie problemu małej prędkości transmisji po kablu. Jak się z tym uporam to wtedy już z górki. A do tego czasu temat modułu podczerwieni będzie zawieszony.