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
http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html