ESP32 - IR-Gabellichtschranke (Geschwindigkeitssensor)
Dieses Tutorial zeigt Ihnen, wie Sie die IR-Gabellichtschranke (Geschwindigkeitssensor) mit dem ESP32 und MicroPython verwenden. Im Einzelnen lernen wir:
- Wie der Schlitzsensor erkennt, ob seine Lücke leer oder blockiert ist.
- Wie Sie den IR-Schlitzsensor an einen ESP32 anschließen und eine Encoderscheibe in seine Lücke setzen.
- Wie Sie MicroPython-Code für den ESP32 schreiben, um Objekte zu zählen und die Drehzahl eines Motors in RPM zu messen.
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables ESP32 Starter-Kit (ESP32 enthalten) | |
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
Überblick über IR Slotted Optical Speed Sensor
Wenn Sie das Modul von der Seite ansehen, erkennen Sie den Buchstaben U. Zwischen seinen zwei Armen liegt ein offener Kanal, und in diesem Kanal findet die Messung statt. Bastler kennen dieses Bauteil als Opto-Interrupter oder Photo-Interrupter. Sein Ausgang ist digital, deshalb muss MicroPython nur eine 0 oder eine 1 von einem Pin lesen.
| IR-Gabellichtschranke (Geschwindigkeitssensor) | |
|---|---|
| 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 freier Lücke |
| Signalaufbereitung | eingebauter Schmitt-Trigger |
| Montage | M3-Schraubenlöcher an beiden Enden |
| Pins | 3 (VCC, GND, OUT) |
Wo können Sie ihn einsetzen? Hier sind einige Ideen:
- Die Drehzahl (RPM) eines Motors mit einer geschlitzten Encoderscheibe auslesen
- Einen kleinen Drehzahlmesser bauen
- Impulse oder Gegenstände zählen, die durch die Lücke gehen
- Die Strecke bestimmen, die ein Roboter zurückgelegt hat, indem man die Radumdrehungen zählt
- Einem Roboterauto Rückmeldung über die Raddrehzahl geben
- Die Endposition (Endlage) eines beweglichen Teils erkennen
Pinbelegung

- VCC-Pin: mit dem 3,3V-Pin des ESP32 verbinden (das Modul akzeptiert 3,3 Volt bis 5 Volt)
- GND-Pin: mit GND (0 Volt) verbinden
- OUT-Pin: mit einem GPIO des ESP32 verbinden, hier GPIO18. Er liest 0, wenn der Kanal blockiert ist, und 1, wenn der Kanal offen ist
Verschiedene Chargen können diese drei Pins in anderer Reihenfolge anordnen. Verlassen Sie sich auf die Beschriftung der Platine, nicht auf ein Bild.
Ein Wort zur Stromversorgung: Die Spannung an OUT kann bis zur Spannung an VCC steigen. Die GPIO-Pins des ESP32 arbeiten mit 3,3 Volt. Wenn Sie das Modul mit 5 Volt versorgen, kann OUT 5 Volt in den GPIO drücken. Nehmen Sie die Versorgung deshalb vom 3,3V-Pin, dann bleibt das Signal sicher.
Funktionsweise

