Pages: [1]   Go Down
Author Topic: Robot bipède  (Read 1852 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

j'ai grandement besoin de votre aide, car étant débutant dans la programmation, je n'arrive pas à contrôler un servomoteur avec la programmation arduino ( malgré de longue et longue heures d'essais et de recherche sur le net).

Mon but est de pouvoir contrôler un robot bipède, composé de 8 servomoteurs et d'une carte arduino Duemilanove.

Le robot bipède que je veut réaliser est le modèle avec 8 servomoteurs de EASY ROBOTICS.

Je sais que c'est un gros projet pour débuter, mais je suis quelqu'un de très motivé et qui est près à prendre en considération toute l'aide que vous pourrai m'apporter et dans un premier temps dans la programmation d'un servomoteur!

Merci d'avance.
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour Wotan,

Très bon projet, et le robot d'Easyrobotics est très bien, j'en sais quelque chose smiley

Le club a fait le même projet donc je peux t'aider à démarrer. Tout notre code source est disponible dans les différents articles dédiés à notre bipède: http://www.pobot.org/-Humanoides-.html

« Last Edit: February 14, 2010, 07:53:45 am by julien@pobot.org » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci (Julien, c'est bien ça). C'est vrai qu'il est terrible votre robot, et j'ai débuté dans arduino grâce à votre tuto, j'ai pu tester avec un servomoteur votre code et sa à fonctionner. (j'étais trop heureux  ;D).

Mais j'ai essayé grâce à ce code, de comprendre qu'elle code fais qu'elle action et j'ai compris à 95%, à part "servo1.write(angle)" et par rapport à l'endroit ou est placé le "delay(10)", à qu'elle moment de l'action il intervient?

Et j'aimerais pourvoir pour continuer dans ma recherche, arrivé à faire un mouvement de 100 degré et qu'il s'arrête à 100 degré?

Merci d'avance!  smiley
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Je n'ai pas compris ta question. L'angle donné est un angle absolu, pas relatif, donc si tu fais "servo.write(100)", le moteur tourne jusqu'à atteindre la position 100. Puis si tu fais "servo.write(90)", il tourne de 10° (si le servo est standard ou que tu l'as bien paramétré avec les options disponibles) jusqu'à atteindre la position 90.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

autant pour moi, je parler en faite d'un autre code d'un autre tutoriaux, qui est le suivant:

#include <Servo.h>

#define INCR 1

Servo servo1;

int angle = 0;

int sens = 0;


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


void loop()
{
  if (sens == 0)
  {
    angle += INCR;
  }
  else {
    angle -= INCR;
  }
  
  
  if (angle == 0)
  {
    sens = 0;
  }
  
  if (angle == 180)
  {
    sens = 1;
  }
  delay(10);
  servo1.write(angle);
}




Et c'est dans celui là que je ne comprend pas la fonction de "servo1.write(angle)" et le temps "delay(10)" intervient pour qu'elle action?

Et un autre question qui peut m'aider à avancé, comment en code, je peut faire venir le servomoteur à 0 degré, pour qu'il puisse partir du début et ensuite allé à un angle que j'aurais donné?

Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Au tout début, angle est créé et a une valeur de 0 donc 0 degrées.
Code:
int angle = 0;
Dans la boucle (tout le code entre loop() { ... }) on augment ou diminue la valeur de la variable 'angle' selon la valeur de la variable 'sens'. Si sens = 0, on augment de 1, sinon on diminue de 1 l'angle.
Code:
if (sens == 0)
 {
   angle += INCR;
 }
 else {
   angle -= INCR;
 }
Quand on atteint 180 degrées ou 0 degrées, on inverse la variable sens pour changer le sens du servo
Code:
if (angle == 0)
 {
   sens = 0;
 }
 
 if (angle == 180)
 {
   sens = 1;
 }
ce code sert à dire au servo de bouger jusqu'à la valeur de la variable angle.
Code:
servo1.write(angle)
Le delay(10) sert a attendre 10 millisecondes avant d'effecter la prochaine action. Ensuite, le code dans loop() est exécuté à nouveau. J'espère que j'ai pu clarifier certains trucs smiley-wink
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci Khao, sa m'éclaircir un peu plus!  smiley-wink

Parcontre j'aimerais 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???
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

C'est bon j'ai trouver comment faire pour contrôler un servomoteur à différent degré et qu'il s'arrête au moment voulu.

Par contre j'ai une question 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???

Merci d'avance.  smiley
Logged

France - Morbihan
Offline Offline
Newbie
*
Karma: 0
Posts: 42
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut,

pour la commande d'un servomoteur, j'ai fait une page qui montre comment commander un servo en envoyant directement la valeur de l'impulsion (en µs) à partir de la fenêtre du moniteur série : çà devrait t'aider à tester ton servomoteur. Moi je trouve çà très pratique pour bien contrôler "à froid" le fonctionnement du servomoteur.

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertSerieDepuisPCPositionServomoteur

Pour une commande du servomoteur à partir d'un angle en degré, voir ici :
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertCanPositionServomoteur

Attention, il peut y avoir des variantes pour les impulsions des positions extrêmes selon les servomoteurs. Le premier lien que je te donne te permettra d'en avoir le coeur net en testant ton servomoteur aux positions extrêmes.

Conseil d'ami : commence par bien maîtriser la commande d'un ou 2 servomoteurs avant d'en gérer 8...  "Il y a le chemin court mais long... et le chemin long mais court"... smiley

A+


Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci sensor56, je vais suivre tes conseil, et en plus grace à toi je sais aussi maintenant piloter un servo de mon clavier d'ordi!!!

 smiley-wink
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 revien 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() {}
Logged

Geneva
Offline Offline
Faraday Member
**
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Avec la librairies Servo.h tu n'as pas 36 solutions... elle ne gère pas la vitesse des servos.

Regarde cette page ça t'aidera peut-être:

Maitriser le temps
« Last Edit: May 10, 2010, 05:55:05 pm by jfs » Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Il y a une solution simple : faire plus de positions intermédiaires et gérer le temps d'attente entre les deux.

C'est ce que je fais sur mon bipède : dans l'interface de conception des pas, il y a une vitesse contrôlable.

http://www.pobot.org/Logiciel-de-configuration-du.html



Dans la colonne de droite les valeurs des différents servos, et des boutons pour tester la vitesse max disponible ou ralentir si besoin. Et ça marche très bien smiley
Logged

Pages: [1]   Go Up
Jump to: