ESP32 C3 Super Mini - Capteur de vitesse optique à fente IR

Apprenez à utiliser le capteur de vitesse optique à fente IR avec l'ESP32 C3 Super Mini pour compter des objets et mesurer la vitesse d'un moteur en tr/min (RPM).

Capteur de vitesse optique à fente IR avec ESP32 C3 Super Mini

Matériel Requis

1×ESP32 C3 Super Mini
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×IR Slotted Optical Speed Sensor
1×Fils de connexion
1×Optionnel: Breadboard
1×Optionnel: Connecteur d'alimentation DC

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À Propos du Capteur de Vitesse Optique à Fente IR

Ce module est une fourche optique en forme de U. Il indique à l'ESP32 C3 Super Mini quand quelque chose passe dans sa fente.

Faits rapides :

  • Type de capteur : photoélectrique à fente (LED IR + phototransistor NPN)
  • Largeur de la fente : 5,9 mm
  • Tension de fonctionnement : 3,3V à 5V CC
  • Sortie : numérique (TTL) - BAS quand bloqué, HAUT quand libre
  • Conditionnement du signal : trigger de Schmitt intégré
  • Fixation : trous de vis M3 aux deux extrémités
  • Broches : 3 (VCC, GND, OUT)

Utile pour :

  • La vitesse d'un moteur (tr/min) avec un disque codeur
  • Un tachymètre simple
  • Compter des objets ou des impulsions
  • La distance à partir des tours de roue
  • Le retour de vitesse des roues d'un robot
  • La détection de fin de course ou de position

Brochage

Brochage du capteur de vitesse optique à fente IR
  • VCC — Alimentation (3,3V à 5V)
  • GND — Masse (0V)
  • OUT — Signal numérique vers une broche d'entrée de l'ESP32 C3

※ Note:

L'ordre des broches peut changer d'un lot à l'autre. Suivez toujours les étiquettes imprimées sur votre module.

Fonctionnement

Fonctionnement du capteur de vitesse optique à fente IR
  • Deux côtés : une LED IR se trouve d'un côté de la fente. Un phototransistor lui fait face de l'autre côté.
  • Fente vide : la lumière IR atteint le phototransistor → OUT est HAUT
  • Fente bloquée : un objet opaque (une carte, une dent de disque) arrête la lumière → OUT est BAS
  • Signal propre : le trigger de Schmitt donne un 0 ou un 1 stable. Pas de rebond, donc aucun anti-rebond logiciel n'est nécessaire.
  • Plastique transparent : les objets transparents peuvent ne pas bien bloquer l'IR. Utilisez des objets opaques.
  • Logique inversée : certains modules d'autres fabricants fonctionnent à l'inverse. Si le vôtre indique « bloqué » avec une fente vide, échangez LOW et HIGH dans le code.

Schéma de Câblage

Voici comment connecter le capteur de vitesse optique à fente IR à l'ESP32 C3 Super Mini :

Schéma de câblage du capteur de vitesse optique à fente IR avec ESP32 C3 Super Mini

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Broche du capteur de vitesse Broche ESP32 C3 Super Mini
VCC 3.3V
GND GND
OUT GPIO4
  • Utilisez 3,3V, pas 5V : la broche OUT monte jusqu'à la tension VCC. L'ESP32 C3 est une carte 3,3V, alimentez donc le capteur en 3,3V.
  • Aucune pièce supplémentaire : aucune résistance n'est nécessaire. Trois fils suffisent.

Comment Programmer pour le Capteur de Vitesse Optique à Fente IR

Voici le code pour lire le capteur à fente IR. Aucune bibliothèque n'est nécessaire.

  • Configurer la broche en entrée :
pinMode(4, INPUT);
  • Lire l'état (LOW = bloqué, HIGH = libre) :
int state = digitalRead(4);
  • Compter les impulsions rapides avec une interruption (un comptage par dent, sur le front FALLING) :
attachInterrupt(digitalPinToInterrupt(4), countPulse, FALLING);
  • Transformer les impulsions en tr/min (RPM) (impulsions comptées en 1 seconde) :
float rpm = pulses * 60.0 / SLOTS_PER_TURN;

