Sujet : Robot Bipède 8 Servos

Bonjour à tous,

Je débute dans le monde merveilleux de la robotique, et j'aimerais réaliser un projet de Robot bipède à 8 Servo prit sur le modèle du EASY ROBOTICS.

Je vous donne le message que j'avais posté sur le forum français d'arduino ou Julien (je pense que c'est toi Luj06 ?) m'avais répondu et aiguillé içi pour m'aider:

2

Re : Robot Bipède 8 Servos

Mince s'a n'a pas affiché ce que j'avais copié!

Pour faire court, j'ai besoin d'aide dans la programation du code puisque j'ai 8 servomoteurs et une carte Arduino Duemilanove et que malgrès mais longue heure de recherche je n'arrive pas à contrôler un servo moteur!

Merci d'avance!

3

Re : Robot Bipède 8 Servos

Qu'appelles-tu "contrôler un servomoteur" ? Car j'ai compris sur le forum Arduino que tu arrivais à reproduire nos exemples : http://www.pobot.org/Debuter-avec-une-c … duino.html

Donc quel est précisément le problème ?

4

Re : Robot Bipède 8 Servos

En faite j'aimerais dans un premier temps que vous m'aidiez à la programmation d'un servo moteur, en gros le faire ce déplacer à un certain degrée, puis faire un enchainement pour aller à un autre degrée et qu'il s'arrète.

Car j'ai pas saisi encore les fonction pour piloter un servo-moteur et aussi pour faire un enchainement d'action et enfin stopper le tout???

5

Re : Robot Bipède 8 Servos

Tu peux commencer par décrire les étapes du programme (sans langage) et on t'aidera à le transformer en programme.

6

Re : Robot Bipède 8 Servos

Voici ce que j'aimerais faire pour commencer:

1 - Alors j'aimerais premièrement que le servomoteur soit initialement au degré 0 (à l'un des deux extrémité), car pendant mes essais précédents, il ne se mettait jamais vraiment à 0.

2 - Déplacement jusqu'à 90 degrés, il se stabilise pendant 3 secondes.

3 - déplacement à 180 degrés, stabilise pendant 3 secondes.

4 - retour à 90 degrés, stabilise 3 secondes.

5 - puis enfin retour à 0 degré.

Merci d'avance.

7

Re : Robot Bipède 8 Servos

Servo servo;

void setup()
{
   servo.attach(9);
}

void loop()
{
   servo.write(0);
   delay(3000);
   servo.write(90);
   delay(3000);
   servo.write(180);   
   delay(3000);
   servo.write(90);
   delay(3000);
}

De rien !

8

Re : Robot Bipède 8 Servos

Nikel ton programme, sa ma aider à comprendre mieux la fonction servo.write().

Parcontre je n'arrive pas à trouver comment exécuter les même étapes sans faire de boucle et donc stopper en fin de cycle (au moment ou le servomoteur est revenu à 0 degré???

9

Re : Robot Bipède 8 Servos

- Soit avec une boucle à l'intérieur de la boucle
- Soit en mettant tout ce code dans la fonction setup et rien dans la boucle

10

Re : Robot Bipède 8 Servos

J'ai essayé ta deuxième proposition qui me semblait plus simple et lors de la compilation sa me mais une erreur. ?????

Voici ce que j'ai mis:

#include <Servo.h>

Servo servo;


void setup()
{
  servo.attach(9);
  servo.write(0);
  delay(3000);
  servo.write(90);
  delay(3000);
  servo.write(180);
  delay(3000);
  servo.write(90);
  delay(3000);
}

11

Re : Robot Bipède 8 Servos

Oui mais il faut préciser quelle erreur. Bon, je vais utiliser mes dons d'extralucide : tu as supprimé la fonction void loop() {} puisqu'elle était vide, mais Arduino en a besoin, donc rajoute-là.

Si ça ne marche pas, copie ici le message d'erreur.

12

Re : Robot Bipède 8 Servos

IMPECABLE!!!!! merci beaucoup!!!

Sa me retire un gros poids, car franchement je chercher comment arrêter en fin de séquence et la sa marche nikel en remettant le "void loop () {}".

Sinon c'était quoi cette histoire d'arrêter en faisant une boucle à l'intérieur d'une autre boucle???

