Die Arduino IR-Library

IR3

Ich habe nach einer möglichst einfachen Art gesucht, Infrarot Fernbedienungen auszulesen. Wie für Arduino üblich habe ich auch nach kurzer Zeit eine passende Library gefunden:

http://www.righto.com/2009/08/multi-protocol-infrared-remote-library.html

Auf der Seite von Ken Shirriff kann man sich die Dateien runterladen, inlusive einiger Beispiele. Besonders geeignet: IRrecDemo um damit Signale direkt auszulesen oder IRrecDump um auch Informationen über das verwendete Protokoll zu bekommen. Alles was man dafür benötigt ist ein IR-Empfangs-Modul. Die Ausgabe erfolgt über das Terminal.

IRlib1

Auf dem Bild sieht man im Terminal den Code der empfangen wurde. Die Eins steht für das Protokoll (NEC) und die lange Zahl repräsentiert den Code. Auf dem unten Bild ist das verwendete IR-Modul abgebildet. Die Pins sind aber von Typ zu Typ unterschiedlich.

IR2

Bei meinem ersten Test habe ich das Beispiel IRrecvDemo angepasst. Die Versorgungspins des Moduls habe ich einfach die in freie Pins des Controllers gesteckt, um mir Arbeit bei der Verdrahtung zu sparen. Im Programm  musste ich nur die entsprechenden Pins High oder Low setzen. Da das Modul unter 40 mA benötigt und 5 V kompatibel ist, kann in diesem Fall ohne Bedenken so vorgehen.

IR3

Nachtrag zu neueren Arduino Versionen:

In den neueren Arduino Versionen (vermutlich ab 1.5 BETA) ist die IR-Library in der Robot-Library integriert. Das führt aber anscheinend zu Problemen beim Kompilieren. In einem Forumeintrag habe ich die Lösung zu diesem Problem gefunden. Die Dateien IRremoteTools.cpp und IRremoteTools.h in dem Arduino Programmordner  libraries\RobotIRremote\src\ scheinen doppelt vorhanden zu sein. Deswegen habe ich diese beiden Dateien in einen Ordner unabhängig der Arduino Umgebung zwischen gespeichert. Mutige können die Dateien auch einfach löschen. Danach kann man die Library einfach einbinden und das Programm kompilieren. Der Fehler wurde anscheinend auch in der neuen Version 1.6 nicht behoben.

Das angepasste Programm:

Quelltext

/*
 * IRremote: IRrecvDemo – demonstrates receiving IR codes with IRrecv
 * An IR detector/demodulator must be connected to the input RECV_PIN.
 * Version 0.1 July, 2009
 * Copyright 2009 Ken Shirriff
 * http://arcfn.com
 */
 
#include <IRremote.h>
 
int RECV_PIN = 11;
int gnd = 12;
int vcc = 13;
 
IRrecv irrecv(RECV_PIN);
decode_results results;
 
void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
 
  pinMode(gnd, OUTPUT);
  pinMode(vcc, OUTPUT);
  digitalWrite (gnd, LOW);
  digitalWrite (vcc, HIGH);
}
 
void loop() {
  if (irrecv.decode(&results)) {
    Serial.println(results.value);
       Serial.println(results.decode_type);
    irrecv.resume(); // Receive the next value
  }
}

[collapse]