ESP32 S3 - IR-Gabellichtschranke (Geschwindigkeitssensor)

Diese Anleitung zeigt Ihnen, wie Sie den ESP32 S3 mit einer IR-Gabellichtschranke verwenden, um Objekte zu zählen und zu messen, wie schnell sich ein Motor dreht. Ob Sie einen kleinen Drehzahlmesser für ein Roboterrad bauen oder gerade erst mit Sensoren beginnen: Dieses Schritt-für-Schritt-Tutorial bringt Sie zum Ziel.

Was Sie in diesem Tutorial bauen:

  1. Was die IR-Gabellichtschranke (Photo Interrupter) ist und wie sie funktioniert
  2. Wie Sie den Sensor sicher mit 3,3V an den ESP32 S3 anschließen
  3. Ein Sketch, der jedes Objekt zählt, das durch den Schlitz geht
  4. Ein Sketch, der die Motordrehzahl in U/min (RPM) mit einer Encoderscheibe und einem Interrupt misst
ESP32 S3 - IR-Gabellichtschranke (Geschwindigkeitssensor)

Erforderliche Hardware

1×ESP32 S3 WROOM N16R8
1×(Alternativ) ESP32 S3 SuperMini Dev Module
1×(Alternativ) ESP32 S3 Uno-form Board
1×(Alternativ) ESP32 S3 Camera Board
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×IR Slotted Optical Speed Sensor
1×Verbindungskabel
1×(Optional) Breadboard
1×(Optional) DC-Stromanschluss
1×(Empfohlen) Screw Terminal Expansion Board for ESP32 S3
1×(Empfohlen) Breakout Expansion Board for ESP32 S3
1×(Empfohlen) Power Splitter for ESP32 S3

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 S3 Starter-Kit (ESP32 S3 enthalten)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Überblick über IR Slotted Optical Speed Sensor

Die IR-Gabellichtschranke ist ein kleines U-förmiges Bauteil. Manche nennen sie Photo Interrupter, Opto Interrupter oder IR-Schlitzsensor. Ein Arm enthält eine Infrarot-LED. Der andere Arm enthält einen NPN-Fototransistor. Beide stehen sich über einem schmalen Spalt gegenüber, und der Sensor meldet dem ESP32 S3, ob sich etwas in diesem Spalt befindet.

Wichtige Spezifikationen

Merkmal Wert
Sensortyp Schlitz-Lichtschranke (IR-LED + NPN-Fototransistor)
Schlitzbreite 5,9 mm
Betriebsspannung 3,3V – 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)

Pinbelegung der IR-Gabellichtschranke

Das Modul hat nur drei Pins, daher ist die Verdrahtung kurz und einfach.

  1. VCC — Stromeingang, 3,3V bis 5V (verwenden Sie beim ESP32 S3 3,3V)
  2. GND — Masse (0V)
  3. OUT — digitales Signal, das zu einem Eingangspin des ESP32 S3 geht
Pinbelegung der IR-Gabellichtschranke

※ Notiz:

Die Reihenfolge der Pins kann sich von Charge zu Charge ändern. Lesen Sie immer die auf Ihrem Modul aufgedruckten Beschriftungen, bevor Sie die Kabel anschließen.

Wie die Gabellichtschranke funktioniert

Stellen Sie sich den Schlitz als winziges Lichttor vor. Ist der Spalt leer, durchquert das Infrarotlicht ihn und erreicht den Fototransistor, und der OUT-Pin ist HIGH. Wenn ein undurchsichtiges Objekt in den Spalt kommt, zum Beispiel ein Stück Karton oder ein Zahn einer Encoderscheibe, blockiert es das Licht und der OUT-Pin fällt auf LOW.

Ein eingebauter Schmitt-Trigger bereinigt das Signal, bevor es das Modul verlässt. Deshalb erhält der ESP32 S3 eine saubere 0 oder 1 ohne Prellen, und Sie brauchen keinen Entprellcode. Beachten Sie eines: Klarer Kunststoff oder Glas kann Infrarotlicht durchlassen. Verwenden Sie daher undurchsichtige Objekte, um zuverlässige Ergebnisse zu erhalten.

So funktioniert die IR-Gabellichtschranke

Module anderer Hersteller verwenden die umgekehrte Logik. Wenn Ihr Modul „blockiert" meldet, obwohl der Schlitz leer ist, tauschen Sie im ersten Sketch einfach LOW und HIGH. Der RPM-Sketch zählt eine Flanke pro Schlitz und funktioniert daher mit beiden Typen.

Verdrahtungsdiagramm

Der Sensor braucht nur drei Jumper-Kabel zum ESP32 S3. Führen Sie VCC zum 3,3V-Pin, GND zu einem beliebigen GND-Pin und OUT zu GPIO4, den beide Sketches in dieser Anleitung verwenden.

