Infraroodafstandssensor op de Arduino

FunduinoLaatst bijgewerkt op

Entfernung abschätzen, Gegenstände erkennen und Linien verfolgen

Ein Infrarot-Abstandssensor strahlt unsichtbares Licht aus und misst, wie viel davon zurückkommt. Daraus lässt sich ablesen, ob sich etwas nähert – und ungefähr, wie nah es ist.

In dieser Anleitung liest du zuerst die rohen Messwerte aus und schaust sie dir im seriellen Plotter an. Danach lässt du eine LED aufleuchten, sobald sich eine Hand dem Sensor nähert.

Rückseite eines Infrarot-Abstandssensors mit TCRT5000
Rückseite des Moduls mit VCC, GND und den Ausgängen D0 und A0

So funktioniert der Sensor

Mit einem Infrarot-Sensormodul kannst du eine Entfernung abschätzen, einen Gegenstand erkennen oder einer Linie folgen. Die Module gibt es in vielen Ausführungen, der technische Hintergrund ist aber immer derselbe.

Auf dem Modul sitzt eine Infrarot-Leuchtdiode, die unsichtbares Infrarotlicht abstrahlt. Direkt daneben, in derselben Blickrichtung, sitzt ein lichtempfindlicher Empfänger. Nähert sich ein Gegenstand, wird das Licht an ihm reflektiert und vom Empfänger aufgefangen. Das Modul wertet die Stärke des reflektierten Lichts aus und gibt sie – je nach Bauart – als analoges oder digitales Spannungssignal aus.

Wie stark das Licht zurückkommt, hängt stark von der Oberfläche des Gegenstands ab: Ein heller Gegenstand reflektiert mehr als ein dunkler. Die Entfernungsangabe ist deshalb immer ein relativer Wert, keine Messung in Zentimetern.

Anschlüsse des Moduls

Auf der Rückseite des Sensors findest du je nach Modell drei oder vier Kontakte:

  • VCC – Stromversorgung
  • GND – Masse
  • D0 – digitaler Ausgang
  • A0 – analoger Ausgang

In den folgenden Beispielen verwenden wir ein Modul mit beiden Ausgängen und schließen den analogen Ausgang an Pin A1 des Arduino an. Der eigentliche Sensor auf dem Modul ist das Bauteil TCRT5000: Es fasst die Infrarot-LED und den lichtempfindlichen Empfänger in einem Gehäuse zusammen.

Rückseite eines Infrarot-Abstandssensors mit TCRT5000
Rückseite des Moduls mit VCC, GND und den Ausgängen D0 und A0

Messwerte auslesen

Im ersten Beispiel liest du nur den analogen Messwert aus und lässt ihn anzeigen. Je näher du dem Sensor kommst, desto kleiner wird die Zahl.

Schöner als im seriellen Monitor ist die Darstellung im seriellen Plotter: Dort siehst du als Kurve, wie schnell der Sensor auf Veränderungen reagiert. Du findest ihn in der Arduino-Software unter Werkzeuge.

Serieller Monitor mit den Zahlenwerten des Abstandssensors
Die Messwerte im seriellen Monitor
Serieller Plotter mit dem Kurvenverlauf des Abstandssensors
Dieselben Werte im seriellen Plotter – hier sieht man, wie schnell der Sensor reagiert
Kurvenverlauf der Messwerte eines Infrarot-Abstandssensors
Der Kurvenverlauf beim Annähern und Entfernen der Hand
1 / 3
Messwert auslesen und anzeigen
// Das Sensormodul wird mit dem analogen Ausgang an Pin A1 des Arduino angeschlossen.
int SensorAnalog = A1;
// Variable mit dem Namen "Wert1", unter der die Messwerte gespeichert werden.
int Wert1;

void setup()
{
  // Im Setup wird lediglich die Kommunikation zum seriellen Monitor hergestellt.
  Serial.begin(9600);
}

void loop()
{
  // Der analoge Wert an Pin A1 wird ausgelesen und unter "Wert1" gespeichert.
  Wert1 = analogRead(SensorAnalog);
  // Der Wert wird an den seriellen Monitor gesendet.
  Serial.println(Wert1);
}

Aufgabe: LED bei Annäherung einschalten

Nähert sich eine Hand dem Sensor, soll eine LED aufleuchten – im Alltag könnte statt der LED ein elektrischer Seifenspender hängen. Die LED geht also an, sobald ein vorher festgelegter Messwert unterschritten wird.

Den Schwellwert 50 im Sketch passt du an deine Umgebung an: Sieh im seriellen Monitor nach, welchen Wert dein Sensor bei der gewünschten Entfernung anzeigt, und trage ihn ein.

LED einschalten, wenn sich etwas nähert
// Das Sensormodul wird mit dem analogen Ausgang an Pin A1 des Arduino angeschlossen.
int SensorAnalog = A1;
// Variable mit dem Namen "Wert1", unter der die Messwerte gespeichert werden.
int Wert1;
// Die LED an Pin 13 wird im Programm als "LED" bezeichnet.
int LED = 13;

void setup()
{
  Serial.begin(9600);
  pinMode(LED, OUTPUT);
}

void loop()
{
  // Der analoge Wert an Pin A1 wird ausgelesen und unter "Wert1" gespeichert.
  Wert1 = analogRead(SensorAnalog);
  // Der Wert wird an den seriellen Monitor gesendet.
  Serial.println(Wert1);

  if (Wert1 <= 50)  // Wenn "Wert1" kleiner oder gleich 50 ist ...
  {
    digitalWrite(LED, HIGH);  // ... geht die LED an ...
  }
  else  // ... ansonsten
  {
    digitalWrite(LED, LOW);   // ... bleibt die LED aus.
  }
}

Zusatzinformation: Linetracking

Beim sogenannten Linetracking fährt ein Fahrzeug einer schwarzen oder weißen Linie nach. Dabei prüft ein Infrarotsensor die Helligkeit des vom Boden reflektierten Lichts – genau dasselbe Prinzip wie oben, nur dass es hier nicht um die Entfernung, sondern um die Farbe des Untergrunds geht.

Handleiding beoordelen

Opmerkingen

Stel een vraag of deel je ervaring

Neem contact met ons op als iets niet werkt. Vermeld daarbij je board en de foutmelding.

We controleren elke reactie voordat deze wordt gepubliceerd. Je e-mailadres blijft bij ons.