View All

Facebook Timeline

Bras Robot 6 Axes Arduino - Montage et programmation

Posted On: oct. 14, 2020

Seen by: 23843

Categories: ROBOTS

Author: Christian Joseph

Tags: bras robot , bluetooth , servomoteur , shield

Le bras robot 6 axes Arduino est un outil révolutionnaire et qui une fois programmé peut accomplir diverses tâches plus ou moins complexes: saisir et déplacer des objets, laver la vaisselle,  trier et ranger, apporter une boisson (monté sur un châssis mobile), faire de la cuisine,etc..Et en parlant de cuisine, bienvenue dans notre établissement pour la préparation de notre plat du jour: Le Bras robot 6 axes Arduino.

Dans ce Tutoriel nous allons essentiellement nous occuper du montage et de la programmation de base du bras robot. Vous pouvez aussi retrouver notre tutoriel sur la programmation du bras robot 6 axes sans ordinateur .

Voici également quelque vidéos sympa que vous pourriez faire avec votre Bras robot:

1.Présentation

Au Menu du jour nous avons un SET de base du bras robot Arduino constitué de:

  • 4 Supports de servos U longs

  • 5 Supports de servos multifonctions

  • 1 Support en L

  • 3 supports de servos type U

  • 1 Pince

  • visserie (généralement il en reste beaucoup à la fin du montage, mais c'est tout à fait normal car le chef en met toujours plus que nécessaire et n'ayez crainte, on vous fait un doggybag à emporter)

  • Et nous mettons en prime notre service technique projet@eagle-robotics.com pour vous aider en cas de besoin.Set Bras robot Arduino

Support servos U long

Support servos multifonctions

Support servo en L

Supports servo type U

Pince bras robot arduino

A ceci nous rajouterons bien volontiers 2 ou 3 câbles d'extension pour servomoteurs et 6 palonniers en métal pour l'assaisonnement.

Câbles extension servos

Palonniers en metal

Il est important de comprendre que tous ces éléments ainsi que les servomoteurs, les cartes de contrôle des servomoteurs, les modules Bluetooth, les cartes de commandes à Joystick, et les alimentations sont déjà inclus dans nos menus à en livraison KIT BRAS ROBOT DIY BLUETOOTH ARDUINO et KIT BRAS ROBOT DIY JOYSTICK ARDUINO... Bref tout le nécessaire pour monter et piloter votre bras robot sans difficulté.

2. Choix des servomoteurs

Pour accompagner tout ceci, je vous suggère un Château-Servo MG995 ou un MG996R doté de pignons métalliques et offrant un couple de 15kg/cm et primé par la critique.

Et pour finir en beauté, je vous déconseille (très) fortement le S3003 avec ses pignons en plastique et son couple faible (à peine 4kg/cm dit-on!) et qui est une cuvée excellente pour le "modélisme". Nous ne servons pas encore ce type de cuisine, mais nous n'excluons pas la possibilité d'ouvrir un tel établissement ultérieurement. (Nous sommes un établissement respectable tout de même!)

3. Préparation avant montage

