Bezdrátové ovládání pomocí IR ovladače

Bezdrátové ovládání pomocí IR ovladače

Doposud jsme se nezabývali možností ovládat Arduino projekt bezdrátově na dálku, proto si nyní představíme sadu pro infračervené dálkové ovládání. Proč právě IR (Infrared) bezdrátový přenos a IR ovládání? Je dostupné, spolehlivé a nenáročné na implementaci do Arduino projektu. Naprogramovat vlastní ovladač není vůbec složité. Ukážeme si pár příkladů, kde vše názorně vysvětlíme. A vy si pak můžete bastlit s IR ovladačem dle své libosti!

komunikace pomocí infrared

Abychom mohli naplno využít infrared modul, musíme nejdříve proniknout do teorie. Ovládání pomocí „drátů“ je zde nahrazeno tzv. IR ovládáním, které je bezdrátové. Co to tedy to IR je? IR je zkratka pro infrared (infračervené) záření – tento druh záření je neviditelný pro lidské oko, protože má větší vlnovou délku, než viditelné světlo. Zjednodušeně by se dalo říct, že IR světlo je zdrojem tepla. Mezi zdroje IR záření patří např. žárovky, nebo naše Slunce.
Lidstvo usoudilo, že je výhodné IR záření použít i pro komunikaci na kratší vzdálenosti. Začalo jej využívat v technických aplikacích (dálkové ovladače u TV, nebo si např. vzpomenete na infraport u starých mobilních telefonů). IR záření nejde vidět a výroba IR komponentů není nákladná. Nabízí se ale otázka, jak tyto zařízení mohou fungovat, když je celá Země osvícená IR zářením ze Slunce? Tady už nadešel čas, kdy se konečně vrhneme přímo do naší problematiky.
Pro naše povídání si určíme IR diodu jako náš zdroj IR záření. Celá pointa spočívá v modulování signálu, který bude naše IR dioda emitovat – jednoduše řečeno: naše dioda bude blikat a bude vytvářet určitý vzor (pattern) na který bude IR přijímač reagovat. Tím, že zvolíme správnou frekvenci (nejčastěji se používá 38 kHz) zamezíme „rušení“ od okolního IR záření.
Pokud tedy například mačkáte různá tlačítka na ovladači, IR LED pokaždé „vyblikává“ jiný signál.

Ukázka zpracování IR signálu - Arduino návody

Princip IR komunikace (děkujeme www.sbprojects.net za pěkný GIF)

zapojení IR senzoru

K ovladači dostanete v sáčku také přijímač, IR diodu a vodiče. Do ovladače je potřeba nejprve vložit baterii CR2025, IR diodu si schováme na další příklad a přijímač zapojíme podle schématu. K zapojení přijímače budete potřebovat pouze 3 vodiče. Ale abychom měli co ovládat, připojíme si k Arduinu ještě kontrolní LEDku.

Co budeme potřebovat?

Pokud máme vše nachystané, vrhneme se do zapojování!

Zapojení IR LEDky a IR ovladače - Arduino návody

Pokud si nejste se zapojením podle schématu úplně jistí, najděte na IR přijímači u pinů mínus, tam zapojte GND. Pak najděte „S“, jako signál, tam zapojte vodič, který vede do D2 na Arduinu. A do zbylého (prostředního) zapojte napětí 5 V.

Program pro IR ovladač

Předtím, než začneme používat IR ovladač pro ovládání Arduina, musíme zjistit vzory signálů, které vydávají jednotlivá tlačítka ovladače. Každé tlačítko má hodnotu jinou (tak je od sebe program rozliší). Hodnota je číslo. Pokud jste zkušenější programátor, doporučuji použít HEX soustavu. My si to ale nebudeme komplikovat a v příkladech použijeme DEC soustavu.

Jako první krok tedy nahrajeme program, který nám vypíše "hodnoty" jednotlivých tlačítek.

