Finalisation du bras robotique
Ce projet touche à sa fin, j’ai décidé d’apporter les modifications suivantes au bras :
- Ajout d’un écran OLED SSD1306.
- Ajout d’un capteur de gestes PAJ7620.
- Impression du couvercle.
Le but de ces modification est d’apporter une interface humaine au bras robotique. Effectivement, en lançant le programme, un menu s’affichera sur l’écran OLED et on pourra sélectionner l’action à effectuer grâce au capteur de gestes PAJ7620. Nous y reviendrons dans la suite mais pour l’instant voyons la partie éléctronique et mécanique.
J’ai écrit un certain nombre d’article sur l’utilisation du capteur PAJ7620 en MicroPython (je vous propose de les lire) :
- Utilisation du capteur de gestes en MicroPython.
- Une interface humaine à l’aide du capteur de gestes en MicroPython.
- Piloter le bras robotique via le capteur de gestes en MicroPython.
Rien de compliqué pour la partie électronique, on utilise le bus I2C pour communiquer avec l’écran OLED SSD1306 et le capteur de gestes PAJ7620; ne pas oublier de relier les liaison SDA et SCL au + 3.3v via 2 résistances de 4.7 Kohms.
J’ai monté l’ensemble sur une carte supplémentaire de dimension 80×70 mm :
Pour le couvercle, j’ai créé à l’aide Fusion 360, le modèle STL téléchargeable sur mon Github (nom du fichier ‘couvercle bras robotique.stl‘) :
Voici une photo, de la carte montée :
Pour la partie programmation en MicroPython, le programme téléchargeable sur mon Github se nomme ‘robot_arm.py‘ et permettra à partir d’un menu de sélectionner 3 modes de fonctionnement :
- Web : le programme configure un point d’accès WiFi de nom ‘microarm‘ sans mot de passe avec une adresse IP de 192.168.4.1; on peut se connecter à partir d’un navigateur internet et gérer les mouvements du bras. Se référencer à mon article pour le fonctionnement.
- Geste : le programme utilise le capteur de gestes pour gérer le bras (ceci peut être améliorer). Se référencer à mon article pour le fonctionnement.
- UDP : le programme configure un point d’accès WiFi de nom ‘microarm‘ sans mot de passe avec une adresse IP de 192.168.4.1. Il implémente le protocole UDP afin de pouvoir communiquer avec tout autre matériel (ESP, Raspberry, Ordinateur…) en socket UDP et en utilisant le port UDP 18000. Cela permet d’ajouter facilement des options au bras (par exemple une manette de joystick, un capteur de mouvement etc…). Je vous donne un peu plus loin un exemple d’utilisation d’un capteur MPU6050 avec un ESP8266 écrit en MicroPython.
La gestion du menu s’effectue par geste :
- Haut / Bas : pour défiler le menu.
- Sens horaire : pour activer le mode sélectionné.
- Sens anti-horaire : pour quitter le mode de fonctionnement et afficher de nouveau le menu.
Attention j’utilise la notion de Thread pour la partie Web et UDP; pour le mode Web si on quitte l’utilisation à partir du menu, il sera nécessaire d’effectuer une action sur la page Web pour vraiment quitter le Thread car actuellement il est impossible de tuer un Thread en MicroPython (version 1.10).
Le bras robotique tout monté :
Pour gérer le bras via le protocole UDP, j’ai écrit un programme en MicroPython qui utilise un capteur MPU6050 (vous pouvez télécharger la librairie que j’ai écrit en MicroPython sur mon Github) dont voici le contenu (le fichier est sur mon Github et se nomme ‘robot_mpu6050_udp.py‘) :
# Utilisation d'un bras articulé via le protocole UDP # # Matériel : # Testé sur ESP8266 Lolin # 1 capteur de mouvements MPU6050 # MicroPython version 1.10 # # Programme qui permet de piloter le bras articulé via le protocole UDP : # # Auteur : iTechnoFrance # import machine, time import network, socket import mpu6050 def config_wifi(): sta = network.WLAN(network.STA_IF) # création client d'accès WiFi sta.active(True) # activation du client d'accès WiFi sta.connect('microarm') # connexion au point d'accès WiFi while(sta.isconnected() == False): time.sleep(1) ip = sta.ifconfig()[0] return ip def communication(commande): com_net.sendto(commande, (('192.168.4.1', 18000))) # envoi la commande au recepteur sur le port 18000 ip = config_wifi() com_net = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # initialise un socket UDP # Déclaration I2C sur ESP8266 # // GPIO05 --> SDA # // GPIO04 --> SCL i2c = machine.I2C(scl=machine.Pin(4), sda=machine.Pin(5), freq=400000) mpu_6050 = mpu6050.MPU6050(i2c) # déclaration mpu6050 if (mpu_6050.detect()): while True: mpu_6050.lecture_capteurs() if (mpu_6050.AngleX > 5): # gauche communication(b'g') if (mpu_6050.AngleX < -5): # droite communication(b'd') if (mpu_6050.AngleY 5): # bas communication(b'b')
Voilà pour le petit projet du bras robotique. Je vais tenter d’effectuer quelques vidéos sur ma chaine Youtube.