Aujourd’hui, nous allons contrôler un bras robotique grâce à une carte Arduino et à une manette.
Aujourd’hui, nous allons contrôler un bras robotique grâce à une carte Arduino et à une manette.
Matériel pour la réalisation :
Pour construire le robot, aidez-vous du guide de montage. Nous vous conseillons d’utiliser des écrous indesserrables.
Pour monter la manette, veuillez vous référer au mode d’emploi.
Insérez le Shield Gravity sur la carte Arduino Uno.
Étape 1, reliez le VCC Analogique et le VCC Digital entre eux avec le Jumper F/F. Ce raccordement est indispensable pour que tout le Shield soit correctement alimenté !
Le servomoteur est un moteur permettant de tourner sur une course limitée (180°).
Il se pilote par des largeurs d’impulsions. Avec Arduino, on peut contrôler ces largeurs d’impulsions grâce à l’instruction writeMicroseconds.
La plage 0° – 180° se traduit alors par 1000µs – 2000µs.
Nous allons éditer un programme permettant de contrôler les différent moteurs du robot grâce à la manette :
#include <Servo.h> Servo base; Servo epaule; Servo coude; Servo poignet; Servo rotapince; Servo ouvepince; int J1, J2, J3, J4; int BP1, BP2; int pulse1, pulse2, pulse3, pulse4, pulse5, pulse6; int pas1, pas2, pas3, pas4; void setup() { base.attach(6); //sortie numérique 6 epaule.attach(3); //sortie numérique 3 coude.attach(9); //sortie numérique 9 poignet.attach(5); //sortie numérique 5 rotapince.attach(11); //sortie numérique 11 ouvepince.attach(10); //sortie numérique 10 pinMode(4, INPUT_PULLUP); //sortie numérique 4 pinMode(2, INPUT_PULLUP); //sortie numérique 2 //utilise le VCC et la résistance de pullup de l’Arduino >> évite de rajouter un VCC et une résistance dans le montage J1 = J2 = J3 = J4 = 0; BP1 = BP2 = 1; //initialisation des moteurs en position de départ pulse1 = pulse2 = pulse3 = pulse4 = pulse5 = 1500; //90° pulse6 = 2000; //180° } void loop() { J1 = analogRead(A2); J3 = analogRead(A0); //Joystick gauche mouvement horizontal et vertical J2 = analogRead(A3); J4 = analogRead(A1); //Joystick droit mouvement vertical et horizontal BP1 = digitalRead(4); BP2 = digitalRead(2); //Bouton poussoir gauche et droit base.writeMicroseconds(pulse1); epaule.writeMicroseconds(pulse2); coude.writeMicroseconds(pulse3); poignet.writeMicroseconds(pulse4); rotapince.writeMicroseconds(pulse5); ouvepince.writeMicroseconds(pulse6); //lecture J1 if (J1 > 1000) { pulse6 -= 10; //action sur la fermeture de la pince if (pulse6 < 1650) { pulse6 = 1650; /*[2]*/ } } else { //action sur la base pas1 = map(J1, 200, 800, -10, 10); //[0] if (pas1 < 5 && pas1 > -5) {} //[1] else { pulse1 += pas1; if (pulse1 > 2200) { pulse1 = 2200; //[2] } if (pulse1 < 800) { pulse1 = 800; //[3] } } } //lecture J2 et action sur le coude pas3 = map(J2, 100, 900, -10, 10); if (pas3 < 5 && pas3 > -5) {} //[1] else { pulse3 += pas3; if (pulse3 > 2100) { pulse3 = 2100; //[2] } if (pulse3 < 900) { pulse3 = 900; //[3] } } //lecture J3 et action sur l’épaule if (J3 > 1000) { pulse6 += 10; //action sur la l’ouverture de la pince if (pulse6 > 2400) { pulse6 = 2400; /*[3]*/ } } else { pas2 = map(J3, 200, 800, -10, 10); if (pas2 < 5 && pas2 > -5) {} //[1] else { pulse2 -= pas2; if (pulse2 > 2200) { pulse2 = 2200; //[2] } if (pulse2 < 1000) { pulse2 = 1000; //[3] } } } //lecture J4 et action sur le poignet pas4 = map(J4, 100, 900, -10, 10); if (pas4 < 5 && pas4 > -5) {} //[1] else { pulse4 -= pas4; if (pulse4 > 2100) { pulse4 = 2100; //[2] } if (pulse4 < 900) { pulse4 = 900; //[3] } } //lecture BP1 et BP2, et action sur la rotation de la pince if (BP1 == LOW) { pulse5 -= 10; if (pulse5 < 600) { pulse5 = 600; /*[2]*/ } } if (BP2 == LOW) { pulse5 += 10; if (pulse5 > 2100) { pulse5 = 2100; /*[3]*/ } } delay(15); } /* [0] Un joystick peut varier de 0 à 1023. Suivant la plage qui nous intéresse l’instruction “map()” va permettre de faire une mise à l’échelle [1] offset [2] borne minimale : début de course [3] borne maximale : fin de course */
Une fois le programme téléversé, retirez le câble USB de l’Arduino.
Câblez le bloc d’alimentation 5 V au Shield Gravity et branchez la prise au secteur.
Tout est prêt !
Date de dernière modification 10 novembre 2020 16 h 14 min