Bras robotisé MATLOG

Transcription

Bras robotisé MATLOG
Bras robotisé MATLOG
Extrait du PoBot
http://www.pobot.org
Bras robotisé MATLOG
- L'association - Nos robots - Robots du club - Bras articulés motorisés -
Date de mise en ligne : lundi 24 janvier 2011
PoBot
Copyright © PoBot
Page 1/9
Bras robotisé MATLOG
Sommaire
• Matériel nécessaire
• Détails techniques
• Réalisation
• Programmation
En collaboration avec notre partenaire MATLOG [http://www.matlog.com], nous avons consacré de nombreux
ateliers à la création d'une maquette robotisée à base de composants XBee et d'un contrôleur Rabbit puis d'une
Arduino.
Mise à jour de mars 2012 : une nouvelle vidéo montre la seconde version du bras.
Le projet a servi à des démonstrations sur différentes manifestations publiques :
les rencontres "sciences et techniques" d'Antibes
la Fête de la Science à Valbonne
le salon du modélisme de Mougins
le colloque des IUT GEII de France
le Real Time System, salon Parisien majeur
Une plate-forme robotisée réagit en temps réel à son environnement en utilisant des capteurs sans-fil pour la
détection
Elle saisit des objets pour les montrer
Elle joue des musiques selon les phases du programme
Copyright © PoBot
Page 2/9
Bras robotisé MATLOG
Elle réagit à une présence
Matériel nécessaire
L'électronique
1 carte programmable Rabbit MiniCore RCM5700
[http://www.matlog.com/calculateur-oem/calculateurs-oem-rabbit/rcm5700.html] ou 1 carte programmable Arduino
1 XBee ZB serie 2 avec antenne RPSMA
[http://www.matlog.com/wireless/modules-zigbee-et-802154/modules-xbee-zb-serie-2-ou-znet25.html] (réf. Matlog
XBP24-Z7SIT-004J) pour la plate-forme Rabbit
1 antenne RPSMA 2,4 GHz
[http://www.matlog.com/wireless/modules-zigbee-et-802154/divers-accessoires-pour-xbee.html] (réf. Matlog
A24-HASM-450)
2 XBee Sensors [http://www.matlog.com/wireless/modules-zigbee-et-802154/capteurs-xbee.html] (réf. Matlog
XS-Z16-CB1R) pour capteurs de lumière et de température.
Nous avons conçu un circuit électronique fait-maison pour fixer les différents composants et supporter la mécanique.
Des rubans à leds RGB pilotés par PWM permettent de changer de couleur.
La mécanique
Le projet était initialement prévu pour un système simple :
deux servomoteurs standard 3 kg.cm
mécanique "pan & tilt [http://www.zartronic.fr/robotique-m%C3%A9canique-c-22_46.html]" Zartronic
un plateau 25x25 cm en plexiglas
Mais nous avons ensuite opté pour un bras à 6 degrés de liberté dont vous pouvez suivre les étapes de construction.
L'alimentation
Le robot n'est pas mobile, on peut donc utiliser une alimentation secteur 9 volts et 4 ampères connectée à des
régulateurs de tension :
alimentation de 5 ou 6 volts pour les servomoteurs
alimentation de 3,3 volts pour l'électronique de contrôle
batteries pour les capteurs (déjà intégrées pour les Xbee Sensors)
Détails techniques
Copyright © PoBot
Page 3/9
Bras robotisé MATLOG
Résistance aux parasites
Pour pouvoir utiliser ce montage dans un environnement "bruité", il faut bien choisir la fréquence, la puissance et
l'emplacement sur le circuit. En effet le montage peut être affecté (perte de signal, débit réduit ou freeze de la
réception pendant plusieurs secondes) à cause de parasites venant d'appareils électroniques fonctionnant dans la
même gamme de fréquence, comme du Wifi, du Bluetooth, des talkies-walkies..
On choisit donc pour ce projet un modèle à 2,4 GHz mais avec une puissance de 10 mW (autorisée en Europe) et
une antenne RPSMA.
Réalisation
Fabrication
Menuiserie bois et PVC
Polycarbonate pour le dessus
On soigne les détails
Copyright © PoBot
Page 4/9
Bras robotisé MATLOG
Les rubans de leds
Fixation des cartes
Les derniers éléments
La musique adoucit les moeurs
Test de la liaison XBee
Copyright © PoBot
Page 5/9
Bras robotisé MATLOG
Résultat
Une fois sous tension, on peut tester les mouvements du bras et
Le bras et son capteur
Lumière !
La pince attrape un objet
Copyright © PoBot
Page 6/9
Bras robotisé MATLOG
Le bras en place
Prêt pour l'envoi !
Et c'est fini !
Programmation
Le contrôle du bras
Il y a 6 servomoteurs pour le bras. Chaque servo peut tourner de 180 degrés avec le code de la bibliothèque Servo
du langage Arduino (C++) mais bien entendu pour des raisons mécaniques, l'angle de débattement est restreint et
dépend de chaque articulation.
Un fichier bras.h est créé pour gérer le bras et lui faire prendre différentes positions pré-programmées. C'est lui aussi
qui gère les couleurs prises par la plate-forme, ce qui facilitera le débogage.
On commence par déclarer les bibliothèques utilisées, les fonctions utiles de la carte Arduino et les fonctions
spécifiques aux servomoteurs :
#include "Arduino.h" #include "Servo.h"
Ensuite on déclare une variable pour chaque servomoteur :
Servo s1; Servo s2; Servo s3; Servo s4; Servo s5; Servo s6;
Et on assigne les pattes (p) à une variable de chaque couleur :
int prouge = 4; int pvert = 5; int pbleu = 6;
Copyright © PoBot
Page 7/9
Bras robotisé MATLOG
Un tableau gère différentes positions, après qu'on s'est assuré que les enchaînements ne mettent pas en péril
l'équilibre du bras. En effet les efforts peuvent être importants, et c'est pour cela qu'on a utilisé du polycarbonate
pour la plaque, bien plus rigide que du plexiglas.
int positions[][9] = { { 0, 15,180, 60,165,170, 0, 0, 0}, // stable coté { 80, 15,180, 60,165,170, 0, 0, 0}, // stable
devant {120, 80,110, 60,165,170,255, 0, 0}, {120,120, 90, 30, 0,170,255, 0, 0}, {120,120, 90, 30, 0,170,255, 0,
0}, // au-dessus {120,120, 90, 30, 0, 60,255, 0, 0}, // ouvrir {120,137, 80, 30, 0, 60,255, 0, 0}, // baisser
{120,137, 80, 30, 0,180, 0,255, 0}, // serrer {120, 80, 80, 30, 0,180, 0,255, 0}, {120, 80, 80, 60, 0,180, 0,255,
0}, { 80, 60,120, 60, 165,180, 0, 0,255}, // milieu { 80, 60,120,120, 0,180, 0, 0,255}, { 80, 60,120, 80, 0,180, 0,
0,255}, { 0, 80,120, 80, 0,180, 0, 0,255}, // 12 { 0, 80, 90, 30, 0,180, 0,255, 0}, { 0, 80,130, 30, 0,180, 0,255,
0}, { 0, 90,165, 60, 0,180, 0,255, 0}, // 15 au dessus { 0, 90,165, 60, 0, 60,255, 0, 0}, // 16 ouvrir { 0, 95,160,
60, 0, 60, 0, 0,255}, // 17 descendre { 0, 95,160, 60, 0, 180, 0, 0,255}, // 18 fermer };
Les 6 premières valeurs gèrent les servomoteurs, tandis que les 3 dernières gèrent les couleurs.
Au cas où ça vous ait échappé, "ouvrir" et "serrer" désigne la pince, tandis que les autres commentaires désignent
différents mouvements du bras.
Une fonction d'initialisation (setup en anglais) permet de déclarer la patte de la carte Arduino Roméo à laquelle est
attachée un servomoteur.
void setup_bras() {
}
s1.attach(10);
s2.attach(9);
s3.attach(12);
s4.attach(8);
s5.attach(7);
s6.attach(11);
Une seule fonction permet de commander depuis le programme principal l'une des autres positions.
void position_bras(int i) { // changer les servos s1.write(positions[i][0]); s2.write(positions[i][1]);
s3.write(positions[i][2]); s4.write(positions[i][3]); s5.write(positions[i][4]); s6.write(positions[i][5]); // changer les
couleurs analogWrite(prouge,positions[i][6]); analogWrite(pvert,positions[i][7]); analogWrite(pbleu,positions[i][8]); }
Gestion du son
Un fichier son.h regroupe les fonctions permettant de gérer le son. Le module utilisé se pilote avec des sorties
numériques tout ou rien selon le protocole suivant :
une patte pour remettre l'indice à zéro
une patte pour sélectionner le fichier à jouer
Les fichiers sont des sons de robot (ben oui, on se refait pas...) au format PCM spécifique à la carte.
Comme pour le bras, on appelle la bibliothèque de fonctions Arduino :
#include "Arduino.h"
Puis on initialise la carte, avec les différentes pattes en sortie pour signaler à la carte le mode souhaité :
Copyright © PoBot
Page 8/9
Bras robotisé MATLOG
int indice_son = 0; // indice du morceau joué void setup_son() { pinMode(14,OUTPUT); pinMode(15,OUTPUT);
pinMode(16,OUTPUT); pinMode(17,OUTPUT); pinMode(18,OUTPUT); pinMode(19,OUTPUT);
digitalWrite(14,HIGH); digitalWrite(15,HIGH); digitalWrite(16,HIGH); digitalWrite(17,HIGH);
digitalWrite(18,HIGH); digitalWrite(19,HIGH); digitalWrite(16,LOW); delay(1000); }
Jouer un son est très simple : on initialise le lecteur avec la patte 16, et on passe rapidement les morceaux jusqu'à
trouver le bon.
void jouer_son(int i) { int j = i; digitalWrite(16,LOW); delay(200); digitalWrite(16,HIGH); delay(200); while (j >
0) { digitalWrite(17,LOW); delay(200); digitalWrite(17,HIGH); delay(200); j--; } } {{La gestion du
XBee}} On en arrive à la partie la plus intéressante : interroger le XBee Sensor. On communique avec lui par la
liaison série sans-fil. La configuration par défaut lorsqu'on commande le module à MATLOG permet une utilisation
directe avec un second XBee de même série mais cette-fois connecté au micro-contrôleur par l'UART. Ce code est
placé dans le programme principal (fichier .ino ou .pde). On commence par quelques initialisations : on utilise le
capteur pour passer du mode DEMO au mode DETECT lorsqu'un obstacle passe devant le capteur de luminosité du
XBee Sensor. int xbee_count = 0; int xbee_val = 0; int index = 0; #define DEMO 0 #define DETECT 1 int mode =
0;
L'initialisation consiste simplement à démarrer une communication série à 9600 bauds comme on ferait avec un
câble USB.
void setup() { Serial.begin(9600); }
Le module envoie automatiquement une trame API du protocole XBee : cette trame est très bien décrite dans la
documentation, mais nous avons uniquement besoin de savoir qu'elle commence par 0x7E et qu'il y a 21 octets
avant d'avoir l'information de présence. Tout ce qui vient entre ou après peut être jeté.
void loop() { // lecture du port série while ( Serial.available() > 0) { char val = Serial.read();
// remettre à zéro la lecture de la trame
xbee_count = 0; }
else {
xbee_count++;
21 && val == 0x00) {
// changer de mode
mode = DETECT;
} } }
if (val == 0x7E) {
if (xbee_count ==
Et c'est fini !! Le mode DETECT se charge d'exécuter une séquence particulière et de repasser en mode démo.
Une petite astuce : le XBee Sensor envoyant automatiquement les messages, il faut les supprimer quand on n'est
pas intéressé (avant de repasser en mode démo par exemple) :
// vider le buffer série pour toutes les détections ayant eu lieu
}
while (Serial.available() > 0) {
Serial.read();
Programme complet pour le bras
Vous voilà prêt à explorer les réseaux domotiques avec toute la gamme de capteurs sans-fil commercialisée par
MATLOG sur son site Internet.
Copyright © PoBot
Page 9/9