Code ESP32 C3 Super Mini - Détecter un Objet dans la Fente

Ce que fait ce code :

  • Lit la broche OUT encore et encore avec digitalRead()
  • Affiche un message seulement quand l'état change
  • Ajoute 1 à un compteur à chaque fois que la fente est bloquée
/* * Ce code ESP32 C3 Super Mini a été développé par newbiely.fr * Ce code ESP32 C3 Super Mini est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32-c3/esp32-c3-super-mini-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 C3 Super Mini 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; } }

Étapes Rapides

  1. Première fois avec cette carte ? Lisez ESP32 C3 Super Mini - Premiers pas pour configurer Arduino IDE.
  2. Câblez le capteur comme indiqué dans le tableau ci-dessus.
  3. Branchez l'ESP32 C3 Super Mini à votre PC avec le câble USB Type-C.
  4. Dans Arduino IDE, sélectionnez la carte ESP32 C3 Super Mini et le bon port COM.
  5. Copiez le code et collez-le dans Arduino IDE.
  6. Cliquez sur Téléverser. Si le téléversement échoue, maintenez le bouton BOOT, appuyez sur RESET, puis réessayez.
  7. Ouvrez le moniteur série et réglez-le sur 9600 bauds.
  8. Passez un morceau de carte ou votre doigt dans la fente plusieurs fois.
  9. Vérifiez le résultat dans le moniteur série.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 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
ESP32C3 Dev Module on COM15
2

Code ESP32 C3 Super Mini - Mesurer la Vitesse du Moteur (tr/min)

Ce que fait ce code :

  • Utilise une interruption sur le front FALLING. Chaque dent du disque qui bloque la fente ajoute 1 impulsion.
  • Toutes les 1 seconde, il lit le nombre d'impulsions et le remet à 0
  • Calcule les tr/min (RPM) et affiche les impulsions et la vitesse

Pourquoi une interruption ?

  • Les impulsions arrivent très vite. Vérifier la broche dans loop() pourrait en manquer.
  • FALLING signifie un comptage par dent.

La formule des tr/min (RPM) :

  • 1 tour = 20 impulsions (le disque courant des moteurs à réducteur TT a 20 fentes)
  • Impulsions en 1 seconde × 60 = impulsions par minute
  • Impulsions par minute ÷ 20 = tours par minute (tr/min)
  • Votre disque a un nombre de fentes différent ? Changez SLOTS_PER_TURN dans le code.
/* * Ce code ESP32 C3 Super Mini a été développé par newbiely.fr * Ce code ESP32 C3 Super Mini est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32-c3/esp32-c3-super-mini-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 4; // ESP32 C3 Super Mini 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"); } }

Étapes Rapides

  1. Gardez le même câblage que pour le premier exemple.
  2. Fixez le disque codeur sur l'arbre du moteur ou sur la roue. Ses dents doivent passer dans la fente sans toucher le capteur.
  3. Téléversez le code de la même façon que précédemment.
  4. Ouvrez le moniteur série à 9600 bauds.
  5. Faites tourner le disque à la main, ou alimentez le moteur.
  6. Regardez les impulsions et les tr/min changer chaque seconde.

Exemple de sortie avec le moteur à environ 300 tr/min :

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32C3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32C3 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
ESP32C3 Dev Module on COM15
2
  • Le code des tr/min compte un front par fente. Il fonctionne donc même si votre module a la logique inversée.

Connaissances Supplémentaires

Capteur à fente ou autres capteurs :

  • Capteur de vitesse optique à fente IR : détecte un objet dans sa fente de 5,9 mm. Idéal pour la vitesse, les tr/min et le comptage.
  • Capteur d'évitement d'obstacles IR : détecte un objet à distance devant lui, pas dans une fente.
  • ESP32 C3 Super Mini - Encodeur Rotatif : un bouton pour la saisie manuelle. Il indique aussi le sens de rotation.

Choisir le nombre de fentes par tour :

  • Plus de fentes = plus d'impulsions par tour = lecture de vitesse plus fine

Distance à partir des tours de roue :

  • Tours = impulsions ÷ fentes par tour
  • Distance = tours × circonférence de la roue (π × diamètre)

Vidéo

Commentaires

Tutoriels connexes

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !