Aller au contenu


Photo

Projet robot Bipède 8 servos


  • Veuillez vous connecter pour répondre
26 réponses à ce sujet

#1 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 17 février 2010 - 09:16

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. :)

#2 Inounx

Inounx

    Membre occasionnel

  • Membres
  • Pip
  • 111 messages
  • Gender:Male
  • Location:Toulouse

Posté 17 février 2010 - 10:12

Salut,

c'est un bon petit projet en effet que tu veux faire, ce n'est pas évident les humanoides ^^(je ne dit pas ça pour te casser la motivation hein).
Coté Arduino il y a une bibliothèque toute faite permettant de facilement contrôler des servomoteurs (en utilisant leur IDE) cf Arduino Reference
J'imagine que tu as déjà lu cette page mais il me semble que tout les éléments nécessaires pour comprendre le fonctionnement y sont. D'un autre coté il me semble que j'avais eu des soucis moi aussi quand j'avais voulu faire fonctionner cette librairie. Comme c'était au moment ou je suis passé à programmer mon arduino avec AVR-GCC (sans passer par leur IDE) j'ai pas trop cherché, et je me suis développé un petit programme permettant de contrôler 8 servo avec l'arduino. Si ça t'intéresse je peux toujours te le passer, ça peut te servir de base (ne fonctionnera pas si tu utilise juste leur IDE).

Une autre adresse qui peut être utile : Arduino motor/stepper/servo controll Tout semble expliqué.
Mon blog : InounxProjects - Projet en cours : Robert
"All the world's a stage, And all the men and women merely players." - William Shakespeare

#3 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 17 février 2010 - 11:00

les librairies "servo.h" et "SoftwareServo.h" déconne a plein tube :wacko:
tient,prend donc ca :)
/*
 * Servo Move Simple
 * -----------------
 * Move an R/C servo back and forth (0 to 180 degrees) using
 * delayMicroseconds() for pulse and delay() for time between pulses.
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com>
 * http://todbot.com/
 *
 * Adapted from Daniel @
 * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1160470155/0
 * Rotates servo through 180 degrees, using "servoPulse" function
 * adapted from "Temporary Servo Function"  by Tom Igoe and Jeff Gray
 */


int servoPin = 7;		// R/C  Servo connected to digital pin
int myAngle;		     // angle of the servo (roughly in degrees) 0-180
int pulseWidth;		  // function variable

void servoPulse(int servoPin, int myAngle) {
  pulseWidth = (myAngle * 9) + 700;  // converts angle to microseconds
  digitalWrite(servoPin, HIGH);	 // set servo high
  delayMicroseconds(pulseWidth);	// wait a very small amount
  digitalWrite(servoPin, LOW);	  // set servo low
  Serial.print("pulseWidth: "); Serial.println(pulseWidth);
  delay(20);				  // refresh cycle of typical servos (20 ms)
}

void setup() {
  pinMode(servoPin, OUTPUT);	    // set servoPin pin as output
  Serial.begin(19200);
}

void loop() {
  // cycle through every angle (rotate the servo 180 slowly)
  for (myAngle=0; myAngle<=180; myAngle++) {
    servoPulse(servoPin, myAngle);
  }
  delay(1000);
}

voila,si ca marche pour un ,ca marche pour dix ^^

bon courage a toi :)
ps; chez moi ca marche ^^

#4 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 19 février 2010 - 05:25

Salut,

c'est un bon petit projet en effet que tu veux faire, ce n'est pas évident les humanoides ^^(je ne dit pas ça pour te casser la motivation hein).
Coté Arduino il y a une bibliothèque toute faite permettant de facilement contrôler des servomoteurs (en utilisant leur IDE) cf Arduino Reference
J'imagine que tu as déjà lu cette page mais il me semble que tout les éléments nécessaires pour comprendre le fonctionnement y sont. D'un autre coté il me semble que j'avais eu des soucis moi aussi quand j'avais voulu faire fonctionner cette librairie. Comme c'était au moment ou je suis passé à programmer mon arduino avec AVR-GCC (sans passer par leur IDE) j'ai pas trop cherché, et je me suis développé un petit programme permettant de contrôler 8 servo avec l'arduino. Si ça t'intéresse je peux toujours te le passer, ça peut te servir de base (ne fonctionnera pas si tu utilise juste leur IDE).

Une autre adresse qui peut être utile : Arduino motor/stepper/servo controll Tout semble expliqué.