Im linken Arm sitzt eine Infrarot-LED. Im rechten Arm sitzt ein NPN-Fototransistor. Sie blicken sich durch den 5,9 mm breiten Kanal direkt an.
- Der Kanal ist leer: Der unsichtbare Strahl trifft den Fototransistor. Pin.value() gibt 1 zurück.
- Eine Karte, ein Finger oder ein Zahn einer Encoderscheibe ist im Kanal: Der Strahl wird unterbrochen. Pin.value() gibt 0 zurück.
Das Modul hat außerdem einen Schmitt-Trigger. Er wandelt den sich langsam ändernden Lichtpegel in eine scharfe 0 oder 1 um. Deshalb prellt das Signal nicht, und Ihr MicroPython-Skript braucht keinen Entprellcode.
Wählen Sie Dinge, durch die kein Licht dringt. Eine dünne, durchsichtige Kunststofffolie lässt den IR-Strahl eventuell durch, und dann liest der Sensor weiterhin "frei".
Nicht jede Marke verwendet dieselbe Logik. Bei manchen Modulen anderer Hersteller ist der Ausgang umgekehrt. Wenn Ihres eine Blockierung meldet, obwohl der Kanal leer ist, tauschen Sie im ersten Skript die 0 und die 1. Das RPM-Skript braucht keine Änderung, weil es in jedem Fall eine Flanke pro Zahn zählt.
Verdrahtungsdiagramm
ESP32 und Schlitzsensor verdrahten
Das Modul braucht nur drei Jumper-Kabel. Ein Steckbrett ist optional. Sie können auch ein Schraubklemmen-Breakout-Board für den ESP32 verwenden, wenn Sie feste Verbindungen möchten.
| Pin des Geschwindigkeitssensors | ESP32-Pin |
|---|---|
| VCC | 3.3V |
| GND | GND |
| OUT | GPIO18 |
Die Encoderscheibe im Schlitz platzieren
Für die Drehzahl brauchen Sie eine runde Scheibe mit Löchern oder Zähnen am Rand. Wenn sich die Scheibe dreht, unterbricht jeder Zahn den Strahl kurz, und jede Unterbrechung ist ein Impuls. Drücken Sie die Scheibe auf die Motorwelle oder das Rad. Schrauben Sie dann das Modul durch seine M3-Löcher fest, sodass der Rand der Scheibe im Kanal läuft. Drehen Sie die Scheibe einmal von Hand und prüfen Sie, dass sie nie am Sensor schleift.
Ein langsames Drehen mit dem Finger reicht für einen ersten Versuch. Wenn ein Motor die Scheibe antreiben soll, hat der Motor eine eigene Verdrahtung. Sie finden sie im ESP32 MicroPython Gleichstrommotor-Tutorial.
ESP32 MicroPython-Code - Objekte zählen, die durch den Schlitz gehen
Dieses erste Skript fragt GPIO18 in einer schnellen Schleife ab. Es merkt sich den letzten Wert, den es gesehen hat. Ist der neue Wert nicht gleich, gibt es eine Zeile aus. Ein Wechsel auf 0 erhöht außerdem den Zähler um eins.
Schnelle Schritte
So richten Sie Ihren MicroPython-Code auf dem ESP32 mit der Thonny IDE ein und führen ihn aus:
- Stellen Sie sicher, dass die Thonny IDE auf Ihrem Computer installiert ist.
- Vergewissern Sie sich, dass die MicroPython-Firmware auf Ihrem ESP32-Board installiert ist.
- Neu bei MicroPython auf dem ESP32? Beginnen Sie mit der Anleitung ESP32 MicroPython Erste Schritte.
- Verbinden Sie die IR-Gabellichtschranke gemäß dem bereitgestellten Schaltplan mit dem ESP32-Board.
- Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
- Öffnen Sie die Thonny IDE auf Ihrem Computer.
- Gehen Sie in der Thonny IDE zu Tools Options.
- Wählen Sie im Reiter Interpreter die Option MicroPython (ESP32) aus dem Dropdown-Menü und prüfen Sie, dass der richtige Port ausgewählt ist (z. B. COM12 unter Windows oder /dev/ttyUSB0 unter Linux).
- Kopieren Sie den bereitgestellten MicroPython-Code und fügen Sie ihn in den Editor von Thonny ein.
- Speichern Sie den Code auf Ihrem ESP32:
- Klicken Sie auf die Schaltfläche Save oder drücken Sie Ctrl+S.
- Wählen Sie im Speicherdialog MicroPython device.
- Benennen Sie die Datei main.py.
- Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
- Schieben Sie einen Streifen Papierkarte in die Lücke, ziehen Sie ihn heraus und wiederholen Sie das noch zweimal.
- Prüfen Sie die Meldungen in der Shell unten in Thonny.
Wenn Sie Ihr Skript main.py nennen und auf dem MicroPython-Gerät speichern, wird es jedes Mal automatisch ausgeführt, wenn der ESP32 eingeschaltet wird.
ESP32 MicroPython-Code - Motordrehzahl (RPM) messen
Das zweite Skript macht aus dem Modul einen Drehzahlmesser. Das Abfragen ist zu langsam, wenn sich eine Scheibe schnell dreht, deshalb verwendet dieses Skript stattdessen einen Interrupt. Die Zeile sensor.irq(trigger=Pin.IRQ_FALLING, handler=count_pulse) sagt dem ESP32, count_pulse() genau in dem Moment aufzurufen, in dem der Pin von 1 auf 0 fällt. Dieser Abfall geschieht einmal pro Zahn, deshalb wird kein Zahn doppelt gezählt.
Die Hauptschleife wartet eine Sekunde, kopiert den Zähler und setzt ihn zurück. Dann rechnet sie:
- Eine volle Umdrehung einer Scheibe mit 20 Schlitzen ergibt 20 Impulse.
- Impulse in einer Sekunde × 60 = Impulse in einer Minute.
- Impulse in einer Minute ÷ 20 = Umdrehungen pro Minute, also die Drehzahl (RPM).
Zwanzig Schlitze sind die übliche Anzahl bei der Scheibe, die zu TT-Getriebemotoren gehört. Ist Ihre Scheibe anders? Setzen Sie SLOTS_PER_TURN auf die tatsächliche Anzahl der Schlitze.
Schnelle Schritte
- Montieren Sie die Scheibe und das Modul wie im Bild der Encoderscheibe. Behalten Sie dieselben drei Kabel bei.
- Kopieren Sie den bereitgestellten MicroPython-Code und fügen Sie ihn in den Editor von Thonny ein.
- Speichern Sie ihn auf dem MicroPython-Gerät. Nur eine Datei kann main.py heißen. Wenn Sie diesen Namen noch einmal verwenden, ersetzt dieses Skript das erste. Wenn Sie beide behalten möchten, geben Sie diesem einen anderen Namen, zum Beispiel rpm.py.
- Klicken Sie auf die grüne Schaltfläche Run (oder drücken Sie F5), um das Skript auszuführen.
- Drehen Sie die Scheibe mit der Hand oder schalten Sie den Motor ein.
- Prüfen Sie die Meldungen in der Shell unten in Thonny. Im Beispiel unten steht der Motor zuerst still, läuft dann mit etwa 300 RPM und bleibt dann stehen.
Nur die Datei mit dem Namen main.py startet beim Einschalten von selbst. Speichern Sie deshalb das Skript, das allein laufen soll, unter diesem Namen, und behalten Sie das andere unter einem anderen Namen.
Möchten Sie auch die Strecke? Eine Radumdrehung bewegt den Roboter um den Radumfang, das ist π × Raddurchmesser. Multiplizieren Sie das mit der Anzahl der Umdrehungen.
Müssen Sie ein Objekt vor dem Roboter erkennen und nicht in einer engen Lücke? Probieren Sie das ESP32 MicroPython Hindernisvermeidungssensor-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.