Objectif du projet

Détecter la présence d’un ou plusieurs obstacles (posé(s) aléatoirement) devant le robot et de le(s) ranger.

On va s’aider d’une sonde IR pour mesurer des distances. Le tout pouvant être piloter par la voix.

Cahier de charge :

  • Utilisation d’un bras articulé à 6 servos (j’utiliserai le terme robot par la suite).
  • Sonde IR GP2Y0A41SK0F 4-30CM.
  • Pilotage distant par bluetooth (smartphone ou autre console)
  • Contrôleur Rapsberry pico W.
  • Programmation en langage micropython.
  • Concevoir la formule mathématique pour convertir la valeur fournie par la sonde IR en cm (ou inches).
  • Concevoir la formule pour déplacer la pince du robot sur une distance donnée.

Etapes du projet :

  • Composants
  • Programmation App
  • Montage du robot et calibration
  • Les fonctions de base
  • Fonctions mathématiques à base du capteur IR
  • Mise en œuvre de la commande vocale

Tous les fichiers (applications et documentations) sont téléchargeables ICI.

1 – Composants

Le kit complet du bras articulé peut se trouver à moins de 50$. Malheureusement si les parties mécaniques sont de bonne qualité, les servomoteurs (MG996) ne le sont pas. Lors des essais deux servos ont grillés. Ils ont été remplacés par des servos DS3225MG plus chers et plus robuste (ou autre brushless servo >= 25 kg).

Le montage du bras ne pose pas de problèmes particuliers. Ayant constaté que des vis se dévissaient sous l’effet des vibrations je conseille d’ajouter des rondelles autobloquantes.

L’alimentation électrique doit être performante et autoriser des pics de courant pouvant atteindre 3 ampères. L’affichage de la consommation de courant permet de contrôler les dérives. Par exemple en cas de blocage d’un servomoteur le courant va fortement augmenter et la tension peut diminuer sous 4V, ce qui pourra entrainer un mouvement erratique des servomoteurs. Un contrôle visuel de l’alimentation devient indispensable.

On pourra utiliser diverses consoles comme indiqué sur l’illustration. Le modèle DIY peut être construit suivant les indications du projet : https://www.instructables.com/Remote-Controller-for-DIY-Robots/

2 – Programmation APP

Pour piloter le bras on utilise un smartphone ou une tablette avec l’application « Bluetooth Remote ». Cette application gratuite est simple à configurer. Elle est basée sur la création de boutons programmables. Pour chaque bouton on définit une séquence de caractères à envoyer en Bluetooth. Le module HC05 recevra les informations et la transmet au programme qui les transforme en actions. L’illustration donne la programmation pour les fonctions de base du robot. Pour les touches en bleu il y aura envoi du premier caractère (ex-B) et lorsqu’on relâche il y a envoi du second caractère (S). Ainsi le robot restera en mouvement tant que la fonction est appuyée.

3 – Montage du robot et calibration

L’illustration « Assembly of the robot » donne la marche à suivre pour démarrer le robot. On peut maintenant se familiariser avec la manipulation du robot. En étudiant le programme « main.py » on voit comment sont traités les caractères reçus.

La dernière étape consiste à calibrer le robot en configurant les limites de déplacement à ne pas dépasser pour ne pas endommager les servos.

4 – Les fonctions de base

L’illustration explique ces fonctions. La fonction « servomove » est particulière. Elle déplace le bras depuis la position actuelle vers la position indiquée dans une séquence.

Le principe du déplacement repose sur la rotation simultanée (en apparence) des servos. Il aurait été plus simple de faire tourner un servo après l’autre vers sa position de destination.  L’effet visuel n’est pas fluide car le mouvement est saccadé.

Le programme est par conséquent un peu plus complexe. On opère par lots de servos. On fait tourner pas à pas chaque servo à tour de rôle. Les servos sont numérotés des 0 (base) à 5 (pince). La rotation s’effectue dans l’ordre suivant :

Le lot composé des servos 1,2 est déplacé vers le haut indépendamment de la séquence.

Le lot composé des servos 0,3,4 est déplacé selon les valeurs de la séquence.

Le lot composé des servos 1,2 est déplacé selon les valeurs de la séquence.

Le lot 5 (la pince) est déplacé selon la valeur de la séquence.

5 – Fonctions mathématiques à base du capteur IR

Detection d’obstable

Afin de faciliter le travail du robot dans sa tâche de détection d’obstacle on utilise un capteur IR. Ce capteur est fixé sur le support du servo 0. Pour établir la formule qui donne la distance en fonction de la valeur mesurée par le capteur on construit un tableau. On place un obstacle à divers distances (4 à 16 cm) et on note la valeur correspondante du capteur (A).

J’ai utilisé un site de recherche d’équation sur le web (B). En introduisant le tableau on obtient en retour la fonction mathématique qui sera ajouté au programme (C, D).

Rangement de l’obstacle

Afin de détecter l’obstacle on déplace le robot (servo 0) pas à pas à partir de la gauche vers la droite. Lorsque l’obstacle est détecté (la distance chute rapidement) on ajuste le robot pour bien centrer l’obstacle (voir illustration).

Détermination de la position du robot sur l’obstacle

Là encore il faut trouver une formule afin de transformer la distance en angles de servos.

On opère par mesures successives. On place l’obstacle entre 4 et 15 cm et on positionne le robot sur l’obstacle. On reporte les valeurs dans un tableau (E). On constate une certaine linéarité dans les valeurs des servos 2 et 3. Après quelques essais on trouve le facteur 4.3 pour ces deux servos et 0.1 pour le servo 1 (F).

Dans le programme « main.py » on peut lancer ces fonctions par les commandes « Q », « 7 » et « 9 ». Sur App « bluetooth remote » on ajoutera les touches correspondantes.

6 – Mise en œuvre de la commande vocale

Pour cela on va utiliser une autre App qui fait de la reconnaissance vocale. L’App « Arduino Bluetooth Remote » remplit parfaitement cette fonction et permet l’envoi du texte via bluetooth au robot (voir l’illustration pour le fonctionnement). Dans l’application « main.py » on se contentera des trois premières lettres du mot pour lancer l’action.

Remarque : La programmation « main.py » diffère en fonction de la console remote. On pourra fixer le type en modifiant la variable « remote_control_type » à 1, 2 ou3. On pourra également changer dynamiquement la valeur en envoyant le code depuis la console utilisée.

Conclusion

Ce projet a été développé à des fins pédagogiques et pourra servir de base de développement de robots.

Vous pouvez maintenant donner libre cours à votre imagination pour le maquettage de vos robots. Enjoy it !