ESP32 S3 - Capteur de vitesse optique à fente IR

Ce guide vous explique comment utiliser l'ESP32 S3 avec un capteur de vitesse optique à fente IR pour compter des objets et mesurer la vitesse de rotation d'un moteur. Que vous construisiez un petit tachymètre pour la roue d'un robot ou que vous débutiez avec les capteurs, ce tutoriel pas à pas vous permettra de démarrer.

Ce que vous allez construire dans ce tutoriel :

  1. Ce qu'est le capteur de vitesse optique à fente IR (fourche optique) et comment il fonctionne
  2. Comment connecter le capteur à l'ESP32 S3 en toute sécurité en 3,3V
  3. Un sketch qui compte chaque objet qui passe dans la fente
  4. Un sketch qui mesure la vitesse d'un moteur en tr/min (RPM) avec un disque codeur et une interruption
ESP32 S3 - Capteur de vitesse optique à fente IR

À propos du capteur de vitesse optique à fente IR

Le capteur de vitesse optique à fente IR est une petite pièce en forme de U. Certains l'appellent fourche optique, interrupteur optique ou capteur à fente IR. Un bras contient une LED infrarouge. L'autre bras contient un phototransistor NPN. Les deux se font face de part et d'autre d'un espace étroit, et le capteur indique à l'ESP32 S3 si quelque chose se trouve dans cet espace.

Caractéristiques principales

Élément Valeur
Type de capteur photoélectrique à fente (LED IR + phototransistor NPN)
Largeur de la fente 5,9 mm
Tension de fonctionnement 3,3V – 5V DC
Sortie numérique (TTL), LOW quand bloqué, HIGH quand dégagé
Conditionnement du signal trigger de Schmitt intégré
Fixation trous pour vis M3 aux deux extrémités
Broches 3 (VCC, GND, OUT)

Brochage du capteur de vitesse optique à fente IR

Le module n'a que trois broches, donc le câblage est court et facile.

  1. VCC — entrée d'alimentation, 3,3V à 5V (utilisez 3,3V sur l'ESP32 S3)
  2. GND — masse (0V)
  3. OUT — signal numérique qui va vers une broche d'entrée de l'ESP32 S3
Brochage du capteur de vitesse optique à fente IR

※ Note:

L'ordre des broches peut changer d'un lot à l'autre. Lisez toujours les étiquettes imprimées sur votre module avant de connecter les fils.

Comment fonctionne le capteur optique à fente

Pensez à la fente comme à une minuscule barrière lumineuse. Quand l'espace est vide, la lumière infrarouge le traverse et atteint le phototransistor, donc la broche OUT est HIGH. Quand un objet opaque entre dans l'espace, comme un morceau de carton ou une dent d'un disque codeur, il bloque la lumière et la broche OUT passe à LOW.

Un trigger de Schmitt intégré nettoie le signal avant qu'il ne quitte le module. Grâce à cela, l'ESP32 S3 reçoit un 0 ou un 1 net sans instabilité, et vous n'avez besoin d'aucun code anti-rebond. Une chose à retenir : le plastique transparent ou le verre peut laisser passer la lumière infrarouge, donc utilisez des objets opaques pour des résultats fiables.

Comment fonctionne le capteur de vitesse optique à fente IR

Les modules de certains autres fabricants utilisent la logique inverse. Si votre module signale « bloqué » alors que la fente est vide, échangez simplement LOW et HIGH dans le premier sketch. Le sketch des tr/min compte un front par fente, donc il fonctionne avec les deux types.

Schéma de câblage

Le capteur n'a besoin que de trois fils de liaison vers l'ESP32 S3. Reliez VCC à la broche 3,3V, GND à n'importe quelle broche GND, et OUT à GPIO4, que les deux sketches de ce guide utilisent.

Schéma de câblage ESP32 S3 capteur de vitesse optique à fente IR

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

Broche du capteur de vitesse Broche ESP32 S3
VCC 3.3V
GND GND
OUT GPIO4

Notes de sécurité

La broche OUT monte jusqu'à la tension que vous appliquez sur VCC. Les broches GPIO de l'ESP32 S3 sont conçues pour 3,3V, donc alimentez le capteur avec la broche 3,3V et non avec 5V. Ainsi, le signal OUT reste à un niveau que la carte peut lire sans risque. Vérifiez aussi une dernière fois les étiquettes du module avant de brancher le câble USB, car une inversion de VCC et GND peut endommager le capteur.

Comment programmer le capteur de vitesse optique à fente IR

Le premier sketch utilise digitalRead() pour lire la broche OUT en continu. Il mémorise le dernier état et n'affiche un message que quand l'état change, et il ajoute un à un compteur chaque fois que la fente devient bloquée.

Le second sketch est fait pour la vitesse. Les dents du disque passent très vite, donc lire la broche dans loop() pourrait en manquer. À la place, le sketch appelle attachInterrupt() sur le front FALLING, qui se déclenche une fois chaque fois qu'une dent bloque la lumière. La fonction d'interruption est marquée avec IRAM_ATTR, comme l'exige l'ESP32 S3, et elle ajoute seulement un à un compteur volatile. Une fois par seconde, loop() lit le compteur, le remet à zéro et calcule la vitesse.

