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.
Verglichen zur einfachen Lichtschranke wird hier infrarotes statt sichtbarem Licht verwendet und als Detektor eine Fotodiode, die speziell auf IR-Licht optimiert ist.
#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);
}
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)
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.
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();
}
}
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");
}
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.
(siehe: Infrarot-Lichtschranke)
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.
KY-033 (FC-123) | Arduino |
---|---|
GND (auch: G) | GND |
VCC (auch: V+) | 5V |
OUT (auch: S) | digitaler Pin z.B. 10 |
#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