Raspberry Pi Infrarot Lichtschranke bauen und Geschwindigkeit messen
In diesem Tutorial möchte ich den Aufbau und die Benutzung einer kleinen Infrarot Lichtschranke zeigen, welche ein Signal gibt, sobald die Lichtschranke unterbrochen wird. Dadurch, dass beide Lichtschranken hintereinander durchfahren werden, kann die Geschwindigkeit gemessen werden.
Zubehör
- IR Sender & Empfänger (ich benutze diese)
- Jumper Kabel
- Widerstände (470Ω und 10kΩ)
Aufbau
Sobald die Lichtschranke unterbrochen wird, soll ein positives Signal gesendet werden, ansonsten ein negatives (0). Dazu verwende ich einen Pull-Up Widerstand, wobei anstelle des Schalters der IR Empfänger (schwarz) ist.




Sobald du die Schaltung aufgebaut hast, sollte die LED bereits aufleuchten, sobald die Lichtschranke geschlossen wird (z.B. Finger dazwischen).
Geschwindigkeit messen
Damit die Geschwindigkeit nun auch gemessen werden kann, wird die Zeit gemessen, die vergeht, bis beide Lichtschranken durchlaufen werden. Sollte der Abstand nicht genau 10cm sein, solltest du dies anpassen.
sudo nano distance_test.py
Und füge folgenden Code ein
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#!/usr/bin/python import time import RPi.GPIO as GPIO GPIO_BEGIN_PIN = 4 GPIO_END_PIN = 17 DISTANCE = 10.0 # (in cm) Anpassen, falls notwendig TIMEOUT = 5 # sek GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) if __name__ == '__main__': GPIO.setup(GPIO_BEGIN_PIN, GPIO.IN) GPIO.setup(GPIO_END_PIN, GPIO.IN) start_time, end_time = 0, 0 while GPIO.input(GPIO_BEGIN_PIN) == GPIO.LOW: time.sleep(0.001) start_time = time.time() end_time = 0 while GPIO.input(GPIO_END_PIN) == GPIO.LOW and time.time()-start_time < TIMEOUT: time.sleep(0.001) else: if time.time()-start_time >= TIMEOUT: print "Timeout" exit() else: end_time = time.time() speed = DISTANCE / (end_time - start_time) print "Geschwindigkeit: %.2f cm/s" % speed |
Mit STRG+O und STRG+X speichern und beenden. Nun können wir es starten.
sudo python distance_test.py
Funktioniert das Skript nicht richtig, liegt dies höchstwahrscheinlich daran, dass die Lichtschranken nicht genau genug aufeinander zeigen und so etwas Strom fließen kann, dieser aber im nicht im akzeptierten Bereich liegt und es nicht bestimmt ist, ob 0 oder 1.
Abschießend noch ein Bild meines Aufbaus:


wie müsste man das Script verändern damit es nicht die Geschwindigkeit misst sondern einfach die Unterbrechung mitsamt datum und Uhrzeit anzeigt(eine kleine Alarmanlage?)?
Anstelle des Codes ab Zeile 16:
Ist natürlich nur ein Beispiel, du kannst es nutzen wie du magst. Du brauchst eigentlich auch die zweite Lichtschranke nicht, wenn du keine Geschwindigkeit messen willst, sondern nur einen Auslöser (
GPIO_END_PIN
kannst du also weg lassen).Hallo Felix,
erstmal danke für das tolle Tutorial. Ich bin in sachen Linux und Raspberry Pi noch Anfänger.
Auf der Suche nach einer Lichtschrankensteuerung bin ich auf deine Seite gestossen.
Gleich hab ich die elektronische Schaltung nachgebaut und sie funktioniert auch so weit.
Jedoch hab ich mit deinem Skript ein paar kleine Probleme:
1. ist in deinem Skript „end_time“ nicht definiert. Diesen Fehler zu finden war noch relativ einfach. Hab einfach Zeile 16 bis 19 kopiert und mit „end_time“ und „GPIO_END_PIN“ modifiziert.
2. Jedoch hab ich noch einen SytaxError in Zeile 21 und da komm ich nicht weiter. Bin ich zu blöd oder hast du da wirklich einen Fehler beim „=“ Zeichen.
Danke und viele Grüsse
Olli
Hallo Olli,
da ist beim editieren vorhin wohl etwas schief gegangen. Ich habe den Code jetzt nochmal eingefügt und verbessert.
LG Felix
Für was ist Zeile 14?
Wenn ich dann diese Zeile weg lasse, kommt sofort nach einer Aktivierung der Lichtschschranke (egal welche zuerst) ein „Timeout“. Vieleicht mein Fehler beim Abtippen?