Le capteur de vitesse infrarouge compte les tours d’un moteur, d’un axe ou d’une roue sans jamais les toucher. Un faisceau infrarouge traverse une fente en forme de fourche : chaque fois qu’une fente du disque monté sur l’arbre passe devant, le faisceau est coupé et le module délivre une impulsion propre, directement lisible par une carte Arduino.
Sur ce module, c’est le comparateur LM393 qui fait tout le travail : il transforme le signal mou du phototransistor en un créneau net, sans faux comptage. La carte porte un connecteur trois broches et une LED d’état qui s’allume quand le faisceau est coupé — de quoi vérifier le montage avant même d’écrire la première ligne de programme.
À quoi sert ce module ?
Il répond à une question simple : à quelle vitesse tourne cet arbre ? Là où un capteur de position dit seulement « il y a quelque chose », celui-ci dit « il tourne à 320 tours par minute ».
- Robotique — asservir la vitesse des deux roues d’un robot pour qu’il aille droit, au lieu de dériver à gauche ou à droite.
- Comptage de tours — savoir combien de tours a fait un moteur, un treuil ou une bobineuse.
- Mesure de vitesse linéaire — en connaissant le périmètre de la roue, des impulsions on déduit une distance parcourue et une vitesse en kilomètres par heure.
- Comptage de pièces — un objet qui coupe le faisceau au passage est compté, sans contact et sans usure.
- Protection de machine — couper l’alimentation au premier signe d’arrêt de rotation, avant que quelque chose ne se bloque.
Caractéristiques techniques
| Type | Capteur de vitesse à fourche optique infrarouge, à photo-interruption |
|---|---|
| Comparateur | LM393 — signale de sortie nettoyé, sans rebond |
| Alimentation | 3,3 à 5 V continu |
| Sortie | Numérique TTL sur la broche D0 : un créneau par fente du disque |
| Nombre de canaux | Un seul — la vitesse, pas le sens de rotation |
| Voyant | LED d’état, allumée quand le faisceau est coupé |
| Connecteur | Trois broches mâles sérigraphiées GND, VCC et D0 |
| Montage | Deux trous de fixation sur la carte |
| Obstacle | Disque perforé, roue dentée ou tout volet mobile qui passe dans la fente |
Comment ça marche
La fourche contient deux composants face à face : une diode infrarouge d’un côté, un phototransistor de l’autre. Tant que rien ne sépare les deux, la lumière atteint le phototransistor et celui-ci conduit. Dès qu’un obstacle — une branche du disque — coupe le faisceau, il se bloque et la tension change.
Cette variation de tension est lente et bruitée : telle quelle, elle donnerait un comptage approximatif. Le LM393 compare en permanence cette tension à une référence fixée par un pont de résistances. En dessous, la sortie est basse ; au-dessus, elle monte d’un coup. C’est ce basculement franc qui s’appelle le front montant, et c’est lui que l’on compte.
Le nombre d’impulsions par tour dépend du disque, pas du module. Un disque à 20 fentes produit 20 impulsions par tour ; un disque à 60 fentes en produit 60. Plus il y a de fentes, plus la mesure est fine, mais plus il faut compter vite : c’est le disque qui fixe la résolution de votre mesure.
Brochage : trois fils
VCC | Alimentation. À relier au 5 V de l’Arduino, ou à du 3,3 V si votre carte le fournit. |
|---|---|
GND | La masse, à relier au GND de l’Arduino. Sans cette référence commune, la sortie reste illisible. |
D0 | La sortie numérique, à relier à une entrée numérique de la carte. Sur l’Uno, les broches 2 et 3 sont les seules à accepter une interruption : réservez-en une pour ce capteur. |
Mini-projet : mesurer la vitesse d’un moteur en tours par minute
Un moteur, un disque perforé sur son axe, et l’Arduino calcule la vitesse une fois par seconde avant de l’afficher dans le moniteur série.
Ce qu’il faut
| La mesure | Le capteur de vitesse à fourche infrarouge — celui de cette page |
|---|---|
| Le cerveau | Uno R3 + câble USB |
| Ce qui tourne | Moteur DC avec roue |
| Le socle | Plaque d’essai 400 points |
| Les liaisons | 10 × fil mâle-femelle |
Pourquoi des fils mâle-femelle ? Le capteur porte trois broches mâles et une plaque d’essai n’accepte que des broches mâles. Le fil mâle-femelle fait le lien : l’extrémité femelle se clipse sur le capteur, l’extrémité mâle se pique dans la plaque.
Le disque. Un disque perforé se monte sur l’axe du moteur et vient se placer dans la fente du capteur, sans la toucher. S’il y a un jeu latéral, calez le capteur pour que le disque passe bien au centre de la fente : un disque qui frotte contre les branches du capteur finit par les user et fausse le comptage.
Le câblage
Capteur VCC | → Arduino 5V |
|---|---|
Capteur GND | → Arduino GND |
Capteur D0 | → Arduino D2 (broche d’interruption) |
| Moteur | → alimenté à part, par un pilote de moteur |
Le programme
À copier dans l’IDE Arduino, puis à téléverser sur la carte. Ouvrez ensuite le moniteur série à 9600 bauds : l’Arduino affiche une mesure par seconde.
/*
* Mesure de vitesse - module capteur infrarouge a fourche et comparateur LM393
* Carte : Arduino Uno R3
* Montage : broche D0 du module sur la broche numerique 2 de la carte
*
* Composants, brochage et fiche complete : www.marocproduits.com
*/
const byte BROCHE_CAPTEUR = 2; // sortie D0 du module, sur une broche d'interruption
const byte FENTES_DISQUE = 20; // fentes du disque monte sur l'arbre
volatile unsigned int impulsions = 0; // comptees par l'interruption
void compterImpulsion() {
impulsions++; // une fente de plus devant le faisceau
}
void setup() {
Serial.begin(9600);
pinMode(BROCHE_CAPTEUR, INPUT);
// On compte sur le front montant : une impulsion par fente.
attachInterrupt(digitalPinToInterrupt(BROCHE_CAPTEUR), compterImpulsion, RISING);
Serial.println("Mesure de vitesse prete.");
}
void loop() {
static unsigned long dernierReleve = 0;
if (millis() - dernierReleve >= 1000) {
// On arrete brievement les interruptions pour lire un compteur coherent.
noInterrupts();
unsigned int compte = impulsions;
impulsions = 0;
interrupts();
float toursParMinute = compte * 60.0 / FENTES_DISQUE;
Serial.print("Impulsions : ");
Serial.print(compte);
Serial.print(" - vitesse : ");
Serial.print(toursParMinute, 1);
Serial.println(" tours par minute");
dernierReleve = dernierReleve + 1000;
}
}Comment lire le résultat
- Le compteur se remet à zéro chaque seconde. Le nombre affiché est donc directement le nombre d’impulsions par seconde : 20 impulsions sur un disque à 20 fentes signifient un tour complet, soit 60 tours par minute.
- Adaptez
FENTES_DISQUEà votre disque. C’est la seule valeur à changer si votre roue codeuse n’a pas 20 fentes, et c’est aussi la seule erreur possible dans ce programme. - Le comptage est fait par une interruption. La fonction
compterImpulsion()s’exécute dès que la sortie change d’état, même si la boucle principale est occupée ailleurs : aucune impulsion n’est perdue, même à haute vitesse. - Le moteur ne s’alimente pas depuis l’Arduino. Une broche d’Arduino ne fournit pas assez de courant pour un moteur : celui-ci a besoin d’un pilote, alimenté à part.
Pour aller plus loin
- Afficher la vitesse sans ordinateur — un afficheur LCD 16×02 I2C se branche sur deux broches et remplace le moniteur série.
- Commander la vitesse — en comparant la vitesse mesurée à une consigne, on ajuste la commande du moteur pour qu’elle reste constante, même quand la charge change. C’est le principe de l’asservissement.
- Mesurer une distance — en multipliant le nombre de tours par le périmètre de la roue, on obtient un odomètre pour un robot roulant.
Points d’attention
- Un seul canal : la vitesse, pas le sens. Ce module ne sait pas dire si l’arbre tourne dans un sens ou dans l’autre. Pour cela, il faut un codeur à deux sorties en quadrature.
- La sortie monte au niveau de l’alimentation. Alimenté en 5 V, le module délivre un signal de 5 V : parfait pour un Uno, mais à vérifier avant de le brancher sur une carte qui n’accepte que du 3,3 V.
- Un obstacle permanent ne produit rien. Si un volet reste devant le faisceau, la sortie ne change plus d’état et le compteur reste immobile — ce n’est pas une panne.
- Un disque qui frotte fausse la mesure. Le disque doit traverser la fente librement. Un montage qui touche les branches du capteur donne des impulsions fantômes.
- La lumière du jour peut perturber la mesure. Le faisceau est infrarouge : en plein soleil ou sous une lampe halogène, la mesure devient instable. Un capot de protection règle le problème.
- Vérifiez la DEL d’état avant de chercher dans le programme. Si elle ne clignote pas lorsque le disque tourne, le problème est mécanique ou d’alimentation, pas dans le code.
Questions fréquentes
Combien d’impulsions par tour ?
Autant que de fentes sur votre disque. Le module n’impose rien : c’est le disque qui décide. Un disque à 20 fentes donne 20 impulsions par tour, une roue codeuse à 60 fentes en donne 60 et offre une mesure trois fois plus fine. Comptez toujours les fentes de votre disque avant d’interpréter les chiffres.
Peut-on connaître le sens de rotation ?
Pas avec ce module : une seule cellule optique, donc aucune information de sens. Pour savoir si l’arbre tourne en avant ou en arrière, il faut un codeur à deux canaux décalés, comme le module encodeur rotatif. Une alternative pour un robot : deux capteurs identiques posés sur deux pistes décalées, et le sens se déduit de l’ordre des impulsions.
La sortie est-elle analogique ?
Non. Sur cette version, la broche D0 ne délivre que deux états, haut ou bas, comme un interrupteur. Le grand frère de ce module à quatre broches ajoute une sortie analogique A0, utile pour diagnostiquer l’encrassement du capteur, mais elle est inutile pour compter des impulsions.
Peut-on l’utiliser sur un ESP32 ou un ESP8266 ?
Oui pour la partie mesure : ces cartes comptent les impulsions par interruption exactement de la même façon. Il faut simplement se souvenir que la sortie est à 5 V si le module est alimenté en 5 V, alors que ces cartes travaillent en 3,3 V. Le plus simple est d’alimenter le capteur en 3,3 V : le faisceau reste suffisant et le signal devient directement compatible.
Faut-il un disque perforé spécial ?
Aucun disque de marque n’est imposé : n’importe quel disque opaque, percé de fentes régulières et monté bien centré sur l’arbre convient. Un carton épais découpé proprement suffit pour un essai, et un disque imprimé en 3D remplace avantageusement celui d’origine pour un montage définitif. Un carton ou un disque qui se voile en tournant donnera en revanche une mesure irrégulière.
À combiner avec
C’est d’abord sur un montage roulant que ce capteur prend tout son sens. Le module L298N fait tourner le moteur, le capteur mesure la vitesse réelle de l’arbre, et le programme ajuste la commande en conséquence : le robot garde alors une trajectoire droite. Pour une base prête à équiper, la voiture robotique avec deux roues offre châssis, moteurs et roues, et accepte deux capteurs de ce type, un par roue.
Sur un simple moteur posé sur l’établi, le moteur réducteur DC fait aussi l’affaire pour apprendre à compter les tours, et la roue de robot se perce facilement pour y fixer votre propre disque codeur. Tous ces montages se font sur plaque d’essai, avec la carte Arduino comme unique cerveau.










