Projet robot Bipède 8 servos
#1
Posté 17 février 2010 - 09:16
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
Posté 17 février 2010 - 10:12
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é.
"All the world's a stage, And all the men and women merely players." - William Shakespeare
#3
Posté 17 février 2010 - 11:00
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
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!
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
Posté 19 février 2010 - 05:37
les librairies "servo.h" et "SoftwareServo.h" déconne a plein tube
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
Posté 19 février 2010 - 05:39
Merci pour tes liens qui mon était utile!
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.
"All the world's a stage, And all the men and women merely players." - William Shakespeare
#7
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
"All the world's a stage, And all the men and women merely players." - William Shakespeare
#8
Posté 19 février 2010 - 06:05
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... )????
#9
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... )????
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
"All the world's a stage, And all the men and women merely players." - William Shakespeare
#10
Posté 19 février 2010 - 10:16
Y a le freeduino aussi, comme Arduino mais en licence du libre (vive le free-softwareMerci pour tes liens qui mon était utile!
"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
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
Posté 19 février 2010 - 11:42
"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
Posté 21 février 2010 - 09:31
Delay(en milliseconde)
#14
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
Posté 21 février 2010 - 09:45
pour l'incrémentation (120->121->123°) sert toi de la fonction
Delay(en milliseconde)
Désolé Galactus, je n'ai pas compris à quel de mes questions tu répondait????
#16
Posté 21 février 2010 - 10:22
ç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
Posté 21 février 2010 - 10:42
pour l'incrémentation (120->121->123°) sert toi de la fonction
Delay(en milliseconde)
Désolé Galactus, je n'ai pas compris à quel de mes questions tu répondait????
celle làEn plus si possible pouvoir régler la vitesse du servo pendant cette séquence???
la vache!! ca quote a mort!!!!!!!!!!!!!!!!
#18
Posté 21 février 2010 - 11:50
"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
Posté 21 février 2010 - 12:18
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
Posté 21 février 2010 - 12:35
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