Jak sterować dowolnym urządzeniem w domu za pomocą pilota od TV i Arduino?

Zastanawialiście się kiedyś, czy można wykorzystać pierwszy lepszy pilot (np. od telewizora) do sterowania dowolnym urządzeniem w domu? Otóż można i wbrew pozorom jest to banalnie proste :) I właśnie tym zajmiemy się w dzisiejszym poście.

Na początku pokażę Wam, jak nauczyć Arduino odczytywać sygnały wysyłane przez dowolnego pilota, a później omówię kilka układów, które umożliwią włączanie i wyłączanie np. lampki nocnej, czy ściemnianie i rozjaśnianie diod LED.

Pamiętajcie, że Arduino jest tutaj wykorzystywane tylko dlatego, że wygodnie się na nim prototypuje. Po zaprojektowaniu całego odbiornika możemy przerzucić program na dowolny mikrokontroler i zejść z kosztami całości poniżej 10zł :)

Odbieranie sygnału z pilota

Praktycznie wszystkie domowe piloty wykorzystują do komunikacji światło podczerwone, więc na początek musimy się zaopatrzyć w jakiś odbiornik podczerwieni. Ja w swoim układzie wykorzystałem popularny scalony odbiornik TSOP2236 (koszt około 3,60zł).

Odbiornik łączymy z Arduino wg poniższego schematu:

Odbiornik IR TSOP2236 podłączony do Arduino

Następnie musimy zaopatrzyć się w bibliotekę IRremote, która pozwoli w bardzo prosty sposób odczytywać sygnały odbierane przez odbiornik. Bibliotekę IRremote możecie pobrać stąd (bezpośredni link do pliku zip). Po pobraniu i rozpakowaniu paczki kopiujemy całą bibliotekę do folderu /librares/ znajdującego się w katalogu z Arduino IDE.

Teraz możemy już wrzucić na Arduino następujący program:

Program ten ma tylko jedno zadanie – odczytywać dane z odbiornika podpiętego pod 11 pin i wysyłać je do Serial Monitora. A czym jest ten cały Serial Monitor? Jest to proste narzędzie, dzięki któremu możemy podglądać w komputerze to, co mówi do nas Arduino :)

W Arduino IDE jest wbudowany Serial Monitor, którego możemy uruchomić wybierając z menu Tools -> Serial Monitor. Po włączeniu zobaczymy puste okienko, w którym będą się pojawiały wiadomości wysyłane przez Arduino za pomocą funkcji Serial.print(). Załadowany przed chwilą program wykorzystuje tą funkcję do wyświetlania kodów wciskanych w naszym pilocie klawiszy.

Ja do sterowania wykorzystałem pilot od starego wentylatora pokojowego:

Pilot IR od wentylatora

Po wciśnięciu po kolei wszystkich przycisków Serial Monitor wyświetlił mi ich kody:

Arduino - Serial Monitor

Mając już kody przycisków, które chcemy wykorzystywać, wystarczy dopisać kawałek programu, który będzie wykonywał jakąś akcję po odebraniu konkretnego kodu z pilota:

W powyższym przykładzie skorzystałem z instrukcji switch, która umożliwia szybkie sprawdzenie, czy w odebranych danych (results.value) znajduje się któryś z naszych kodów. Konstrukcja tego kawałka programu jest prościutka, więc mam nadzieję, że każdy z Was poradzi sobie z dopisaniem swoich kodów :)

Po wgraniu powyższego programu i wciśnięciu tych samych przycisków w pilocie Serial Monitor nie wyświetli już ich kodów, a przypisane nazwy:

Serial Monitor - nazwy przycisków

I to już wszystko, jeżeli chodzi o zaprzyjaźnianie Arduino z naszym pilotem :) Przejdźmy teraz do nieco bardziej praktycznych przykładów.

Sterowanie diodą LED za pomocą pilota

W pierwszym przykładzie pobawimy się umieszczoną na płytce Arduino diodą L, która podpięta jest pod pin 13. Układu nie musimy zmieniać. Drobne zmiany musimy wprowadzić jedynie w programie:

