Mesure tops encodeur

Bonjour,

Je réalise un robot propulsé par 2 moteurs DC. Je souhaiterais que ce robot puisse reproduire un parcours le plus précisément possible et notamment revenir à son point de départ.

Pour ce faire j'utilise :

  • 2 motoréducteurs MFA 950D501LN
  • 2 encodeurs Gravity DFRobot constitués d'un disque perforé de 2 trous et d'un interrupteur optique à fourche
  • 2 roues de diamètre 100mm

1 tour de roue, soit 314mm, correspond à 100 tops de l'encodeur. Donc la précision est de 3.14mm par top.

En 1 minute la roue effectue 38 tours soit 3750 tops soit 62 tops par seconde.

Ma question : pour augmenter la précision je souhaiterais augmenter le nombre de trous sur le disque. Mais combien de tops par seconde le couple Arduino Mega / encodeurs est-il capable de mesurer ?

Merci pour votre temps.

Bonjour
Un grand merci pour ta réponse et pour les commentaires.
En fait je n'ai pas d'idée de la précision idéale nécessaire pour que le parcours du robot soit suffisamment précis. Mais d'après ce que tu écris il est possible d'augmenter la précision sans faire trop souffrir l'Arduino Mega ou du moins pour qu'il ait encore du temps pour faire autre chose.

Voici le code utilisé , peut-être peut-il être optimisé ?

void LwheelSpeed()
{  coder[LEFT] ++;}

void RwheelSpeed()
{  coder[RIGHT] ++;}

Je vérifie toutes les 0.1 secondes si le nombre de tours nbt souhaité est atteint.

void loop()
{
   if ((millis() - tm04) > 100) {
     erg = coder[LEFT];
     if (erg >= nbt ){ stop();}

}

Merci

hello
testes ce code et tu verras le nombre de boucles qu'execute loop en 1/10ème de seconde
tout en
incrémentant un compteur
relevant le compte de millis()
effectuant la soustraction avec deb
et comparant avec 1/10ème

long test=0;
 unsigned long deb=0;
void setup() {
  Serial.begin(115200);
 deb=millis();
}

void loop() {
 test++;
 Serial.println(test);
 if((millis()-deb)>100) //à tester avec 50 ou 20 ou ...
{while(1){;}}
}

tu voies, tu as de la marge. ( sachant qu'un Serial.print est relativement long)

Merci pour vos réponses.

J'ai effectué le test et il exécute 273 boucles en 1/10ème de sec !

Je ne pensais pas qu'il était aussi rapide ... c'est fabuleux. En effet il y a de la marge.

Cela m'a permis aussi de réaliser que j'ai laissé pas mal de serial.println dans mon code (en plus à 9600 bauds).
Et apparemment cette opération prend du temps.

Je vais utiliser une roue à 6 trous, cela devrait déjà bien améliorer la précision.

Encore merci pour votre aide