Merci pour tes liens qui mon était utile! :D

Mais qu'est ce que t'appelle IDE (sans jouer l'inculte)?????

Et oui, sa m'intéresserais bien ton programme que ta fait, mais il fonctionne qu'avec AVR-GCC????

Merci d'avance.

#5 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 19 février 2010 - 05:37

les librairies "servo.h" et "SoftwareServo.h" déconne a plein tube :wacko:
tient,prend donc ca :)

/*
 * Servo Move Simple
 * -----------------
 * Move an R/C servo back and forth (0 to 180 degrees) using
 * delayMicroseconds() for pulse and delay() for time between pulses.
 *
 * Created 18 October 2006
 * copyleft 2006 Tod E. Kurt <tod@todbot.com>
 * http://todbot.com/
 *
 * Adapted from Daniel @
 * http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1160470155/0
 * Rotates servo through 180 degrees, using "servoPulse" function
 * adapted from "Temporary Servo Function"  by Tom Igoe and Jeff Gray
 */


int servoPin = 7;		// R/C  Servo connected to digital pin
int myAngle;		     // angle of the servo (roughly in degrees) 0-180
int pulseWidth;		  // function variable

void servoPulse(int servoPin, int myAngle) {
  pulseWidth = (myAngle * 9) + 700;  // converts angle to microseconds
  digitalWrite(servoPin, HIGH);	 // set servo high
  delayMicroseconds(pulseWidth);	// wait a very small amount
  digitalWrite(servoPin, LOW);	  // set servo low
  Serial.print("pulseWidth: "); Serial.println(pulseWidth);
  delay(20);				  // refresh cycle of typical servos (20 ms)
}

void setup() {
  pinMode(servoPin, OUTPUT);	    // set servoPin pin as output
  Serial.begin(19200);
}

void loop() {
  // cycle through every angle (rotate the servo 180 slowly)
  for (myAngle=0; myAngle<=180; myAngle++) {
    servoPulse(servoPin, myAngle);
  }
  delay(1000);
}

voila,si ca marche pour un ,ca marche pour dix ^^

bon courage a toi :)
ps; chez moi ca marche ^^




Merci, sa marche nikel!

Mais j'aimerais pour débuter faire un enchainement de séquence comme suit:

1 - le servo s'initialise à 0 degré.

2 - puis il va à 90°, il se stabilise 3 secondes.

3 - puis il va à 180°, il se stabilise 3 secondes.

4 - puis il retourne à 90°, stabilise 3 secondes.

5 - enfin retourne à 0° est là séquence s'arrête, car ça j arrive pas à arrêter un programme, sa me fais toujours des boucles.

En plus si possible pouvoir régler la vitesse du servo pendant cette séquence???

merci d'avance! ;)

#6 Inounx

Inounx

    Membre occasionnel

  • Membres
  • Pip
  • 111 messages
  • Gender:Male
  • Location:Toulouse

Posté 19 février 2010 - 05:39

Merci pour tes liens qui mon était utile! :D

Mais qu'est ce que t'appelle IDE (sans jouer l'inculte)?????


Avec plaisir. Un IDE c'est un environnement de développement. C'est ce qui te permet de faire tes programmes et de les télécharger sur l'arduino sans trop de soucier de ce qu'il y a derrière (bibliothèques, compilateur, programmateur etc)

L'arduino IDE ressemble à ça :
Arduino IDE image

Et oui, sa m'intéresserais bien ton programme que ta fait, mais il fonctionne qu'avec AVR-GCC????


Oui il ne fonctionne qu'avec AVR-GCC. Je n'ai pas fait attention mais si tu dit que tu est débutant en programmation je t'ai peut être mal conseillé. Essaye de tester la solution de galactus qui a la mérite de fonctionner sur l'IDE. Ce n'est pas que je veuille pas te passer mon code, mais si tu n'as pas de bases de programmation sous linux en C ça va pas mal te compliquer la vie. Pour commencer c'est bien d'aller au plus simple :)

Tiens nous au courant de tes avancées.
Mon blog : InounxProjects - Projet en cours : Robert
"All the world's a stage, And all the men and women merely players." - William Shakespeare

#7 Inounx

Inounx

    Membre occasionnel

  • Membres
  • Pip
  • 111 messages
  • Gender:Male
  • Location:Toulouse

Posté 19 février 2010 - 06:00

Merci, sa marche nikel!

