Arduino calcul vitesse moteur
Calculez précisément la vitesse d’un moteur avec Arduino à partir des impulsions d’un encodeur, du temps d’échantillonnage, du rapport de réduction et du diamètre de roue. Cet outil est idéal pour les projets robotique, CNC, convoyeurs, véhicules autonomes et systèmes d’asservissement.
Guide expert: comprendre et réussir un calcul de vitesse moteur avec Arduino
Le sujet arduino calcul vitesse moteur revient dans presque tous les projets embarqués: robot mobile, suiveur de ligne, imprimante 3D, convoyeur, pompe, ventilateur, machine de dosage ou banc d’essai. Dès qu’un moteur tourne, il faut pouvoir mesurer sa vitesse réelle pour l’afficher, la contrôler, la comparer à une consigne, ou corriger automatiquement le comportement via une boucle PID. Une bonne mesure de vitesse est donc au coeur de l’automatisation moderne, même dans les montages hobby.
Avec Arduino, la méthode la plus répandue consiste à compter les impulsions d’un encodeur pendant une durée connue, puis à convertir cette information en tours par minute, en radians par seconde ou en vitesse linéaire si une roue est liée au moteur. Le calcul est simple en apparence, mais les erreurs de décodage, la réduction mécanique, le bruit électrique, la fréquence PWM ou la durée d’échantillonnage peuvent produire des résultats trompeurs si l’on ne maîtrise pas les bases.
1. Les grandeurs à connaître avant de calculer la vitesse
Pour calculer la vitesse d’un moteur avec Arduino de façon fiable, il faut distinguer plusieurs notions. D’abord, la résolution de l’encodeur, souvent exprimée en PPR ou CPR selon les fabricants. PPR signifie généralement pulses per revolution, donc impulsions par tour sur un canal. Sur un encodeur quadrature à deux voies A et B, le nombre de transitions exploitables peut être multiplié par 2 ou 4 selon le mode de lecture. Ensuite, il faut tenir compte du temps de mesure. Un comptage sur 1000 ms est simple et stable, mais moins réactif. Un comptage sur 100 ms répond plus vite, mais présente plus de bruit relatif à basse vitesse.
Le rapport de réduction est également crucial. Si votre encodeur est sur l’arbre moteur d’un motoréducteur 30:1, la vitesse de sortie sera trente fois plus faible que la vitesse moteur. Enfin, si vous voulez convertir en déplacement réel, vous devez connaître le diamètre de la roue, du galet ou de la poulie. La vitesse linéaire vaut alors circonférence × rotations par seconde.
- Impulsions comptées: nombre réellement détecté pendant la fenêtre de mesure.
- PPR effectif: résolution native multipliée par le mode de décodage 1x, 2x ou 4x.
- Temps de mesure: durée du comptage, en millisecondes.
- Rapport de réduction: coefficient entre arbre moteur et arbre de sortie.
- Diamètre de roue: utile pour convertir la rotation en vitesse linéaire.
2. Comment appliquer la formule dans un projet Arduino
Prenons un exemple concret. Vous comptez 240 impulsions en 1000 ms avec un encodeur de 60 PPR, lu en quadrature 4x. Le nombre d’impulsions par tour effectives vaut donc 60 × 4 = 240. En une seconde, vous avez compté l’équivalent d’un tour. Le moteur tourne donc à 60 RPM. Si le réducteur est de 30:1 et que l’encodeur est sur l’arbre moteur, la sortie mécanique tournera à 2 RPM. Si vous ajoutez une roue de 65 mm de diamètre, la vitesse linéaire sera très modérée, ce qui est logique pour un motoréducteur fortement démultiplié.
Cette logique est exactement celle que doit reproduire votre code Arduino. En pratique, vous pouvez incrémenter un compteur via interruption externe à chaque front montant, ou compter les transitions des deux voies A et B avec une routine de décodage plus élaborée. À intervalles réguliers, vous lisez le compteur, vous calculez la vitesse, puis vous remettez le compteur à zéro pour la fenêtre suivante.
- Compter les impulsions pendant un temps connu.
- Déterminer les impulsions par tour effectives.
- Convertir les impulsions en nombre de tours.
- Ramener la mesure à la minute pour obtenir les RPM.
- Corriger selon le rapport de réduction si nécessaire.
- Convertir en rad/s ou m/s selon l’application.
3. Pourquoi la durée d’échantillonnage change fortement la qualité de mesure
Le compromis principal d’un système de mesure de vitesse est le choix de la fenêtre temporelle. Une fenêtre longue filtre naturellement les variations et améliore la stabilité numérique à basse vitesse. En revanche, elle retarde la détection d’un changement de consigne. À l’inverse, une fenêtre courte est idéale pour une boucle de contrôle nerveuse, mais produit des sauts de vitesse si le nombre d’impulsions comptées est faible.
Par exemple, avec seulement 12 impulsions mesurées sur 100 ms, l’erreur relative provoquée par la perte ou le gain d’une impulsion est beaucoup plus importante qu’avec 120 impulsions mesurées sur 1000 ms. Pour un robot différentiel, il est fréquent d’utiliser des fenêtres de 50 à 200 ms, puis de lisser les résultats avec une moyenne glissante ou un filtre exponentiel. Pour un affichage de vitesse utilisateur, une fenêtre plus longue est souvent préférable.
| Fenêtre de mesure | Réactivité | Stabilité à basse vitesse | Usage typique |
|---|---|---|---|
| 20 à 50 ms | Très élevée | Faible à moyenne | Asservissement rapide, petits moteurs, forte résolution encodeur |
| 100 à 200 ms | Élevée | Bonne | Robots mobiles, convoyeurs, régulation standard |
| 500 à 1000 ms | Moyenne à faible | Très bonne | Affichage stable, tests, calibration, mesure lente |
4. Données techniques utiles: fréquences PWM réelles sur Arduino
La commande de vitesse d’un moteur DC avec Arduino passe très souvent par analogWrite(). Cependant, tous les pins PWM ne fonctionnent pas à la même fréquence, et cela influence le bruit audible, la réponse du moteur et le comportement d’un pont en H. Sur une Arduino Uno basée sur l’ATmega328P, les fréquences par défaut sont généralement d’environ 490 Hz sur les pins 3, 9, 10 et 11, et d’environ 980 Hz sur les pins 5 et 6. Ces chiffres sont utiles, car ils rappellent qu’une variation de PWM ne donne pas une vitesse instantanée parfaitement linéaire, surtout à faible charge.
| Carte / pin | Fréquence PWM par défaut | Observation pratique |
|---|---|---|
| Arduino Uno pins 3, 9, 10, 11 | Environ 490 Hz | Valeur courante pour moteurs DC et variation simple |
| Arduino Uno pins 5, 6 | Environ 980 Hz | Souvent un peu moins audible selon le moteur et le driver |
| Arduino Mega plusieurs pins PWM standards | Environ 490 Hz | Comportement proche de l’Uno sur de nombreux usages |
Ces statistiques sont issues des comportements standard des timers AVR utilisés sur les cartes Arduino classiques. Pour des besoins avancés, il est possible de modifier les registres des timers afin d’augmenter la fréquence PWM et d’obtenir une commande mieux adaptée à certains moteurs ou drivers.
5. Encodeur, hall sensor ou mesure back-EMF: quelle méthode choisir ?
Le meilleur calcul de vitesse dépend du capteur. L’encodeur incrémental reste la solution la plus précise dans la plupart des projets Arduino. Il fournit des impulsions nettes et répétables, et permet de mesurer à la fois la vitesse et le sens de rotation si l’on exploite les deux voies. Les capteurs Hall intégrés aux moteurs brushless ou aux motoréducteurs DC offrent aussi d’excellents résultats, mais la résolution peut être plus faible. La mesure de force contre-électromotrice, ou back-EMF, peut être intéressante, mais elle est plus complexe à mettre en oeuvre et moins universelle sur un Arduino d’entrée de gamme.
- Encodeur incrémental: meilleur compromis précision, simplicité de calcul et compatibilité avec PID.
- Capteur Hall: robuste et économique, souvent intégré dans les moteurs BLDC et certains motoréducteurs.
- Back-EMF: utile dans des architectures spécifiques, mais plus délicat à fiabiliser.
6. Les erreurs les plus fréquentes dans un calcul de vitesse moteur Arduino
Beaucoup d’écarts de mesure ne viennent pas de la formule, mais de la chaîne complète d’acquisition. Première erreur classique: confondre PPR, CPR et nombre de fronts détectés. Deuxième erreur: oublier le rapport de réduction. Troisième erreur: compter les impulsions sur une voie unique alors qu’on a paramétré le calcul en 4x. Quatrième erreur: ignorer les rebonds, le bruit de masse ou les parasites du pont en H. Cinquième erreur: mesurer sur un intervalle trop court avec un encodeur basse résolution.
Le câblage a également une grande importance. Les fils encodeur doivent être séparés autant que possible des fils de puissance moteur. Une masse commune bien pensée est indispensable. Dans les environnements bruyants, des résistances de pull-up adaptées, un filtrage logiciel, voire des optocoupleurs peuvent faire gagner beaucoup de stabilité.
7. Conversion en vitesse linéaire pour robot mobile et convoyeur
Dans de nombreux projets, le but final n’est pas de connaître les RPM, mais la vitesse au sol ou la vitesse d’avance d’une bande. La formule est simple: v = π × D × RPM / 60, avec D en mètres. Si votre roue fait 65 mm de diamètre et que l’arbre de sortie tourne à 60 RPM, la vitesse linéaire est d’environ 0,204 m/s. Cette étape est fondamentale pour la navigation robotique, le calcul d’odométrie, la régulation de débit ou le dimensionnement d’un convoyeur.
Attention toutefois au glissement. Sur un robot à roues, la vitesse théorique issue du calcul peut différer de la vitesse réelle si le sol est irrégulier, si la roue patine ou si la charge change brutalement. Une bonne pratique consiste à comparer régulièrement la vitesse calculée à des mesures externes lors de la phase de calibration.
8. Bonnes pratiques de programmation sur Arduino
Pour obtenir des résultats fiables, utilisez les interruptions matérielles lorsque c’est possible. Évitez de faire des traitements trop lourds dans la routine d’interruption. Le bon schéma consiste à incrémenter un compteur volatile, puis à réaliser les calculs dans la boucle principale à intervalle fixe avec millis() ou un timer. Si vous avez besoin d’une mesure encore plus fine à très basse vitesse, vous pouvez mesurer le temps entre deux impulsions au lieu de compter les impulsions dans une fenêtre fixe.
Pour les applications de contrôle, ne vous contentez pas d’afficher la vitesse. L’étape suivante consiste à comparer la vitesse mesurée à une consigne, calculer l’erreur, puis ajuster le PWM. C’est là qu’intervient le contrôleur PID. Une mesure de vitesse propre améliore immédiatement la stabilité de la boucle.
9. Sources techniques utiles et références d’autorité
Pour approfondir les aspects contrôle, mesure et automatisation, consultez aussi des ressources académiques et institutionnelles reconnues. Vous pouvez notamment explorer les contenus de MIT OpenCourseWare pour les systèmes de commande, les références du NIST sur les unités et la mesure, ainsi que des ressources d’ingénierie proposées par des universités comme Purdue Engineering. Ces sources sont particulièrement utiles pour relier la pratique Arduino aux bases solides de l’instrumentation et de l’automatique.
10. En résumé
Le calcul de vitesse moteur avec Arduino repose sur un principe simple, mais il demande de la rigueur. Il faut définir clairement où l’on mesure, combien d’impulsions correspondent à un tour réel, quelle fenêtre temporelle on utilise, et si l’on souhaite la vitesse moteur, la vitesse de sortie ou la vitesse linéaire. Quand ces éléments sont maîtrisés, Arduino devient un excellent outil de mesure et de pilotage, capable d’alimenter aussi bien un tableau de bord qu’une boucle d’asservissement avancée.
Utilisez le calculateur ci-dessus pour estimer rapidement vos valeurs, comparer plusieurs résolutions d’encodeur, choisir un temps de mesure pertinent et visualiser immédiatement les résultats. C’est une base concrète pour passer d’un simple montage moteur à un système réellement instrumenté et contrôlé.