MeArm (version Micro:Bit)

MeArm Robot micro:bit Kit blue de Kitronik

Le bras robotisé MeArm est un module pour Micro:Bit qui m’a été envoyé par Kitronik. Le robot existe en bleu (comme celui-ci) ou orange. Mais il est également disponible en version Raspberry Pi et Arduino. Il est également disponible dans la boutique MC Hobby

Je précise que j’ai reçu gratuitement ce produit, mais, je ne suis pas payé pour en parler (ou en faire la publicité). Je n’ai pas non plus de lien d’affiliation (si vous cliquez sur un lien ou si vous achetez ce produit, je ne touche aucune commission). Je parlerai, évidement des points positifs. Mais je n’hésiterai pas non plus à vous parler aussi des points négatifs.

Vous pouvez aussi l’imprimer vous-même puisse que les fichiers nécessaires sont sur Thingiverse. Mais le kit de Kitronik comprend :

  • Les 4 servomoteurs MG90S (engrenages métalliques),
  • La carte de contrôle des moteurs,
  • Le module de pilotage (avec 2 joystick) où s’insère le Micro:Bit,
  • Le boitier d’alimentation du robot (pour 4 piles AA),
  • La visserie nécessaire et même une petite clé Allen.
Les pièces du bras robot MeArm avant le montage

Montage

Les instructions de montage sont disponible en PDF et sous forme de vidéo :

Si vous aimez les jeux de construction de type MECCANO ou LEGO technique, vous ne devriez pas rencontrer de difficulté particulière. Sinon, je me permet de vous donner un petit conseil :

Prenez le temps pour bien repérer les pièces et le sens de montage, cela évite ensuite d’avoir à démonter et remonter une partie du robot en cas d’erreur.

Repérez également les cornes (petits trucs en plastique qui se fixent sur l’axe) utilisées.

Les servomoteurs MG90S avec les cartes de contrôle du bras robot MeArm

Et le sens de branchement des moteurs.

Branchement des moteurs du bras robot MEARM

Alimentation

Le robot est alimenté depuis la carte de contrôle et surtout pas depuis le Micro:Bit. Vous avez le choix entre la prise micro USB (5V) ou la prise Jack (6V). L’alimentation doit être suffisamment puissante. Utilisez des piles neuves ou un bon transfo, comme par exemple, un chargeur de téléphone de 2A (ampères). Sinon vous risquez de rencontrer des coupures et des redémarrages intempestifs, rendant le robot imprévisible.

Carte d'alimentation du bras robot MeArm

Fonctionnement du robot

Chacun des 2 joystick possède 2 axes (x et y). Ils se comportent comme des potentiomètres. Leurs résistances varient suivant la position de la manette. Il suffit donc d’alimenter une borne du joystick et de mesurer la valeur (analogique) retournée à l’autre borne pour en déduire la position du « champignon ». Voilà ce que cela donne :

JoysticksPort
Micro:Bit
Valeurs
Mini/Maxi
Valeurs
au repos
Joystick 1
Axe x
P0de 0
à 1024
de 510
à 515
Joystick 1
Axe y
P1de 0
à 1024
de 510
à 515
Joystick 2
Axe x
P2de 0
à 1024
de 510
à 515
Joystick 2
Axe y
P3de 3 à 8
(ou de 2 à 6)
5 à 6
(ou 4)

L’axe y du joystick 2 ne donne pas tout à fait les mêmes valeurs à chaque essai. Il faut donc tester la valeur au repos (au démarrage du programme) et ensuite déplacer la pince lorsque cette valeur change.

L’appui au sommet du joystick 1, presse le bouton A et sur le joystick 2, le bouton B.

Attention, par défaut, le port P3 sert à l’affichage de la matrice de LED. Pour utiliser ce port en tant qu’entrée analogique, il faut donc obligatoirement déactiver l’écran (au début du programme).

En théorie, les servomoteurs peuvent de déplacer de 0 à 180°. Mais en pratique la structure du robot peut limiter parfois leur rayon d’action. Ils sont reliés aux ports suivants :

  • Base : P13
  • Left (gauche) : P14
  • Right (droite) : P15
  • Grip (pince) : P16

Régler l’angle et le sens des moteurs

Il est temps de régler plus finement l’angle d’action de chaque moteur. Pour cela, créez une variable (par exemple servoMoteur) et reproduisez le programme MakeCode ou MicroPython ci-dessous.

Programme MakeCode pour tester les servomoteurs
from microbit import *
display.off()
while True:
    servoMoteur = round(pin0.read_analog()/1023*180)
    pin13.write_analog(servoMoteur)
    sleep(10)

En déplaçant de gauche à droite le joystick 1, la base se déplace de 180°. Si le robot se coince, le montage est peut être trop serré, si le robot est décentré lorsque le joystick est au repos (et donc le servomoteur à 90°), démontez le socle et repositionnez le correctement.

Il reste un autre problème, le déplacement du robot est inversé par rapport au joystick. Il faut donc inverser les valeurs 0 et 180.

Amélioration du programme MakeCode de test des servomoteurs (inversion du sens de déplacement du moteur)
from microbit import *
display.off()
while True:
    servoMoteur = 180 - round(pin0.read_analog()/1023*180)
    pin13.write_analog(servoMoteur)
    sleep(10)