La formule de la vitesse est simple. Un disque codeur standard a 20 fentes, donc un tour complet donne 20 impulsions. Les impulsions comptées en une seconde, multipliées par 60, donnent les impulsions par minute. Divisez par 20 et vous obtenez les tours par minute (tr/min, RPM) :

float rpm = pulses * 60.0 / SLOTS_PER_TURN;

Code ESP32 S3 - Compter les objets dans la fente

Ce sketch surveille GPIO4 et affiche une ligne chaque fois que la fente est bloquée ou redevient dégagée. Chaque nouveau blocage augmente le compte de un, donc vous pouvez l'utiliser comme simple compteur d'objets.

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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; } }

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Terminez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Câblez le capteur de vitesse à l'ESP32 S3 comme indiqué dans le schéma de câblage.
  3. Branchez l'ESP32 S3 à votre ordinateur avec le câble USB Type-C.
  4. Ouvrez l'Arduino IDE et choisissez ESP32S3 Dev Module dans Outils > Type de carte, puis choisissez le bon port COM.
  5. Copiez le code ci-dessus et collez-le dans un nouveau sketch.
  6. Cliquez sur le bouton Téléverser pour envoyer le code vers la carte.
  7. Ouvrez le moniteur série et réglez la vitesse à 9600 bauds.
  8. Passez plusieurs fois un morceau de carton ou votre doigt dans la fente.
  9. Regardez les messages et le compte dans le moniteur série.
  10. Conseil de pro : Fixez le capteur avec des vis M3 dans les trous à chaque extrémité. Un capteur qui ne bouge pas donne des comptes stables, même quand les objets passent vite.

Sortie du moniteur série

∞
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

Code ESP32 S3 - Mesurer la vitesse du moteur (tr/min)

Transformons maintenant le capteur en tachymètre. Montez un disque codeur sur l'arbre du moteur ou sur la roue, de façon que ses dents passent dans la fente sans toucher le capteur. Chaque dent donne une impulsion, et le sketch affiche le nombre d'impulsions et la vitesse chaque seconde.

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 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-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"); } }

Étapes rapides

  1. Nouveau sur ESP32 S3 ? Terminez d'abord notre guide ESP32 S3 - Premiers pas.
  2. Gardez le même câblage que dans le premier exemple.
  3. Fixez le disque codeur sur l'arbre de façon que ses dents passent dans la fente.
  4. Copiez le code tr/min ci-dessus dans l'Arduino IDE et cliquez sur Téléverser.
  5. Ouvrez le moniteur série à 9600 bauds.
  6. Faites tourner le disque à la main, ou alimentez le moteur. Pour piloter le moteur, voir le ESP32 S3 - Moteur DC.
  7. Lisez les impulsions et la valeur de tr/min qui s'affichent chaque seconde.
  8. Conseil de pro : Si votre disque n'a pas 20 fentes, comptez-les et changez la valeur SLOTS_PER_TURN dans le code. Sinon les tr/min seront faux.

Sortie du moniteur série

La sortie ci-dessous montre un moteur tournant à environ 300 tr/min, puis s'arrêtant.

∞
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

Si vous voulez savoir quelle distance une roue a parcourue, multipliez le nombre de tours par la circonférence de la roue (π × diamètre).

Idées d'application

Le capteur de vitesse donne une impulsion nette pour chaque événement, donc il convient à de nombreux projets de mesure et de comptage sur l'ESP32 S3.

  1. Tachymètre de moteur : Affichez les tr/min d'un moteur DC et vérifiez comment la vitesse change avec la charge.
  2. Retour de roue de robot : Mesurez la vitesse de chaque roue pour qu'un robot puisse rouler en ligne droite.
  3. Compteur de distance : Comptez les tours de roue et convertissez-les en distance parcourue.
  4. Compteur d'objets : Comptez de petites pièces qui tombent dans la fente sur une ligne de tri.
  5. Détection de fin de course et de position : Placez un petit drapeau sur une pièce mobile et arrêtez-la quand le drapeau entre dans la fente.
  6. Surveillance de la vitesse d'un ventilateur : Suivez la vitesse de rotation d'un ventilateur de refroidissement et avertissez quand elle diminue.

Pour des objets plus éloignés qui ne rentrent pas dans une fente, le ESP32 S3 - Capteur d'obstacle est un meilleur choix. Pour lire un bouton tourné à la main avec sa direction, voir le ESP32 S3 - Encodeur rotatif.

Défiez-vous

Essayez ces tâches pour approfondir ce que vous avez appris dans ce guide.

  1. Débutant : Allumez une LED quand la fente est bloquée et éteignez-la quand la fente est dégagée.
  2. Intermédiaire : Ajoutez le calcul de distance au sketch des tr/min et affichez la distance totale en centimètres.
  3. Avancé : Utilisez les tr/min mesurés pour maintenir un moteur DC à une vitesse fixe en ajustant sa valeur PWM vers le haut ou vers le bas.

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 !