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:

193 Kommentare

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

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

      Antworten
  2. 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

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

      LG Felix

      Antworten
      • 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?