ESP32 - IR-Gabellichtschranke (Geschwindigkeitssensor)
Dieses Tutorial zeigt Ihnen, wie Sie mit dem ESP32 den Zustand einer IR-Gabellichtschranke lesen, die Objekte zählen, die durch ihren Schlitz laufen, und die Impulse einer Encoderscheibe in eine Motordrehzahl in U/min (RPM) umrechnen, die im Serial Monitor ausgegeben wird.

Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Über die IR-Gabellichtschranke
Dieses kleine Modul hat eine U-Form mit einem schmalen Spalt in der Mitte. Man nennt es mit vielen Namen: Gabellichtschranke, Opto-Interrupter, U-förmiger IR-Sensor oder einfach Schlitzsensor. Es erfüllt eine Aufgabe. Es sagt dem ESP32, ob sich etwas im Spalt befindet oder nicht. Weil es sehr schnell schalten kann, ist es eine gute Wahl, um zu messen, wie schnell sich ein Rad oder ein Motor dreht.
| IR-Gabellichtschranke | |
|---|---|
| Sensortyp | Schlitz-Lichtschranke (IR-LED + NPN-Fototransistor) |
| Schlitzbreite | 5,9 mm |
| Ausgang | digital (TTL), LOW bei Unterbrechung, HIGH bei freiem Schlitz |
| Signalaufbereitung | eingebauter Schmitt-Trigger |
| Befestigung | M3-Schraubenlöcher an beiden Enden |
| Anzahl der Pins | 3 (VCC, GND, OUT) |
| Betriebsspannung | 3,3V bis 5V DC |
Typische Anwendungen sind die Messung der Motordrehzahl (U/min) mit einer Encoderscheibe, ein einfacher Tachometer, das Zählen von Objekten oder Impulsen, die Entfernungsmessung durch Zählen der Radumdrehungen, die Rückmeldung der Raddrehzahl bei einem Roboterauto sowie die Endlagen- und Positionserkennung.
Pinbelegung der IR-Gabellichtschranke

- VCC-Pin: Verbinden Sie diesen Pin mit dem 3,3V-Pin des ESP32
- GND-Pin: Verbinden Sie diesen Pin mit GND (0V)
- OUT-Pin: Verbinden Sie diesen Pin mit einem Eingangspin des ESP32 (GPIO18 in diesem Tutorial). Er gibt LOW aus, wenn der Schlitz blockiert ist, und HIGH, wenn er frei ist
Die Pin-Reihenfolge ist nicht von Charge zu Charge immer gleich. Lesen Sie die auf Ihrem Modul aufgedruckten Beschriftungen, bevor Sie die Drähte anschließen.
Der OUT-Pin geht so hoch wie die Spannung, die Sie an VCC anlegen. Der ESP32 ist ein 3,3V-Board, versorgen Sie den Sensor also über den 3,3V-Pin, nicht über 5V. So sendet der OUT-Pin nie mehr als 3,3V in den GPIO-Pin.
Wie die IR-Gabellichtschranke funktioniert

