loader

Controler la rotation d'ilo avec un potentiomètre

Tourner un potentiometre brancher sur ilo pour lui faire faire des rotations

Pour commencer, préparons le matériel nécessaire : le robot ilo, la carte accessoire Vittascience (qui s’insère sur le port écureuil), un potentiomètre Grove ainsi que qu'un câble Grove. La carte accessoire sera relié à l’ordinateur via un câble USB-C, afin de pouvoir la programmer depuis l’éditeur de code Vittascience.
Le branchement est simple : il suffit de connecter le potentiomètre sur l’un des ports Grove analogiques de la carte. Dans ce cours, nous utiliserons le port A0, qui correspond à la broche GPIO32.

Le potentiomètre est un capteur qui renvoie une valeur comprise entre 0 et 1023, selon sa position. Pour démarrer, nous allons simplement lire cette valeur et l’afficher dans la console afin de vérifier que le capteur fonctionne. On crée une variable que nous appelons 
potentiometre_value

À l’intérieur d’une boucle répétée indéfiniment, nous allons affecter à cette variable la valeur lue sur la broche IO32. Puis nous affichons cette valeur dans la console.


En tournant le potentiomètre, vous devriez voir les nombres défiler dans la console et varier de 0 à environ 1023. Vers le milieu de la course du potentiomètre, on obtient des valeurs proches de 500 à 600.

Nous allons maintenant utiliser la valeur du potentiomètre pour agir sur ilo. Si la valeur est inférieure à 500, cela signifie que nous tournons le bouton vers la gauche. Ilo doit alors pivoter à gauche, et plus la valeur se rapproche de 0, plus la vitesse augmente.
Pour traduire cela, nous transformons la valeur du potentiomètre (0 → 500) en un pourcentage de vitesse (100% → 0%). Ainsi, quand la valeur est proche de 0, on obtient 100%, et quand elle est proche de 500, on obtient 0%.


En testant, nous observons que tourner le potentiomètre vers la gauche entraîne une rotation de plus en plus rapide du robot dans ce sens.

De façon symétrique, si la valeur du potentiomètre est supérieure à 500, ilo doit pivoter à droite. Plus la valeur se rapproche de 1023, plus la vitesse doit augmenter.On effectue une transformation inverse : la plage [500 → 1023] est transformée en [0 → 100].


Avec ce code, ilo peut maintenant pivoter à droite si l’angle du potentiomètre dépasse 500, avec une vitesse proportionnelle.

Une fois que la rotation à gauche et à droite fonctionne, nous pouvons améliorer le programme en ajoutant une zone morte au centre. Cela permet d’éviter que le robot ne fasse de petites rotations parasites lorsque le potentiomètre est censé être au repos. Nous choisissons la plage 500 à 600 comme zone morte.
On complète la boucle avec une nouvelle condition :



Désormais, lorsque le potentiomètre est centré, ilo reste immobile. C’est une étape importante pour rendre le contrôle stable et agréable.

Dans l’état actuel, lorsque nous restons dans la zone morte, le robot reçoit en boucle la commande STOP. Cela fonctionne, mais ce n’est pas optimal : on spamme inutilement l’ordre d’arrêt. Cela peut aussi donner l’impression qu’il y a une micro-pause ou une latence avant de reprendre le mouvement.

Pour améliorer la réactivité, nous allons introduire une variable supplémentaire, un flag (drapeau logique). Par exemple, appelons-la 
en_mouvement

Cette variable sera mise à true dès que nous envoyons une commande de rotation (gauche ou droite), et repassera à false uniquement lorsque nous envoyons un arrêt. Ainsi, tant que nous restons dans la zone morte, nous envoyons l’ordre d’arrêt une seule fois et non en boucle.
Avec cette amélioration, ilo réagit plus rapidement quand on quitte la zone morte, car il n’est plus saturé par des arrêts répétés. Cela rend l’expérience plus fluide et montre une manière simple d’optimiser ses programmes

Avec ce projet, nous avons appris à :
  • Lire une entrée analogique avec un capteur Grove.
  • Transformer une valeur brute en pourcentage de vitesse.
  • Piloter un robot de manière proportionnelle et intuitive.
  • Ajouter une zone morte pour améliorer la stabilité du contrôle.
  • Utiliser un flag pour éviter de répéter inutilement une commande et rendre le pilotage plus réactif.

رخصة الاستخدام