Verdrahtungsdiagramm ESP32 S3 mit IR-Gabellichtschranke

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Pin der Gabellichtschranke ESP32-S3-Pin
VCC 3,3V
GND GND
OUT GPIO4

Sicherheitshinweise

Der OUT-Pin schwingt bis zu der Spannung hoch, die Sie an VCC anlegen. Die GPIO-Pins des ESP32 S3 sind für 3,3V ausgelegt. Versorgen Sie den Sensor deshalb über den 3,3V-Pin und nicht über 5V. So bleibt das OUT-Signal auf einem Pegel, den das Board ohne Schaden lesen kann. Prüfen Sie außerdem die Beschriftungen auf dem Modul noch einmal, bevor Sie das USB-Kabel einstecken, denn vertauschte VCC und GND können den Sensor beschädigen.

So programmieren Sie die IR-Gabellichtschranke

Der erste Sketch verwendet digitalRead(), um den OUT-Pin immer wieder zu prüfen. Er merkt sich den letzten Zustand und gibt nur dann eine Meldung aus, wenn sich der Zustand ändert, und er erhöht einen Zähler um eins, jedes Mal wenn der Schlitz blockiert wird.

Der zweite Sketch ist für die Drehzahl gemacht. Die Zähne der Scheibe laufen sehr schnell vorbei, daher könnte die Prüfung des Pins in loop() einige davon verpassen. Stattdessen ruft der Sketch attachInterrupt() auf die FALLING-Flanke auf, die jedes Mal einmal auslöst, wenn ein Zahn das Licht blockiert. Die Interrupt-Funktion ist mit IRAM_ATTR markiert, wie es der ESP32 S3 verlangt, und sie erhöht nur einen volatile-Zähler um eins. Einmal pro Sekunde liest loop() den Zähler, setzt ihn zurück und berechnet die Drehzahl.

Die Formel für die Drehzahl ist einfach. Eine Standard-Encoderscheibe hat 20 Schlitze, also ergibt eine volle Umdrehung 20 Impulse. Die in einer Sekunde gezählten Impulse mal 60 ergeben Impulse pro Minute. Teilen Sie das durch 20, und Sie erhalten Umdrehungen pro Minute (U/min, RPM):

float rpm = pulses * 60.0 / SLOTS_PER_TURN;

ESP32 S3 Code – Objekte im Schlitz zählen

Dieser Sketch überwacht GPIO4 und gibt eine Zeile aus, jedes Mal wenn der Schlitz blockiert wird oder wieder frei ist. Jede neue Unterbrechung erhöht den Zählerstand um eins, sodass Sie ihn als einfachen Objektzähler verwenden können.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 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-s3/esp32-s3-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 S3 GPIO4 connected to the OUT pin of the speed sensor int lastState; // the previous state of the sensor int objectCount = 0; // how many times the slot was blocked void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); lastState = digitalRead(SENSOR_PIN); } void loop() { int state = digitalRead(SENSOR_PIN); if (state != lastState) { // the state has changed if (state == LOW) { // LOW = something is in the slot objectCount++; Serial.print("The slot is blocked - count: "); Serial.println(objectCount); } else { // HIGH = the slot is clear Serial.println("The slot is clear"); } lastState = state; } }

Schnelle Schritte

  1. Neu beim ESP32 S3? Lesen Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3.
  2. Verdrahten Sie die Gabellichtschranke wie im Verdrahtungsdiagramm gezeigt mit dem ESP32 S3.
  3. Verbinden Sie den ESP32 S3 über das USB-Typ-C-Kabel mit Ihrem Computer.
  4. Öffnen Sie die Arduino IDE und wählen Sie unter Tools > Board den Eintrag ESP32S3 Dev Module, dann den richtigen COM-Port.
  5. Kopieren Sie den obigen Code und fügen Sie ihn in einen neuen Sketch ein.
  6. Klicken Sie auf die Schaltfläche Upload, um den Code auf das Board zu übertragen.
  7. Öffnen Sie den Serial Monitor und stellen Sie die Baudrate auf 9600 ein.
  8. Führen Sie ein Stück Karton oder Ihren Finger einige Male durch den Schlitz.
  9. Beobachten Sie die Meldungen und den Zählerstand im Serial Monitor.
  10. Profi-Tipp: Befestigen Sie den Sensor mit M3-Schrauben durch die Löcher an beiden Enden. Ein Sensor, der sich nicht bewegt, liefert stabile Zählwerte, auch wenn Objekte schnell vorbeikommen.

Ausgabe im Serial Monitor

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

ESP32 S3 Code – Motordrehzahl messen (RPM)