Avant de commencer, il est important de préparer une carte Arduino et 3 câbles pour la calibration des Servomoteurs. Si vous avez commandé l'un des kits bras robots 6 axes, vous pouvez directement brancher les servomoteurs sur les connecteurs prévus à cet effet et alimenter votre carte Arduino. Le programme livré avec les kits est conçu de sorte à initialiser les servomoteurs à 90°, comme ce que nous nous apprêtons à faire avec notre carte Arduino UNO et nos 3 fils. Arduino UNONous allons utiliser un petit programme arduino qui va permet de faire 3 choses:

  • Tester le bon fonctionnement du servomoteur

  • Faire le mapping du servomoteur (pas d'inquiétude, nous y reviendrons sur ce terme au moment de la programmation du bras robot!)

  • Mettre le servo sur son positionnement de départ

Il peut arriver en effet qu'un servomoteur arrive défectueux, et cela est plus susceptible d'arriver plus à nous qu'à vous, voire jamais à vous puisque nous prenons toujours soin de les tester avant de les expédier. (vous en avez de la chance quand même!). mais au cas où il proviendrai d'un autre fournisseur que nous, je vous donne ce petit programme sympa que j'ai baptisé "poteservo" quand le servo fonctionne bien, et  "pasdeservo" quand rien ne fonctionne comme prévu.

Pour ceux qui n'ont pas d'ordinateur ou qui ne sont pas familiers avec la programmation Arduino, Pas de panique! plutôt que de s'attarder sur ce programme, il vous suffira de connecter vos servomoteurs sur l'un de nos shields compris dans nos packs bras robot 6 axes et de mettre en route l'alimentation et les moteurs se calibreront directement à la bonne position. Nous prenons soin de préprogrammer nos cartes Arduino de sorte que à la mise sous tension les servomoteurs prennent leur position initiale! Il ne vous restera plus qu'à les positionner conformément au reste du tutoriel. Mais pour ceux qui n'ont pas pris de kit chez nous, eh ben à votre "PoteServo/PasdeServo"

/*

  • Programme: PoteServo/PasdeServo
  • Auteur: Christian Joseph
  • Date: 13/03/2016
  • www.eagle-robotics.com

*/

#include  "Servo.h" 

Servo srv1, srv2;

void setup(){

srv1.attach(4); //Pour la position de départ du servomoteur

srv2.attach(5);//Pour tester et calibrer le servomoteur

}

void loop(){

srv1.write(90);

srv2.write(90);

delay(1000); //attente 1s

srv2.write(120);

delay(1000); //attente 1s

}

Servomoteur

Arduino UNO

Fil marron

GND

Fil rouge

5V

Fil orange

Broche 4 ou 5

  • Pour tester ou faire le mapping du servomoteur, il faut relier le fil orange à la broche 5 et ainsi le servomoteur se déplace de 90°<->120°. Le servomoteur ayant un angle maximal de rotation 180°, on peut faire varier sa rotation entre 0 et 180. Certains servos comme le DS3218 peuvent aller jusqu'à 270°.

  • Pour mettre le servomoteur  à sa position de départ, il faut connecter le fil orange à la broche 4, ainsi le servomoteur reste à la position 90°. On utilisera cette fonction lors du montage du bras robot arduino.

Pour l'instant, vous devez seulement tester si votre servomoteur fonctionne correctement, même si il provient de chez nous, et même si nous sommes sûrs qu'il fonctionne bien si tel est le cas .(non je n'ai pas les chevilles qui enfle en plus d'être modeste!).

4.Dégustation (Montage)

Phase 1: Une cuillérée pour papa!

Phase1-1 Bras robot 6 axes

Phase2-1 Bras robot 6 axes

Phase1-3 Bras robot 6 axes

Phase2: Une cuillérée pour maman!

Phase2-1 Bras robot 6 axes

Phase2-2 Bras robot 6 axes

Phase 3: Une cuillérée pour papi!

Phase 3-1 Bras robot arduino

Phase 3-2 Bras robot arduino

Phase 4: Une cuillérée pour mamie!

Phase 4 Bras robot Arduino

Phase 5: Une cuillérée pour tonton Albert!

Phase5 Bras robot

Phase 5-2 Bras robot arduino

Phase 5-3 Bras robot Aruino

Phase 6: Une cuillérée pour tantine Gertrude!

Phase6-1 Montage bras robot arduino

Le Servomoteur est une connecté sur la broche 4 pour le positionnement de départ à 90°.

Phase6-2 Montage bras robot arduino

Phase6-2-2 Montage Bras robot Arduino

Comme vous pouvez le voir, j'ai mis une annotation en bleu et une en jaune représentant la position et le déplacement de notre servomoteur. En effet selon le Servomoteur (et non selon le modèle), vous pouvez bien avoir un MG995 qui tourne vers le haut lorsque vous lui dites d'aller vers 180° et vers le bas lorsque vous lui dites d'aller vers 0° (Annotations en bleues). A l'inverse, vous pouvez aussi avoir  un MG995 qui tourne vers le haut lorsque vous lui dites d'aller vers 0° et vers le bas lorsque vous lui dites d'aller vers 180° (Annotations en jaune). Tout dépend du fabricant, et c'est la raison pour laquelle dans le programme que nous verront plus loin il sera important de réaliser le mapping de chaque servomoteur du robot, afin d'éviter par exemple que le bras robot aille à droite si vous voulez qu'il aille à gauche par exemple, ou qu'il descende au lieu de monter.

Phase6-3 Montage Bras robot arduino

Phase6-3 Montage bras robot Arduino

Phase 7: Une cuillérée pour cousine Octavia!

Phase7-1 Montage bras robot Arduino

Phase7-2 Montage du bras robot Arduino

Phase7-3 Montage bras robot Arduino

Phase7-4 Montage du bras robot Arduino

Phase7-5 Montage du bras robot Arduino

Phase 8: Une cuillérée pour cousin Pierrick!

Phase8-1 Montage Bras robot Arduino

Phase8-2 Montage Bras robot Arduino

Phase8-3 Montage Bras robot Arduino

Phase8-4 Montage Bras robot Arduino

Phase 9: Une cuillérée pour le neveu Alain !

On positionne le 2ème servomoteur à 90° après avoir installé dessus le palonnier en métal.

Phase9-1 Montage Bras robot Arduino

Phase9-2 Montage Bras robot Arduino

Phase9-3 Montage Bras robot Arduino

Phase9-4 Montage Bras robot Arduino

Phase 9: Une cuillérée pour la nièce Alicia !

Phase10-1 Montage Bras robot Arduino

Phase10-1 Montage Bras robot Arduino

Phase 11: Une cuillérée pour le PSG !

Phase11-1 Montage Bras robot Arduino

Phase11-2 Montage Bras robot Arduino

Phase11-3 Montage Bras robot Arduino

Phase 12: Une cuillérée pour le RACING 92 !

Phase12-1 Montage Bras robot Arduino

Phase12-2 Montage Bras robot Arduino

Phase 13: Une cuillérée pour l'équipe de FRANCE !

Phase13-1 Montage Bras robot Arduino

Phase13-2 Montage Bras robot Arduino

Phase 14: Une cuillérée pour ceux qui aiment le Rap !

On positionne le 3ème servomoteur à 90° après avoir installé dessus le palonnier en métal.

Phase14-1 Montage Bras robot Arduino

Phase14-2 Montage Bras robot Arduino

Attention! Pour éviter tout dérapage, dans cette photo j'ai juste bougé le Bras vers le Haut après avoir positionné à 90° et monté le Servomoteur.

Phase14-3 Montage Bras robot Arduino

Phase14-4 Montage Bras robot Arduino

Phase 15: Une cuillérée pour ceux qui aiment le Métal!

Phase15-1 Montage Bras Robot Arduino

Phase15-2 Montage Bras Robot Arduino

Phase15-1 Montage Bras Robot Arduino

Phase 16: Une cuillérée pour ceux qui aiment le Jazz!

Phase16-1 Montage Bras robot Arduino

Phase16-2 Montage Bras robot Arduino

Phase16-3 Montage Bras robot Arduino

Phase 17: Une cuillérée pour ceux qui aiment le Reggaeton !

On Positionne les 4ème et 5ème Servomoteur.

Phase17-1 Montage Bras robot Arduino

Phase17-2 Montage Bras robot Arduino

Phase17-3 Montage Bras robot Arduino

Phase 18: Une cuillérée pour ceux qui aiment la musique Classique !

On Installe la pince sur le palonnier du 5ème servomoteur. Il ne faut pas oublier de fixer le palonnier au servomoteur (avec la vis pour servomoteur), avant de fixer la pince. 

Phase18-1 Montage Bras robot Arduino

Phase18-2 Montage Bras robot Arduino

Phase18-3 Montage Bras robot Arduino

Phase 19: Une cuillérée pour ceux qui aiment la Tecktonic! (Pas Moi!)

On installe le 6ème servomoteur

Phase19-1 Montage Bras robot Arduino

Phase19-2 Montage Bras robot Arduino

Phase19-3 Montage Bras robot Arduino

Phase19-4 Montage Bras robot Arduino

Phase 20 : Une cuillérée pour celui qui a fait le Tuto! (Là c'est Moi!)

Pour la position de départ de la pince, on peut choisir une position à 90° avec la pince ouverte, ou fermée. Pour la suite du programme, j'ai choisi de le mettre en position fermée à 90°.

Phase20-1 Montage Bras robot Arduino

Phase20-2 Montage Bras robot Arduino

Phase20-3 Montage Bras robot Arduino

Phase 21 : Une cuillérée pour celui qui lit le Tuto! (Là c'est Toi!)

Phase21-1 Montage Bras robot Arduino

Fin du plat principal...Maintenant place au dessert! (PROGRAMMATION)

Mais avant de vous présenter la carte des desserts, je vais vous parler tout d'abord du Mapping.

5.LE MAPPING C'EST QUOI? (Excellente question mon cher Watson!)

Pour comprendre en quoi consiste le mapping, on va prendre en exemple le mouvement du bras par rapport à l'avant-bras.Grâce à votre coude, votre bras peut effectuer une rotation entre 0 et 180° par rapport à votre avant-bras. Et en principe au delà de 180° ça fait "Crac". C'est la limite de mouvement et votre robot peut aussi rencontrer de part sa conception des contraintes mécaniques qui imposeront aussi une limite de mouvement. Rassurez-vous, c'est bien le cas du bras robot 6 axes arduino.

Exemple Bras - Montage bras robot

D'autre part, dans l'exemple photo, lorsque vous pliez le bras sur l'avant bras vous allez vers un angle de 0°, et plus vous tendez le bras, vous allez vers 180°.Si on remplace le coude par un servomoteur, pour ouvrir et tendre le bras, il faut aller vers 180°(srv1.write(180);), et pour fermer le bras il faut aller vers 0° (srv1.write(0);).

Un autre servomoteur de même marque et modèle aurait fait l'inverse par exemple pour ouvrir et tendre le bras, il faut aller vers 0°(srv1.write(0);), et pour fermer le bras il faut aller vers 180° (srv1.write(180);). Il s'agit donc là du Mapping de direction.

De ce fait la Mapping consiste à définir les éléments de  direction de chaque partie du robot (gauche, droite, haut, bas), ainsi que les limites de mouvements.

MAPPING DU BRAS ROBOT 6 AXES ARDUINO:

Mapping Bras robot 6 axes Arduino

A - MAPPING DE DIRECTION

Branchez votre servomoteur à la broche 5 de la carte Arduino (Fil orange) et connectez votre carte au PC via le câble USB.

Le servomoteur va se déplacer de 90° qui est notre valeur de départ vers la valeur 120°.

Element du bras qui se déplace de haut en bas: Bras, Avant Bras, Poignet, Pince.

Si l'élément du bras va vers le haut, puis revient à 90°, alors on sait que pour aller vers le haut, il faut aller vers 180°, et pour le bas il faut aller vers 0°.Mais si l'élément du bras va vers le bas, puis revient à 90°, alors on sait que pour aller vers le bas, il faut aller vers 180°, et pour le haut il faut aller vers 0°.

Element du bras qui se déplace de gauche à droite: Base, Main.


Si l'élément du bras va vers la droite, puis revient à 90°, alors on sait que pour aller vers la droite, il faut aller vers 180°, et pour la gauche il faut aller vers 0°.
Mais si l'élément du bras va vers la gauche, puis revient à 90°, alors on sait que pour aller vers la gauche, il faut aller vers 180°, et pour la droite il faut aller vers 0°.

B. Limites de mouvements

Ne sont pas soumis à des limites de mouvements: BASE et MAIN. Ces éléments peuvent aller librement de 0 à 180°, voir plus (servomoteur DS3218).

Peuvent être soumis à des limites de mouvements:BRAS, AVANT BRAS, et POIGNET. Ces éléments peuvent être soumis à des limites de mouvements et se gêner ou pas selon leur mouvements respectifs. A vous de voir quelles limites leur imposer.

Obligatoirement soumis à des limites de mouvements: PINCE. Cet élément de par sa conception n'offre que très peu de liberté de mouvement, de l'ordre de 40 à 50° max au lieu de 180° comme la Base par exemple.

Pour connaître les limites de mouvement de votre bras robot 6 axes, il faut ressortir encore notre vieux copain "PoteServo". Toujours connecté sur la Broche 5 de la carte Arduino, il faut modifier les valeurs min et max liées à notre variable servomoteur "srv2", et ainsi déterminer les butées hautes et basses, ou droites et gauches. les valeurs sont comprises entre 0 et 180.

Une fois la valeur modifiée, il faut charger le programme dans la carte Arduino et observer le mouvement du servomoteur. recommencer autant de fois que nécéssaire jusqu'à trouver les bonnes limites pour le bras robot.

Par exemple pour la pince, nous connaissons déjà la valeur de la butée quand la pince est fermée, puisque nous l'avons initialisée ainsi lors du montage, et c'est 90°. Supposons que pour ouvrir la pince, il faille aller vers 0°. Dans ce cas nous allons faire varier le servomoteur entre 90° et 0° en enlevant 10° à chaque fois . 1ere fois: 90°<->80°, puis 90°<->70°, puis 90°<->60°, etc... jusqu'à trouver la valeur à applique au servomoteur à laquelle l'ouverture de la pince sera à son maximum. on aura ainsi atteint l'autre butée.

Vous pouvez utiliser le document ci-dessous pour renseigner vos valeurs. Il est disponible en téléchargement en bas de page du produit Bras robot 6 axes Arduino Bluetooth.

Mapping du bras robot 6 axes

Valeur mapping bras robot 6 axes

BIEN, ET MAINTENANT LE DESSERT!

6.PRESENTATION DE LA CARTE

Bien choisir sa carte de programmation et de gestion du bras robot est très important, mais rassurez-vous, nous ne travaillons que avec les meilleurs ingrédients dans notre établissement. J'ai choisi de travailler à partir d'une carte Arduino UNO, et vous pouvez choisir celle qui vous convient: Arduino Nano, Mega, Pro micro, Pro Mini,etc...

Mais il est important que votre carte soit bien accompagnée de la meilleure carte Shield Arduino. Voici donc notre carte des shields que nous vous recommandons.

HABEMUS PAPAM (Nous avons un Pape):

Choix des shields pour bras robot 6 axes

Lors de l'élection d'un nouveau pape au vatican, une fumée blanche est relâchée à travers la cheminée de la chapelle Sixtine. Quel lien avec notre bras robot, et bien je vais vous le dire:

Bien que présents sur notre site, les shields V5 pour arduino UNO et V1 pour Arduino Mega ne sont pas adaptés lorsqu'il s'agit de gérer plus de 2 servomoteurs à la fois, et si on essaye, généralement on fini par griller notre carte Arduino et même le Shield, d'où l'émanation d'une fumée blanche. Paix aux cartes que j'ai grillé! Amen .

En réalité le problème vient du fait que sur ces cartes, l'alimentation de la carte Arduino et des servomoteurs est la même. Mais comme les servomoteurs du type MG995, MG996R, etc, sont très gourmands en energie au démarrage, du coup ils sont freinés par la carte Arduino et cela peut provoquer des accoups sur les moteurs, voir brûler la carte Arduino. En réalité toute carte Shield pour servomoteurs qui se respecte doit avoir au minimum une alimentation séparée pour les servomoteurs, et une alimentation pour la carte Arduino, avec une masse commune entre les 2.

C'est pour cela que je vous conseille évidement en premier lieu la carte shield Eagle Robotics ou les shields servomoteurs I2C numéros 2 et  numéro 3 qui sont aussi de très bonnes cartes. La 1ère différence est que la carte Shield Eagle dispose d'un connecteur permettant d'alimenter séparément les servomoteurs et la carte Arduino, tandis que les cartes shield I2C ont un connecteur pour l'alimentation des servomoteurs seulement, laissant ainsi l'alimentation de l'Arduino par son câble USB ou par son connecteur Jack (ce qui est aussi possible avec la carte Shield Eagle). Mais pas de panique nous fournissons toutes les alimentations requises et les câbles dans nos kits Bras robots 6 axes.

La 2ème différence se situe au niveau de la programmation où la carte Eagle est plus simple à programmer que les cartes I2C numéro 2 et numéro 3. Et c'est ce que nous allons voir de suite sans plus tarder!

A. Programme compatible SHIELD EAGLE ROBOTICS 

Avec ce programme, le bras robot se pilote avec un smartphone doté du Bluetooth, mais aussi avec notre Shield Joystick 3.0 (inclus dans le pack Bras Robot 6 DIY Joystick arduino). Nous y reviendrons plus tard sur le shield Joystick.

Nous avons dévellopé et mis en ligne une application sur le play store google: Robotic arm Bluetooth Arduino. Et ce qui est super c'est que notre shield dispose d'un port dédié pour implanter directement un module Bluetooth HC05, HC06, ou HC08, ce qui fait un gain place et de temps par rapport aux autres shields où vous aurez besoin de raccorder votre module bluetooth par des câbles. Il dispose aussi d'un port pour un module à ultrasons et un port pour un accéléromètre gyroscope boussole. Mais nous n'en avons pas besoin ici. Autrement il existe aussi un tutoriel concernant ce module.

Voici un aperçu de l'utilisation du bras robot 6 axes: Défi Père/Fils sur le Bras robot 6 axes ou encore ici: Commande vocale avec les Bras robots 6 axes

Bras robot Arduino bluetooth

Robot bluetooth azduino

/*Projet: Bluetooth Robotic Arm
* Auteur: Christian Joseph
* Date: 17/02/2017
* www.eagle-robotics.com
*/

#include "Servo.h" 
#include  "SoftwareSerial.h"


SoftwareSerial BT(2, 3); // RX, TX
Servo sv1, sv2, sv3, sv4, sv5, sv6; // Servomoteurs
int a, b, c, d, e, f; //Variables de gestion des servomoteurs
int BluetoothData; // Variable de reception donné bluetooth

int arm_speed; //Vitesse du bras robot

void setup() {
BT.begin(9600);
Serial.begin(9600);

sv1.attach(4); //Base
sv2.attach(5); //Bras
sv3.attach(6); //Avant Bras
sv4.attach(7); //Poignet
sv5.attach(8); //Main
sv6.attach(9); //Pince
a = 90; //Variable Base
b = 90; //Variable Bras
c = 90; //Variable Avant
d = 90; //Variable Poignet
e = 90; //Variable Main
f = 90; //Variable Pince
Serial.println("Robotic Arm ANDROID Init...");
sv1.write(a);
sv2.write(b);
sv3.write(c);
sv4.write(d);
sv5.write(e);
sv6.write(f);

arm_speed = 60; // Modifiez cette valeur en fonction de la vitesse que vous souhaitez
delay(100);
}
void loop() {
if (BT.available()) { // Si donnée Bluetooth reçue...
BluetoothData = BT.read();
Serial.println(BluetoothData);

if (BluetoothData == 'A') { //Rotation Base vers la droite

while(BluetoothData != 'S'){ // Tant que on ne reçoit pas la lettre S, faire ceci:

BluetoothData = BT.read(); //Lire si nouvelle donnée Bluettooth arrivée
if (a > 0){
a = a - 1; //on décrémente la valeur de position du servomoteur
sv1.write(a);  // Puis on l'envoi dans le servomoteur

delay(arm_speed);  //vitesse
}

}
}
if (BluetoothData == 'B') { //Rotation Base vers la gauche

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (a < 180){
a = a + 1;
sv1.write(a);

delay(arm_speed);
}

}
}

if (BluetoothData == 'C') { // Rotation du bras vers le Bas

while(BluetoothData != 'S'){

BluetoothData = BT.read();
if (b < 160){
b = b + 1;
sv2.write(b);

delay(arm_speed);
}

}
}
if (BluetoothData == 'D') { //Rotation du bras vers le Haut

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (b > 20){
b = b - 1;
sv2.write(b);

delay(arm_speed);
}

}
}

if (BluetoothData == 'E') { //Rotation de l'avant bras vers le Bas

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (c < 180){
c = c + 1;
sv3.write(c);

delay(arm_speed);
}

}
}
if (BluetoothData == 'F') { //Rotation de l'avant bras vers le Haut

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (c > 0){
c = c - 1;
sv3.write(c);

delay(arm_speed);
}

}
}

if (BluetoothData == 'G') { //Rotation du poignet vers le Bas

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (d < 180){
d = d + 1;
sv4.write(d);

delay(arm_speed);
}

}
}
if (BluetoothData == 'H') { // Rotation du poignet vers le Haut

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (d > 0){
d = d - 1;
sv4.write(d);

delay(arm_speed);
}

}
}

