Infrarot: Licht und Sensoren

Infrarot (IR; auch Infrarotstrahlung) ist elektromagnetische Strahlung im Spektralbereich zwischen dem sichtbaren Licht und der längerwelligen, sogenannten Terahertz-Strahlung unterhalb der Mikrowellenstrahlung (wobei damit Licht mit einer Wellenlänge zwischen 780nm und 1mm gemeint ist. Die nahe Infrarotstrahlung schließt sich direkt an den roten Bereich des sichtbaren Lichts an. Infrarotes Licht kann vom menschlichen Auge nicht wahrgenommen werden, jedoch von manchen Tieren, beispielsweise einige Buntbarsch-Arten.

Infrarot-Lichtschranke

Verglichen zur einfachen Lichtschranke wird hier infrarotes statt sichtbarem Licht verwendet und als Detektor eine Fotodiode, die speziell auf IR-Licht optimiert ist.

Verwendete Bauteile

Aufbau der Schaltung

Aufbau der Schaltung einer IR-Lichtschranke
#define PIN_IR_LED 7
#define PIN_SENSOR A0

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_IR_LED, OUTPUT);
    digitalWrite(PIN_IR_LED, HIGH);

    pinMode(PIN_SENSOR, INPUT);
}

void loop()
{
    Serial.println(analogRead(PIN_SENSOR));
    delay(100);
}

Resultat

Anzeige in der seriellen Konsole
Abb.: Ausgabe in der seriellen Konsole.

Infrarot-Empfänger VS1838B

Infrarot-Empfänger VS1838B

Der VS1838B (auch: TL1838) ist ein miniaturisierter Infrarotempfänger, der mit einem Vorverstärker-IC ausgestattet in einem diodenartigen Epoxid-Gehäuse mit einem speziellen IR-Filter verbaut ist. Er bietet laut den Herstellern eine gute Störfestigkeit gegenüber Umgebungslicht und elektrischen Feldstörungen und folgende weitere Spezifikationen:

Es gibt alternativ dazu auch noch den TSOP34438 Infrarot-Empfänger (Hersteller: Vishay), der ähnliche Spezifikationen hat und noch genauer arbeiten soll (bisher nicht getestet). (Vergleich siehe: TSOP34438 vs. VS1838B)

Verwendete Bauteile

Der VS1838B ist für das Empfangen von relativ hochfrequenten IR-Signalen (Frequenz: 38kHz) gedacht (ähnlich dem Arduino-Modul HX1838), daher ist es kaum möglich eine reguläre Lichtschranke umzusetzen, wo ein IR-Lichtstrahl für relativ lange Zeit unterbrochen und wieder durchgängig wird. In diesem Versuch werden mit dem VS1838B und einem Arduino die Signale einer IR-Fernbedienung ausgelesen und dekodiert. Dafür wird die Arduino-Library IRremote von Ken Shirriff/Rafi Khan verwendet, die auch direkt in der Arduino IDE installieren kann.

Installation der Library IRremote in der Arduino IDE

Sketch

Der folgende Sketch liest Signale einer beliebigen IR-Fernbedienung (hier: aus einem Infrarot-Empfängerkit für Arduino) aus und zeigt sie als dezimale codierte Werte an. Es können hier handelsübliche TV-, DVD-Rekorder, HDD-Rekorder oder HiFi-Fernbedienungen verwendet werden. Somit können pro Knopf auf der Fernbedienung die einzelnen Signale "ausspioniert" werden, um sie z.B. in eigenen Empfängern zu verarbeiten.

#include <IRremote.h>

#define PIN_SENSOR 11

IRrecv irrecv(PIN_SENSOR);
decode_results results;

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

void loop()
{
  if (irrecv.decode(&results)) {
    // print value as decimal number
    Serial.println(results.value, DEC);

    // wait for the next result
    irrecv.resume();
  }
}

Resultat

Ausgabe in der seriellen Konsole
Abb.: Signal-Werte einer generischen IR-Fernbedienung werden in der seriellen Konsole als dezimale Zahlen ausgegeben.

Fernbedienung/Code identifizieren

Die oben verwendete Library hat noch mehr Möglichkeiten der Identifizierung des Typs der Fernbedienung und der Signal-Codes, wie im folgenden Beispiel gezeigt wird:

#include <IRremote.h>

#define PIN_SENSOR 11

IRrecv irrecv(PIN_SENSOR);
decode_results results;

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

void loop()
{
    if (irrecv.decode(&results)) {
        Serial.println(results.value, HEX);
        dump(&results);
        irrecv.resume();
    }
}

void dump(decode_results *results)
{
    int count = results->rawlen;

    Serial.print("Decode type: ");
    switch (results->decode_type) {
        case NEC:
            Serial.println("NEC");
            break;
        case SONY:
            Serial.println("SONY");
            break;
        case PANASONIC:
            Serial.print("PANASONIC");
            break;
        default:
            Serial.print("Other/unknown");
            break;
    }

    Serial.print("Value (DEC): ");
    Serial.print(results->value, DEC);
    Serial.print(" (HEX): ");
    Serial.print(results->value, HEX);
    Serial.print(" (");
    Serial.print(results->bits, DEC);
    Serial.println(" bits)");
    Serial.print("Raw (");
    Serial.print(count, DEC);
    Serial.print("): ");

    for (byte i=1; i<count; i++) {
        if (i & 1) {
            Serial.print(results->rawbuf[i] * MICROS_PER_TICK, DEC);
        } else {
            Serial.write('-');
            Serial.print((unsigned long) results->rawbuf[i] * MICROS_PER_TICK, DEC);
        }
        Serial.print(" ");
    }
    Serial.println("\n");
}

Resultat

Ausgabe in der seriellen Konsole

TCRT-5000 Sensor

TCRT-5000 Sensor

Der TCRT-5000 ist als Näherungssensor gedacht und eine Kombination aus IR-LED und Fototransistor, die beide nebeneinander in einen kleinen Plastikrahmen so verbaut sind, dass das emittierte IR-Licht nicht von der Seite auf den Sensor fallen kann.

Aufbau & Sketch

Schaltplan für den TCRT5000 Sensor

(siehe: Infrarot-Lichtschranke)

Sensor-Modul KY-033

Infrarot Sensor-Modul KY-033

Das Modul KY-033 wurde zur Hinderniserkennung für beispielsweise bewegliche Roboter entwickelt, damit diese Hindernisse erkennen und entsprechend ausweichen können. Das Funktionsprinzip ist recht einfach: eine spezielle LED sendet einen IR-Strahl aus und ein nebenan montierter Fototransistor (bzw. Fotodiode) kann dieses Signal detektieren, sofern es von einem Hindernis reflektiert wird. Die Empfindlichkeit des Moduls kann mit einem montierten Trimmpotentiometer geregelt werden, so dass auch verschiedenartig reflektierende Flächen (weiß oder schwarz) unterschieden werden können.
Ein ähnliches Modul ist das FC-123, welches allerdings keine Einstellmöglichkeit besitzt.

Komponenten des Infrarot Sensor-Moduls KY-033
Abb.: Komponenten des Infrarot Sensor-Moduls KY-033

Verwendete Bauteile

Anschlüsse

KY-033 (FC-123) Arduino
GND (auch: G) GND
VCC (auch: V+) 5V
OUT (auch: S) digitaler Pin z.B. 10

Sketch für Arduino Uno

#define PIN_SENSOR 10

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_SENSOR, INPUT);
}

void loop()
{
    if (digitalRead(PIN_SENSOR) == HIGH) {
        Serial.println("HIGH");
    } else {
        Serial.println("LOW");
    }

    delay(100);
}
zurück