Ein Arm des U enthält eine Infrarot-LED. Der andere Arm enthält einen NPN-Fototransistor. Beide liegen sich über den 5,9 mm breiten Spalt gegenüber.
- Nichts im Spalt: Das IR-Licht erreicht den Fototransistor, und der OUT-Pin ist HIGH.
- Ein undurchsichtiges Objekt im Spalt, etwa ein Stück Karton oder ein Zahn einer Encoderscheibe: Das Licht wird unterbrochen, und der OUT-Pin ist LOW.
Ein Schmitt-Trigger auf der Platine wandelt den rohen Lichtpegel in eine saubere 0 oder 1 um, ohne Flattern dazwischen. Dank ihm braucht der ESP32-Code kein Entprellen.
Klarer Kunststoff lässt das IR-Licht eventuell durch, daher wird er nicht immer als blockiert erkannt. Verwenden Sie Objekte, durch die Sie nicht hindurchsehen können.
Einige Module anderer Hersteller arbeiten umgekehrt. Wenn Ihr Sensor "blockiert" meldet, obwohl der Spalt leer ist, tauschen Sie im ersten Code einfach LOW und HIGH. Der U/min-Code zählt eine Flanke pro Schlitz der Scheibe, daher funktioniert er mit beiden Typen.
Verdrahtungsdiagramm
So verbinden Sie den ESP32 und die IR-Gabellichtschranke
Es sind nur drei Drähte nötig. Verbinden Sie VCC mit 3,3V, GND mit GND und OUT mit GPIO18. Sie können die Drähte direkt an die Pins stecken oder ein Breadboard verwenden, wenn Sie möchten.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
Wenn Sie nicht wissen, wie Sie ESP32 und andere Komponenten mit Strom versorgen, finden Sie Anleitungen im folgenden Tutorial: Wie man ESP32 mit Strom versorgt.
| IR-Gabellichtschranke | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| OUT | GPIO18 |
So richten Sie die Encoderscheibe für die Geschwindigkeitsmessung ein
Um die Geschwindigkeit zu messen, braucht der Sensor etwas, das beim Drehen immer wieder das Licht unterbricht. Das ist die Aufgabe der Encoderscheibe. Befestigen Sie die Scheibe an der Motorwelle oder am Rad, und befestigen Sie dann den Sensor mit seinen M3-Löchern so, dass die Zähne der Scheibe durch den Spalt laufen. Die Scheibe darf den Sensor an keiner Stelle der Drehung berühren.
Für einen ersten Test können Sie die Scheibe von Hand drehen. Um sie mit einem Motor zu drehen, siehe das ESP32-Gleichstrommotor-Tutorial, denn der Motor braucht eine eigene Verdrahtung.
So programmieren Sie die IR-Gabellichtschranke
Es wird keine Bibliothek benötigt. Die zwei folgenden Beispiele verwenden nur Funktionen, die im ESP32-Core enthalten sind.
- Legen Sie den Pin als Eingang fest: pinMode(SENSOR_PIN, INPUT);
- Lesen Sie den Zustand des Schlitzes (LOW bedeutet blockiert): int state = digitalRead(SENSOR_PIN);
- Handeln Sie nur, wenn sich der Zustand ändert: if (state != lastState) { ... }
- Rufen Sie jedes Mal, wenn ein Zahn den Schlitz blockiert, eine kurze Funktion auf: attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
- Markieren Sie diese Funktion mit IRAM_ATTR, damit der ESP32 sie schnell ausführen kann: void IRAM_ATTR countPulse() { pulseCount++; }
- Wandeln Sie die Impulse einer Sekunde in Umdrehungen pro Minute um: float rpm = pulses * 60.0 / SLOTS_PER_TURN;
Warum einen Interrupt für die Geschwindigkeit verwenden? Wenn der Motor schnell läuft, kommen die Impulse sehr dicht aufeinander, und eine einfache Abfrage in loop() kann einige davon verpassen. Der Interrupt fängt jeden einzelnen ab. Die FALLING-Flanke wird gewählt, damit jeder Zahn nur einmal gezählt wird. Mehr dazu finden Sie im ESP32-GPIO-Interrupt-Tutorial.
ESP32-Code - Objekte im Schlitz erkennen und zählen
Dieser Code prüft immer wieder den OUT-Pin. Er gibt nur dann eine Meldung aus, wenn sich der Zustand ändert. Jedes Mal, wenn der Schlitz blockiert wird, steigt der Zähler um eins.
Schnelle Schritte
Wenn Sie den ESP32 zum ersten Mal verwenden, lesen Sie wie Sie die Umgebung für den ESP32 in der Arduino IDE einrichten.
- Verbinden Sie den Sensor wie im Verdrahtungsdiagramm gezeigt mit dem ESP32.
- Stecken Sie das USB-Kabel in den ESP32 und Ihren PC.
- Öffnen Sie die Arduino IDE und wählen Sie dann das Board ESP32 Dev Module und den richtigen COM-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 zu kompilieren und auf den ESP32 hochzuladen.
- Klicken Sie auf das Symbol Serial Monitor und geben Sie dann 9600 als Baudrate ein oder wählen Sie sie aus.
- Bewegen Sie ein Stück Karton oder Ihren Finger in den Schlitz und nehmen Sie es wieder heraus. Tun Sie das einige Male.
- Sehen Sie sich die Meldungen im Serial Monitor an.
ESP32-Code - Motordrehzahl messen (U/min)
Jetzt arbeitet der Sensor als Tachometer. Jeder Zahn der Scheibe, der den Schlitz blockiert, löst den Interrupt aus, der einen Zähler um eins erhöht. Einmal pro Sekunde liest der Code den Zähler, setzt ihn auf null zurück und berechnet die Drehzahl.
Die Rechnung ist einfach. Eine übliche Encoderscheibe, wie sie mit TT-Getriebemotoren verkauft wird, hat 20 Schlitze, sodass eine volle Umdrehung 20 Impulse ergibt. Die Impulse einer Sekunde mal 60 ergeben die Impulse einer Minute. Teilen Sie das durch 20, und Sie erhalten die Umdrehungen pro Minute (U/min). Wenn Ihre Scheibe eine andere Anzahl von Schlitzen hat, ändern Sie den Wert von SLOTS_PER_TURN im Code.
Schnelle Schritte
- Befestigen Sie die Encoderscheibe und den Sensor wie auf dem Bild der Encoderscheibe oben gezeigt. Die Verdrahtung zum ESP32 bleibt gleich.
- Kopieren Sie den obigen Code, fügen Sie ihn in die Arduino IDE ein und klicken Sie auf die Schaltfläche Upload.
- Öffnen Sie den Serial Monitor mit 9600 Baud.
- Drehen Sie die Scheibe von Hand oder schalten Sie den Motor ein.
- Beobachten Sie die Geschwindigkeit im Serial Monitor. Das folgende Beispiel zeigt einen Motor, der sich mit etwa 300 U/min dreht, wobei der Motor am Anfang und am Ende steht.
Möchten Sie auch wissen, wie weit ein Rad gefahren ist? Multiplizieren Sie die Anzahl der Umdrehungen mit dem Radumfang (π × Raddurchmesser).
Wenn Sie ein Objekt in einigen Zentimetern Entfernung statt in einem Schlitz erkennen möchten, siehe das ESP32-Infrarot-Hinderniserkennungssensor-Tutorial. Wenn Sie einen Drehknopf brauchen, der auch die Drehrichtung liefert, siehe das ESP32-Drehgeber-Tutorial.
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.