Mais j'aimerais pour débuter faire un enchainement de séquence comme suit:

1 - le servo s'initialise à 0 degré.

2 - puis il va à 90°, il se stabilise 3 secondes.

3 - puis il va à 180°, il se stabilise 3 secondes.

4 - puis il retourne à 90°, stabilise 3 secondes.

5 - enfin retourne à 0° est là séquence s'arrête, car ça j arrive pas à arrêter un programme, sa me fais toujours des boucles.

En plus si possible pouvoir régler la vitesse du servo pendant cette séquence???

merci d'avance! ;)


Ah ben post croisé ^^

Pour faire ton enchainement de séquence essaye de bien comprendre le code que t'as passé Galactus. La fonction servo pulse s'occupe de générer une impulsion de la bonne forme pour contrôler ton servomoteur branché sur "servoPin" et le faire se déplacer à l'angle "myAngle". Donc a chaque fois que tu appelera la fonction servoPulse(3,x) ton servo branché sur la patte 3 se positionnera à l'angle x. Du coup il va te falloir faire un enchainement de servoPulse pour gérer ton déplacement. Ensuite pour régler la vitesse plutot que de lui dire va à cet angle en une seule fois, tu peux lui dire d'aller à un certain angle puis à un autre puis à un autre... mais de manière rapprochée.

C'est ce qui est fait ici :
for (myAngle=0; myAngle<=180; myAngle++) {
    servoPulse(servoPin, myAngle);

Le servo va à tout les angles entre 0 et 180 (soit 0, 1 ,2 ... 178, 179, 180). Pour gérer la vitesse d'avancement tu peux changer le pas de la boucle au lieu de myAngle++ mettre myAngle = myAngle+2 par exemple, ça ira deux fois plus vite(les angles seront 0,2,4,6,8...) .. etc. Pour un déplacement élémentaire le myAngle=0 correspond à l'angle de départ du mouvement (ici 0°) et le myangle<=180 signifie que ton servo va se déplacer jusqu'à atteindre l'angle voulu (ici 180). et bien sur tu peux intercaller des delay pour ralentir tout ça !
Si tu veux faire un déplacement avec un angle dégréssif la forme change un peu :

Exemple pour aller de 180 à 90°
for (myAngle=180; myAngle>90; myAngle--) {
    servoPulse(servoPin, myAngle);

Je te laisse essayer de faire ça par toi même, de toute façon on est toujours dans le coin pour te filer un coup de main ou un conseil si besoin.
Bonne chance :)
Mon blog : InounxProjects - Projet en cours : Robert
"All the world's a stage, And all the men and women merely players." - William Shakespeare

#8 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 19 février 2010 - 06:05

Merci INOUNX, au moins maintenant je sais l'appellation du logiciel, non pardon de l'IDE que j'utilise pour programmer sur Arduino.

Tu as raison je débute vraiment, donc je vais me laisser le temps de déjà comprendre ce que tu ma passer, avant de te redemander ton programme.

Et pour l'avancement de mon bipède je vais vous tenir d'ici peut par des photos promis.

Une question: Comment peut on initialiser le 0° du servo moteur à une de ses extrémités, car moi le 0° de mon servo ne par pas exactement de l'une de ses extrémité (j'espère que j'ai été clair... :wacko: )????

#9 Inounx

Inounx

    Membre occasionnel

  • Membres
  • Pip
  • 111 messages
  • Gender:Male
  • Location:Toulouse

Posté 19 février 2010 - 06:11

Une question: Comment peut on initialiser le 0° du servo moteur à une de ses extrémités, car moi le 0° de mon servo ne par pas exactement de l'une de ses extrémité (j'espère que j'ai été clair... :wacko: )????


Ce n'est pas possible. Ton servomoteur à un débattement nominal de 180° mais pour des raisons pratiques à toujours un peu plus de débattement mécaniquement. Il y a des moyens de tricher un peu en sortant des spécifications nominales des signaux à envoyer au servomoteur mais c'est pas forcément extraordinaire. Faut essayer de se débrouiller avec les 180° disponibles :)
Mon blog : InounxProjects - Projet en cours : Robert
"All the world's a stage, And all the men and women merely players." - William Shakespeare

#10 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 19 février 2010 - 10:16

Merci pour tes liens qui mon était utile!

Y a le freeduino aussi, comme Arduino mais en licence du libre ;) (vive le free-software ;)

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#11 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 19 février 2010 - 10:55

