Arduino - IR-Gabellichtschranke (Geschwindigkeitssensor)
In diesem Tutorial lernen wir:
- Wie die IR-Gabellichtschranke (auch Gabellichtschranke genannt) funktioniert
- Wie man die IR-Gabellichtschranke an den Arduino anschließt
- Wie man den Arduino programmiert, um Objekte zu erkennen und zu zählen, die durch den Schlitz laufen
- Wie man den Arduino programmiert, um die Drehzahl eines Motors in U/min (RPM) mit einer Encoderscheibe zu messen
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables STEM V3 Starter-Kit (Arduino enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über die IR-Gabellichtschranke
Die IR-Gabellichtschranke ist ein kleines U-förmiges Modul. Man nennt sie auch Schlitzsensor, Opto-Interrupter oder U-förmigen IR-Sensor. Sie sagt dem Arduino, ob sich etwas in ihrem Schlitz befindet oder nicht. Mit einer Encoderscheibe kann sie auch sagen, wie schnell sich ein Motor oder ein Rad dreht.
| IR-Gabellichtschranke | |
|---|---|
| Sensortyp | Schlitz-Lichtschranke (IR-LED + NPN-Fototransistor) |
| Schlitzbreite | 5,9 mm |
| Betriebsspannung | 3,3V bis 5V DC |
| Ausgang | digital (TTL), LOW bei Unterbrechung, HIGH bei freiem Schlitz |
| Signalaufbereitung | eingebauter Schmitt-Trigger |
| Befestigung | M3-Schraubenlöcher an beiden Enden |
| Pins | 3 (VCC, GND, OUT) |
Sie können sie verwenden für:
- Die Messung der Motordrehzahl (U/min) mit einer Encoderscheibe
- Den Bau eines Drehzahlmessers
- Das Zählen von Objekten oder Impulsen
- Die Messung von Entfernungen durch Zählen von Radumdrehungen
- Die Rückmeldung der Raddrehzahl bei einem Roboter
- Die Erkennung einer Grenze oder einer Position
Pinbelegung

Die IR-Gabellichtschranke hat drei Pins:
- VCC-Pin: muss mit VCC (5V oder 3,3V) verbunden werden
- GND-Pin: muss mit GND (0V) verbunden werden
- OUT-Pin: ist ein digitaler Ausgangspin. Er ist LOW, wenn der Schlitz blockiert ist, und HIGH, wenn der Schlitz frei ist. Dieser Pin muss mit einem Eingangspin des Arduino verbunden werden.
Die Reihenfolge der Pins kann sich zwischen Chargen unterscheiden. Bitte lesen Sie die Beschriftungen auf Ihrem Modul.
Funktionsweise

Auf einer Seite des U sitzt eine Infrarot-LED. Auf der anderen Seite sitzt ein NPN-Fototransistor. Sie liegen sich über den 5,9 mm breiten Schlitz gegenüber.
- Wenn der Schlitz leer ist, erreicht das IR-Licht den Fototransistor. Der OUT-Pin ist HIGH.
- Wenn ein undurchsichtiges Objekt (ein Stück Karte oder ein Zahn einer Encoderscheibe) in den Schlitz gelangt, blockiert es das Licht. Der OUT-Pin ist LOW.
Der eingebaute Schmitt-Trigger macht den Ausgang zu einer sauberen und stabilen 0 oder 1, ohne Jitter. Deshalb müssen wir im Code nicht entprellen.
Einige Tipps:
- Verwenden Sie undurchsichtige Objekte. Ein durchsichtiges Objekt blockiert das IR-Licht möglicherweise nicht gut.
- Einige Module anderer Hersteller arbeiten andersherum. Wenn Ihr Sensor "blockiert" meldet, obwohl der Schlitz leer ist, tauschen Sie im ersten Code einfach LOW und HIGH. Der RPM-Code zählt eine Flanke pro Zahn, deshalb funktioniert er in beiden Fällen.
Drehzahlmessung mit einer Encoderscheibe
Eine Encoderscheibe ist eine runde Platte mit Schlitzen (Löchern) nahe am Rand. Die übliche Scheibe für TT-Getriebemotoren hat 20 Schlitze. Befestigen Sie die Scheibe auf der Motorwelle oder am Rad, sodass ihre Zähne durch den Schlitz des Sensors laufen, ohne ihn zu berühren.
Wenn sich die Scheibe dreht, blockiert jeder Zahn das Licht für einen Moment. Der OUT-Pin gibt einen Impuls pro Zahn aus. Eine volle Umdrehung ergibt 20 Impulse. Der Arduino zählt die Impulse in 1 Sekunde und berechnet dann die Drehzahl:
- Impulse in 1 Sekunde × 60 = Impulse in 1 Minute
- Impulse in 1 Minute ÷ 20 = Umdrehungen pro Minute (U/min, RPM)
Verdrahtungsdiagramm
Verbinden Sie VCC des Sensors mit 5V des Arduino, GND mit GND und OUT mit Pin 2 des Arduino, wie im folgenden Bild gezeigt.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wir verwenden Pin 2, weil er beim Arduino Uno ein Interrupt-Pin ist. Der RPM-Code braucht ihn.
So programmieren Sie die IR-Gabellichtschranke
- Keine Bibliothek erforderlich: Der Code verwendet nur eingebaute Funktionen.
- Pin definieren: const int SENSOR_PIN = 2;
- Den Pin mit pinMode() als Eingang festlegen: pinMode(SENSOR_PIN, INPUT);
- Den Zustand mit digitalRead() lesen: int state = digitalRead(SENSOR_PIN);
- Den Zustand prüfen: if (state == LOW) bedeutet, dass sich etwas im Schlitz befindet. HIGH bedeutet, dass der Schlitz frei ist.
- Um schnelle Impulse zu zählen, verwenden Sie einen Interrupt. Jedes Mal, wenn der OUT-Pin von HIGH auf LOW wechselt (ein Zahn blockiert den Schlitz), führt der Arduino eine kleine Funktion aus: attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
- Halten Sie den Zähler volatile, weil er sich innerhalb des Interrupts ändert: volatile unsigned long pulseCount = 0;
- Wandeln Sie die Impulse jede Sekunde in U/min um: float rpm = pulses * 60.0 / SLOTS_PER_TURN;
Warum einen Interrupt verwenden? Wenn sich der Motor schnell dreht, sind die Impulse sehr kurz. Wenn wir den Pin nur in loop() prüfen, verpassen wir möglicherweise einige davon. Der Interrupt fängt jeden Impuls ab. Wir verwenden FALLING, damit jeder Zahn nur einmal gezählt wird.
Arduino-Code - Objekt im Schlitz erkennen
Der folgende Code macht diese Dinge:
- Liest den OUT-Pin immer wieder
- Gibt nur dann eine Meldung aus, wenn sich der Zustand ändert
- Zählt, wie oft der Schlitz blockiert wird
Schnelle Schritte
- Verdrahten Sie wie im obigen Diagramm gezeigt.
- Verbinden Sie den Arduino über ein USB-Kabel mit dem PC.
- Öffnen Sie die Arduino IDE. Öffnen Sie das Menü Tools und wählen Sie das richtige Board und den richtigen Port aus.
- Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
- Klicken Sie in der Arduino IDE auf die Schaltfläche Upload, um den Code auf den Arduino hochzuladen.
- Öffnen Sie den Serial Monitor (Baudrate 9600).
- Führen Sie ein Stück Karte oder Ihren Finger einige Male durch den Schlitz.
- Sehen Sie sich das Ergebnis im Serial Monitor an.
Arduino-Code - Motordrehzahl messen (U/min)
Der folgende Code macht diese Dinge:
- Zählt einen Impuls, jedes Mal wenn ein Zahn der Scheibe den Schlitz blockiert (Interrupt bei der FALLING-Flanke)
- Berechnet jede Sekunde die Drehzahl in U/min
- Gibt die Anzahl der Impulse und die Drehzahl aus
Der Code verwendet SLOTS_PER_TURN = 20. Wenn Ihre Encoderscheibe eine andere Anzahl von Schlitzen hat, ändern Sie diese Zahl.
Schnelle Schritte
- Befestigen Sie die Encoderscheibe auf der Motorwelle oder dem Rad, sodass ihre Zähne durch den Schlitz laufen.
- Behalten Sie dieselbe Verdrahtung wie beim ersten Code bei.
- Kopieren Sie den obigen Code, fügen Sie ihn in die Arduino IDE ein und laden Sie ihn hoch.
- Drehen Sie die Scheibe von Hand oder versorgen Sie den Motor mit Strom. Zur Ansteuerung des Motors siehe Arduino - Gleichstrommotor.
- Sehen Sie sich das Ergebnis im Serial Monitor an. Das folgende Beispiel zeigt einen Motor, der sich mit etwa 300 U/min dreht.
Zum Beispiel ergeben 100 Impulse in 1 Sekunde 100 × 60 ÷ 20 = 300 U/min.
Möchten Sie die Strecke finden, die ein Rad zurücklegt? Multiplizieren Sie die Anzahl der Umdrehungen mit dem Radumfang (π × Raddurchmesser).
Wenn Sie ein Objekt aus der Entfernung erkennen wollen (nicht in einem Schlitz), siehe Arduino - Infrarot-Hindernissensor. Wenn Sie einen Drehknopf und seine Richtung lesen wollen, siehe Arduino - Drehgeber.
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.