Raspberry Pi - IR-Gabellichtschranke (Geschwindigkeitssensor)
Dieses Tutorial zeigt Ihnen, wie Sie mit dem Raspberry Pi und einem kurzen Python-Skript die Impulse einer IR-Gabellichtschranke auslesen. Sie kennen dieses Bauteil vielleicht auch als Photo Interrupter oder Opto Interrupter. Es erkennt, wenn etwas durch seinen schmalen Spalt geht. Mit diesem einen Signal kann der Raspberry Pi Objekte zählen oder feststellen, wie schnell sich ein Rad oder eine Motorwelle dreht. Im Detail lernen wir:
- Was im U-förmigen IR-Sensor passiert, wenn der Spalt frei ist und wenn er blockiert ist
- Wie man die IR-Gabellichtschranke mit 3,3V an die GPIO-Leiste eines Raspberry Pi 4 anschließt
- Wie man den Raspberry Pi programmiert, um jedes Objekt zu zählen, das durch den Schlitz geht
- Wie man den Raspberry Pi programmiert, um die Drehzahl eines Motors in U/min (RPM) mit einer Encoderscheibe und einem GPIO-Event-Callback zu messen
Wir empfehlen:
- Einen Rotary Encoder zu verwenden, wenn Sie einen von Hand gedrehten Knopf möchten, der auch die Drehrichtung erkennt.
- Einen Infrarot-Hindernissensor zu verwenden, wenn sich das Objekt vor dem Sensor befindet, einige Zentimeter entfernt, und nicht in einen Schlitz passt.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über die IR-Gabellichtschranke
Wenn Sie das Modul von der Seite ansehen, erkennen Sie den Buchstaben U. Die beiden Arme des U liegen sich über einem 5,9 mm breiten Spalt gegenüber. Ein Arm enthält eine Infrarot-LED. Der andere Arm enthält einen NPN-Fototransistor. Die LED strahlt ständig durch den Spalt, und der Fototransistor achtet auf dieses Licht.
| IR-Gabellichtschranke | |
|---|---|
| Sensortyp | Gabel-Lichtschranke (IR-LED + NPN-Fototransistor) |
| Schlitzbreite | 5,9 mm |
| Betriebsspannung | 3,3V bis 5V DC |
| Ausgang | digital (TTL), LOW bei Blockierung, HIGH bei freiem Spalt |
| Signalaufbereitung | eingebauter Schmitt-Trigger |
| Befestigung | M3-Schraubenlöcher an beiden Enden |
| Pins | 3 (VCC, GND, OUT) |
Dieser Sensor wird für Aufgaben wie diese verwendet:
- Die Drehzahl (U/min) eines Motors mit Encoderscheibe messen
- Einen einfachen Drehzahlmesser bauen
- Objekte oder Impulse zählen
- Eine Strecke messen, indem man zählt, wie oft sich ein Rad dreht
- Drehzahl-Rückmeldung für die Räder eines Roboters liefern
- Eine Endlage oder eine Referenzposition erkennen
Wie es funktioniert

Der OUT-Pin folgt dem Lichtstrahl:
- Leerer Spalt: Das Infrarotlicht erreicht den Fototransistor, daher bleibt OUT auf HIGH.
- Etwas Undurchsichtiges im Spalt (ein Stück Karton oder ein Zahn einer Encoderscheibe): Das Licht kommt nicht hindurch, daher fällt OUT auf LOW.
Auf der Platine befindet sich außerdem ein Schmitt-Trigger. Er macht aus dem Rohsignal eine saubere 0 oder 1 ohne Prellen an den Flanken. Deshalb braucht Ihr Python-Skript keinen Entprellcode.
Zwei Kleinigkeiten, die Sie beachten sollten:
- Klarer Kunststoff oder Glas kann das IR-Licht durchlassen, daher sieht der Sensor es möglicherweise nicht. Verwenden Sie undurchsichtige Objekte.
- Einige Module anderer Hersteller arbeiten umgekehrt. Wenn Ihr Modul „blockiert“ meldet, obwohl der Spalt leer ist, tauschen Sie im ersten Skript LOW und HIGH. Das RPM-Skript zählt eine Flanke pro Zahn, es liefert also in beiden Fällen die richtige Drehzahl.
IR-Gabellichtschranke Pinout

Das Modul hat drei Pins:
- VCC: Dieser Pin muss mit der Versorgungsspannung (3,3V bis 5V) verbunden werden. Verwenden Sie am Raspberry Pi 3,3V.
- GND: Dieser Pin muss mit Masse (0V) verbunden werden
- OUT: Dieser Pin sendet das digitale Signal an einen GPIO-Eingangspin des Raspberry Pi
※ Notiz:
Die Anordnung der Pins auf einem Modul kann sich zwischen Herstellern und sogar zwischen Chargen unterscheiden. Es ist wichtig, bei der Arbeit mit dem Modul immer die aufgedruckten Beschriftungen zu verwenden. Schauen Sie genau hin!
Verdrahtungsdiagramm

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