Nezapomeňte naimportovat knihovnu! Knihovna je v sekci „ke stažení“. Pokud nevíte jak na to, tady je návod, jak knihovnu správně naimportovat.

// importování knihovny
#include <IRremote.h>

// definování pinu přijímače
int const IRpin = 2;
IRrecv irrecv(IRpin);
// uložení signálu do proměné "results"
decode_results results;

void setup()
{
  // zapnutí komunikace
  Serial.begin(9600);
  // start přijímače
  irrecv.enableIRIn(); 
}

void loop() 
{
  // pokud obdržíš signál, tak jeho hodnotu vypiš v DEC soustavě (desítková)
  if (irrecv.decode(&results)) 
    {
      Serial.println(results.value, DEC); 
      // obdrž další hodnotu
      irrecv.resume(); 
      // počkej 1s
      delay(1000);
    }
}

 

Pokud otevřete Serial monitor (nastavte rychlost 9600 baudů) a budete mačkat postupně tlačítka 1, 2, 3, uvidíte toto:

Výstup v Serial monitoru po stisknutí tlačítek - Arduino návody

Čísla v červeném rámečku jsou hodnoty tlačítek. Číslo, které se opakuje a v rámečku není, pro nás není důležité. Stačí nám vědět, že se objeví tehdy, když nějaké tlačítko držíme delší dobu.

Na následující ukázku budeme potřebovat dvě tlačítka 1 a 2. Podle našeho prvního pokusu mají tlačítka tyto hodnoty:

Pro tlačítko "1" je hodnota = 16753245

Pro tlačítko "2" je hodnota = 16736925

Teď se vrhneme k tomu nejdůležitějšímu, pomocí 2 tlačítek budeme ovládat LEDku.

Tlačítko "1" LEDku zapne a tlačítko "2" LEDku vypne. 

// imporotování knihovny
#include <IRremote.h>

// definování pinu přijímače
int const receiver = 2;
IRrecv irrecv(receiver); 
// definování pinu LEDky
int const ledPin = 3;
// uložení signálu do proměné "results"
decode_results results; 

void setup()
{
  // zapnutí komunikace
  Serial.begin(9600);
  // start přijímače
  irrecv.enableIRIn();
  // definování digitálního ledPinu jako výstup
  pinMode(ledPin, OUTPUT);
  // nastavení digitálního ledPinu na LOW (vypnutí diody)
  digitalWrite(ledPin, LOW);
}

void loop()
{
  // pokud obdržíš signál, tak
  if (irrecv.decode(&results)) 
  {
    // pokud je hodnota signálu "16753245", tak
    if (results.value == 16753245)
    {
      // zapni LEDku
      digitalWrite(ledPin, HIGH);
      // počkej 1s
      delay(1000);
    }
    // pokud je hodnota signálu "16736925", tak
    else if (results.value == 16736925)
    {
      // vypni LEDku
      digitalWrite(ledPin, LOW);
      // počkej 1s
      delay(1000);
    }
    // obdrž další hodnotu (pokračuj)
    irrecv.resume(); 
  }  
}

 

Pro zájemce přikládám i program, kde ovládáme LEDku tlačítkem 1. Po prvním stisku se LEDka zapne a při dalším stisku zase vypne.  

// imporotování knihovny
#include <IRremote.h>

// definování pinu přijímače
int const receiver = 2;
IRrecv irrecv(receiver); 
// definování pinu LEDky
int const ledPin = 3;
// uložení signálu do proměné "results"
decode_results results; 

void setup()
{
  // zapnutí komunikace
  Serial.begin(9600);
  // start přijímače
  irrecv.enableIRIn();
  // definování digitálního ledPinu jako výstup
  pinMode(ledPin, OUTPUT);
  // nastavení digitálního ledPinu na LOW (vypnutí diody)
  digitalWrite(ledPin, LOW);
}

