[motor shield] Faire rouler un robot sur une distance précise

Salut à tous,

Je suis en train de bosser sur un robot avec le Motor Shield.
J'aimerais le faire parcourir une certain distance (en cm ou m).

En prenant le diamètre de la roue => j'ai la circonférence. Je sais donc, combien il faut de tours de roue pour faire, genre 1 mètre.

Mais maintenant, comment dire à l'arduino de faire "un tour de roue". Je peux mesurer un tour de roue en "qui prend tant de seconde"... mais c un peu bricolo.

De plus, suivant l'intensité (ajout d'un condensateur ?) cela peut varier.

Comment faire svp ?

Merci

Fabrice

Un chronométrage sera peu précis, et faussé par exemple par une baisse d'intensité de la pile, un sol plus rugueux avec des frottements, une pente...

Si c'est un moteur pas à pas, on compte simplement les pas et on multiplie par l'angle d'un pas pour savoir de combien on a tourné.

Si c'est un moteur continu, il est pratique de rajouter une roue à encoches sur l'axe de rotation, tournant devant une cellule photo-électrique et on compte les interruptions de pulses.
Un capteur magnétique à effet Hall peut aussi être utilisé.

Bonjour,

Merci pour ces infos, c'est un peu ce que j'avais en tête.

Pour la cellule photo-electrique, tu parlais d'une photodiode couplé avec une led IR par exemple ?

Fabrice

oui, une fourche optique.

Salut Dark,

la question numéro 1 est : moteur à courant continu ou moteur à pas à pas?
Tout va dépendre du moteur que tu vas utiliser

il est techniquement impossible de faire une mesure précise de la distance parcourue par un moteur à courant continu en fonction de sa tension d'alimentation. En effet, la vitesse réelle du moteur ne dépend pas que de la tension, mais aussi du courant absorbé (pour les détails, se reporter au modèle équivalent "générateur de Thévenin + chute de tension dans l'induit")

Pour faire simple: si tu utilises un moteur CC, il faut absolument que tu aies un système de mesure. Le plus simple est le capteur optique (fourche, capteur à réflexion, etc...)

Il y a également une solution qui marche pas mal pour certaines applications, mais c'est assez sportif à programmer. Il faut utiliser la force contre-électromotrice du moteur. En deux mots, on mesure la tension produite par le moteur (et non plus la tension envoyée au moteur). Ca donne l'image exacte de la vitesse de rotation (puisqu'on élimine les chutes de tension). En intégrant cette valeur sur le temps, on sait déterminer la position du moteur. On utilise ça chez nous pour certaines applications, ça donne de bons résultats pour les applications où la mécanique est sous contrôle (course limitée et connue à l'avance sur des glissières). Si c'est pour un mobile libre (genre "robot"), par contre, tu peux oublier, ça n'est pas assez précis.
Pour utiliser cette méthode, il faut alimenter le moteur à travers un pont que tu peux passer en mode "roue libre" et les entrées analogiques de la carte.

N'oublie pas non plus que quelque soit le moteur utilisé, la chaine cinématique entre le moteur et le sol a toutes les chances de ne pas être parfaite: il y a des incertitudes sur le diamètre de la roue, la roue peut se déformer en fonction de la charge, les irrégularités dans le sol vont s'ajouter à tout ça, etc... Bref, la mesure au niveau du moteur ou de la roue n'est pas la méthode la plus précise, mais c'est la plus simple. Tout dépend de la précision que tu recherches et donc de l'application

Benoit

je dis peut être une connerie mais il ne serai pas possible de faire comme les souris de nos PC une petite caméra qui filme le sol et qui en déduit le déplacement ou même détourner une souris pour récupérer les impulsions de déplacement, une souris c’est assez précis

j’ai trouvé ça : https://www.logre.eu/wiki/Lire_capteur_souris_optique