ESP32 - IR-Gabellichtschranke (Geschwindigkeitssensor)

Dieses Tutorial zeigt Ihnen, wie Sie die IR-Gabellichtschranke (Geschwindigkeitssensor) mit dem ESP32 und MicroPython verwenden. Im Einzelnen lernen wir:

ESP32 MicroPython und IR-Gabellichtschranke (Geschwindigkeitssensor)

Ü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

Pinbelegung der IR-Gabellichtschranke
  • 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

Funktionsweise der IR-Gabellichtschranke

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.

ESP32 MicroPython Schaltplan IR-Gabellichtschranke (Geschwindigkeitssensor)
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.

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-micropython/esp32-micropython-ir-slotted-optical-speed-sensor */ from machine import Pin import time SENSOR_PIN = 18 # ESP32 GPIO18 connected to the OUT pin of the speed sensor sensor = Pin(SENSOR_PIN, Pin.IN) last_state = sensor.value() object_count = 0 # how many times the slot was blocked while True: state = sensor.value() if state != last_state: # the state has changed if state == 0: # LOW = something is in the slot object_count += 1 print("The slot is blocked - count: {}".format(object_count)) else: # HIGH = the slot is clear print("The slot is clear") last_state = state time.sleep_ms(1)

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.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot The slot is blocked - count: 1 The slot is clear The slot is blocked - count: 2 The slot is clear The slot is blocked - count: 3 The slot is clear
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

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.

/* * Dieser ESP32 MicroPython Code wurde von newbiely.de entwickelt * Dieser ESP32 MicroPython Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/tutorials/esp32-micropython/esp32-micropython-ir-slotted-optical-speed-sensor */ from machine import Pin import time SENSOR_PIN = 18 # ESP32 GPIO18 connected to the OUT pin of the speed sensor SLOTS_PER_TURN = 20 # number of slots (holes) in the encoder disc pulse_count = 0 # runs every time a tooth of the disc blocks the slot def count_pulse(pin): global pulse_count pulse_count += 1 sensor = Pin(SENSOR_PIN, Pin.IN) sensor.irq(trigger=Pin.IRQ_FALLING, handler=count_pulse) while True: time.sleep(1) # count pulses for 1 second pulses = pulse_count # read and reset the counter pulse_count = 0 rpm = pulses * 60 / SLOTS_PER_TURN # pulses per second -> turns per minute print("Pulses: {} | Speed: {:.2f} RPM".format(pulses, rpm))

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.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot Pulses: 0 | Speed: 0.00 RPM Pulses: 98 | Speed: 294.00 RPM Pulses: 101 | Speed: 303.00 RPM Pulses: 100 | Speed: 300.00 RPM Pulses: 99 | Speed: 297.00 RPM Pulses: 0 | Speed: 0.00 RPM
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

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.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!