Arduino - Capteur de vitesse optique à fente IR
Dans ce tutoriel, nous allons apprendre :
- Comment fonctionne le capteur de vitesse optique à fente IR (appelé aussi fourche optique)
- Comment connecter le capteur de vitesse optique à fente IR à l'Arduino
- Comment programmer l'Arduino pour détecter et compter les objets qui passent dans la fente
- Comment programmer l'Arduino pour mesurer la vitesse d'un moteur en tr/min (RPM) avec un disque codeur

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables STEM V3 (Arduino inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À Propos du Capteur de Vitesse Optique à Fente IR
Le capteur de vitesse optique à fente IR est un petit module en forme de U. On l'appelle aussi capteur à fente, interrupteur optique ou capteur IR en U. Il indique à l'Arduino si un objet se trouve dans sa fente ou non. Avec un disque codeur, il peut aussi indiquer à quelle vitesse tourne un moteur ou une roue.
| Capteur de vitesse optique à fente IR | |
|---|---|
| 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 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) |
Vous pouvez l'utiliser pour :
- Mesurer la vitesse d'un moteur (tr/min, RPM) avec un disque codeur
- Fabriquer un tachymètre
- Compter des objets ou des impulsions
- Mesurer une distance en comptant les tours de roue
- Obtenir le retour de vitesse d'une roue sur un robot
- Détecter une limite ou une position
Brochage

Le capteur de vitesse optique à fente IR a trois broches :
- Broche VCC : doit être connectée à VCC (5V ou 3.3V)
- Broche GND : doit être connectée à GND (0V)
- Broche OUT : est une broche de sortie numérique. Elle est à l'état BAS quand la fente est bloquée et à l'état HAUT quand la fente est dégagée. Cette broche doit être connectée à une broche d'entrée de l'Arduino.
L'ordre des broches peut être différent selon les lots. Veuillez lire les étiquettes sur votre module.
Fonctionnement

