Lichtschranken sind eine gute Möglichkeit Unterbrechungen festzustellen oder z.B. einen Zähler zu bauen. Mit einer Raspberry Pi Laser Lichtschranke ist dies auch für weite Entfernungen möglich. Im Gegensatz zu einem anderen Ansatz, nutzen wir keine Infrarot Dioden, sondern einen Punkt-Laser, welcher auf einen Lichtsensor gerichtet ist. Das gebündelte Licht des (roten) Lasers ist stärker als das normale Umgebungslicht und somit können wir selbst über große Distanz eine Lichtschranke bauen. Mittels zweier solcher Laser Lichtschranken mit bekanntem Abstand können wir auch sehr einfach die Geschwindigkeit ermitteln.
Im Tutorial wird u.a. auf die Verbindung und die Programmierung der Diode eingegangen, sodass die eigens entworfene Lichtschranke auch funktioniert. Außerdem ist im Video alles noch einmal veranschaulicht.
Zubehör
Wie in einem vorherigen Tutorial bereits gezeigt, kann eine Fotodiode einen analogen Wert ausgeben, den wir mit einem Analog-Digital Wandler auslesen könnten. Wir brauchen allerdings lediglich einen binären Zustand (Lichtschranke offen/geschlossen), weshalb sich die verbauten Module besser eignen. Bei diesen ist ein Potentiometer direkt dabei, dessen Sensibilität wir einstellen können. Ist der Einsatzort eher hell, so stellen wir den Widerstand höher. Über den digitalen Ausgabe Pin können wir den Zustand einfach abfragen.
Für unsere Raspberry Pi Laser Lichtschranke benötigen wir natürlich auch noch einen Laser. Dabei gibt es verschiedene Aufsätze, z.B. „Strich-Laser“ aber auch ganz normale Dot-Laser. Den letzteren brauchen wir:
Zusammen kosten die Bauteile nur wenige Euro aber sind alles, um die Laser Lichtschranke an unserem Raspberry Pi zu realisieren.
Verkabelung der Raspberry Pi Laser Lichtschranke
Von den beiden Komponenten muss nur der Fotowiderstand an den Pi angeschlossen werden – der Laserpointer kann auch von einer anderen Stromquelle versorgt werden, da dieser keinen Datenpin hat. Dementsprechend muss nur das rote Kabel an eine positive ~3.3V Spannung angeschlossen werden und das schwarze Kabel an Masse / Minus. Du kannst aber natürlich auch diese Spannung vom Pi abzwacken.
Anders sieht es beim Fotowiderstand aus: Dabei wird ebenfalls an VCC eine 3.3V Spannung (vom Pi) angeschlossen und GND kommt ebenso an GND. Wir nutzen allerdings den digitalen Pin (D0) und schließen diesen an einen freien GPIO an, bspw. GPIO 23 (Pin 16) bzw. einem anderen freien GPIO des Raspberry Pi’s. In der schematischen Zeichnung unten sind nur 3 Pins zu sehen, aber oftmals normalerweise haben die Sensoren 4, wovon der analoge Pin (A0) frei bleibt. Stelle sicher, dass dein Modul eine digitale Ausgabe hat, sofern es nur 3 Pins hat.
Positionierung des Lasers
Sind beide Komponenten soweit angeschlossen, müssen wir diese positionieren. Wichtig ist dabei, dass der Laser exakt auf die Mitte des Fotowiderstands zeigt und beide Komponenten gut befestigt werden. Ich empfehle dafür Heißkleber oder Panzertape (bzw. in Kombination), sofern keine „professionelle“ Befestigung möglich ist. Es bietet sich an, zuerst den Laser zu montieren und anschließend den Fotowiderstand auf den Laserpunkt angepasst anzubringen. Achte aber darauf, dass der Laser heiß werden kann und dies ggf. den Kleber weich machen lässt.
Anschließend müssen wir noch den Potentiometer des Moduls einstellen. Nimm dazu einen kleinen Schlitzschraubenzieher. Falls der Laser noch aktiv ist, unterbrich den Strahl (Hand davor halten) und drehe den Regler, bis die LED aufhört zu leuchten. Aber Achtung: es gibt zwei LEDs, wovon eine den generellen Status anzeigt (an/aus) und die andere den Status des Lichtsensors. Das Ziel ist es, dass der Sensor nicht durch das Umgebungslicht aktiviert wird, sondern nur dann, wenn das Laserlicht darauf scheint. Der Status der LED sollte sich also ändern, wenn du den Strahl wieder darauf scheinen lässt.
Falls es zu hell ist, kannst du den Außenbereich etwas abdunkeln: Stecke den Sensor in z.B. eine Klopapierrolle, welche einen Schatten auf den Sensor wirft. Beachte auch, dass es evtl. heller werden kann, als es zum Testzeitpunkt ist und drehe den Vorwiderstand lieber ein wenig höher, solange das Modul durch das Umgebungslicht + Laserlicht weiter aktiviert wird.
Der große Vorteil von Lasern im Vergleich zu Infrarot o.ä. ist die hohe Reichweite. Je nach Stärke sind sogar 30-50m möglich. Dabei sollte allerdings der Laser separat mit 5V Spannung versorgt werden.
Hier schon einmal der Aufbau als Video. Darin habe ich den Sensor am Ende mit etwas Kreppband abgedunkelt:
Code zum Erfassen
Wir erzeugen zunächst eine neue Datei:
sudo nano laser_lichtschranke.py
Hier fügen wir folgenden Code ein (danach speichern mit STRG+O und beenden mit STRG
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 |
import RPi.GPIO as GPIO import os, time RECEIVER_PIN = 23 def callback_func(channel): if GPIO.input(channel): print("Lichtschranke wurde unterbrochen") # alternativ kann ein Script / Shell Befehl gestartet werden # os.system("ls") if __name__ == '__main__': GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(RECEIVER_PIN, GPIO.IN) GPIO.add_event_detect(RECEIVER_PIN, GPIO.RISING, callback=callback_func, bouncetime=200) try: while True: time.sleep(0.5) except: # Event wieder entfernen mittels: GPIO.remove_event_detect(RECEIVER_PIN) |
Das Skript funktioniert recht einfach: Beim ausgewählten GPIO (23) wird jedes mal, wenn sich der Status ändert, eine Funktion aufgerufen. In dieser Funktion prüfen wir dann, ob der binäre Status wahr ist (hohe Spannung). Falls ja, war eben noch die Laser Lichtschranke geschlossen und wurde nun unterbrochen. Der untere Teil mit der Endlosschleife dient nur dazu, dass das Programm nicht sofort aufhört. Details zu den genutzten Funktionen kannst du hier finden.
Das Skript können wir nun testen:
sudo python laser_lichtschranke.py
Mit diesem Code können wir verschiedene Anwendungen realisieren, wie z.B. einen Zähler für Menschen / Objekte, die die Lichtschranke passieren oder eine Zeit-/Geschwindigkeitsmessung, wenn man mehrere dieser einfachen GPIO Lichtschranken hintereinander platziert hat.
29 Kommentare
Hallo,das ist ein super Sache! jetzt kann ich eine Überwachung bauen und mir melden lassen sobald jemand zwischen den Haus zu unseren Nachbarn hergeht, wo eigentlich kein Weg ist und eventuell damit eine Kamera auslösen oder eine Lampe anmachen.Dort sind schon häufiger Leute zum klauen der Kupferfallrohre hergegangen. Vielleicht kann man ja auch ein Spiegel auf der Gegenseite anbringen und so beide Bauteile die Strom brauchen im Bereich der Stromquelle belassen?!
Gruss Udo
Hallo Udo. Du musst allerdings berücksichtigen, dass die meisten Lasermodule eine für den Dauerbetrieb eher geringe Leuchtdauer von 2000 Stunden haben – also gerade einmal 84 Tage oder bei nur Nachtbetrieb ca. ein 3/4 -Jahr. Danach müsste das Modul getauscht werden. Bei den geringen Preisen sicherlich kein Problem – allerdings könnte das Tauschen an sich eventuell recht Aufwendig sein, je nach Aufbau deiner Installation.
Gruss Antoin
Hi Felix,
danke erstmal wieder für das Tutorial. Könnte man mit dieser Schaltung auch die Laufzeit eines vom Laser ausgesendeten Signals auswerten um z.B. die Entfernung zu messen, oder ist der RP zu langsam für solche Aufgaben?
Entspannte Pfingsten,
Thomas
Hi Thomas,
verstehe ich dich richtig, dass du quasi die Lichtgeschwindigkeit messen willst? Dafür ist der Pi zu langsam.
Hi Felix,
könntest du auch zeigen wie man eine Lichtschranke baut um eine „Stoppuhr“ daraus zu bauen?
MfG,
Tim
Man bräcuhte zwei Lichtschranken, speichert die Zeit wann die erste durchlaufen wird, ebenso wann die zweite und mit Hilfe der Differenz und dem bekannten Abstand der beiden kann man die Geschwindigkeit berechnen (äquivalent zu diesem Tutorial). Ich dachte es wäre recht einfach, aber vielleicht kann ich in der Zukunft nochmal ein separates Tutorial dazu schreiben.
LG, Felix
Hi Felix,
ich hätte eine kurze Frage: Weißt du ob der Laser auch mit 4,5 Volt funktioniert? Wollte nämlich drei AA Batterien (je 1,5 V) in Reihe schalten zur Stromversorgung. Auf deinem Schaltplan steckst du den Laser auf +3,3 V an im Video aber auf 5 V daher auch meine Frage.
LG Tom
Bei den meisten Lasern sollte das kein Problem sein. Genaueres findest du allerdings im Datenblatt.
Danke!
Ich habe zwar keine Ahnung, aber die meisten AA-Akkus arbeiten doch mit 1,2V (im Gegensatz zu den Batterien, die mit 1,5V arbeiten) … wenn du also 4 AA-Akkus in Reihe schaltest, solltest du noch näher an die gewünschten 5V kommen und die Stromversorgung sollte dann sogar länger halten
Hallo Felix,
in meinem Projekt soll die Zeit und Geschwindigkeit mit 3 oder mehreren hintereinander geschalteten Laser-Lichtschranken gemessen werden (Ähnlich wie bei der Infrarotlichtschranke). Wie müsste ich den Quellcode oben für die Laserlichtschranke anpassen/verändern damit dies möglich ist. Kann ich auch die Zwischenzeit an jeder einzelnen Laserlichtschranke abfragen? Danke für die Mithilfe.
Hallo,
ich müsste den oben stehenden Code so umformen, dass bei einer Unterbrechung des Laser eine Stoppuhr anfängt zu laufen und bei einer erneuten Unterbrechung wieder die die Stoppuhr aufhört zu laufen. Allerdings weiß ich nicht wie ich das anfangen soll. Denn mir fehlt einfach der benötigte Script, für die Stoppuhr.
Hoffe mir kann hier jemand helfen.
Wenn Du Dir das oben erwaehnte Script fuer die Geschwindigkeitsmessung ansiehst, sollte sich Dir die Loesung erschliessen:
https://tutorials-raspberrypi.de/infrarot-lichtschranke-bauen-und-geschwindigkeit-messen/
Es gibt nur einen Unterschiede: In dem Beispiel hast Du zwei Lichtschranken (und damit zwei genutzte GPIO Ports) und hier nur eine. Daraus ergeben sich fuer Deine Aufgabenstellung vier Zustaende, die innerhalb eines Messzyklus durchlaufen werden. Im Beispiel werden sie mittels While-Schleifen realisiert (Interrupts waeren eine gute Alternative, aber das wuerde zu weit fuehren 😉
– nichts im Weg => warten bis etwas im Weg ist (Pegel aendert sich)
– nun ist etwas im Weg; Startzeitpunkt festhalten, => warten, bis es nicht mehr im Weg ist
– nun ist der Weg frei => warten, bis wieder etwas im Weg ist
– nun ist wieder etwas im Weg: Endzeitpunkt festhalten. Und schon hast Du die Zeit zwischen Start und Ende gemessen und kannst sie ausgeben
und schon kann es wieder von vorne losgehen
Alles klar?!
Ist die Umsetzung auch mit Lasern möglich? Oder nur mit den Infrarot Sendern…
Also mit einem Laser und einem Fotowiderstand-Modul anstatt den Infrarot-Sensoren?
ja, das geht. Wobei dann die Mechanik ein Problem werden kann, da sichergestell werden muss, dass der kleine Strahl des Laser auch den Empfaenger trifft…
Es gibt uebrigens auch kleine fertige Reflexlichtschranken, die sowohl Sender, als auch Empfaenger mitbringen. Ich nutze z. B. einen CNY70, um zu erkennen, wann der rote Strich bei meinem Elektrozaehler vorbei kommt. Damit bekomme ich die Zeit pro Drehung und kann so den Energieverbrauch berechnen 🙂
Super Sache! Danke dafür! Hat rein zufällig schon einmal jemand getestet, wie schnell der Sensor reagiert, bzw. wie lange der Lichtstrahl unterbrochen sein muss, damit ein Signal ausgesendet wird?
Ich habe vor kurzem meinen Tischkicker mit LED-Streifen ausgestattet und möchte nun, dass diese in einer anderen Farbe aufleuchten, wenn ein Tor geschossen wird. Da jedoch auch die Bälle durchaus schonmal relativ hohe Geschwindigkeiten haben, wenn die ins Tor knallen, wäre es interessant zu wissen, ob sich so etwas damit realisieren lassen würde.
Vielen Dank!! 🙂
Wenn du es softwareseitig (wie bspw. hier) löst, ist mti ein paar ms Latenz zu rechnen. Schneller geht es wenn du die Schaltung direkt per Hardware löst (was aber auch etwas mehr Bauteile und Zeit in Anspruch nimmt).
Hallo Felix,
einmal sprichst du von GPIO 23, im Code steht Pin 23. Welcher ist angesprochen? Und wenn Pin 23, kann ich das dann auch einfach auf einen anderen Pin umlegen, weil der Pin 23 ja wohl irgendwelche Sonderfunktionen hat.
VG
Ja, dadurch dass wir GPIO.BCM verwenden, wird im Code GPIO23 verwendet. Sorry, für die etwas verwirrende Definition!
Hi,
ich bin ein noch etwas blutiger Anfänger, deshalb ist die Frage wahrscheinlich auch nicht die beste, aber nun ja..
In der oben aufgebauten Schaltung sind sowohl Sender als auch Empfänger auf derselben Steckplatte installiert. Was ist jedoch, wenn man zwischen diesen einen freien Raum braucht? (in meinem Fall soll ein kleiner Modellwagen, ca 7 cm breit, die Lichtschranke durchbrechen)
Kann man dann einfach zwei bzw. 4 Steckplatten verwenden, oder gäbe es die (bessere) Möglichkeit einer Kontaktverlängerung via Kabel?
Vielen Dank schon im Voraus!
Die Frage ist der Hammer 😀
Das fällt unter das Thema „Ich habe den Text nicht gelesen“.
Betreibst du eine Taschenlampe auch mit einer Raspberry-Stromversorgung xD ?
Hallo,
Ich bin auf der Suche nach einer Lichtschranke für unsere Bücherei. Sinn und Zweck des ganzen soll sein, dass die täglichen Besucher mithilfe dieser Lichtschranke gezählt werden und der Pi soll für jeden Tag meinetwegen eine Textdatei o.Ä. abspeichern, in der die Anzahl der täglichen Besucher steht. Über eine schritt für Schritt Anleitung würde ich mich sehr freuen, da mir die nötigen Programmierkenntnisse fehlen!
Vielen Dank für eine schnelle Hilfe!
Hallo Felix, bei mir funktioniert es irgendwie nicht , der Code wird garnicht ausgeführt. Ich hab alles überprüft und stehe gerade auf dem Schlauch 🤔
Hallo,
Erstmal vielen Dank für dieses Tutorial, das hilft schon sehr weiter. Ich als blutiger Anfänger verstehe allerdings nicht den kompletten Code, oder eher was ich dort eintragen müsste, um meinen Zweck zu erreichen.
Ich möchte bei Unterbrechung der Lichtschranke einen Transistor durchschalten, welcher einen 2. Stromkreis schließt (12V), um einen permanent Elektromagneten für kurze Zeit auszuschalten.
Ist das mit dieser Bauweise möglich?
Mit freundlichen Grüßen
Hallo
Auch ich bin noch Anfänger im Programmieren. Folgende Variante schwebt mir vor. Ich möchte in der Schule die Geschwindigkeit eines Pendels messen. Möglichst genau, also nicht mit zwei Schranken. Die Uhr soll gestartet werden, wenn der Strahl vom Objekt unterbrochen wird und gestoppt werden, wenn das Objekt den Strahl nicht mehr unterbricht. Mit bekannter Objektbreite (2cm) lässt sich dann auch die Geschwindigkeit bestimmen. Also wie kriege ich die Stoppuhr bei Signal AUS UND bei Siganal EIN getriggert?
Gruß
S.Henning
Hallo Felix, bei mir funktioniert es irgendwie nicht , der Code wird garnicht ausgeführt. Ich hab alles überprüft und stehe gerade auf dem Schlauch 🤔
Hallo Felix,
Achtung, im Video hast Du es richtig angeschlossen aber in deinem Beispielbild ist beim Empfänger plus und Minus vertauscht, der fängt tatsächlich an zu kokeln wenn das so ist. Bitte tausch doch das Bild aus.
Lieben Gruß
Sebastian
Grüße habe mir jetzt für dein tutorial einen lichtsensor und laser gekauft.
Der aufbau als solches funktioniert. die leds am sensor leuchten und die DO LED unterbricht auch wenn ich den laser mit dem finger unterbreche.
Aber Leider bis jetzt null erfolg dieses auch am raspberry via python zu sehen.
Habe einen Raspi4.
und 1 zu 1 das Python Script kopiert.
chmod +x
und dann via sudo python scriptname.py
ausgeführt.
dann kommt aber kein fehler oder sonst was nur das es läuft, bis ich es wieder mit strg + c abbreche
wäre lieb wenn mir da jemand helfen könnte. google jetzt schon eine weile ;(