13

Re : Robot Bipède 8 Servos

while (1) {  }

14

Re : Robot Bipède 8 Servos

Merci Julien!!!

Je vais essayer avec cette manière aussi.

Maintenant que j'ai emmagasiné plein d'info sur la programmation Arduino grâce à toi, je vais pouvoir tester plein de truc en attendant de recevoir mes 8 servos moteur avec brique EASY, dans environ deux semaines.

Et après on passe au chose sérieuse, la programmation des 8 servos pour reproduire la marche humaine ( enfin presque...).

J'ai hâte de les recevoir ces servos!

Bonne soirée!

15

Re : Robot Bipède 8 Servos

Salut,

Pour l'alimentation de mes 8 servomoteurs, à partir de la carte Arduino, j'avais pensé à une plaque d'essais, mais j'ai peur que sa prenne de la place sur le robot, voyez vous un autre moyen ou la plaque d'essais est une bonne solution???

16

Re : Robot Bipède 8 Servos

Il y a une meilleure solution : une carte qui se branche sur l'Arduino et qui comporte tous les connecteurs pour servo dont tu as besoin : regarde la construction du bipède, j'ai utilisé cette carte (vendue par Easyrobotics).

http://www.pobot.org/Robot-bipede.html

http://www.pobot.org/IMG/jpg/bipede.jpg

Il y a même un bornier à vis pour alimenter les servos avec une batterie externe (mais perso j'utilise un backpack Lithium Ion pour Arduino, c'est beaucoup plus pratique).

17

Re : Robot Bipède 8 Servos

Elle coute chère cette carte, tu n'aurais pas l'équivalent ou autre chose de moins chère???

18

Re : Robot Bipède 8 Servos

Chère ? Quel est son prix ?

19

Re : Robot Bipède 8 Servos

Sinon tu as ça mais c'est aussi cher et pas dispo en France : http://www.curiousinventor.com/kits/roboduino

http://www.curiousinventor.com/images/kits/roboduino/roboduino_biped.jpg

20

Re : Robot Bipède 8 Servos

Elle coute 119 euros, mais je suis pas sur que ce soit celle que tu parle, mais j'ai pas trouver autre carte sur easy robotics.

Si ta le lien de ta carte, peut tu me le passer, STP???

21

Re : Robot Bipède 8 Servos

Ah oui effectivement, je parlais d'une simple carte d'interface à 15 ou 20 euros. Contacte Easyrobotics, je ne trouve pas le lien vers la carte smile

22

Re : Robot Bipède 8 Servos

Sinon, tu as cette carte : http://www.yerobot.com/shop/arduino/ard … hield.html

http://www.yerobot.com/media/catalog/product/cache/1/image/5e06319eda06f020e43594a9c230972d/f/i/file_3.jpg

23

Re : Robot Bipède 8 Servos

Désoler de ne pas avoir répondu depuis, mais j'ai dut attendre de recevoir la commande de servomoteurs que j'avais passé à mon université et j'ai suivi ton conseil, j'ai acheté un carte d'extension à Nicolas de Easy robotics, pour alimenté les servomoteur et elle ressemble à la carte dont tu as posté précédemment la photo.


Maintenant que j'ai construit mon bipède, je me suit relancé dans la programmation sous arduino et je suis entrain de tester chaque mouvement des différentes parties du corps de mon robot avec en interface processing pour contrôler servo par servo.
Et mon souci, c'est que en suivant ce modèle de programmation avec positionnement par largeur d'impulsion, au moment de l'initialisation le servo ce met à sa position 0°, mais moi j'aimerais qu'il s'initialise au départ à une autre position, pourrais-tu m'aider???

Merci d'avance!



PS: voici le programme sous arduino:

// --- Inclusion des librairies utilisées ---

#include <Servo.h> // librairie pour servomoteur

// --- Déclaration des constantes ---

// --- constantes des broches ---

const int SERVO=2; //declaration constante de broche 


// --- Déclaration des variables globales ---

int ReceptionOctet=0; // variable de stockage des octets reçus par port série
int ReceptionNombre=0; // variable de calcul du nombre reçu par port série
int impulsion=1500; // variable pour impulsion - valeur médiane initiale