Y a le freeduino aussi, comme Arduino mais en licence du libre ;) (vive le free-software ;)



Merci Electron de cette info! ;)

Aurais-tu un lien pour le télécharger ou toi me l'envoyer???

Merci d'avance.

#12 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 19 février 2010 - 11:42

http://www.freeduino.org/freeduino_open_designs.html
Et valà ;)

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#13 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 21 février 2010 - 09:31

pour l'incrémentation (120->121->123°) sert toi de la fonction
Delay(en milliseconde)
:P

#14 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 21 février 2010 - 09:41

http://www.freeduino.org/freeduino_open_designs.html
Et valà ;)



Merci pour le lien Electron mais je n'arrive pas à savoir le quelle télécharger car j'en est téléchargé quelques un et quand je les décompressé j'avais des fichier illisible et pas de logiciel freeduino????

#15 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 21 février 2010 - 09:45

pour l'incrémentation (120->121->123°) sert toi de la fonction

Delay(en milliseconde)
:P



Désolé Galactus, je n'ai pas compris à quel de mes questions tu répondait???? :unsure:

#16 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 21 février 2010 - 10:22

Pour avoir la freeduino, descend sur la page, après les premières images, tu verras la version 1.16 c'est celle-là qu'il te faut, normal que tu ne comprenne pas ces fichiers, ce sont des fichiers pour Eagle, c'est ce logiciel qui va lire ces fichiers pour te faire ta plaque imprimée, renseigne-toi sur "Circuit imprimé Eagle" (sur google coche "français").


ça c'est pour la version 1.16 en port USB :
* Complete package: Eagle PCB files and Gerber files for the 0603, 0805, 1206 and TH prototype run version 1.16 These designs have been confirmed working. These are all the files you would need to build one or 1000 Arduino-compatible Freeduino baords.
* Final design files for version 1.16 only.


ça c'est pour la version 2.1 en port série :
# Download Protel files for the schematic and board
# Download the production (yes, the CAM) Gerber files, in RAR format

Les schémas sont dans des fichiers pour Protel et les circuits sont dans des fichiers pour Gerber.

Note que je ne suis pas un spécialiste de freeduino, je te donne simplement des liens, à toi de fouiner plus si tu veux du gratuit^^

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#17 galactus

galactus

    Habitué

  • Membres
  • PipPip
  • 157 messages

Posté 21 février 2010 - 10:42

pour l'incrémentation (120->121->123°) sert toi de la fonction

Delay(en milliseconde)
:P



Désolé Galactus, je n'ai pas compris à quel de mes questions tu répondait???? :unsure:



En plus si possible pouvoir régler la vitesse du servo pendant cette séquence???

celle là

la vache!! ca quote a mort!!!!!!!!!!!!!!!! :lol:

#18 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 21 février 2010 - 11:50

T'a la quote Galactus :lol: :P :D :wacko:

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)


#19 Wotan_20

Wotan_20

    Membre

  • Membres
  • 11 messages

Posté 21 février 2010 - 12:18

:lol:

Merci Galactus et Electron pour vos infos

Maintenant une question matériel:

" 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???

Car pour le moment je teste avec un servomoteur qui avait une prise femelle et j'ai modifier en cassant la prise femelle, séparé les fil et j'ai branché à l'arrache les fil dans les broches de la carte Arduino, mais sa à du mal à rentré et à tenir, existe-t-il des embouts adaptable pour la carte arduino??? "

#20 Electron

Electron

    Pilier du forum

  • Membres
  • PipPipPipPip
  • 906 messages
  • Gender:Male
  • Location:LABEGE

Posté 21 février 2010 - 12:35

Concernant les connecteurs de la carte Arduino, je ne les ai pas encore vu, je m'y interesse pas, mais tu peux trouver en magasin de connectique/electronique tous les types de connecteurs possibles, aussi bien males que femelles donc essaie, regarde par exemple chez electronique-diffusion (google^^).

Pour ce qui est de la plaque d'essais ça dépend ce que tu entend par plaque d'essais, je vois pas l'intéret d'une plaque d'ailleurs pour juste alimenter les servos, explique toi plus.

"Plus on partage, plus on possède, voilà le miracle". LEONARD NIMOY
"Celui qui se bat peut perdre, celui qui ne se bat pas a déjà tout perdu". BERTOLT BRECHT (1898-1956)
Comment se lancer dans la robotique !
Mince encore un post pour augmenter mon compteur ;)





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users