void loop()
{
  // pokud obdržíš signál, tak
  if (irrecv.decode(&results)) 
  {
    // pokud je hodnota signálu "16753245" a LEDka nesvítí, tak
    if (results.value == 16753245 && digitalRead(ledPin) == LOW)
    {
      // zapni LEDku
      digitalWrite(ledPin, HIGH);
      // počkej 1s
      delay(1000);
    }
    // pokud je hodnota signálu "16753245" a LEDka svití, tak
    else if (results.value == 16753245 && digitalRead(ledPin) == HIGH)
    {
      // vypni LEDku
      digitalWrite(ledPin, LOW);
      // počkej 1s
      delay(1000);
    }
    // obdrž další hodnotu (pokračuj)
    irrecv.resume(); 
  }  
}

 

Jak s arduinem ovládat TV?

Jak jsem již zmínil, IR technologie se využívá např. u různých ovladačů. My se teď podíváme na ovládání TV pomocí přiložené IR diody. Návod samozřejmě funguje na všechny druhy IR ovládání. Náš plán zní následovně:

  • Zjistíme vzor signálu z TV ovladače tak, že jej namíříme na IR přijímač a zmáčkneme požadované tlačítko
  • Tento signál uložíme pro další reprodukci
  • Po zmáčknutí tlačítka IR dioda vyšle uložený signál

vlastní IR ovladač? není problém!

Ke stavbě našeho vlastního IR ovladače potřebujeme jen IR diodu, která bude vysílat signál a tlačítko, kterým budeme IR diodu aktivovat. My si navíc přidáme i IR přijímač, abychom mohli zjistit vzor signálu originálního ovladače.

Náš IR ovladač zapojíme podle následujícího schématu.

schéma zapojení IR diody, jako ovladač k TV - Arduino návody

programování IR ovladače

Funkci zařízení (ovladače) jsme stanovili na začátku, zbývá napsat samotný program. Pro zjednodušení tentokrát sáhneme do příkladů, které jsou k importované knihovně. Proklikáme se tedy skrz

File -> Examples -> IRremote -> IRrecord

Otevře se nám program, který stačí nahrát a vše bude fungovat. Otevřete si serial monitor, uvidíte po načtení signálu náš vzor. Vidíme, že každé tlačítko má vlastní vzor signálu.

Ukázla výstupu neznámeho vzoru signálu - vlastní IR ovladač - Arduino návody

Vysvětlíme si tady alespoň zajímavý příkaz, který je v programu uveden. Jedná se o řádek 138, tedy:

irsend.sendRaw(rawCodes, codeLen, 38);

Tento příkaz slouží k poslání našeho zjištěného vzoru signálu, kde rawCodes je údaj, který se vypisuje v serial monitoru, codeLen je jeho délka a 38 značí frekvenci. Pokud si vzpomínáte na teorii uvedenou na začátku návodu, tam se o frekvenci 38 kHz zmiňuji.

Velikosti kódu se nelekejte, je to z důvodu univerzálnosti. Pokud máte nějaký komerční ovladač od Sony, nebo Panasonic, tak si v examples můžete najít kódy, které jsou kratší. Je to z toho důvodu, že se k IR komunikaci používá více protokolů – v našem kódu z examples kontrolujeme všechny, avšak v kódech od Sony, nebo Panasonic je protokol znám a tak se nemusí již nic víc řešit.

Shrnutí návodu pro IR ovládání

Naučili jsme se na jednoduchých příkladech ovládat IR ovladač a také si postavit vlastní řešení. U složitějších aplikací bych osobně preferoval stavět rozpoznávání tlačítek pomocí konstrukce switch nebo napsal vlastní funkci. To vše je ale už na vás a vaší kreativitě. Další návody nebo projekty jsou na stránce www.hwkitchen.cz/arduino-navody/.

Bastlení ZDAR!

Soubory a Odkazy pro bastlení s IR ovladačem