// --- Initialisation des fonctionnalités utilisées ---

Servo mon_servo;  // crée un objet servo pour contrôler le servomoteur

//**************** FONCTION SETUP = Code d'initialisation *****
// La fonction setup() est exécutée en premier et 1 seule fois, au démarrage du programme

void setup()   { // debut de la fonction setup()

// --- ici instructions à exécuter au démarrage --- 

mon_servo.attach(SERVO);  // attache l'objet servo à la broche de commande du servomoteur

Serial.begin(115200); // initialise connexion série à 115200 bauds
// IMPORTANT : régler le terminal côté PC avec la même valeur de transmission 

pinMode(SERVO, OUTPUT); //met la broche en sortie 



} // fin de la fonction setup()
// ********************************************************************************

//*************** FONCTION LOOP = Boucle sans fin = coeur du programme *************
// la fonction loop() s'exécute sans fin en boucle aussi longtemps que l'Arduino est sous tension

void loop(){ // debut de la fonction loop()

// --- ici instructions à exécuter par le programme principal --- 


//--- lecture d'un nombre reçu par le Terminal et positionnement du servomoteur --- 
if (Serial.available()>0) { // si caractère dans la file d'attente

  //---- lecture du nombre reçu 
  while (Serial.available()>0) { // tant que buffer pas vide pour lire d'une traite tous les caractères reçus

    ReceptionOctet= Serial.read(); // renvoie le 1er octet présent dans la file attente série (-1 si aucun) 
    ReceptionOctet=ReceptionOctet-48; // transfo valeur ASCII en valeur décimale

    if ((ReceptionOctet>=0)&&(ReceptionOctet<=9))     ReceptionNombre = (ReceptionNombre*10)+ReceptionOctet; 
    // si valeur reçue correspond à un chiffre on calcule nombre

    delay(1); // pause pour laisser le temps au Serial.available de recevoir les caractères

  } // fin while

   Serial.print (
...

24

Re : Robot Bipède 8 Servos

C'est bon j'ai trouvé pour le post précédent!

Mon programme pour faire avancer mon robot bipède est le suivant, mais j'aimerais pouvoir contrôler la vitesse des servomoteurs, pouvez-vous me l'expliquer et me le rajouter à mon programme comme exemple???

MERCI!

Voici mon programme:

//Robot avance droit et revient en position initiale

#include <Servo.h>

Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;

void setup()
{
  
  servo1.attach(3);
  servo2.attach(9);
  servo3.attach(12);
  servo4.attach(6);
 
 //mettre le robot en position initiale
  servo3.writeMicroseconds(1555);
  servo4.writeMicroseconds(1575);
  servo1.writeMicroseconds(1595);
  servo2.writeMicroseconds(1595);
  delay(2000);
  
 //bascule sur le pied gauche 
  servo1.writeMicroseconds(1200);
  servo2.writeMicroseconds(1400);
  delay(1000);
 
 //avance du pied droit 
  servo3.writeMicroseconds(1765);
  servo4.writeMicroseconds(1810);
  delay(1000);
 
 
 //pied droit avancé et posé 
  servo1.writeMicroseconds(1595);
  servo2.writeMicroseconds(1595);
  delay(1000);
 
 //bascule sur pied droit 
  servo1.writeMicroseconds(1750);
  servo2.writeMicroseconds(1750);
  delay(1000);
 
 //avance du pied gauche 
  servo3.writeMicroseconds(1295);
  servo4.writeMicroseconds(1295);
  delay(1000);
 
 //pied gauche avancé et posé 
  servo1.writeMicroseconds(1595);
  servo2.writeMicroseconds(1595);
  delay(1000);
 
 //bascule sur le pied gauche 
  servo1.writeMicroseconds(1200);
  servo2.writeMicroseconds(1400);
  delay(1000);
 
 //avance du pied gauche pour se remettre en position initiale 
  servo3.writeMicroseconds(1555);
  servo4.writeMicroseconds(1575);
  delay(1000);
 
 //pied gauche avancé et posé, le robot est revenu en position initiale 
  servo1.writeMicroseconds(1595);
  servo2.writeMicroseconds(1595);
  delay(1000);
  
  
  
}


void loop() {}