Raspberry Pi Pico: Lichtschranke mit LED und LDR (KY-018)

Eine Lichtschranke besteht aus einer Lichtquelle und einem Lichtempfänger. In der Regel bilden beide eine Einheit, wobei das optische Signal von einem Spiegel reflektiert wird.

Wir bauen uns hier eine einfache Lichtschranke, mit einer LED als Lichtquelle und einem LDR als Lichtempfänger, die sich gegenüberstehen. Für einfache Anwendungen und wenigen Zentimetern Distanz funktioniert das gut genug. Voraussetzung ist, dass die beiden Bauteile exakt zueinander ausgerichtet sind.

Aufbau und Bauteile mit KY-018 - Photo Resistor Module

  • R1: Widerstand, 470 Ohm
  • LED1: Leuchtdiode, weiß
  • LDR1: KY-018

Dieser Aufbau sieht vor, dass LDR und LED auf wenige Millimeter exakt zueinander ausgerichtet sind. Selbstverständlich kannst Du die Bauteile weiter auseinander und sogar versetzt platzieren. Beim ersten Versucht empfiehlt sich nicht zu sehr von diesem Aufbau abzuweichen.

Hinweis: Wenn Du keine weiße LED hast, dann geht auch jede andere Farbe. Mit einer weißen LED funktioniert es am Besten.

Raspberry Pi Pico KY-018
Pin 38 GND -
Pin 36 3V3 / +VCC Mitte
Pin 31 ADC0 (GPIO26) S

Hinweis: Beim Verbinden des Raspberry Pi Pico mit dem Modul ist auf die Modul Beschriftung der Pins zu achten. +VCC ist nicht zwangsläufig in der Mitte.

Schnell und einfach alle Bauteile zusammen bestellen

Programmcode

Im Prinzip wird die Helligkeit der gegenüberliegenden LED mit einem Fotowiderstand mit Hilfe eines ADC-Eingangs gemessen. Wird das Licht der LED durch ein Objekt verdeckt, dann verändert sich der Widerstandswert des Fotowiderstands, beeinflusst das Spannungsverhalten und am ADC-Eingang verändert sich der Wert. Diese Veränderungen wird im Programmcode erkannt und mit einem Text in der Kommandozeile vermerkt.

Im Programmcode wird die Variable „threshold“ (= Schwelle) definiert. Das ist der Wert ab dem eine Unterbrechung erkannt wird. Unterhalb wird keine Unterbrechung erkannt. Wie groß oder wie klein die Schwelle sein muss hängt stark vom Umgebungslicht, der Entfernung und der Helligkeit der LED ab. Es kann sein, dass es mit dem vorgegebenen Wert ganz gut funktioniert. Vermutlich muss dieser an die Lichtverhältnisse und Bauteile angepasst werden.

# Bibliotheken laden
from machine import ADC
from time import sleep

# Initialisierung des ADC0
ldr = ADC(0)

# Schwellwert bei Unterbrechung
threshold = 5000 # weiße LED
#threshold = 10000 # rote LED

# Unterbrechung (0/1)
interrupt = 0

# Dauer der Unterbrechung
count = 0

# Wiederholung (Endlos-Schleife)
while True:
    # ADC als Dezimalzahl lesen
    value = ldr.read_u16()
    # ADC-Wert ausgeben
    #print('ADC:', value)
    # ADC-Wert auswerten
    if value > threshold:
        interrupt = 1
        count = count + 1
    else:
        interrupt = 0
        count = 0
    # Erste Unterbrechung erkannt
    if count == 1:
        print('Unterbrechung')
    # Zähler ausgeben
    if count > 0:
        print('Zähler:', count)
    # Warten
    sleep(0.1)

Erweiterung: Integrierte Kalibrierung

Denkbar wäre, wenn der Aufbau in wechselnden Umgebungen verwendet wird, dass vor der Endlos-Schleife der Threshold-Wert automatisch kalibriert wird, damit unterschiedliche Lichtverhältnisse berücksichtigt werden können. Für die Kalibrierung muss der Programmcode die LED durch einen GPIO-Ausgang ein- und ausgeschalten können.

Aufbau mit integrierter Kalibrierung

Damit die Lichtschranke kalibriert werden kann, muss die LED ein- und ausgeschaltet werden. Dazu darf sie nicht mit +3,3 Volt verbunden sein, sondern mit einem GPIO-Ausgang.

Programmcode mit integrierter Kalibrierung

Der folgende Programmcode kalibriert sich selber. Das heißt, er ermittelt die Helligkeit der Lichtverhältnis mit ausgeschalteter und eingeschalteter LED. Daraus berechnet der Programmcode die Schaltschwelle, ab wann eine Unterbrechung erkannt wird.

# Bibliotheken laden
from machine import ADC, Pin
from time import sleep

# Initialisierung des ADC0
ldr = ADC(0)

# Initialiserung GPIO16 für LED
led = Pin(16, Pin.OUT, value=0)

# Kalibrierung des Schwellwerts
print('Kalibrierung')

# Messung: Helligkeit, wenn LED aus (Unterbrechung)
valueOff = ldr.read_u16()
print('Schaltschwelle bei Unterbrechung:', valueOff)

# LED einschalten
led.on()
sleep(1)

# Messung: Helligkeit, wenn LED an (Normal)
valueOn = ldr.read_u16()
print('Schaltschwelle wenn LED an:', valueOn)

# Berechnung: Schwellwert
threshold = int(valueOff + (valueOn - valueOff) / 2)
print('Berechneter Schwellwert:', threshold)
print('Kalibrierung beendet')

# Unterbrechung (0/1)
interrupt = 0

# Dauer der Unterbrechung
count = 0

# Wiederholung (Endlos-Schleife)
while True:
    # ADC als Dezimalzahl lesen
    value = ldr.read_u16()
    # ADC-Wert ausgeben
    #print('ADC:', value)
    # ADC-Wert auswerten
    if value > threshold:
        interrupt = 1
        count = count + 1
    else:
        interrupt = 0
        count = 0
    # Erste Unterbrechung erkannt
    if count == 1:
        print('Unterbrechung')
    # Zähler ausgeben
    if count > 0:
        print('Zähler:', count)
    # Warten
    sleep(0.1)

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