Machen wir den Sensor nun zu einem Drehzahlmesser. Montieren Sie eine Encoderscheibe auf der Motorwelle oder dem Rad, sodass ihre Zähne durch den Schlitz laufen, ohne den Sensor zu berühren. Jeder Zahn ergibt einen Impuls, und der Sketch gibt die Impulszahl und die Drehzahl einmal pro Sekunde aus.

/* * Dieser ESP32 S3 Code wurde von newbiely.de entwickelt * Dieser ESP32 S3 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-s3/esp32-s3-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 S3 GPIO4 connected to the OUT pin of the speed sensor const int SLOTS_PER_TURN = 20; // number of slots (holes) in the encoder disc volatile unsigned long pulseCount = 0; // changed inside the interrupt unsigned long lastTime = 0; // runs every time a tooth of the disc blocks the slot void IRAM_ATTR countPulse() { pulseCount++; } void setup() { Serial.begin(9600); pinMode(SENSOR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING); } void loop() { if (millis() - lastTime >= 1000) { // every 1 second lastTime = millis(); unsigned long pulses = pulseCount; // read and reset the counter pulseCount = 0; float rpm = pulses * 60.0 / SLOTS_PER_TURN; // pulses per second -> turns per minute Serial.print("Pulses: "); Serial.print(pulses); Serial.print(" | Speed: "); Serial.print(rpm); Serial.println(" RPM"); } }

Schnelle Schritte

  1. Neu beim ESP32 S3? Lesen Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3.
  2. Behalten Sie die gleiche Verdrahtung wie im ersten Beispiel.
  3. Befestigen Sie die Encoderscheibe so auf der Welle, dass ihre Zähne durch den Schlitz laufen.
  4. Kopieren Sie den obigen RPM-Code in die Arduino IDE und klicken Sie auf Upload.
  5. Öffnen Sie den Serial Monitor mit 9600 Baud.
  6. Drehen Sie die Scheibe von Hand oder schalten Sie den Motor ein. Wie Sie den Motor ansteuern, sehen Sie im Tutorial ESP32 S3 - Gleichstrommotor.
  7. Lesen Sie die Impulse und den RPM-Wert ab, die jede Sekunde erscheinen.
  8. Profi-Tipp: Wenn Ihre Scheibe nicht 20 Schlitze hat, zählen Sie sie und ändern Sie den Wert SLOTS_PER_TURN im Code. Sonst ist die Drehzahl falsch.

Ausgabe im Serial Monitor

Die folgende Ausgabe zeigt einen Motor, der sich mit etwa 300 U/min dreht und dann stoppt.

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

Wenn Sie wissen möchten, wie weit ein Rad gefahren ist, multiplizieren Sie die Anzahl der Umdrehungen mit dem Umfang des Rades (π × Durchmesser).

Anwendungsideen

Der Geschwindigkeitssensor liefert für jedes Ereignis einen sauberen Impuls und passt daher zu vielen Mess- und Zählprojekten mit dem ESP32 S3.

  1. Motor-Drehzahlmesser: Zeigen Sie die Drehzahl eines Gleichstrommotors an und prüfen Sie, wie sich die Geschwindigkeit mit der Last ändert.
  2. Radrückmeldung beim Roboter: Messen Sie die Geschwindigkeit jedes Rades, damit ein Roboter geradeaus fahren kann.
  3. Entfernungsmesser: Zählen Sie Radumdrehungen und rechnen Sie sie in die zurückgelegte Strecke um.
  4. Stückzähler: Zählen Sie kleine Teile, die an einer Sortierlinie durch den Schlitz fallen.
  5. Endlagen- und Positionserkennung: Bringen Sie eine dünne Fahne an einem beweglichen Teil an und stoppen Sie es, wenn die Fahne in den Schlitz eintritt.
  6. Lüfterdrehzahl überwachen: Verfolgen Sie, wie schnell sich ein Kühllüfter dreht, und warnen Sie, wenn er langsamer wird.

Für Objekte, die weiter entfernt sind und nicht in einen Schlitz passen, ist das Tutorial ESP32 S3 - Hindernissensor die bessere Wahl. Wie Sie einen von Hand gedrehten Knopf samt Drehrichtung auslesen, sehen Sie im Tutorial ESP32 S3 - Drehgeber.

Fordern Sie sich heraus

Probieren Sie diese Aufgaben aus, um auf dem Gelernten aufzubauen.

  1. Anfänger: Schalten Sie eine LED ein, solange der Schlitz blockiert ist, und aus, wenn er frei ist.
  2. Fortgeschrittene: Fügen Sie dem RPM-Sketch die Entfernungsberechnung hinzu und geben Sie die Gesamtstrecke in Zentimetern aus.
  3. Experten: Nutzen Sie die gemessene Drehzahl, um einen Gleichstrommotor auf einer festen Drehzahl zu halten, indem Sie seinen PWM-Wert nach oben oder unten anpassen.

Video-Tutorial

Verwandte Tutorials

※ 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!