
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.

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.

Et le sens de branchement des moteurs.

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.

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 :
Joysticks | Port Micro:Bit | Valeurs Mini/Maxi | Valeurs au repos |
Joystick 1 Axe x | P0 | de 0 à 1024 | de 510 à 515 |
Joystick 1 Axe y | P1 | de 0 à 1024 | de 510 à 515 |
Joystick 2 Axe x | P2 | de 0 à 1024 | de 510 à 515 |
Joystick 2 Axe y | P3 | de 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.

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.

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).
Servomoteurs | Port Micro:Bit | Angles Maxi |
Base | P13 | 180° |
Left (gauche) | P14 | environ 140° |
Right (droite) | P15 | environ 100° |
Grip (pince) | P16 | environ 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.

# 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.

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 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.

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.