ESP32 - Capteur de vitesse optique à fente IR

Ce tutoriel vous explique comment utiliser l'ESP32 pour lire l'état d'un capteur de vitesse optique à fente IR, compter les objets qui passent dans sa fente, et transformer les impulsions d'un disque codeur en vitesse de moteur en tr/min (RPM), affichée dans le Moniteur Série.

ESP32 et capteur de vitesse optique à fente IR

À Propos du Capteur de Vitesse Optique à Fente IR

Ce petit module a une forme de U avec un espace étroit au milieu. On l'appelle de plusieurs façons : fourche optique, interrupteur optique, capteur IR en U ou simplement capteur à fente. Il fait un seul travail. Il indique à l'ESP32 si quelque chose se trouve dans l'espace ou non. Comme il peut commuter très vite, c'est un bon choix pour mesurer la vitesse de rotation d'une roue ou d'un moteur.

Capteur de vitesse optique à fente IR
Le type de capteur photoélectrique à fente (LED IR + phototransistor NPN)
La largeur de la fente 5,9 mm
La sortie numérique (TTL), LOW quand bloqué, HIGH quand dégagé
Le conditionnement du signal trigger de Schmitt intégré
La fixation trous de vis M3 aux deux extrémités
Le nombre de broches 3 (VCC, GND, OUT)
Tension de fonctionnement 3,3V à 5V DC

Les usages typiques sont la mesure de la vitesse d'un moteur (tr/min) avec un disque codeur, un tachymètre simple, le comptage d'objets ou d'impulsions, la mesure d'une distance en comptant les tours de roue, le retour de vitesse de roue pour une voiture robot, et la détection de limite ou de position.

Brochage du Capteur de Vitesse Optique à Fente IR

Brochage du capteur de vitesse optique à fente IR
  • Broche VCC : connectez cette broche à la broche 3,3V de l'ESP32
  • Broche GND : connectez cette broche à GND (0V)
  • Broche OUT : connectez cette broche à une broche d'entrée de l'ESP32 (GPIO18 dans ce tutoriel). Elle donne LOW quand la fente est bloquée et HIGH quand elle est dégagée

L'ordre des broches n'est pas toujours le même d'un lot à l'autre. Lisez les étiquettes imprimées sur votre propre module avant de connecter les fils.

La broche OUT monte aussi haut que la tension que vous donnez à VCC. L'ESP32 est une carte 3,3V, alors alimentez le capteur depuis la broche 3,3V, pas depuis 5V. De cette façon, la broche OUT n'envoie jamais plus de 3,3V dans la broche GPIO.

Comment Fonctionne le Capteur de Vitesse Optique à Fente IR

Comment fonctionne le capteur de vitesse optique à fente IR

Un bras du U contient une LED infrarouge. L'autre bras contient un phototransistor NPN. Les deux se font face de part et d'autre de l'espace de 5,9 mm.

  • Rien dans l'espace : la lumière IR atteint le phototransistor, et la broche OUT est HIGH.
  • Un objet opaque dans l'espace, comme un morceau de carton ou une dent d'un disque codeur : la lumière est coupée, et la broche OUT est LOW.

Un trigger de Schmitt sur la carte transforme le niveau de lumière brut en un 0 ou un 1 net, sans oscillation entre les deux. Grâce à lui, le code ESP32 n'a besoin d'aucun anti-rebond.

Le plastique transparent peut laisser passer la lumière IR, il n'est donc pas toujours vu comme bloquant. Utilisez des objets à travers lesquels vous ne pouvez pas voir.

Certains modules d'autres fabricants fonctionnent à l'inverse. Si votre capteur indique « bloqué » quand l'espace est vide, échangez simplement LOW et HIGH dans le premier code. Le code RPM compte un front pour chaque fente du disque, il fonctionne donc avec les deux types.

Schéma de Câblage

Comment connecter l'ESP32 et le capteur de vitesse optique à fente IR

Seuls trois fils sont nécessaires. Connectez VCC à 3,3V, GND à GND, et OUT à GPIO18. Vous pouvez brancher les fils directement sur les broches, ou utiliser une breadboard si vous préférez.

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

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

Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, consultez les instructions dans le tutoriel suivant : Comment alimenter l'ESP32..

Capteur de vitesse optique à fente IR ESP32
VCC 3.3V
GND GND
OUT GPIO18

Comment installer le disque codeur pour mesurer la vitesse

Pour mesurer la vitesse, le capteur a besoin de quelque chose qui coupe la lumière encore et encore pendant qu'il tourne. C'est le rôle du disque codeur. Fixez le disque sur l'arbre du moteur ou sur la roue, puis fixez le capteur avec ses trous M3 pour que les dents du disque passent dans l'espace. Le disque ne doit toucher le capteur à aucun moment du tour.

