Outils pour utilisateurs

Outils du site


wiki:ateliers:arduino:1

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
wiki:ateliers:arduino:1 [2018/02/21 14:29]
antoinem créée
wiki:ateliers:arduino:1 [2018/02/21 15:35] (Version actuelle)
antoinem
Ligne 1: Ligne 1:
-Atelier 1+====== Bras robotisé ====== 
 + 
 +===== Objectif de l'atelier ===== 
 + 
 +Piloter deux servomoteurs avec Arduino afin de faire se déplacer l'organe terminal du bras dans un plan. 
 + 
 +===== Matériel ====== 
 + 
 +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. 
 + 
 +===== Le montage ===== 
 + 
 +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. 
 + 
 +===== Code ===== 
 + 
 +Voici un code pour tester votre montage :  
 + 
 +<code=cpp> 
 +/* 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=""; 
 +  }  
 +
 +</code> 
wiki/ateliers/arduino/1.1519223382.txt.gz · Dernière modification: 2018/02/21 14:29 de antoinem