Raspberry Pi Pico: Objekterkennung mit Infrarot-Reflektionssensor FC-51

Mit einem Infrarot-Reflektionssensor wollen wir eine einfache Abstandserkennung bzw. Objekterkennung bauen und damit experimentieren. Wobei nicht ein bestimmtes Objekt erkannt wird, sondern irgendein Objekt, bei dem sich der Abstand zum Sensor verringert. Der Infrarot-Reflektionssensor dient also als Näherungssensor. Eine Anwendung könnte ein berührungsloser Schalter oder eine optische Bewegungserkennung sein.

Mit dem folgenden Programmcode wollen wir zwei Ding mit dem Infrarot-Reflektionssensor tun:

  • Im ersten Schritt prüfen wir, ob der Sensor die Annäherung eines Objekts erkennt und detektiert.
  • Im zweiten Schritt kalibrieren wir den Sensor mit Hilfe des Potentiometers.

Aufbau und Bauteile

Raspberry Pi Pico: Objekterkennung mit Infrarot-Reflektionssensor FC-51

Raspberry Pi Pico FC-51
Pin 36 3V3 OUT VCC
Pin 33 GND GND
Pin 29 GPIO 22 DOUT

Hinweis: Um die folgenden Programmcodes sinnvoll zur Objekterkennung nutzen zu können, muss der Sensor kalibriert werden. Die Vorgehensweise bei der Kalibrierung wird weiter unten beschrieben.

Schnell und einfach alle Bauteile zusammen bestellen

Programmcode

Der digitale Ausgang des Sensor-Moduls, der mit einem digitalen GPIO-Eingang des Picos verbunden ist, wird in einer Endlos-Schleife nach „0“ ausgewertet. In diesem Fall hat der Sensor ein Objekt erkannt und die Onboard-LED leuchtet auf. Man könnte den Sensor natürlich auch nach „1“ auswerten und damit das Entfernen eines Objekts erkennen.
Die Werte „0“ und „1“ werden kontinuierlich auf der Kommandozeile ausgeben.

# Bibliotheken laden
from machine import Pin
from time import sleep

# Initialisierung: Onboard-LED
led_onboard = Pin(25, Pin.OUT, value=0)

# Initialisierung: GPIO22 als Eingang
sensor_d = Pin(22, Pin.IN)

# Wiederholung (Endlos-Schleife)
while True:
    value_d = sensor_d.value()
    print(value_d)
    if value_d == 0:
        led_onboard.on()
    else:
        led_onboard.off()
    sleep(0.2)

Im folgenden Programmcode wird statt der Endlosschleife ein Interrupt gesetzt und eine Funktion zur Behandlung eines Ereignisses verwendet. Diese Lösung macht die Auswertung des Sensor-Moduls vom weiteren Hauptprogramm unabhängig.

# Bibliotheken laden
from machine import Pin

# Initialisierung der Onboard-LED
led_onboard = Pin(25, Pin.OUT, value=0)

# Initialisierung von GPIO22 als Eingang
sensor_d = Pin(22, Pin.IN)

# Funktion: Interrupt-Behandlung
def sensor_irq(pin):
    value_d = not led_onboard.value()
    led_onboard.value(value_d)
    print(value_d)

# Interrupt-Steuerung
sensor_d.irq(trigger=Pin.IRQ_FALLING|Pin.IRQ_RISING, handler=sensor_irq)

So charmant, wie die Interrupt-Lösung scheint, ist sie nicht. Die gute Dame prellt ziemlich heftig, was man mit folgendem Programmcode beobachten kann.

# Bibliotheken laden
from machine import Pin

# Initialisierung: GPIO22 als Eingang
sensor_d = Pin(22, Pin.IN, Pin.PULL_UP)

# Zähler
count = 0

# Funktion: Interrupt-Behandlung
def sensor_irq(pin):
    global count
    count += 1
    print(count)

# Interrupt-Steuerung
sensor_d.irq(trigger=Pin.IRQ_RISING, handler=sensor_irq)