- VCC-Pin des Sensors an 3,3V des Raspberry Pi (Pin 1)
- GND-Pin des Sensors an GND des Raspberry Pi (Pin 6 oder ein anderer GND-Pin)
- OUT-Pin des Sensors an GPIO17 des Raspberry Pi (Pin 11)
WARNING
Versorgen Sie diesen Sensor nicht über den 5V-Pin des Raspberry Pi. Der OUT-Pin geht bis zur VCC-Spannung hoch. Mit 5V an VCC würde OUT 5V auf GPIO17 geben, aber die GPIO-Pins des Raspberry Pi vertragen nur 3,3V. Wenn Sie den Sensor mit 3,3V versorgen, bleibt das OUT-Signal sicher.
Aufbau der Encoderscheibe für die Drehzahlmessung
Das zweite Skript braucht eine Encoderscheibe. Das ist eine runde Scheibe mit Schlitzen am Rand.
- Befestigen Sie die Scheibe auf der Motorwelle oder am Rad.
- Montieren Sie den Sensor mit seinen M3-Schraubenlöchern so, dass der Rand der Scheibe im Spalt läuft.
- Prüfen Sie, dass die Zähne der Scheibe durch den Schlitz laufen, ohne die Arme des Sensors zu berühren.
Sie können die Scheibe von Hand drehen oder den Motor laufen lassen. Die Verdrahtung des Motors gehört nicht zu dieser Seite. Wie man einen Motor mit dem Raspberry Pi ansteuert, sehen Sie im Tutorial Raspberry Pi - DC Motor.
Wie man den Raspberry Pi programmiert, um Objekte mit der IR-Gabellichtschranke zu erkennen und zu zählen
Dieses erste Skript prüft GPIO17 in einer Schleife immer wieder. Es gibt nur dann eine Zeile aus, wenn sich der Zustand des Pins ändert. Jedes Mal, wenn der Spalt blockiert wird, steigt der Zähler um eins.
Schnelle Schritte
- Stellen Sie sicher, dass auf Ihrem Pi Raspbian oder ein anderes mit dem Raspberry Pi kompatibles Betriebssystem installiert ist.
- Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
- Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, falls Sie einige Bibliotheken installieren müssen.
- Wenn Sie den Raspberry Pi zum ersten Mal verwenden, lesen Sie wie man den Raspberry Pi einrichtet
- Verbinden Sie Ihren PC per SSH mit dem Raspberry Pi, entweder mit dem eingebauten SSH-Client unter Linux und macOS oder mit PuTTY unter Windows.
- Stellen Sie sicher, dass die Bibliothek RPi.GPIO installiert ist. Falls sie fehlt, installieren Sie sie mit diesen Befehlen:
- Verdrahten Sie den Sensor mit dem Raspberry Pi wie im obigen Schaltplan gezeigt.
- Erstellen Sie eine Python-Skriptdatei OpticalSpeedSensor.py und fügen Sie den folgenden Code hinzu:
- Speichern Sie die Datei und starten Sie das Skript mit diesem Befehl:
- Schieben Sie ein Stück Karton oder Ihren Finger in den Spalt und ziehen Sie ihn wieder heraus. Tun Sie das einige Male.
- Prüfen Sie die Ergebnisse im Terminal.
Das Terminal bleibt ruhig, solange sich nichts ändert. Eine neue Zeile erscheint nur in dem Moment, in dem der Spalt blockiert wird oder wieder frei ist. Das Skript beobachtet weiter, bis Sie die Tasten Ctrl + C im Terminal drücken. Danach räumt es den GPIO-Pin auf, bevor es beendet wird.
Wie man den Raspberry Pi programmiert, um die Motordrehzahl (U/min) mit der IR-Gabellichtschranke zu messen
Wenn sich eine Scheibe schnell dreht, kommen die Impulse sehr schnell. Eine einfache Schleife wie die oben könnte einige davon verpassen. Dieses Skript lässt RPi.GPIO den Pin deshalb mit GPIO.add_event_detect() im Hintergrund überwachen. Jede FALLING-Flanke (der Moment, in dem ein Zahn den Spalt blockiert) ruft eine kleine Funktion auf, die einen Zähler um eins erhöht. So ergibt jeder Zahn genau einen Zählschritt.
Einmal pro Sekunde liest das Skript den Zähler, setzt ihn auf null zurück und berechnet die Drehzahl:
- Eine volle Umdrehung einer Scheibe mit 20 Schlitzen ergibt 20 Impulse.
- Impulse in 1 Sekunde × 60 = Impulse in 1 Minute.
- Impulse in 1 Minute ÷ 20 = Umdrehungen in 1 Minute, das sind die U/min (RPM).
Der Wert 20 steht in SLOTS_PER_TURN. Das ist die Schlitzzahl der üblichen Encoderscheibe, die mit TT-Getriebemotoren verkauft wird. Wenn Ihre Scheibe eine andere Anzahl von Schlitzen hat, ändern Sie diese Konstante.
Schnelle Schritte
- Führen Sie dieselbe Vorbereitung wie im ersten Beispiel durch: Per SSH auf den Raspberry Pi gehen, RPi.GPIO installieren und dieselbe Verdrahtung behalten.
- Setzen Sie die Encoderscheibe ein, wie oben im Aufbau der Encoderscheibe gezeigt.
- Erstellen Sie eine Python-Skriptdatei OpticalSpeedSensorRPM.py und fügen Sie den folgenden Code hinzu:
- Speichern Sie die Datei und starten Sie das Skript mit diesem Befehl:
- Drehen Sie die Scheibe von Hand oder schalten Sie den Motor ein.
- Prüfen Sie die Ergebnisse im Terminal. Die folgenden Zeilen stammen von einem Motor, der sich mit etwa 300 U/min dreht:
Anders als das erste Skript gibt dieses jede Sekunde eine Zeile aus (durch die Zeile mit time.sleep(1)), auch wenn sich die Scheibe nicht bewegt. In diesem Fall zeigt es 0 Impulse und 0.00 RPM. Die Messwerte kommen weiter, bis Sie die Tasten Ctrl + C im Terminal drücken. Danach räumt das Skript den GPIO-Pin auf und stoppt.
Zusätzliches Wissen
Gabellichtschranke vs. Hindernissensor vs. Rotary Encoder
Alle drei Bauteile senden Impulse oder EIN/AUS-Signale an den Raspberry Pi, daher kann man sie leicht verwechseln. Vergleichen wir, wofür jedes gedacht ist:
| IR-Gabellichtschranke | IR-Hindernissensor | Rotary Encoder | |
|---|---|---|---|
| Was er erfasst | ein Objekt in einem 5,9 mm breiten Spalt | ein Objekt vor ihm, einige Zentimeter entfernt | wie weit und in welche Richtung ein Knopf gedreht wird |
| Wie er erfasst | Lichtstrahl über den Spalt wird blockiert | reflektiertes Infrarotlicht | zwei zueinander versetzte Signale |
| Beste Verwendung | U/min, Zählen, Raddrehungen, Referenzposition | Hindernisse für Roboter erkennen | Eingabeknopf für Benutzer |
| Erkennt die Richtung | nein | nein | ja |
Die gabelförmige Lichtschranke ist offensichtlich die richtige Wahl, wenn das bewegte Teil durch ihren Spalt passt und Sie die Drehzahl oder eine genaue Zählung brauchen. Wenn das Objekt außerhalb bleibt, verwenden Sie den Hindernissensor. Wenn eine Person einen Knopf dreht und die Richtung wichtig ist, verwenden Sie den Rotary Encoder.
Die Schlitzzahl der Encoderscheibe wählen
Vergleichen wir eine Scheibe mit wenigen Schlitzen und eine Scheibe mit vielen Schlitzen:
- Mehr Schlitze ergeben mehr Impulse pro Umdrehung. Der U/min-Wert hat feinere Schritte und reagiert bei niedriger Drehzahl besser. Mit 20 Schlitzen und einem 1-Sekunden-Fenster ändert jeder zusätzliche Impuls das Ergebnis um 3 U/min (60 ÷ 20).
- Weniger Schlitze ergeben weniger Impulse pro Sekunde. Das kann der Raspberry Pi bei einem sehr schnellen Motor leichter verfolgen, aber das Ergebnis springt in größeren Schritten.
Welche Scheibe Sie auch verwenden, tragen Sie ihre echte Schlitzzahl in SLOTS_PER_TURN ein. Sonst ist der U/min-Wert falsch.
Eine Strecke aus Raddrehungen messen
Wenn sich die Encoderscheibe zusammen mit einem Rad dreht, können Sie auch herausfinden, wie weit das Rad gerollt ist:
- Radumfang = π × Raddurchmesser
- Strecke = Anzahl der Umdrehungen × Radumfang
- Anzahl der Umdrehungen = Impulse insgesamt ÷ SLOTS_PER_TURN
Ein Rad mit 65 mm Durchmesser rollt zum Beispiel in einer Umdrehung etwa 204 mm. Nach 10 Umdrehungen hat es sich also etwa 2 Meter bewegt.
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.