if (BluetoothData == 'I') { //Rotation de la main vers la droite

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (e < 180){
e = e + 1;
sv5.write(e);

delay(arm_speed);
}

}
}
if (BluetoothData == 'J') { // Rotation de la main vers la gauche

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (e > 0){
e = e - 1;
sv5.write(e);

delay(arm_speed);
}

}
}

if (BluetoothData == 'K') { //Fermeture de la Pince

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (f < 140){
f = f + 1;
sv6.write(f);

delay(arm_speed);
}

}
}
if (BluetoothData == 'L') { // Ouverture de la Pince

while(BluetoothData != 'S'){

BluetoothData = BT.read();

if (f > 90){
f = f - 1;
sv6.write(f);

delay(arm_speed);
}

 }
}
}
delay(100);
}

B. Programme compatible Shields I2C

Bras robot arduino i2c

Shield i2c bras robot

#include  "Wire.h"
#include  "Adafruit_PWMServoDriver.h"
#include   "SoftwareSerial.h"
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver( 0x40 );
#define SERVOMIN 150 // La longueur d'impulsion 'minimale' (valeur du compteur, max 4096)
#define SERVOMAX 600 // La longueur d'impulsion 'maximale' (valeur du compteur, max 4096)

SoftwareSerial BT(2, 3);
uint8_t servo0 = 0;
uint8_t servo1 = 1;
uint8_t servo2 = 2;
uint8_t servo3 = 3;
uint8_t servo4 = 4;
uint8_t servo5 = 5;
int pulseLen;
int a, b, c, d, e, f;
int BluetoothData;
int speed_arm;


