Bonjour à tous je suis étudiant en SIN et j'aurais besoin d'un coup de main pour le programme de mon projet de terminale.
Mon projet est un bras robotisé avec 6 servomoteurs, et il est censé être piloté avec une carte Arduino Uno, avec un shield joystick (Sparkfun) et tout ça à distance grâce à des modules XBee. Pour le moment le programme pour piloter le bras est assez rudimentaire, il permet juste de contrôler deux servomoteurs à la fois, chacun avec un des axes du joystick.
Voilà à quoi il ressemble :
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <Servo.h> const int posMin=550; // largeur impulsion en μs correspondant à la position 0° du servomoteur const int posMax=2350; // largeur impulsion en μs correspondant à la position 0° du servomoteur const int brocheServo1=8; const int brocheServo2=9; // broche du servomoteur const int brocheRVar1=A0; const int brocheRVar2=A1; // broche de la résistance variable const int BP1=2; const int BP2=3; int positionServo1=0; int positionServo2=0; // variable de positionnement du servomoteur int mesureRVar1=0; int mesureRVar2=0; // variable pour la mesure de la résistance variable Servo servo1; Servo servo2; // déclaration d'un objet servomoteur void setup() { Serial.begin(9600); servo1.write(90); servo2.write(90); servo1.attach(brocheServo1, posMin, posMax); servo2.attach(brocheServo2, posMin, posMax);//attache le servomoteur à la broche } void loop() { mesureRVar1=analogRead(brocheRVar1); mesureRVar2=analogRead(brocheRVar2);// mesure la tension sur la broche analogique positionServo1=map(mesureRVar1, 0,1023, 0, 180); positionServo2=map(mesureRVar2, 0,1023, 0, 180);// convertit la valeur en degrés Serial.println(positionServo1); Serial.println(positionServo2); servo1.write(positionServo1); servo2.write(positionServo2);// positionne le servomoteur dans l'angle voulu }
Mais le programme est loin d'être opérationnel (il pilote 2 servomoteurs sur 6) et je suis bloqué pour la suite je m'explique :
Je voudrais créer un système de "profil", le joystick ayant 2 axes uniquement, je voudrais pouvoir utiliser deux boutons poussoirs pour changer les 2 servomoteurs pilotables par le joystick. Exemple : je pilote les servomoteurs 1 et 2, j'appuie sur le bouton, je pilote maintenant les servomoteurs 3 et 4, j'appuie encore une fois, je pilote 5 et 6. Je bloque vraiment pour ces lignes car je sais vraiment pas quelle fonction utiliser.
Deuxième chose qui cloche, les servomoteurs reviennent à leur position initiale lorsque le joystick est lâché, ce qui rend le pilotage du bras assez fastidieux, et ça le sera d'autant plus quand les 6 servomoteurs seront pilotés. Je sais pas trop quoi modifier dans le programme pour y remédier.
Et dernière chose, qui n'est pas question de programme, je fais face à un soucis pour ma communication sans fil avec XBee : je peux pas brancher le shield XBee par dessus le shield Joystick (le joystick bloque le shield) et je peux pas le déporter sur une bread board à côté. J'ai vu sur un site un shield joystick avec un slot pour module XBee intégré mais je l'ai uniquement vu sur un site étranger et on manque de temps pour le commander. Vous auriez une solution ?
Si je me suis mal exprimer quelque part (ce qui est sûrement le cas) faite le moi savoir et je corrigerais. Merci d'avance pour vos réponses !
Partager