Der Sensor wir hier als Zähler verwendet. Bei jeder Objekterkennung zählt der Zähler allerdings sprunghaft hoch, was falsch ist. Gibt es eine Lösung dafür? Ja, indem man die Schleife bei einer Erkennung kurz pausiert.

Kalibrierung und Experimente

Der Erkennungsbereich beträgt nur ein paar Zentimeter (cm). Wenn der Abstand zwischen den Sensor-LEDs und dem Objekt zu groß ist, dann funktioniert die Erkennung nicht mehr so gut.

Prinzipiell kann man die Erkennungs-LED auf dem Sensor-Board betrachten. Allerdings kann es zwischen dieser LED und der Software-seitigen Auswertung Unterschiede geben.

  1. Halte Deine Hand vor die Sensor-LEDs. Erhöhe und verringere den Abstand zu den Sensor-LEDs und versuche herauszufinden, wie groß der Abstand sein muss, dass Deine Hand erkannt wird. Merke Dir ungefähr den Abstand.
  2. Nehme einen kleinen Schraubendreher und drehe das Potentiometer auf der Sensor-Platine ganz nach links. Halte Deine Hand wieder vor die Sensor-LEDs und erhöhe und verringere den Abstand zu den Sensor-LEDs.
  3. Drehe das Potentiometer ganz nach rechts und wiederhole die Abstandserkennung mit Deiner Hand.
  4. Halte Deine Hand vor die Sensor-LEDs und drehe das Potentiometer nach links und nach rechts, bis Deine Hand erkannt wird.

Beobachtungen

  1. Wird Deine Hand erkannt, leuchtet die Erkennungs-LED auf. Nimmst Du sie weg, dann geht die LED aus. Die Abstandserkennung ist abhängig davon, wie das Potentiometer eingestellt ist. Es kann sein, dass die Erkennungs-LED dauernd oder nie leuchtet.
  2. Wenn man das Potentiometer ganz nach links dreht, wird der Sensor nicht funktionieren.
  3. Wenn man das Potentiometer ganz nach rechts dreht, wird der Sensor dauernd detektieren.
  4. Der Erkennungsbereich, der einstellbar ist, ist nicht besonders groß. Dreht man das Potentiometer nach links, verringert sich der Erkennungsbereich. Nach rechts vergrößert sich der Erkennungsbereich.

Darf es ein bisschen mehr sein?

Was kannst Du jetzt mit diesem Aufbau alles machen? Beispielsweise willst Du irgendetwas schalten. Dann mache einfach einen berührungslosen Schalter daraus.

Weitere verwandte Themen:

Frag Elektronik-Kompendium.de

Hardware-nahes Programmieren mit dem Raspberry Pi Pico und MicroPython

Elektronik-Set Pico Edition

Das Elektronik-Set Pico Edition ist ein Bauteile-Sortiment mit Anleitung zum Experimentieren und Programmieren mit MicroPython.

  • LED: Einschalten, ausschalten, blinken und Helligkeit steuern
  • Taster: Entprellen und Zustände anzeigen
  • LED mit Taster einschalten und ausschalten
  • Ampel- und Lauflicht-Steuerung
  • Elektronischer Würfel
  • Eigene Steuerungen programmieren

Elektronik-Set jetzt bestellen Online-Workshop buchen

Online-Workshop: Programmieren mit dem Raspberry Pi Pico

Programmieren mit dem Raspberry Pi Pico

Gemeinsam mit anderen und unter Anleitung experimentieren? Wir bieten unterschiedliche Online-Workshops zum Raspberry Pi Pico und MicroPython an. Einführung in die Programmierung, Sensoren programmieren und kalibrieren, sowie Internet of Things und Smart Home über WLAN und MQTT.

Online-Workshop buchen

Besuchen Sie unser fast monatlich stattfindendes Online-Meeting PicoTalk und lernen Sie uns kennen. Die Teilnahme ist kostenfrei.

Termine und Newsletter-Anmeldung

 

Elektronik-Sets für das Hardware-nahe Programmieren