Hlavním prvkem tohoto infračerveného dálkového ovládání je přijímač HX1838. Tento infračervený přijímač umožňuje ve svém okolí detekovat signály z IR dálkových ovladačů a při jeho připojení k Arduinu můžeme tyto signály převést na proměnné a využít dále. V uvedeném balení se společně s přijímačem nachází také dálkový ovladač s 21 klávesami, kterým můžeme poté přiřadit libovolné funkce v programu. Můžeme ale využít i jiné dálkové ovladače, které máme doma, například od televize či videa.
Pro úspěšné propojení s Arduino deskou stačí propojit 3 vodiče. Připojíme Vcc na +5V, GND na zem a IN na pin 4 nebo jiný volný datový pin na naší Arduino desce.
Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu IRremote2, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení knihovny, nastavení čísla pro pinIN pro propojení IR přijímače s Arduinem, vytvoření instance dalkoveOvl z knihovny IRrecv(IRremote2) a vytvoření proměnné vysledek pro ukládání přijatých hodnot. V podprogramu setup se nachází nastavení komunikace přes sériovou linku a také příkaz pro odstartování komunikace s infračerveným přijímačem. V nekonečné smyčce loop se nachází pouze if funkce s podmínkou, v které se načte nejnovější hodnota z přijímače a pokud se něco přijalo, provede se její obsah. Na začátku této if funkce lze odkomentováním řádku 28 zapnout výpis syrové hodnoty přijatého signálu. Dále se zavolá podprogram detekceKlaves a pro provedení této detekce se opět program vrátí ke komunikaci s IR přijímačem. Uvedený podprogram detekceKlaves obsahuje switch, který při stisku zde definovaných kláves provede vytištění informace o stisknuté klávese na sériovou linku.
// Dálkové ovládání infračervené s HX1838 // připojení knihovny #include"IRremote2.h" // nastavení čísla pinu pro propojení s Arduinem #define pinIN 4 // vytvoření instance dalkoveOvl z knihovny IRremote2 // a proměnné vysledek pro ukládání výsledků IRrecv dalkoveOvl(pinIN); decode_results vysledek; void setup() { // komunikace přes sériovou linku rychlostí 9600 baud Serial.begin(9600); // start komunikace s IR přijímačem dalkoveOvl.enableIRIn(); } void loop() { // v if podmínce je volána funkce decode // pro načtení dat z přijímače - pokud přišel // signál, provede se obsah if podmínky if (dalkoveOvl.decode(&vysledek)) { // pro zkoušení nového ovladače stačí odkomentovat // následující řádek a číst data po sériové lince // Serial.println(vysledek.value, HEX); // volání podprogramu detekceKlaves pro // zjištění názvu klávesy detekceKlaves(); // pokračování v detekci nových stisků dalkoveOvl.resume(); } } // podprogram s překladem syrových hodnot na // jednotlivá tlačítka void detekceKlaves() { switch(vysledek.value) { // u každé stisknuté klávesy se vždy vypíše // její název po sériové lince case 0xFFA25D: Serial.println("Stisknuto CH-"); break; case 0xFF629D: Serial.println("Stisknuto CH"); break; case 0xFFE21D: Serial.println("Stisknuto CH+"); break; case 0xFF22DD: Serial.println("Stisknuto PREV"); break; case 0xFF02FD: Serial.println("Stisknuto NEXT"); break; case 0xFFC23D: Serial.println("Stisknuto PLAY/PAUSE"); break; case 0xFFE01F: Serial.println("Stisknuto VOL-"); break; case 0xFFA857: Serial.println("Stisknuto VOL+"); break; case 0xFF906F: Serial.println("Stisknuto EQ"); break; case 0xFF6897: Serial.println("Stisknuto 0"); break; case 0xFF9867: Serial.println("Stisknuto 100+"); break; case 0xFFB04F: Serial.println("Stisknuto 200+"); break; case 0xFF30CF: Serial.println("Stisknuto 1"); break; case 0xFF18E7: Serial.println("Stisknuto 2"); break; case 0xFF7A85: Serial.println("Stisknuto 3"); break; case 0xFF10EF: Serial.println("Stisknuto 4"); break; case 0xFF38C7: Serial.println("Stisknuto 5"); break; case 0xFF5AA5: Serial.println("Stisknuto 6"); break; case 0xFF42BD: Serial.println("Stisknuto 7"); break; case 0xFF4AB5: Serial.println("Stisknuto 8"); break; case 0xFF52AD: Serial.println("Stisknuto 9"); break; default: Serial.println("Stisknuta jina klavesa"); } // pauza pro přehlednější výpis delay(500); }
Po nahrání programu do Arduino desky a přijetí signálu z dálkového infračerveného ovladače dostaneme například tento výpis:
Stisknuto PREV Stisknuto 0 Stisknuto 2 Stisknuto 6 Stisknuto 9 Stisknuto 200+ Stisknuto EQ
Infračervené dálkové ovládání s přijímačem HX1838 je jednoduše nastavitelné a můžeme díky němu obohatit své zařízení o dálkové ovládání. K tomuto můžeme využít jak přiložený ovladač v balení, tak i ovladače od jiných zařízení, například televizí, videí či rádií.
Seznam použitých komponent:
http://dratek.cz/arduino-vstupni-periferie/840-arduino-dalkove-ovladani-infracervene.html
http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html