Większość kodu, który teraz dodałem (linie 6, 7, 13 i 23) powinna być już dla Was jasna i oczywista po przeczytaniu mojego postu wprowadzającego do Arduino, dlatego nie będę go omawiał.

Nowością, o której chyba wcześniej nie wspominałem, jest to, co pojawiło się w linii 22. Dzieje się tutaj rzecz bardzo prosta – do zmiennej diodaStatus jest zapisywane jej przeciwieństwo. Jeżeli zmienna była ustawiona na LOW, to zmieni się na HIGH (i odwrotnie). Dzięki temu prostemu trickowi po przyciśnięciu środkowego przycisku w moim pilocie mogę na przemian zapalać i gasić diodę.

Proste? Jasne, że proste! Ale zróbmy coś ciekawszego…

Sterowanie lampką nocną za pomocą pilota

W równie prosty sposób możemy włączać i wyłączać np. lampkę nocną, lub jakiekolwiek inne urządzenie w domu (np. ekspres do kawy:). Jedyne, co musimy zrobić, to odrobinę zmodyfikować nasz układ, dokładając do niego przekaźnik pracujący pod napięciem 5V (koszt 2,30zł) i tranzystor BC547 (koszt 20gr), który będzie tym przekaźnikiem sterował. Dodatkowo, jak słusznie kilka osób w komentarzach zwróciło uwagę na to uwagę, równolegle do cewki przekaźnika trzeba podpiąć diodę prostowniczą, np. 1N4007 (koszt 10gr):

Arduino z odbiornikiem IR i przekaźnikiem

W programie zmienić trzeba jedynie numer pinu, do którego będziemy podpinać tranzystor (w powyższym przykładzie jest to pin 3).

Pamiętaj, że zabawa z napięciem sieciowym jest bardzo niebezpieczna dla zdrowia i życia. Zanim zaczniesz montować układ upewnij się, że kabel sieciowy nie jest podłączony do gniazdka. Osoby niepełnoletnie powinny montować układ pod czujnym okiem osoby dorosłej.

I w tej chwili już możemy włączyć np. ekspres do kawy nie ruszając się z łóżka ;) Oczywiście pod Arduino można podpiąć tyle urządzeń, ile zostało nam wolnych pinów – w przypadku Arduino UNO możemy bez żadnych kombinacji podłączyć nawet 19 urządzeń :)

Jedyne, co w zaprezentowanym wyżej przykładzie może trochę przeszkadzać, to dźwięk przełączającego się przekaźnika. Możemy go wyeliminować zmieniając nieco cały układ:

Arduino z odbiornikiem IR, optotriakiem i triakiem

Na powyższym schemacie układ z tranzystorem i przekaźnikiem został zastąpiony przez optotriak MOC3021 (koszt 1zł) oraz triak BT138 (koszt 2,20zł). Rozwiązanie to jest nieco droższe, ale za to całkowicie bezgłośne.

Optotriak w zaprezentowanym układzie odpowiada za galwaniczne odseparowanie Arduino od wysokiego napięcia, a triak za odcinanie napięcia od podłączonego urządzenia.

Proste? No jasne! Ale zróbmy coś jeszcze ciekawszego ;)

Płynne sterowanie jasnością diody za pomocą pilota

Na Majsterkowaej stronie na Google+ Wojtek poprosił o opisanie, jak zrobić płynną regulację jasności za pomocą pilota. Już pokazuję co i jak :)

Na potrzeby tego przykładu zrobimy sobie prosty układ z diodą LED podłączoną pod pin 3:

Arduino z odbiornikiem IR i diodą LED

Jasnością diody będziemy sterować za pomocą PWM (o którym wspominałem tutaj), dlatego ważne jest, żeby była podłączona do któregoś z pinów oznaczonych jako PWM.

Mając już zmontowany układ, możemy zabrać się za program, który w zasadzie niewiele różni się od programów z poprzednich przykładów:

