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.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 (ESP32 inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À 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

- 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

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.

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.
É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.
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.
É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.
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..