Vous pouvez faire tourner le disque à la main pour un premier test. Pour le faire tourner avec un moteur, consultez le ESP32 - Moteur à courant continu., car le moteur a besoin de son propre câblage.

Comment Programmer le Capteur de Vitesse Optique à Fente IR

Aucune bibliothèque n'est nécessaire. Les deux exemples ci-dessous utilisent seulement des fonctions fournies avec le noyau ESP32.

  • Configurer la broche en entrée : pinMode(SENSOR_PIN, INPUT);
  • Lire l'état de la fente (LOW signifie bloquée) : int state = digitalRead(SENSOR_PIN);
  • Agir seulement quand l'état change : if (state != lastState) { ... }
  • Appeler une courte fonction chaque fois qu'une dent bloque la fente : attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
  • Marquer cette fonction avec IRAM_ATTR pour que l'ESP32 puisse l'exécuter vite : void IRAM_ATTR countPulse() { pulseCount++; }
  • Transformer les impulsions d'une seconde en tours par minute : float rpm = pulses * 60.0 / SLOTS_PER_TURN;

Pourquoi utiliser une interruption pour la vitesse ? Quand le moteur tourne vite, les impulsions arrivent très proches les unes des autres, et une simple vérification dans loop() peut en manquer certaines. L'interruption les attrape toutes. Le front FALLING est choisi pour que chaque dent soit comptée une seule fois. Pour en savoir plus, lisez le ESP32 - Interruption GPIO..

Code ESP32 - Détecter et Compter les Objets dans la Fente

Ce code vérifie la broche OUT en continu. Il affiche un message seulement quand l'état change. Chaque fois que la fente devient bloquée, le compteur augmente de un.

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 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/esp32-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 18; // ESP32 GPIO18 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

Si c'est la première fois que vous utilisez l'ESP32, consultez Installation du logiciel ESP32..

  • Connectez le capteur à l'ESP32 comme indiqué dans le schéma de câblage.
  • Branchez le câble USB sur l'ESP32 et sur votre PC.
  • Ouvrez Arduino IDE, puis sélectionnez la carte ESP32 Dev Module et le bon port COM.
  • Copiez le code ci-dessus et collez-le dans Arduino IDE.
  • Cliquez sur le bouton Téléverser dans Arduino IDE pour compiler et téléverser le code vers l'ESP32.
  • Cliquez sur l'icône Moniteur Série, puis saisissez ou sélectionnez 9600 comme débit en bauds.
  • Placez un morceau de carton ou votre doigt dans la fente, puis retirez-le. Faites-le plusieurs fois.
  • Regardez les messages dans le Moniteur Série.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 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
ESP32 Dev Module on COM15
2

Code ESP32 - Mesurer la Vitesse du Moteur (RPM)

Maintenant le capteur fonctionne comme un tachymètre. Chaque dent du disque qui bloque la fente déclenche l'interruption, qui ajoute un à un compteur. Une fois par seconde, le code lit le compteur, le remet à zéro, et calcule la vitesse.

Le calcul est simple. Un disque codeur courant, comme celui vendu avec les motoréducteurs TT, a 20 fentes, donc un tour complet donne 20 impulsions. Les impulsions d'une seconde, multipliées par 60, donnent les impulsions d'une minute. Divisez par 20 et vous obtenez les tours par minute (tr/min, RPM). Si votre disque a un nombre de fentes différent, changez la valeur de SLOTS_PER_TURN dans le code.

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 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/esp32-ir-slotted-optical-speed-sensor */ const int SENSOR_PIN = 18; // ESP32 GPIO18 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

  • Fixez le disque codeur et le capteur comme montré dans l'image du disque codeur ci-dessus. Le câblage vers l'ESP32 reste le même.
  • Copiez le code ci-dessus, collez-le dans Arduino IDE et cliquez sur le bouton Téléverser.
  • Ouvrez le Moniteur Série à 9600 bauds.
  • Faites tourner le disque à la main, ou alimentez le moteur.
  • Observez la vitesse dans le Moniteur Série. L'exemple ci-dessous est un moteur qui tourne à environ 300 RPM, avec le moteur arrêté au début et à la fin.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 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
ESP32 Dev Module on COM15
2

Voulez-vous aussi savoir quelle distance une roue a parcourue ? Multipliez le nombre de tours par la circonférence de la roue (π × diamètre de la roue).

Si vous voulez détecter un objet à quelques centimètres au lieu de l'intérieur d'une fente, consultez le ESP32 - Capteur d'évitement d'obstacles infrarouge.. Si vous avez besoin d'un bouton qui donne aussi le sens de rotation, consultez le ESP32 - Encodeur rotatif..

Vidéo

Commentaires

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