Montag, 20. August 2012

IR-Fernbedienung - Teil 1

Eines meiner aktuellen Projekte ist ein sogenannter HTPC (Home Theater PC) als  wohnzimmertauglicher Rechner. Die Anforderungen an solch einen multimedialen Computer sind neben einem gefälligen Äußeren und einer möglichst geringen Lautstärke auch die komfortable Nutzung mit einer Fernbedienung.
Dazu orderte ich eine recht minimalistisch anmutende Infrarot-Fernbedienung von Apple - mein erstes und einziges Produkt dieser Firma. Meine Recherche ergab, dass Apple das NEC-Protokoll verwendet. Ein TSOP1736 lag noch im Sortimentskasten, bereit für erste Experimente mit einem Boarduino, der recht bald durch einen Leonardo ersetzt wurde.

Apple IR-Fernbedienung und Arduino Leonardo


Wie ich im Blogeintrag zum Leonardo schrieb, wird dieser als Tastatur und Maus am Rechner erkannt. Daher ist es sehr einfach, die empfangenen Infrarotcodes wie Tastatureingaben zu behandeln. Wer sich schon näher mit Abspielprogrammen für Medien beschäftigt hat, weiß, dass sich viele Player nicht nur mit der Maus bedienen lassen, sondern auch über sogenannte Shortcuts. Dies sind Tastenkombinationen, die beim bekannten VLC-Player sogar frei konfigurierbar sind.

Am Anfang steht das Erkennen der Infrarotsignale. Arduinotypisch gibt es für eine Vielzahl von Funktionen auch Bibliotheken. Ich verwende die IRremote-Library, die man hier herunterladen kann: https://github.com/shirriff/Arduino-IRremote. Diese beherscht neben dem NEC-Protokoll auch diverse andere Standards: RC5, RC6, Panasonic usw.. Die mitgelieferten Beispielsketche geben einen guten Überblick über die Funktionen. Zum Auslesen der Tastencodes habe ich den passenden Sketch aus den Beispielen auf den Mikrocontroller geladen, den IR-Sensor ins Steckbrett gesetzt und die Codes der gedrückten Tasten notiert.
Insgesamt gibt es 7 Tasten, das dauerhafte Drücken wird mit einem gesonderten Code quittiert. Mein kurzes Testprogramm mit Ausgabe über die serielle Schnittstelle sah dann so aus:

#include <IRremote.h>

int RECV_PIN = 8;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup(){
  Serial.begin(9600);
  irrecv.enableIRIn();
}

void loop(){
  if (irrecv.decode(&results)) {
    if (results.value==2011281926) Serial.println ("Center");
    if (results.value==2011279366) Serial.println ("Down");
    if (results.value==2011287558) Serial.println ("Up");
    if (results.value==2011238406) Serial.println ("Left");
    if (results.value==2011291654) Serial.println ("Right");
    if (results.value==2011250694) Serial.println ("Menu");
    if (results.value==2011265542) Serial.println ("Play");
    if (results.value==4294967295) Serial.println ("still pressed");    
    irrecv.resume();
  }
}

Dieser Code funkioniert auch noch mit den Vorgängermodellen des Leonardo. Wer andere Sachen mit der Fernbedienung vorhat, sei es die heimische Rollladensteuerung fernbedienbar zu machen oder das Schalten der Zimmerbeleuchtung zu programmieren, kann auf diesen Sketch zurückgreifen.

Im nächsten Teil der Serie werde ich mich der Implementierung der Keyboard-Bibliothek widmen.
Falls ihr Anregungen zum Projekt habt, könnt ihr mir gern einen Kommentar hinterlassen.

1 Kommentar:

  1. Das it eine ultra coole Sache schae das ich jetzt erst wind bekommen habe was man so alles mit dem arduino machen kann bzw das es ihn gibt �� ich finde dieses tema ultra interessant wie und wo geht es weiter wo bekomme ich den zweiten und dritten Teil her ?

    AntwortenLöschen