Arduino UNO R4 - Capteur de vitesse optique à fente IR
Dans ce tutoriel, nous allons apprendre à utiliser le capteur de vitesse optique à fente IR avec l'Arduino UNO R4. En détail, nous allons apprendre :
- Comment le capteur IR à fente en forme de U détecte un objet entre ses deux bras.
- Comment connecter le capteur de vitesse à l'Arduino UNO R4.
- Comment programmer l'Arduino UNO R4 pour compter chaque objet qui passe dans la fente.
- Comment programmer l'Arduino UNO R4 pour mesurer la vitesse d'un moteur (tr/min, RPM) avec un disque codeur et une interruption.

Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables STEM V4 IoT (Arduino inclus) | |
| 1 | × | Kit de Démarrage DIYables STEM V4B IoT (Arduino 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. On l'appelle aussi fourche optique. Un bras contient une LED infrarouge. L'autre bras contient un phototransistor NPN. Ils se font face de chaque côté d'un espace de 5.9 mm. Le capteur indique une chose simple à l'Arduino UNO R4 : l'espace est-il vide, ou y a-t-il quelque chose dedans ?
| 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 DC |
| Sortie | numérique (TTL), BAS quand bloqué, HAUT quand libre |
| Conditionnement du signal | trigger de Schmitt intégré |
| Fixation | trous pour vis M3 aux deux extrémités |
| Broches | 3 (VCC, GND, OUT) |
Utilisations courantes :
- Mesurer la vitesse d'un moteur (tr/min, RPM) avec un disque codeur, comme un tachymètre.
- Compter des objets ou des impulsions.
- Mesurer une distance en comptant les tours de roue.
- Donner un retour sur la vitesse des roues à un robot.
- Détecter une limite ou une position de départ.
Brochage

Le module a trois broches :
- Broche VCC : à connecter au 5V de l'Arduino UNO R4 (le module accepte de 3.3V à 5V).
- Broche GND : à connecter à GND (0V).
- Broche OUT : sortie numérique, à connecter à une broche d'entrée de l'Arduino UNO R4.
L'ordre des broches peut changer d'un lot à l'autre. Lisez toujours les étiquettes imprimées sur votre module.
Comment Ça Marche

La LED IR éclaire à travers la fente en permanence.
- La fente est vide : la lumière atteint le phototransistor, donc la broche OUT est HAUTE.
- La fente est bloquée par quelque chose d'opaque (une carte, un doigt, une dent d'un disque codeur) : la lumière ne peut pas passer, donc la broche OUT est BASSE.
Le trigger de Schmitt intégré transforme le niveau de lumière brut en un 0 ou un 1 propre. Le signal ne vibre pas, donc vous n'avez pas besoin d'anti-rebond logiciel.
Deux petites choses à savoir :
- Le plastique transparent ou le verre peut laisser passer la lumière IR. Utilisez des objets opaques.
- Certains modules d'autres fabricants fonctionnent dans l'autre sens. Si votre carte indique « bloqué » alors que la fente est vide, échangez simplement BAS et HAUT dans le premier code. Le code RPM compte un front par fente, donc il fonctionne avec les deux types.
Schéma de Câblage
Seuls trois fils sont nécessaires : VCC au 5V, GND à GND, et OUT à la broche 2 de l'Arduino UNO R4. L'UNO R4 est une carte 5V, donc une alimentation 5V convient ici, et le signal OUT reste à un niveau sûr.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Voir Comment alimenter l'Arduino UNO R4..
Nous utilisons la broche 2 car elle peut gérer une interruption. Le deuxième code en a besoin.
Comment Programmer pour le Capteur de Vitesse Optique à Fente IR
Vérifier si la fente est bloquée (scrutation, polling) :
- Configurez en entrée la broche connectée à la broche OUT :
- Lisez la broche. BAS signifie bloqué, HAUT signifie libre :
- Comparez avec la dernière lecture, pour agir seulement quand l'état change :
Compter des impulsions rapides (interruption) :
- Créez un compteur. Marquez-le volatile car l'interruption le modifie :
- Écrivez une toute petite fonction qui ajoute un au compteur :
- Exécutez cette fonction à chaque fois que le signal passe de HAUT à BAS (une dent entre dans la fente) :
- Une fois par seconde, copiez et remettez à zéro le compteur en suspendant les interruptions, puis transformez les impulsions en tr/min (RPM) :
Pourquoi cette formule ? Avec un disque à 20 fentes, un tour complet fait 20 impulsions. Les impulsions en 1 seconde × 60 donnent les impulsions par minute. Divisez par 20 et vous obtenez les tours par minute (tr/min, RPM).
Code Arduino UNO R4 - Détecter un Objet dans la Fente
Ce programme lit la broche OUT encore et encore. Il affiche une ligne seulement quand l'état change, et il ajoute un au compteur à chaque fois que la fente est bloquée.
Étapes Rapides
Suivez ces instructions étape par étape :
- Si c'est votre première utilisation de l'Arduino Uno R4 WiFi/Minima, consultez le tutoriel sur Arduino UNO R4 - Installation du logiciel..
- Câblez les composants selon le schéma fourni.
- Connectez la carte Arduino Uno R4 à votre ordinateur à l'aide d'un câble USB.
- Lancez l'IDE Arduino sur votre ordinateur.
- Sélectionnez la carte Arduino Uno R4 appropriée (par exemple, Arduino Uno R4 WiFi) et le port COM.
- Copiez le code ci-dessus et collez-le dans l'IDE Arduino.
- Cliquez sur le bouton Upload pour envoyer le code vers l'Arduino UNO R4.
- Ouvrez le Arduino UNO R4 - Moniteur série. et réglez-le sur 9600 bauds.
- Glissez un morceau de carte (ou votre doigt) dans la fente, puis retirez-le. Faites-le plusieurs fois.
- Regardez le résultat sur le moniteur série.
Chaque passage fait deux lignes : une quand la carte entre, une quand elle sort. Aucune ligne n'est affichée tant que rien ne change.
Code Arduino UNO R4 - Mesurer la Vitesse du Moteur (tr/min, RPM)
La scrutation dans loop() convient aux objets lents. Un disque qui tourne est beaucoup plus rapide, et loop() pourrait manquer des dents. Donc ce programme compte les impulsions avec une interruption sur le front DESCENDANT (FALLING), ce qui donne exactement un comptage par dent. Chaque seconde, il affiche le nombre d'impulsions et la vitesse en tr/min (RPM).
La constante SLOTS_PER_TURN est réglée sur 20. C'est le disque codeur courant livré avec les moteurs à engrenages TT. Si votre disque a un nombre de fentes différent, changez cette valeur.
Installer le Disque Codeur
- Fixez le disque codeur sur l'arbre du moteur ou sur la roue.
- Placez le capteur pour que les dents du disque passent dans la fente.
- Assurez-vous que le disque ne touche pas les bras du capteur.
- Vous pouvez faire tourner le disque à la main, ou alimenter le moteur. Le moteur a besoin de son propre câblage. Consultez le tutoriel Arduino UNO R4 - moteur à courant continu. pour cette partie.
Étapes Rapides
- Gardez le même câblage qu'avant.
- Copiez le code RPM ci-dessus et collez-le dans l'IDE Arduino.
- Cliquez sur le bouton Upload.
- Ouvrez le moniteur série à 9600 bauds.
- Faites tourner le disque, puis laissez-le s'arrêter.
- Regardez la vitesse sur le moniteur série. Ici, le moteur tourne à environ 300 tr/min (RPM) :
Vérifiez une ligne : 100 impulsions × 60 ÷ 20 = 300 tr/min (RPM).
Vous voulez savoir quelle distance une roue a parcourue ? Multipliez le nombre de tours par la circonférence de la roue (π × diamètre de la roue).
※ Note:
- Gardez la fonction d'interruption courte. N'appelez pas Serial.print() à l'intérieur.
- Toute variable que l'interruption modifie doit être volatile.
- Besoin de détecter un objet à distance plutôt que dans une fente ? Essayez le Arduino UNO R4 - Capteur d'évitement d'obstacles.. Besoin d'un bouton qui donne aussi le sens de rotation ? Essayez l'Arduino UNO R4 - Encodeur rotatif..