W 7 linii utworzyłem sobie zmienną jasnosc i przypisałem jej wartość 0. W zmiennej tej będzie zapisywana jasność, z jaką ma świecić dioda (w przedziale od 0 do 255). Dodatkowo aktualny poziom jasności wysyłam sobie do Serial Monitora (linie 22 i 28), żeby móc podglądać, jak jasno świeci dioda przy różnych wartościach.

W instrukcji switch dodałem sobie kody dwóch przycisków z mojego pilota – w górę (rozjaśnianie) i w dół (ściemnianie). Podczas rozjaśniania sprawdzam w linii 21, czy jasność nie jest już ustawiona na maksymalną wartość. Jeżeli nie, to zwiększam ją o 5 i w kolejnej linii ustawiam ją na wyjściu, pod które jest podłączona dioda. Dla ściemniania wszystko dzieje się analogicznie – najpierw sprawdzam, czy jasność nie jest już na zerze, a następnie zmniejszam ją o 5.

Wynikiem działania tego kodu będzie coś takiego:

Proste? No ba! Ale przecież rozjaśnianie i przygaszanie jednej diody szybko się nam znudzi, dlatego zrobimy coś jeszcze ;)

Płynne sterowanie jasnością taśmy LED za pomocą pilota

W kolejnym przykładzie pobawimy się w rozjaśnianie taśm LED, których nie można podpiąć bezpośrednio pod któryś z pinów w Arduino, bo nie dość, że są zasilane wyższym napięciem (12V), to ciągną też za dużo prądu. Dlatego też taśmę LED musimy podpiąć za pośrednictwem tranzystora BC547 (ten sam, co w przykładzie z przekaźnikiem):

Arduino z odbiornikiem IR i taśmą LED

Od strony programu kompletnie nic się nie zmienia, więc układ będzie już działać. Poniżej wrzucam filmik, na którym pod Arduino miałem podpiętą zarówno lampkę, jak i przyklejoną do niej taśmę led, która w nocy doświetla mi klawiaturę:

Pamiętajcie tylko, że przez ten tranzystor może popłynąć prąd o maksymalnym natężeniu 100mA, jeżeli więc chcielibyście podłączyć dłuższy kawałek taśmy LED, trzeba by poszukać jakiegoś mocniejszego tranzystora.

Sterowanie komputerem za pomocą pilota od TV

Ten przykład możecie potraktować jako mały bonus, ponieważ nie da się go w prosty sposób przenieść na dowolny mikrokontroler.

Jeżeli macie pod ręką Arduino Leonardo, możecie też w prosty sposób sterować swoim komputerem. Wystarczy taki kawałek programu, żeby za pomocą pilota sterować np. kursorem myszy:

W powyższym programie wykorzystuję przyciski góra/dół/lewo/prawo ze swojego pilota do sterowania kursorem myszy, oraz przycisk środek do klikania myszką:

Jeżeli masz pilota z większą ilością klawiszy, możesz też bez problemu symulować wciśnięcia klawiszy na klawiaturze, żeby np. za pomocą skrótów klawiaturowych sterować funkcjami różnych programów :) Na stronie z tutorialami do Arduino w sekcji “9.USB” znajdziesz opisy wszystkich funkcji, za pomocą których można symulować różne zachowania myszki i klawiatury w Arduino Leonardo :)

Niestety, jak już wspomniałem wcześniej, w ten sposób mogą się pobawić jedynie posiadacze Leonardo. Tzn. na pozostałych Arduino też da się osiągnąć podobny efekt, ale jest już z tym dużo więcej grzebania.

Proste?

No jasne, że proste! Proste, i co najważniejsze, bardzo tanie, bo jak przerzucimy cały program na jakiś tani mikrokontroler, to koszt całego odbiornika schodzi poniżej 10zł :) A że programować mikrokontrolery już umiemy, bo zostało to bardzo ładnie opisane tutaj i tutaj, to problemu z tym nie będzie ;)

Macie jakieś fajne pomysły, do czego można by wykorzystać takie sterowanie za pomocą pilota?

Jak sterować dowolnym urządzeniem w domu za pomocą pilota od TV i Arduino?, 4.7 out of 5 based on 29 ratings

Oceń post Kategoria: Arduino, Tagi: , , , , ,

GD Star Rating
loading...