Arduino calcul distance parcourue avec encodeur de roue
Calculez instantanément la distance parcourue par un robot, un chariot ou un véhicule piloté par Arduino à partir des impulsions d’un encodeur, du diamètre de roue et du nombre d’impulsions par tour. Le calculateur estime aussi la vitesse moyenne si vous renseignez la durée.
Calculateur interactif
Guide expert : comment faire un arduino calcul distance parcourue fiable
Le calcul de la distance parcourue avec Arduino est l’une des bases de la robotique mobile, de l’automatisation industrielle légère et des projets de mesure de déplacement. En pratique, l’objectif est simple : déterminer combien de mètres, de centimètres ou de kilomètres une roue, un robot, un convoyeur ou un petit véhicule a réellement parcouru. Mais derrière cette apparente simplicité se cachent plusieurs paramètres techniques : le diamètre réel de la roue, le nombre d’impulsions d’un encodeur, le glissement sur le sol, la résolution du capteur, le rapport de réduction mécanique et la fréquence d’échantillonnage du code.
Si vous recherchez une méthode sérieuse pour un projet Arduino, vous devez d’abord comprendre que la distance parcourue n’est pas directement “mesurée” dans la plupart des montages courants. Elle est déduite d’une rotation. Dès que vous savez combien de tours une roue a effectués, vous pouvez calculer la longueur de trajectoire associée à cette rotation. C’est précisément ce que fait l’odométrie de base sur les robots mobiles.
Principe fondamental du calcul
Le principe mathématique est direct. Une roue de diamètre connu possède une circonférence égale à :
Circonférence = π × diamètreSi la roue effectue un tour complet, le robot avance approximativement d’une circonférence. Si la roue réalise 10 tours, la distance est alors 10 fois cette valeur. Quand vous utilisez un encodeur incrémental, vous ne lisez pas directement des tours, mais un nombre d’impulsions. Il faut donc convertir les impulsions en tours avant de calculer la distance.
Tours de roue = Impulsions totales / (Impulsions par tour × Rapport de transmission) Distance = Tours de roue × Circonférence de la roueLe calculateur ci-dessus applique exactement cette logique. Si vous renseignez aussi une durée, il calcule la vitesse moyenne :
Vitesse moyenne = Distance / TempsPourquoi le diamètre réel de roue est plus important que la fiche produit
Beaucoup d’erreurs proviennent d’un diamètre de roue mal renseigné. Une roue souple se déforme sous la charge. Une roue imprimée en 3D peut être légèrement ovale. Une roue avec pneu mousse ou caoutchouc peut perdre quelques millimètres de rayon effectif lorsque le robot est posé au sol. Résultat : si vous utilisez le diamètre nominal du fabricant, vous pouvez créer un biais systématique sur toute votre mesure de distance.
La meilleure pratique consiste à mesurer la distance réellement parcourue sur plusieurs tours. Par exemple, faites une marque au sol, avancez de 10 tours de roue, puis mesurez la distance. Divisez ensuite cette distance par 10 pour obtenir la circonférence réelle en charge. Cette approche est souvent plus fiable qu’une simple mesure au pied à coulisse.
Quel capteur utiliser pour mesurer la distance parcourue
Dans l’univers Arduino, plusieurs stratégies existent. Le choix dépend de votre budget, de la précision recherchée, de la vitesse de déplacement et de l’environnement. Pour un calcul de distance parcourue au sol, l’encodeur de roue reste la solution la plus répandue, car il est économique, facile à coder et performant à courte et moyenne distance. Les capteurs ultrasoniques, eux, mesurent plutôt une distance à un obstacle qu’une distance réellement parcourue. Ils sont utiles pour l’évitement et la navigation, mais moins adaptés à l’odométrie continue.
| Technologie | Usage principal | Résolution ou plage typique | Avantages | Limites |
|---|---|---|---|---|
| Encodeur incrémental de roue | Distance parcourue, vitesse, odométrie | 20 à 2048 impulsions par tour selon le modèle | Très bon rapport précision/coût, calcul simple sur Arduino | Sensible au glissement de roue |
| Capteur Hall + aimants | Comptage de tours | 1 à 20 impulsions par tour en montage simple | Robuste, peu coûteux, montage facile | Résolution plus faible |
| Ultrason HC-SR04 | Mesure d’obstacle devant le robot | Plage typique 2 cm à 400 cm | Très populaire, simple à intégrer | Ne mesure pas directement la distance parcourue au sol |
| IMU + fusion capteurs | Estimation de mouvement, orientation | Haute fréquence d’échantillonnage | Complète l’odométrie roue | Dérive si utilisée seule pour la distance |
| Lidar ou vision | Cartographie et localisation | Haute précision contextuelle | Très bon pour corriger l’odométrie | Coût et complexité plus élevés |
Exemple concret de calcul de distance avec Arduino
Imaginons un robot doté d’une roue de 6,5 cm de diamètre et d’un encodeur qui génère 20 impulsions par tour de roue. Si vous avez compté 1200 impulsions, le calcul est le suivant :
- Convertir le diamètre en mètres : 6,5 cm = 0,065 m.
- Calculer la circonférence : π × 0,065 = 0,2042 m environ.
- Calculer le nombre de tours : 1200 / 20 = 60 tours.
- Calculer la distance : 60 × 0,2042 = 12,25 m environ.
Si ces 1200 impulsions ont été comptées pendant 12 secondes, alors la vitesse moyenne est proche de 1,02 m/s. Cet exemple illustre pourquoi un simple compteur d’impulsions peut fournir une information très riche : distance, vitesse et même trajectoire si vous avez deux roues motrices avec un encodeur sur chaque côté.
Impact de la résolution de l’encodeur sur la précision
Plus un encodeur fournit d’impulsions par tour, plus la mesure de distance sera fine. Avec un capteur à faible résolution, chaque impulsion représente une longueur relativement importante. Cela peut suffire pour un robot éducatif, mais être insuffisant pour un AGV miniature, un robot traceur ou une machine nécessitant un positionnement précis.
| Diamètre roue | Circonférence approx. | Résolution encodeur | Distance par impulsion | Niveau de précision attendu |
|---|---|---|---|---|
| 65 mm | 204,2 mm | 20 impulsions/tour | 10,21 mm | Basique, bon pour l’enseignement |
| 65 mm | 204,2 mm | 100 impulsions/tour | 2,04 mm | Bon compromis pour robot mobile |
| 65 mm | 204,2 mm | 360 impulsions/tour | 0,57 mm | Précision élevée |
| 100 mm | 314,2 mm | 20 impulsions/tour | 15,71 mm | Moins fin, mais acceptable pour grand châssis |
| 100 mm | 314,2 mm | 500 impulsions/tour | 0,63 mm | Très précis si mécanique stable |
Le rôle du rapport de transmission
Sur beaucoup de moteurs à engrenages, l’encodeur n’est pas monté sur la roue mais sur l’arbre moteur. Dans ce cas, vous ne pouvez pas utiliser directement les impulsions par tour de l’encodeur comme si elles correspondaient à un tour de roue. Si votre moteur possède un réducteur 48:1, cela signifie qu’il faut 48 tours moteur pour obtenir un tour de roue. Le calcul doit donc intégrer ce ratio. C’est la raison d’être du champ “rapport de transmission” dans le calculateur.
Une erreur fréquente consiste à entrer le nombre d’impulsions moteur et à oublier le réducteur. Le résultat final est alors totalement faux, parfois d’un facteur 10 à 100 selon la mécanique utilisée. Pour éviter cette erreur, documentez précisément votre chaîne cinématique : encodeur sur moteur, encodeur sur sortie de boîte, encodeur sur axe intermédiaire ou directement sur la roue.
Arduino : logique de code recommandée
Dans votre sketch Arduino, la méthode robuste consiste à utiliser des interruptions pour compter les impulsions, surtout si la roue tourne rapidement. Une boucle qui lit simplement l’état du capteur peut manquer des fronts lorsque le microcontrôleur est occupé à d’autres tâches. La logique standard est la suivante :
- Déclarer un compteur volatile pour les impulsions.
- Attacher une interruption sur front montant ou descendant.
- Incrémenter le compteur dans la routine d’interruption.
- Périodiquement, convertir le compteur en tours puis en distance.
- Remettre à zéro le compteur si vous calculez des fenêtres de vitesse.
Si vous disposez d’un encodeur en quadrature, vous pouvez aussi déterminer le sens de rotation. Cela devient essentiel pour distinguer marche avant, marche arrière et correction de trajectoire. Le calcul de distance signée permet alors d’obtenir une odométrie beaucoup plus complète.
Sources d’erreur les plus courantes
Un calcul de distance parcourue avec Arduino peut être exact sur le papier mais faux sur le terrain. Voici les erreurs les plus fréquentes :
- Glissement de roue : quand la roue patine, elle tourne sans produire la distance théorique.
- Diamètre incorrect : une petite erreur de diamètre crée une erreur proportionnelle sur toute la distance.
- Impulsions mal comptées : anti-rebond absent, bruit électrique ou lecture trop lente.
- Réducteur oublié : classique sur les petits moteurs à engrenages.
- Surface irrégulière : tapis, gravier ou jointures de carrelage modifient l’adhérence.
- Charge variable : un robot plus lourd déforme davantage ses pneus.
Pour professionnaliser votre système, vous pouvez appliquer une calibration expérimentale. Faites parcourir au robot une distance connue, par exemple 5 m, puis comparez le résultat calculé. Si le système indique 4,85 m, appliquez un coefficient correctif de 5 / 4,85 = 1,0309 environ.
Bonnes pratiques de calibration
- Mesurez sur une distance longue, au moins 3 à 5 mètres si possible.
- Répétez l’essai plusieurs fois pour lisser les écarts.
- Calibrez sur la surface réelle d’utilisation.
- Vérifiez séparément la roue gauche et la roue droite si votre robot est différentiel.
- Stockez vos coefficients de calibration dans l’EEPROM ou dans une configuration persistante.
Distance parcourue vs distance à un obstacle
Il est important de distinguer deux notions souvent confondues sur le web. La “distance parcourue” correspond au déplacement du robot ou du véhicule dans le temps. La “distance mesurée” par un capteur ultrasonique ou infrarouge correspond à l’écart entre le capteur et un objet. Les deux calculs peuvent coexister dans un même projet Arduino, mais ils n’ont pas le même but. L’odométrie de roue sert à savoir où vous êtes allé. Le capteur ultrason sert surtout à éviter une collision ou à détecter une paroi.
Si votre application exige une position fiable dans un environnement complexe, la meilleure approche n’est pas de choisir entre les deux, mais de combiner plusieurs capteurs. L’encodeur donne une estimation continue du déplacement. L’IMU aide à suivre l’orientation. Le lidar, la vision ou des balises permettent de corriger la dérive cumulée.
Références utiles pour approfondir
Pour aller plus loin, vous pouvez consulter des ressources académiques et institutionnelles sur la mesure, l’incertitude et l’odométrie. La notion d’incertitude de mesure est bien expliquée par le NIST. Pour comprendre les fondements de l’odométrie robotique, une ressource pédagogique utile est le cours de robotique de Northeastern University. Pour des rappels clairs sur la vitesse et le lien entre distance et temps dans un cadre éducatif, le contenu de la NASA est également pertinent.
Quand ce calcul devient-il insuffisant ?
Le calcul de distance parcourue basé sur les roues fonctionne très bien pour des projets éducatifs, des robots de ligne, des bases roulantes lentes, des compteurs de convoyage et des prototypes de chariots. En revanche, il devient insuffisant lorsque le patinage est fréquent, lorsque le sol est très irrégulier ou lorsque la précision absolue doit rester élevée sur de longues distances. Dans ce cas, l’erreur s’accumule inévitablement. C’est une limite structurelle de l’odométrie pure.
Pour des applications avancées, on combine généralement l’odométrie avec de la fusion de données capteurs. Cette architecture permet de conserver la réactivité de l’encodeur tout en corrigeant la dérive grâce à des références externes. C’est la logique utilisée en robotique mobile moderne, des robots de service aux plateformes industrielles.
Conclusion
Réaliser un arduino calcul distance parcourue précis ne se résume pas à compter des impulsions. Il faut comprendre la mécanique, choisir le bon capteur, entrer la bonne résolution, intégrer le rapport de transmission et calibrer la roue sur les conditions réelles. Une fois ces bases maîtrisées, Arduino devient une excellente plateforme pour mesurer déplacements, vitesse moyenne, position relative et performance de trajectoire. Le calculateur de cette page vous donne une méthode rapide, cohérente et exploitable pour passer de vos impulsions d’encodeur à une distance concrète en mètres.
Si vous développez un robot, un compteur de distance de roue, un système de convoyage ou un projet STEM, commencez par ce calcul simple, puis améliorez progressivement la fiabilité avec la calibration, les interruptions, un bon filtrage et éventuellement la fusion multi-capteurs. C’est ainsi que l’on passe d’un prototype Arduino basique à une solution de mesure sérieuse.