Piloter deux servomoteurs avec Arduino afin de faire se déplacer l'organe terminal du bras dans un plan.
1*Arduino (UNO/Leonardo/Mega)
2*Servomoteurs (type FS5115M) avec une course de 180°
L'important si vous utilisez vos propres servos est d'avoir un couple suffisant pour manœuvrer votre bras et de l'alimenter correctement.
1*Breadboard
La structure du bras que j'utilise en CP peuplier 3mm:
Vous pouvez refaire le votre à condition de ne pas dépasser le couple max de vos servos.
Nous ne pouvons pas alimenter les servomoteurs en les branchant à la sortie 5V de l'arduino car ils utilisent trop de courant. Nous les alimentons donc avec une source d'alimentation indépendante, comme une alimentation d'atelier. N'oubliez pas de relier les masses entre elles: borne négative de l'alimentation reliée à une des pins GND de l'Arduino.
Voici un code pour tester votre montage :
/* Code inspiré de celui proposé par le blog ElectroniqueEnAmateur */ #include <Servo.h> //Attention : ne pas oublier d'inclure cette bibliothèque qui permet de controler les servomoteurs Servo myservo1, myservo2;//On créer nos objets servomoteurs String readString, servo1Str, servo2Str; int posCible1, posCible2; //PosCiblei sera la position ciblée par le servomoteur (de 0° à 180°) void setup() { Serial.begin(9600); myservo1.attach(9); //On attache nos Servos (fil jaune) aux PINs concernées (ici 9 et 10) myservo2.attach(10); Serial.println("Veuillez entrer un nombre de 6 chiffres."); Serial.println("Chaque groupe de 3 chiffres represente un nombre entre 0 et 180 degres, ce sera la position prises par nos servos."); } void loop() { boolean fini = false ;//variable servant à savoir si nos servos ont fini le mouvement demandé int pos1, pos2; while (Serial.available()) //Boucle pour récupérer nos entrées claviers { delay(1); if (Serial.available() >0) { char c = Serial.read(); readString += c; } } if (readString.length() == 6) { servo1Str = readString.substring(0, 3); servo2Str = readString.substring(3, 6); Serial.println("Position demandee pour chaque servo"); Serial.print("Servo 1: "); Serial.print(servo1Str); Serial.print(" , Servo 2: "); Serial.print(servo2Str); char carray1[5]; servo1Str.toCharArray(carray1, sizeof(carray1));//on copie servo1Str dans un buffer posCible1 = atoi(carray1); //On convertit se buffer en int avec la fonction atoi() char carray2[5]; servo2Str.toCharArray(carray2, sizeof(carray2)); posCible2 = atoi(carray2); while (!fini) { pos1 = myservo1.read();//read() nous permet de connaitre la position actuelle du servo pos2 = myservo2.read(); if (pos1 < posCible1){ myservo1.write(pos1 + 1);//write() définit la position à prendre par le servo, on incrémente de 1 pour pouvoir controler la vitesse } if (pos1 > posCible1){ myservo1.write(pos1 - 1); } if (pos2 < posCible2){ myservo2.write(pos2 + 1); } if (pos2 > posCible2){ myservo2.write(pos2 - 1); } fini = ((pos1 == posCible1) && (pos2 == posCible2)); delay(15); // pour limiter la vitesse } Serial.println("Position finale des servos:"); Serial.print("Servo 1: "); Serial.print(myservo1.read()); Serial.print(" , Servo 2 : "); Serial.print(myservo2.read()); readString=""; } }