void setup() {
BT.begin(9600);
pwm.begin();
pwm.setPWMFreq(60);
pulseLen = map( 90, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo0, 0, pulseLen); //BASE
delay(200);
pwm.setPWM(servo1, 0, pulseLen); //BRAS
delay(200);
pwm.setPWM(servo2, 0, pulseLen); //AVANT BRAS
delay(200);
pwm.setPWM(servo3, 0, pulseLen); //MAIN
delay(200);
pwm.setPWM(servo4, 0, pulseLen); //POIGNET
delay(200);
pulseLen = map( 70, 0, 180, SERVOMIN, SERVOMAX );
delay(200);
pwm.setPWM(servo5, 0, pulseLen); //PINCE
delay(200);
a = 90; //Variable Base
b = 90; //Variable Bras
c = 90; //Variable Avant Bras
d = 90; //Variable Main
e = 90; //Variable Poignet
f = 70; //Variable Pince
speed_arm = 60;
}
void loop() {
if (BT.available()) {
BluetoothData = BT.read();
if (BluetoothData == 'A') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (a > 0){
a = a - 1;
pulseLen = map( a, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo0, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'B') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (a < 180){
a = a + 1;
pulseLen = map( a, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo0, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'C') { //UP
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (b < 130){
b = b + 1;
pulseLen = map( b, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo1, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'D') { //DOWN
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (b > 80){
b = b - 1;
pulseLen = map( b, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo1, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'F') { //UP
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (c < 90){
c = c + 1;
pulseLen = map( c, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo2, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'E') { //DOWN
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (c > 40){
c = c - 1;
pulseLen = map( c, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo2, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'G') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (d < 100){
d = d + 1;
pulseLen = map( d, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo3, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'H') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (d > 0){
d = d - 1;
pulseLen = map( d, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo3, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'I') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (e < 160){
e = e + 1;
pulseLen = map( e, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo4, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'J') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (e > 0){
e = e - 1;
pulseLen = map( e, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo4, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'K') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (f < 80){
f = f + 1;
pulseLen = map( f, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo5, 0, pulseLen);
delay(speed_arm);
}
}
}
if (BluetoothData == 'L') {
while(BluetoothData != 'S'){
BluetoothData = (BT.read());
if (f > 0){
f = f - 1;
pulseLen = map( f, 0, 180, SERVOMIN, SERVOMAX );
pwm.setPWM(servo5, 0, pulseLen);
delay(speed_arm);
}
}
}
}
delay(100);
}

Comme vous pouvez le constater, le programme est plus complexe que celui du Shield Eagle Robotics, et de plus il faut ajouter des fils en plus pour connecterle bluetooth, et concernant le shield numéro 3, il faut aussi ajouter des fils pour le connecter en I2C à votre carte Arduino. Bref vous l'aurez compris, le Shield Eagle Robotics vous permettra une mise en oeuvre facile et rapide pour commander votre bras robot voire 2 bras robots en même tempsi:

Bras robot arduino bluetooth-duo

Et si vous avez envie de customiser votre bras robot:

Bras robot Arduino custom

A suivre dans un futur tutoriel...

ET MAINTENANT LE SHIELD JOYSTICK 2.0:

Le Shield Joystick 3.0 a été développé à la demande de parents qui souhaitaient offrir le bras robot 6 axes à leur chers petits anges, mais qui ne souhaitent pas forcément leur acheter un smartphone, ou encore moins prêter le leur. Il est vrai qu'il existe une multitude shield Joystick, mais chez Eagle Robotics nous aimons le Fun (ou pourquoi faire simple quand on peut se compliquer la vie!).

C'est la raison pour laquelle en plus de disposer de 2 Joysticks et 4 boutons poussoirs (comme la plupart des shields joystick du commerce!), nous avons ajouté également un connecteur pour module Bluetooth HC05 ou HC06 (C'est la Base quand même), un port pour module accéléromètre MPU6050 ou MPU6500 par exemple, et un connecteur pour écran OLED 0.96 pouces et pour écran OLED 1.3 Pouces. A tout ceci naturellement s'ajoutent le connecteur d'alimentation externe, et le fameux bouton Reset. Le Shield est inclus dans le kit Bras robot 6 axes Joystick arduino, et offre l'avantage au robot de pouvoir être piloté soit par notre smartphone, soit par le shield Joystick. Le shield Joystick V3.0 est aussi utilisé dans ce tutoriel pour programmer votre bras robot sans ordinateur et vous épargner ainsi de longues heures de programmation pour faire effectuer des tâches à votre Bras robot 6 axes.

Shield Joystick V3 Arduino

Shield Joystick V3 Rotation moteur
/*
Programme: Joystick 3.0 X Bras Robot 6 axes
Auteur: Christian Joseph
Date: 12/01/2021
www.eagle-robotics.com
*/
#include "SPI.h" #include "Wire.h" #include "Adafruit_GFX.h" #include "Adafruit_SSD1306.h" #include "SoftwareSerial.h" #define SCREEN_WIDTH 128 // largeur de l'écran en pixels #define SCREEN_HEIGHT 64 // Hauteur de l'écran en pixels #define OLED_RESET -1 Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); SoftwareSerial BT(8,9); int bt1 = 4; int bt2 = 5; int bt3 = 6; int bt4 = 7; int VRx = A0; int VRy = A1; int SW = 3; int xPos = 0; int yPos = 0; int SW_state=0; int x1 = 0; int y1 = 0; int VRx2 = A2; int VRy2 = A3; int SW2 = 2; int xPos2 = 0; int yPos2 = 0; int SW_state2=0; int x2 = 0; int y2 = 0; int val1, val2, val3, val4; char a; void setup() { Serial.begin(115200); BT.begin(9600); pinMode (bt1, INPUT_PULLUP); pinMode (bt2, INPUT_PULLUP); pinMode (bt3, INPUT_PULLUP); pinMode (bt4, INPUT_PULLUP); pinMode(VRx, INPUT); pinMode(VRy, INPUT); pinMode(SW, INPUT_PULLUP); pinMode(VRx2, INPUT); pinMode(VRy2, INPUT); pinMode(SW2, INPUT_PULLUP); if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("initialisation ecran ko")); for(;;); } display.display(); delay(2000); display.clearDisplay(); delay(2000); display.setTextSize(2); display.setTextColor(SSD1306_WHITE); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); display.clearDisplay(); } void loop() { buttons(); //delay(1000); if (x1 > 400 && y1 > 130 && y1 < 380){ BT.write('D'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Epaule")); display.setCursor(0,40); display.println(F("En Avant")); display.display(); while (x1 > 400 && y1 > 130 && y1 < 380){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x1 < 100 && y1 > 130 && y1 < 380){ BT.write('C'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Epaule")); display.setCursor(0,40); display.println(F("En Arriere")); display.display(); while (x1 < 100 && y1 > 130 && y1 < 380){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x1 > 130 && x1 < 380 && y1 > 400){ BT.write('A'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Base")); display.setCursor(0,40); display.println(F("A Droite")); display.display(); while (x1 > 130 && x1 < 380 && y1 > 400){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x1 > 130 && x1 < 380 && y1 < 100){ BT.write('B'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Base")); display.setCursor(0,40); display.println(F("A Gauche")); display.display(); while (x1 > 130 && x1 < 380 && y1 < 100){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x2 > 400 && y2 > 130 && y2 < 380){ BT.write('E'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Coude")); display.setCursor(0,40); display.println(F("En Avant")); display.display(); while (x2 > 400 && y2 > 130 && y2 < 380){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x2 < 100 && y2 > 130 && y2 < 380){ BT.write('F'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Coude")); display.setCursor(0,40); display.println(F("En Arriere")); display.display(); while (x2 < 100 && y2 > 130 && y2 < 380){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x2 > 130 && x2 < 380 && y2 > 400){ BT.write('G'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Main")); display.setCursor(0,40); display.println(F("En Avant")); display.display(); while (x2 > 130 && x2 < 380 && y2 > 400){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (x2 > 130 && x2 < 380 && y2 < 100){ //Serial.println("gauche 2"); BT.write('H'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Main")); display.setCursor(0,40); display.println(F("En Arriere")); display.display(); while (x2 > 130 && x2 < 380 && y2 < 100){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (val1 == 0 && val2 == 1 && val3 == 1 && val4 == 1){ BT.write('I'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Poignet")); display.setCursor(0,40); display.println(F("A Droite")); display.display(); while (val1 == 0 && val2 == 1 && val3 == 1 && val4 == 1){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (val1 == 1 && val2 == 0 && val3 == 1 && val4 == 1){ BT.write('J'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Rotation")); display.setCursor(0,20); display.println(F("Poignet")); display.setCursor(0,40); display.println(F("A Gauche")); display.display(); while (val1 == 1 && val2 == 0 && val3 == 1 && val4 == 1){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (val1 == 1 && val2 == 1 && val3 == 0 && val4 == 1){ BT.write('K'); while (val1 == 1 && val2 == 1 && val3 == 0 && val4 == 1){ buttons(); display.clearDisplay(); display.setCursor(0,0); display.println(F("Fermeture")); display.setCursor(0,20); display.println(F("De la")); display.setCursor(0,40); display.println(F("Pince")); display.display(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } else if (val1 == 1 && val2 == 1 && val3 == 1 && val4 == 0){ BT.write('L'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Ouverture")); display.setCursor(0,20); display.println(F("De la")); display.setCursor(0,40); display.println(F("Pince")); display.display(); while (val1 == 1 && val2 == 1 && val3 == 1 && val4 == 0){ buttons(); } BT.write('S'); display.clearDisplay(); display.setCursor(0,0); display.println(F("Bras Stop")); display.display(); } } void buttons(){ val1 = digitalRead(bt1); val2 = digitalRead(bt2); val3 = digitalRead(bt3); val4 = digitalRe