Testez aussi les autres moteurs et déterminez pour chacun d’eux le sens et l’angle limite. Pour les servomoteurs droite et gauche, il n’est pas possible de déplacer le moteur de 180°. Réduisez donc l’angle pour que les moteurs ne forcent pas et ne butent pas violemment sur la structure du robot. Pour la pince, il n’est pas nécessaire de l’ouvrir au maximum, vous pouvez réduire l’angle aux environs de 70° (ou même un peu moins).

ServomoteursPort
Micro:Bit
Angles
Maxi
BaseP13180°
Left
(gauche)
P14environ
140°
Right
(droite)
P15environ
100°
Grip
(pince)
P16environ
70°

Programmation

Ce serait si simple d’appliquer le programme précédent aux 4 moteurs. Malheureusement, cela ne fonctionne pas très bien. En effet, si les 4 moteurs sont en permanence sollicités, l’alimentation n’arrive pas à suivre et le Micro:Bit subit des micro-coupures, qui l’éteignent quelques instants. Ensuite, le programme redémarre depuis le début ce qui fait que le bras robot bouge un peu n’importe comment. Il est possible de contourner ce problème en vérifiant en fréquemment la position des joysticks et en ne déplaçant les moteurs que si les manettes ont bougé.

Adaptez les angles des servomoteurs gauche et droit en fonction des réglages effectués précédemment.

Pour ouvrir et fermer la pince, j’ai préféré utiliser un autre système. L’angle d’ouverture est géré par une variable qui s’incrémente ou se décrémente en fonction des déplacements latéraux du joystick 2. Cela permet de conserver l’angle d’ouverture de la pince quand on relâche le joystick.

Contrôle du bras robot MeArm avec MakeCode
# RobotMeArm.py
# Appel de la bibliothèque microbit
from microbit import *
# Désactive la matrice de LED
display.off()
# Variables
pince = 90
base = 90
gauche = 90
droite = 90
valeurPince = pin3.read_analog()
# Fonction
def manipulerPince(num):
    global pince
    pince = pince + num
    if pince < 60:
        pince = 60
    elif pince > 130:
        pince = 130
    pin16.write_analog(pince)

manipulerPince(0)
# Boucle infinie
while True:
    if base != (180 - round(pin0.read_analog()/1023*180)):
        base = 180 - round(pin0.read_analog()/1023*180)
        pin13.write_analog(base)
    if gauche != (20 + round(pin1.read_analog()/1023*140)):
        gauche = 20 + round(pin1.read_analog()/1023*140)
        pin14.write_analog(gauche)
    if droite != (60 + round(pin2.read_analog()/1023*100)):
        droite = 60 + round(pin2.read_analog()/1023*100)
        pin15.write_analog(droite)
    # Pince
    if pin3.read_analog() < valeurPince:
        manipulerPince(2)
    elif pin3.read_analog() > valeurPince:
        manipulerPince(-2)
    if button_a.is_pressed():
        manipulerPince(5)
    if button_b.is_pressed():
        manipulerPince(-5)
    # Petite pause
    sleep(10)

Amusons-nous

Pour jouer avec le robot, j’ai imprimé quelques quilles , mais cela fonctionne aussi avec de simples bouchons. Ce n’est pas si facile d’attraper et ensuite de reposer délicatement les objets. Il faut un peu d’entrainement pour y arriver, mais c’est vraiment très amusant.

Utilisation du robot MeArm pour déplacer des petits objets.

Si vous avez des conseils ou des suggestions pour optimiser mon programme, n’hésitez pas à en parler dans les commentaires…

Conclusion

En cherchant bien, j’ai quand même trouvé un petit défaut. Le champignon du joystick (s’il est enfoncé au maximum), peut parfois buter sur le connecteur d’alimentation, ce qui empêche de le déplacer à fond vers la droite.

Le chapeau du joystick butte sur le connecteur d'alimentation du robot MeArm

Le problème n’est pas très difficile à résoudre. Vous pouvez enfoncer un peu moins le champignon, l’enlever, l’inciser légèrement (pour retirer la partie qui butte) ou alors en imprimer un autre…

C’est la solution que j’ai choisie. J’en ai imprimé 2, pour des raisons esthétiques, mais bien sûr, un seul aurait suffit. Si vous disposez d’une imprimante 3D, cette solution est simple et rapide. Si mon modèle de champignon vous intéresse, vous pouvez le télécharger ici.

Le robot MeArm avec de nouveaux champignons.

A part ce léger détail, je suis très content de ce robot. Bien sûr, il demande quelques réglages avant de fonctionner correctement, mais cela permet aussi de comprendre son fonctionnement.

Mais ce n’est que le début de l’aventure, il est possible de faire tellement de choses avec un bras robotisé, comme dans cette vidéo où le robot effectue automatiquement une succession de tâches.

Si j’étais méchant, je modifierais le système pour que les billes roulent toutes seules au point de départ et que le pauvre robot soit obligé de les déplacer éternellement. Oui, je sais ce ne serait pas très gentil pour ce brave robot MeArm, mais il faut en profiter maintenant, car les associations de protection des robots n’existent pas encore.


Laisser un commentaire