lichtschranke_Steckplatine

GPIO

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

 

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.

EGHS-PullUpDownSwitchProtected
Die beiden Lichtschranken sind bei mir 10cm von einander entfernt. Damit die Geschwindigkeit richtig berechnet wird, musst du ggf. den Abstand in deinem Skript anpassen. Der eigentliche Aufbau ist wie folgt:

lichtschranke_Steckplatine
Die kleine rote LED ist nur zum testen und kann weggelassen werden.

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

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:



, , , , , , , ,


85 Kommentare

  1. Maxe sagt:

    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?)?

    • Felix sagt:

      Anstelle des Codes ab Zeile 16:

      #Endlosschleife
      while True:
        while GPIO.input(GPIO_BEGIN_PIN) == GPIO.LOW:
          time.sleep(0.001)
        
        zeit = time.time()
        print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit))
        # Skript(e) starten, versenden, etc.
        # ...
        
        # falls die Lichtschranke weiterhin unterbrochen ist, erst weitermachen, sobald sie frei ist
          while GPIO.input(GPIO_BEGIN_PIN) == GPIO.HIGH:
            time.sleep(0.001)
      

      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).

  2. Olli sagt:

    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

    • Felix sagt:

      Hallo Olli,
      da ist beim editieren vorhin wohl etwas schief gegangen. Ich habe den Code jetzt nochmal eingefügt und verbessert.

      LG Felix

    • Olli sagt:

      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?

    • Felix sagt:

      Die Zeile if __name__ == '__main__': sagt, dass der folgende Code nur ausgeführt werden soll, wenn das Skript direkt gestartet wird (sudo python skript.py) und nicht, wenn es z.B. in anderen Skripten eingebunden wurde.
      Ohne diese Zeile sollte es dennoch funktionieren (aber die Tabs müssen angepasst werden, da Python ja ohne Klammern auskommt, daher die Whitespaces/Tabs nimmt).

    • Olli sagt:

      Vielen Dank!!!!!!!!!!!!!!
      Jetzt gehts. :-))
      Das mit den Tabs hab ich nicht gewusst. Mit Halbwissen sollte man halt nicht an sowas gehen. 😉
      Jetzt bin ich wieder um einen grossen Schritt weiter.
      Darf ich dich in den nächsten Tagen nochmal belästigen, falls ich mit meinem Prog noch fragen habe?
      Vielen Dank schon mal und viele Grüsse
      Olli

    • Felix sagt:

      Hi Olli,
      schön dass es nun klappt. Klar, du kannst jederzeit fragen, wenn etwas unklar ist 🙂
      LG Felix

  3. Maxe sagt:

    ok vielen dank auch für den anderen artikel!

    könntest du ein beitrag machen wo es um die ansteuerung eines servos geht?

    • Felix sagt:

      Gerne doch. Wenn Interesse besteht und ich ein wenig mehr Zeit finde, kann ich auch ein Tutorial zu Servos machen, muss aber erst einmal welche bestellen.

  4. Maxe sagt:

    ok sehr gut kannst du mir dann eine E-mail schicken wenn es online ist?

  5. Johannes sagt:

    Bei mir funktioniert das ganze nur, wenn ich den raum abdunkle und dann z.b. eine Glühlampe anschalte. Bei Tageslicht löst der Empfänger immer sofort aus. Ist das bei dir auch so? Den eigentlich sollte die maximale Wellenlänge bei Tageslicht bei ca 550 nm liegen (laut Wikipedia).

  6. Frank sagt:

    Hi und vielen Dank vorab für den tollen Beitrag.

    Leider bekomme ich es mit meinem Rasberry nicht hin die Lichtschranke nachzubauen. Der GPIO zeigt immer den gleichen Status an. Allerdings kommen bei mir auch nur 3,2 V am GPIO an, ist das evtl. zu wenig?

    Freue mich schon auf deine Antwort, da wir endlich unsere Kicker Turnament Anlage in betrieb nehmen wollen 😉

    Danke schonmal vorab

    Frank

    • Felix sagt:

      Hey, erstmal vielen Dank für das Lob 🙂
      3.2V sollten eigentlich kein Problem sein, der Schwellwert liegt deutlich drunter. Wie weit sind die Lichtschranken voneinander entfernt (Sender zu Empfänger)? Und hast du sie mal auf Funktionalität überprüft (am besten ohne Pi mittels einer kleinen Testschaltung)?

    • uwe sagt:

      Hallo Felix,
      Erst mal danke für das Tutorial super Arbeit da ich nicht mehr der Jüngste bin und auch Anfänger freue ich mich natürlich das ich was zum Nachbauen finde und dazu lerne.
      Nun versuche ich schon seit Tagen mir auch die Zeit anzeigen zu lassen Zeit = time.time()
      print time.strftime(‚%Y-%m-%d %H:%M:%S‘, time.localtime(zeit))es kommen nur Fehlermeldung .
      Ich würde gerne noch eine 2 Lichtschranke einbauen so das 2 zeiten gemessen werden mit der 1 Lichtschranke die zeit starten
      Und dan mit den 2 hintern einzel die zeit messen .
      Bedanke mich schon mal ich würde dir auch eine kleine spende für deine Projekte hinterlassen .

    • Felix sagt:

      Hallo Uwe,
      ich weiß nicht, ob es ein Tippfehler ist, aber du schreibst die Variable Zeit einmal groß und einmal klein. Die müssten gleich sein (Python unterscheidet zwischen Groß/Kleinschreibung). Ansonsten sollte der Aufruf stimmen.

      import time
      zeit = time.time()
      print(time.strftime(‘%Y-%m-%d %H:%M:%S’, time.localtime(zeit)))

      eine Alternative wäre datetime:

      from datetime import datetime
      print( str(datetime.now()) )

      LG Felix

  7. Frank sagt:

    Testschaltung habe ich probiert funktioniert auch. Ich habe es jetzt ein wenig abgeändert und den Spanungsteiler geändert. 5 V sind jetzt die Spannungsversorgung und mit 24,7 kOhm als Vorwiederstand bekomme ich dann 3,4 V geliefert. Jetzt gehts auch mit dem GPIO.

    Trotzdem Danke

  8. uwe sagt:

    das hab ich nicht gesehen wen du es sagt ja das ist richtig
    ich hatte den obrigen txt genommen

    #Endlosschleife
    while True:
      while GPIO.input(GPIO_BEGIN_PIN) == GPIO.LOW:
        time.sleep(0.001)
      
      zeit = time.time()
      print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit))
      # Skript(e) starten, versenden, etc.
    

    da ist es schon groß drin ich danke die für die schnelle anwort

  9. Andy sagt:

    Hi,
    super Tutorials auf der Seite.
    Ich würde auch gerne nur eine Lichtschranke (so wie oben im Quelltext in den Kommentaren) bauen. Jedoch habe ich keine LEDS. Wie muss ich umstecken, sodass es trotzdem funktioniert? Bin nicht bewandert in Sachen Schaltungen. 🙁

    • Felix sagt:

      Einfach die Widerstände und alle Kabel, die zu den LEDs führen (und nicht von den IR Dioden genutzt werden) nicht verbinden. Den Code solltest du dann auch ggf. so anpassen, wie du ihn möchtest.

  10. Andrik sagt:

    Hallo,

    ich bin auf der Suche nach genau diesem Aufbau nur in etwas größer. Ich soll für ein Projekt auf der Arbeit eine Geschwindigkeitsanzeige installieren. Jetzt meine Frage:
    Kann man das alles auch in größer realisieren, so wie oben?
    Mit größeren Lichtschranken (Reflexions-Lichttaster von Pepperl & Fuchs) und einer LED-Großanzeige?

    Grüße

    • Felix sagt:

      Hey,
      je nachdem wie genau die Messung sein muss, sollte es mit entsprechenden Lichtschranken möglich sein. Ich würde dann aber auf eine Hardware nahe Sprache wie C oder C++ zurückgreifen und auch möglichst kurze Verbindungen nehmen, damit die Genauigkeit erhöht wird. Die Ansteuerung der LED Anzeigen (dazu gibt es hier auch ein paar Tutorials) sollte mit Python etwas einfacher sein und ein paar Millisekunden Verzögerung sollten dabei akzeptabel sein.
      LG Felix

  11. LeoZ sagt:

    Hallo Felix,
    zuerst einmal Danke für das Tutorial.
    Ich muss im Zuge einer Berufschulprojektarbeit eine derartige Konstruktion aufbauen und wollte mich erkundigen, ob ich dich im Zweifelsfall per Email um Rat fragen könnte. Falls ja, einfach schreiben =)
    Grüße

  12. LeoZ sagt:

    Hallo Felix,

    die Konsole gibt beim ausführen deines Scripts die Fehlermeldung
    File „distance_test.üy“, line 23
    (…)
    SyntaxError: invalid syntax
    aus.
    Irgendeine Idee woran das liegen könnte?
    Grüße 🙂

    • Felix sagt:

      Hey,
      folgendes: Zum einen hast du die Datei falsch benannt („.üy“) und zum zweiten habe ich den Code aktualisiert, da WordPress jedes mal die Leerzeichen entfernt (und Leerzeichen sind in Python wichtig).
      LG Felix

  13. LeoZ sagt:

    Hey,
    den Dateinamen habe ich nur hier falsch eingetippt 🙂
    ist der code oben jetzt aktualisiert oder wie darf ich das verstehen. Ich übernehme den Code in ein Textdokument, nenne es in .py um und führe es aus.
    Sollte das funktionieren?
    PS: in der Codierung für eine Alarmanlage meint „ab zeile 16“ alles unter Zeile 16 wird ersetzt oder AUCH zeile 16?
    LG Leo

    • Felix sagt:

      Genau, grad den jetzigen Code (mit Einrückungen) mit dem davor ersetzen. Der Code war zwar schon davor richtig, aber WordPress ersetzt gerne mal mehrere Leerzeichen hintereinander, daher waren die Einrückungen falsch. Vor Zeile 14 waren aber keine nöig, daher erst ab:
      if __name__ == '__main__':

  14. LeoZ sagt:
    #!/usr/bin/python
    import time
    import RPi.GPIO as GPIO
     
    GPIO_BEGIN_PIN = 4
    GPIO_END_PIN = 17
     
    DISTANCE = 2.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)
    
    #Endlosschleife
    while True:
      while GPIO.input(GPIO_BEGIN_PIN) == GPIO.LOW:
        time.sleep(0.001)
      
      zeit = time.time()
      print time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(zeit))
      # Skript(e) starten, versenden, etc.
      # ...
      
      # falls die Lichtschranke weiterhin unterbrochen ist, erst weitermachen, sobald sie frei ist
        while GPIO.input(GPIO_BEGIN_PIN) == GPIO.HIGH:
          time.sleep(0.001)

    das ist jetzt der Code den ich verwende, wenn ich ihn ausführe passiert eigentlich garnichts, auch wenn ich beide lichtschranken unterbreche. Ich will an der Stelle nur Datum und Uhrzeit einer Unterbrechung, nicht die Geschwindigkeit mitbekommen und habe deshalb den Code aus einem deiner Kommentare ergänzt. Der Schaltkreis ist identlich mit deinem.
    Frage: brauche ich einen AD-wandler wenn ich ein digitales Signal an beispielsweise eine Alarmanlage weiterleiten will?
    beste Grüße,
    Leo

    • Felix sagt:

      Bei dir fehlen die Einrückungen nach if __name__ == '__main__': vor der while Schleife, so hat die If Abfrage keine wirkliche Auswirkung und du kannst sie auch weglassen (oder eben einrücken).
      Wie weit sind die IR Dioden voneinander entfernt? Evtl. liegt es daran, dass kein Signal ankommt. Wenn du nur eine Schranke hast, brauchst du GPIO_END_PIN nicht.
      bzgl Alarmanlage lässt sich das nicht so einfach sagen: Je nachdem, ob sie ein digitales/analoges Signal erwartet bzw wie hoch die Spannung ist. Ggf. könntest du ein Relais benutzen.
      PS: Überprüfe deine Einrückungen alle mal. Ich bin mir nicht sicher ob es an WordPress liegt oder du gekürzt hast, aber z.B. die letzte while Schleife ist anders eingerückt, als das print davor.
      LG Felix

  15. LeoZ sagt:

    Reicht es, nach if __name__== '__main__': alles mit einem Tab weiter einzurücken – bzw wie weit reicht die if-verzweigung also bis zu welchem Befehl muss ich per Tab einrücken?

    Die Dioden sind ca 1.5-2cm außeinander. Davon habe ich zwei paare mit Quelle und Empfänger wie in deinem Beispiel.

    Ohne AD-Wandler müsste die Konsole auf dem Pi trotzdem eine Unterbrechung anzeigen, wenn ich das script ausführe und BEIDE Lichtschranken unterbreche, richtig?

  16. LeoZ sagt:

    Hallo Felix,
    status ist wie folgt, das Skript funktioniert, gibt aber eine permanente Unterbrechung also geschlossenen Stromkreis an. Die Lichtschranken sind allerdings ununterbrochen und auf den LEDs kein Strom. Die Konsole gibt im Millisekundentakt die Zeit und das Datum aus. Habe ich einen Steck-Fehler am Schaltkreis so dass auf den PINs permanent Strom anliegt, oder reagieren die PINS laut dem Script einfach falsch herum, sprich Datum/Zeit werden bei KEINEM Strom an den PINS ausgegeben?
    Sry für die vielen Posts,
    Grüße, Leo

    • Felix sagt:

      Hey Leo,
      bzgl. Python und den Einrückungen solltest du dir evtl. die Syntax von Python ansehen: Statt Klammern wird in Python der Code, der z.B. nach einem if ausgeführt werden soll, eine Ebene (sei es ein Tab, ein/zwei/beliebig viele Leerzeichen) eingerückt.
      Wenn das Skript sonst soweit funktioniert, ist das ja schon mal gut. Da ich deinen Schaltplan nicht kenne, kann ich dir nicht sagen, ob du evtl. etwas falsch verbunden hast, aber das hört sich sehr danach an, dass „zu viel“ Strom durch gelangt und dadurch dauerhaft ein Signal ankommt. Du könntest einen größeren Widerstand ausprobieren (oder Poti zum drehen) und schauen, ob das hilft. Wenn nicht sehen wir weiter.
      LG Felix

  17. LeoZ sagt:

    betrieben wird das ganze ja vom 3.3V PIN am RasPi, ansonsten habe ich dieselben Wiederstände wie du verwendet (470Ohm, 10KOhm). Woher sollte der Unterschied zu deinem Beispiel kommen? Welche soll ich versuchen zu ersetzen und durch einen wie großen?
    LG Leo 🙂

    • Felix sagt:

      Benutzt du auch die selben IR Dioden (meine waren von Pollin)? Sollte zwar auch mit anderen IR Lichtschranken funktionieren, aber evtl. haben diese andere Eigenwiederstände. Falls du einen Poti kannst du den mal statt dem Widerstand einsetzen und schauen, ob sich bei Verändern des Wertes etwas tut.
      LG Felix

  18. Torsten sagt:

    Hallo Felix,
    ich habe einen ähnlichen Aufbau wie du und habe daher versucht deinen Code für mich anzupassen. Ich bekomme aber selbst ohne Anpassung berereits einen „Invalid Syntax“-Error bei der ersten while-Bedingung. Leider kenne ich mich mit Python und GPIOs kaum aus. Dürfte ich dich bitten einen kurzen Blick darauf zu werfen? Vielleicht ist der Fehler ja total simpel und ich sehe ihn einfach nicht.
    Vielen Dank für deine Mühe!
    Torsten

    #!/usr/bin/python
    import time
    import RPi.GPIO as GPIO
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    
    LSein = 17
    LSaus = 18
    TOUT = 2 # Timeout nach 2 sek
    weg = 0.5 # Strecke zwischen den Lichtschranken [m]
    
    GPIO.setup(LSein, GPIO.IN)
    GPIO.setup(LSaus, GPIO.IN)
    
    while GPIO.input(LSein) == GPIO.LOW
        time.sleep(0.001)
        start_time = time.time()
    end_time = 0
    
    while GPIO.input(LSaus) == GPIO.LOW and time()-start_time = TOUT:
            print("Timeout")
            exit()
        else:
            end_time = time.time()
    
            geschw = weg / (end_time - start_time)
            print("Geschwindigkeit: %.2f m/s" % geschw)
    • Torsten sagt:

      na das mit dem Code hat ja super geklappt 😀 wie macht ihr das mit den grauen Kästchen? Auf jeden Fall sind die Einrückungen richtig, die habe ich oft genug überprüft

    • Felix sagt:

      Einfach mit <pre>Text</pre> 😉

    • Felix sagt:

      Zwei Fehler:
      while GPIO.input(LSein) == GPIO.LOW da fehlt der Doppelpunkt am Ende.

      and time()-start_time = TOUT: da müssen zwei GLeichheitsszeichen hin: and time()-start_time == TOUT:
      Außerdem ist in der zweiten While Schleife ein else, aber entweder fehlt ein if oder die Einrückung ist falsch.
      LG Felix

    • Torsten sagt:

      Oh danke, auf den Doppelpunkt wäre ich nie gekommen.

      Bei der zweiten while sind beim Kopieren anscheinen ein paar Zeilen verloren gegangen, eigentlich sieht das so bei mir aus:

      while GPIO.input(LSaus) == GPIO.LOW and time()-start_time = TOUT:
              print("Timeout")
              exit()
          else:
              end_time = time.time()
      
              geschw = weg / (end_time - start_time)
              print("Geschwindigkeit: %.2f m/s" % geschw)
      

      Ja, liegt am Kopieren, war wieder weg. Habe es jetzt hoffentlich richtig von Hand eingefügt.

      Werde deine Korrektur gleich morgen früh mal probieren. Vielen Dank schonmal!

  19. Torsten sagt:

    Also irgendwie wollen die Zeilen nicht, sind schon wieder verschwunden 😀 Ich habe es aber praktisch oben abgeschrieben, da ist noch das erste else und if mit print(„Timeout“) vor

    • Felix sagt:

      Poste es mal auf http://pastebin.com und verlink es hier.

    • Torsten sagt:

      Ich habe mal mein gesamtes Programm reinkopiert: http://pastebin.com/Y7N6cfFx

      Ich konnte es leider noch nicht austesten, da das kleinste Zeitintervall bei mir nur 0,01s ist. Kann man das ändern? Sonst ist man bei der Messung mit 0,5m Abstand zwischen den Lichtschranken (leider gegeben, den Abstand kann ich nicht ändern) ja auf 50m/s begrenzt. Ich bräuchte da eher so 1000m/s. Kann ich das kleinste Zeitintervall auf 0.00001s ändern?

      Ich muss nicht lange messen, d.h. vor dem Komma reichen ein paar Stellen.

  20. Martin sagt:

    hey ich hab mal eine frage,
    für ein projekt hab ich vor die geschwindigkeit beim kickern zu messen (1. lichtscranke beim angreifer und 2. im tor),

    wie weit dürfen der sender und der empfänger auseinander sein?

  21. Martin sagt:

    bis jetzt ist der plan die von dir als alternative vorgeschlagenen zu verwenden

    http://www.amazon.de/gp/product/B00EFOTJZE?ie=UTF8&linkCode=as2&camp=1634&creative=6738&tag=754-21&creativeASIN=B00EFOTJZE

    der abstand währe allerdings deutlich größer(~74cm)
    ist das machbar? oder gibts da ein besseren vorschlag deinerseits?
    Ich hab mir auch überlegt einen Laser zu verwenden, würde das auch mit einem einfachen fotowiderstand funktionieren?

    • Felix sagt:

      Hm das kommt auf das Modell an, da müsstest du mal testen. Ich habe so einen großen Abstand nie gebraucht.
      Ein Fotowiderstand würde nicht mit Infrarot funktionieren (Umgebungshelligkeit zu hoch), wahrscheinlich aber mit einem Laser (falls das in Frage kommt). Dazu einfach den Fotowiderstand platzieren und den Laser direkt darauf zielen lassen.

  22. Martin sagt:

    wenn ich mal dumm fragen darf,

    wie sieht den so eine abfrage vom fotowiederstand im python aus? bin selbst erst extremer anfänger
    hier mal code: http://pastebin.com/Xn9i0wc8

  23. Martin sagt:

    erstmal vielen danke für die hilfe,

    könntest du mir aber bitte noch sagen ob dieser laser funktioniieren würde?
    ebay.eu/1l9TYeu
    und mir dann noch bitte sagen ob dieser schaltplan funktionieren würde(man sollte sehen das ich ein anfänger bin)
    http://imgur.com/BuT17rl

    • Felix sagt:

      Hallo Martin,
      ja das sollte funktionieren (links Laser, rechts Fotowiderstand). Modul sollte in Ordnung sein, kommt allerdings aus China 😀

  24. Holger sagt:

    Moin zusammen,

    ich bekomme immer diese Fehlermeldung 🙁

    Traceback (most recent call last):
    File „geschw.py“, line 26, in
    if time.time()-start_time >= TIMEOUT:
    NameError: name ’start_time‘ is not defined

    Die Schaltung an sich funktioniert. Die LED sind dunkel und wenn ich die Lichtschranke unterbreche, leuchtet die jeweilige.

    Ich komme nur mit der Fehlermeldung nicht weiter, weil eigentlich start_time definiert ist.

    Gruß
    Holger

    • Holger sagt:

      Hat sich aufgeklärt. Die Lichtschranken müssen ja wirklich extrem nah gegenüber stehen. 4cm zwischen Sender und Empfänger waren zu viel.

      Gruß
      Holger

  25. EOL sagt:

    Hey, bin am Aufbau, hab alles bei Conrad gekauft. Der Fototransistor hat allerdings 3 pins, was soll ich tun? kannst du mir ein Bild des ganzen Konstrukts schicken?
    DANKE

  26. Thomas sagt:

    Hallo,

    ich habe dein Versuch einmal nachgebaut und es funktioniert auch mit einer Lichtschranke. Ich würde jedoch gerne einen größeren Bereich abdecken, also auch weiter oben noch einen Sensor anbringen. Dann dachte ich mir einfach, dass ich diese Parallel schalte. Das dürfte jedoch nicht klappen, weil dann immer beide Schranken gleichzeitig durchbrochen werden müssten.
    Gibt es eine Möglichkeit mehrere Lichtschranken „übereinander“ zu positionieren, damit es auch noch funktioniert?
    (Brauche es für einen Kicker Tisch und das Tor ist leider etwas größer^^)

    • Felix sagt:

      Du könntest entweder stärkere Sender/Empfänger Paare nehmen, oder z.B. einen Fototransistor und einen Mini-Laser. An den Fototransistor hängst du einen größeren Widerstand (musst du mal testen, ab wann das normale Umgebungslicht ignoriert wird). Wenn ich Zeit finde, werde ich vielleicht in Zukunft dazu mal ein Tutorial machen, ist aber eigentlich recht simpel.
      LG Felix

  27. Beste Grüße Enrico sagt:

    Schön guten Tag,

    vielen Dank für die hilfreichen Tips. Ich wollte das ganze erweitern, dass ab einer bestimmten Geschwindigkeit eine DUO LED Grün oder Rot aufleuchtet. Da ich totaler anfänger bin wollte ich Sie Fragen wie der Code und die Verdrahtung erweitert werden muss?
    Vielen Dank im Voraus

    • Felix sagt:

      Hey,
      was meinst du genau? Sobald die Lichtschranke durchbrochen wird eine LED erleuchten lassen? Falls ja: Raspberry Pi Ampelschaltung mit GPIO Teil 1

    • Enrico sagt:

      Hallo ,

      vielen Dank für die schnelle Antwort. Ich wollte gerne mit dieser Schaltung eine Blitzeranlage simulieren. Sprich das ab einer bestimmten Geschwindigkeit eine LED leuchtet.

      Beste Grüße

    • Felix sagt:

      Hallo Enrico,
      wenn du die Geschwindigkeit eines näher kommenden Objekts feststellen willst, kannst du u.a. auch das Tutorial ansehen:
      Infrarot Abstandsmessung mit dem Raspberry Pi (Sharp GP2Y0A02YK0F)
      Das kann ähnlich zu einem Blitzer funktionieren: In einer Dauerschleife misst du den Abstand und sollte dieser Sich nähern kannst du aus der Zeitdifferenz der letzten Messung und der Differenz der Entfernung die Geschwindigkeit berechnen.

    • Enrico sagt:

      Schön guten Abend,

      ich wollte das Programm mal testen, kriege aber immer folgende Fehlermeldung:

      Traceback (most recent cail last) :
      File „distance.py“, line 26, in
      if time.time()-start_time >= TIMEOUT:
      NameError: name ’start_time‘ is not difined

      Ich hab den oberen Code nur kopiert und eingefügt. Woran kann das liegen?
      Vielen Dank im Voraus ! 🙂

    • Felix sagt:

      Schreib in Zeile 17 folgendes (ein Tab zum einrücken): start_time, end_time = 0, 0
      Hab es im Skript aktualisiert 🙂

    • Enrico sagt:

      hey,

      vielen Dank hat geklappt. Aber wie kann es sein, dass obwohl die Lichtschranke nicht unterbrochen wurde, mir Geschwindigkeiten angezeigt werden?

      Beste Grüße

    • Felix sagt:

      Ich nehme an, dass ein Signal übertragen wurde. Das kann z.B. durch anderes (Infrarot)Licht, was den Empfänger erreicht hat passieren.

    • Enrico sagt:

      Fehlt eventuell eine While Schleife? Da er mir ja sofort Timeout ausgibt , wenn ich das Programm Starte und nicht die erste Lichtschranke durchbrechen. Kriege es leider immer noch nicht hin. Bin auch schon mehr mals den Aufbau durch gegangen.

      Beste Grüße

    • Felix sagt:

      Wo im Code meinst du genau? Es kann auch an deinen Lichtschranken liegen, sodass durch diese „immer“ Strom fließt, wodurch keine echte Messung entsteht.

  28. Sascha sagt:

    Hallo Felix,

    erstmal danke für das tolle Tutorial.
    Ich würde gerne ein Sprintanlage für Sportler bauen.
    Dafür würde ich gerne gerne IR Sender und Empfänger verwenden. Weißt du, ob die IR Sender und Empfänger die du verwendet hast eine Entfernung von 2 Metern schaffen?
    Bzw gibt es da noch eine andere Möglichkeit?
    Viele Dank im voraus,
    Sascha

    • Felix sagt:

      Hallo Sascha,
      diese lichtempfindlichen IR Dioden werden sich eher weniger eignen. Dafür würde ich einen Sharp IR Distanzsensor nehmen. Im „offenen“ Zustand misst er immer die selbe Distanz. Sobald jemand durch läuft, verringert sich die gemessene Distanz und du weißt, dass die Lichtschranke unterbrochen wurde. Details dazu hier: Infrarot Abstandsmessung mit dem Raspberry Pi (Sharp GP2Y0A02YK0F)
      Alternativ kannst du auch einen Laser + Photodiode nehmen.
      LG, Felix

    • Sascha sagt:

      okay, vielen Dank für die Antwort.
      der Distanzsensor ist mit etwas zu teuer, da ich 3 oder 4 auf 30 Meter aufstellen möchte.
      Die Idee mit den Photodioden ist mir auch gekommen, jedoch war ich mir dabei nicht ganz sicher. Aber da du das auch vorgeschlagen hast, werde ich das Mal auf die Art und Weise in Angriff nehmen.
      Ich werde dann eine Hülle um die Photodiode bauen, um sie vor Sonneneinstrahlung zu schützen.

      Nochmals vielen Dank und liebe Grüße,
      Sascha

  29. Marc sagt:

    Hallo,
    ich habe folgende LEDs bestellt: https://www.amazon.de/pairs-Infrared-Diode-Emission-Receiver/dp/B00EFOTJZE?ie=UTF8&camp=1634&creative=6738&creativeASIN=B00EFOTJZE&linkCode=as2&redirect=true&tag=754-21
    Der Empfänger hat 3 Anschlüsse. Deiner hat zwei. In wieweit müsste ich etwas verändern?
    LG

    • Felix sagt:

      Die Paare von Pollin sind eher „Pseudo“ IR Module, da sie keine Signale senden, sondern eher wie Phototransistoren arbeiten. Du könntest aber mal versuchen einfach eine Spannung an den Datenpin zu legen.

    • Marc sagt:

      Wieso eine Spannung an den Datenpin anlegen. Es ist laut Amazon ein „Out“ Pin. Ist die Frage, wie ich die Ausgangsströme irwie am Pi auslesen kann. LEDs sind noch nicht angekommen, daher konnte ich es noch nicht testen. Du hattest diese LEDs ja als Alternative vorgeschlagen, dann müsste es ja irwie gehen. Will nur prüfen, ob IR ankommt oder nicht.
      LG

    • Felix sagt:

      Das war auf den Sender bezogen. Was du mit diesen IR LEDs ausprobieren kannst, ist folgendes:
      Raspberry Pi Fernbedienung: Infrarot Steuerung einrichten
      Allerdings kann es sein, dass trotz „direkter“ Unterbrechung zwischen Sender/Empfänger, noch weiter ein Signal empfangen wird (kommt auf die Fläche des unterbrechenden Objekts an).

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!