Un côté du U a une LED infrarouge. L'autre côté a un phototransistor NPN. Ils se font face de chaque côté de la fente de 5.9 mm.
- Quand la fente est vide, la lumière IR atteint le phototransistor. La broche OUT est à l'état HAUT.
- Quand un objet opaque (un morceau de carton, ou une dent d'un disque codeur) entre dans la fente, il bloque la lumière. La broche OUT est à l'état BAS.
Le trigger de Schmitt intégré rend la sortie propre et stable, 0 ou 1, sans instabilité. Donc nous n'avons pas besoin de filtrer les rebonds dans le code.
Quelques conseils :
- Utilisez des objets opaques. Un objet transparent peut ne pas bien bloquer la lumière IR.
- Certains modules d'autres fabricants fonctionnent à l'inverse. Si votre capteur indique « bloqué » quand la fente est vide, échangez simplement LOW et HIGH dans le premier code. Le code RPM compte un front par dent, donc il fonctionne dans les deux cas.
Mesurer la Vitesse avec un Disque Codeur
Un disque codeur est une plaque ronde avec des fentes (trous) près de son bord. Le disque courant pour les moteurs à engrenages TT a 20 fentes. Fixez le disque sur l'arbre du moteur ou sur la roue, pour que ses dents passent dans la fente du capteur sans la toucher.
Quand le disque tourne, chaque dent bloque la lumière un court instant. La broche OUT donne une impulsion par dent. Un tour complet donne 20 impulsions. L'Arduino compte les impulsions pendant 1 seconde, puis calcule la vitesse :
- Impulsions en 1 seconde × 60 = impulsions en 1 minute
- Impulsions en 1 minute ÷ 20 = tours par minute (tr/min, RPM)
Schéma de Câblage
Connectez VCC du capteur à 5V de l'Arduino, GND à GND, et OUT à la broche 2 de l'Arduino, comme indiqué dans l'image ci-dessous.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Nous utilisons la broche 2 car c'est une broche d'interruption sur l'Arduino Uno. Le code RPM en a besoin.
Comment Programmer l'Arduino pour le Capteur de Vitesse Optique à Fente IR
- Aucune bibliothèque nécessaire : le code utilise uniquement des fonctions intégrées.
- Définir la broche : const int SENSOR_PIN = 2;
- Configurer la broche en entrée avec pinMode() : pinMode(SENSOR_PIN, INPUT);
- Lire l'état avec digitalRead() : int state = digitalRead(SENSOR_PIN);
- Vérifier l'état : if (state == LOW) signifie qu'un objet est dans la fente. HIGH signifie que la fente est dégagée.
- Pour compter des impulsions rapides, utilisez une interruption. Chaque fois que la broche OUT passe de HIGH à LOW (une dent bloque la fente), l'Arduino exécute une petite fonction : attachInterrupt(digitalPinToInterrupt(SENSOR_PIN), countPulse, FALLING);
- Déclarez le compteur volatile, car il change dans l'interruption : volatile unsigned long pulseCount = 0;
- Toutes les 1 seconde, transformez les impulsions en RPM : float rpm = pulses * 60.0 / SLOTS_PER_TURN;
Pourquoi utiliser une interruption ? Quand le moteur tourne vite, les impulsions sont très courtes. Si nous vérifions la broche seulement dans loop(), nous pouvons en manquer. L'interruption capte chaque impulsion. Nous utilisons FALLING pour que chaque dent soit comptée une seule fois.
Code Arduino - Détecter un Objet dans la Fente
Le code ci-dessous fait ces choses :
- Lit la broche OUT en boucle
- Affiche un message seulement quand l'état change
- Compte combien de fois la fente est bloquée
Étapes Rapides
- Réalisez le câblage comme indiqué dans le schéma ci-dessus.
- Connectez l'Arduino au PC via un câble USB.
- Ouvrez Arduino IDE. Allez dans le menu Outils, sélectionnez la bonne carte et le bon port.
- Copiez le code ci-dessus et collez-le dans Arduino IDE.
- Cliquez sur le bouton Téléverser dans Arduino IDE pour téléverser le code vers l'Arduino.
- Ouvrez le Moniteur Série (débit en bauds 9600).
- Passez un morceau de carton ou votre doigt dans la fente plusieurs fois.
- Regardez le résultat dans le Moniteur Série.
Code Arduino - Mesurer la Vitesse du Moteur (RPM)
Le code ci-dessous fait ces choses :
- Compte une impulsion chaque fois qu'une dent du disque bloque la fente (interruption sur le front DESCENDANT, FALLING)
- Toutes les 1 seconde, calcule la vitesse en RPM
- Affiche le nombre d'impulsions et la vitesse
Le code utilise SLOTS_PER_TURN = 20. Si votre disque codeur a un nombre de fentes différent, changez ce nombre.
Étapes Rapides
- Fixez le disque codeur sur l'arbre du moteur ou sur la roue, pour que ses dents passent dans la fente.
- Gardez le même câblage que pour le premier code.
- Copiez le code ci-dessus, collez-le dans Arduino IDE et téléversez-le.
- Faites tourner le disque à la main, ou alimentez le moteur. Pour piloter le moteur, voir Arduino - Moteur à courant continu..
- Regardez le résultat dans le Moniteur Série. L'exemple ci-dessous montre un moteur qui tourne à environ 300 RPM.
Par exemple, 100 impulsions en 1 seconde donnent 100 × 60 ÷ 20 = 300 RPM.
Voulez-vous trouver la distance parcourue par une roue ? Multipliez le nombre de tours par la circonférence de la roue (π × diamètre de la roue).
Si vous voulez détecter un objet à distance (pas dans une fente), voir Arduino - Capteur infrarouge de détection d'obstacles.. Si vous voulez lire un bouton rotatif et son sens, voir Arduino - Encodeur rotatif..