Dálkové ovládání infračervené

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

Další podobné články