Salut Jean-François, tiens marrant de te retrouver là, et quelle application t'en fait de l'Arduino? Pour ce qui est de la programmation je n'ai pas de mérite, je n'ai fait que compléter ce qu'on m'avait fait, heureusement que j'ai eu l'aide du forum. Mais c'est passionnant ces modules.

Animation pilote dans une maquette
Débuté par VincentB, déc. 10 2011 08:14
109 réponses à ce sujet
#102
Posté 05 janvier 2012 - 05:17
Bonjour tout le monde,
après avoir fait mon animation, je me rend compte que pour le réalisme, il faudrait que j'ai des petits mouvements de tête en même temps que mon pilote parle, et mouvements de tête en même temps que le bras bouge. Pour l'instant la programmation était faite en sorte d'avoir chaque servo qui marche les uns après les autres
ça fait 2 jours que je m'arrache les cheveux pour trouver le bon code, mais impossible d'y arriver, je sens que je vais tout abandonner
je vous mets ci dessous le code que j'ai cru comprendre qu'il faille faire, mais en fait ça lance le servo tete en boucle et rien d'autre se passe, alors que je pensais que ça aurait fait bouger la tête en même temps que le bras. J'avais presque reussit un autre code, mais là les delay n'étaient pas pris en compte, je ne sais pourquoi, donc les servo partaient à toute vitesse
j'espère que vous aller pouvoir m'aider et me donner le bon code, par exemple tout au début, pour faire bouger la tête en même temps que le bras, merci, je craaaque, snifff
après avoir fait mon animation, je me rend compte que pour le réalisme, il faudrait que j'ai des petits mouvements de tête en même temps que mon pilote parle, et mouvements de tête en même temps que le bras bouge. Pour l'instant la programmation était faite en sorte d'avoir chaque servo qui marche les uns après les autres
ça fait 2 jours que je m'arrache les cheveux pour trouver le bon code, mais impossible d'y arriver, je sens que je vais tout abandonner

je vous mets ci dessous le code que j'ai cru comprendre qu'il faille faire, mais en fait ça lance le servo tete en boucle et rien d'autre se passe, alors que je pensais que ça aurait fait bouger la tête en même temps que le bras. J'avais presque reussit un autre code, mais là les delay n'étaient pas pris en compte, je ne sais pourquoi, donc les servo partaient à toute vitesse
j'espère que vous aller pouvoir m'aider et me donner le bon code, par exemple tout au début, pour faire bouger la tête en même temps que le bras, merci, je craaaque, snifff
#include <Servo.h> Servo bras; Servo tete; Servo machoire; int bra = 0; int tet = 0; int mache = 0; int bouton = 2; void setup() { bras.attach(3); tete.attach(5); machoire.attach(6); Serial.begin(9600); pinMode(bouton, INPUT); } void loop() { if (digitalRead(bouton) == HIGH) { delay(2000); //pause avant demarrage for(bra = 90; bra>=50; bra-=1) { bras.write(bra); delay(30); for(tet = 90; tet>=70; tet-=1) { tete.write(tet); delay(30); } } delay(4000); for(bra = 50; bra < 90; bra += 1) { bras.write(bra); delay(20); } delay(100); for(tet = 90; tet < 130; tet += 1) { tete.write(tet); delay(15); } for(tet = 130; tet>=50; tet-=1) { tete.write(tet); delay(15); } delay(100); for(tet = 50; tet < 110; tet += 1) { tete.write(tet); delay(20); } delay(300); int compteur = 0; while (compteur < 6) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(4); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(4); } compteur++; } { delay(500); int compteur = 0; while (compteur < 5) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } { delay(500); int compteur = 0; while (compteur < 15) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } { for(tet = 110; tet>=75; tet-=1) { tete.write(tet); delay(15); } for(tet = 75; tet < 100; tet += 1) { tete.write(tet); delay(15); } int compteur = 0; while (compteur < 18) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } { delay(500); int compteur = 0; while (compteur < 8) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } { delay(1200); int compteur = 0; while (compteur < 12) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } { delay(1000); int compteur = 0; while (compteur < 10) { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(3); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(3); } compteur++; } } } } } } } delay(2000); for(bra = 90; bra>=50; bra-=1) { bras.write(bra); delay(30); } delay(4000); for(bra = 50; bra < 90; bra += 1) { bras.write(bra); delay(20); } delay(1000); for(tet = 100; tet>=60; tet-=1) { tete.write(tet); delay(20); } for(tet = 60; tet < 90; tet += 1) { tete.write(tet); delay(20); } } }
#103
Posté 05 janvier 2012 - 09:32
Salut
Le problème est simple à régler.
Cela vient encore des boucles.
Comprends bien ce qui se passe et tu pourra corriger par toi m'emmène.
Donc
Quand tu entre dans une boucle rien d'autre ne peut être entrepris tant que tu n'est pas sortie de la boucle.
Donc deux solutions
Soit tu ne travailles plus avec des boucles mais des commandes directes
Soit tu mets dans la boucle les commandes pour plusieurs servos.
La 1ère solution est plus simple.
Une troisième solution serait de travailler avec des boucles imbriquées (des boucles à l'interrieur d'autres boucles) mais plus difficile à programmer.
Regarde comment faire et nous corrigerons.
Le problème est simple à régler.
Cela vient encore des boucles.
Comprends bien ce qui se passe et tu pourra corriger par toi m'emmène.
Donc
Quand tu entre dans une boucle rien d'autre ne peut être entrepris tant que tu n'est pas sortie de la boucle.
Donc deux solutions
Soit tu ne travailles plus avec des boucles mais des commandes directes
Soit tu mets dans la boucle les commandes pour plusieurs servos.
La 1ère solution est plus simple.
Une troisième solution serait de travailler avec des boucles imbriquées (des boucles à l'interrieur d'autres boucles) mais plus difficile à programmer.
Regarde comment faire et nous corrigerons.
#104
Posté 06 janvier 2012 - 06:17
et c'est quoi? on ne met plus loop?des commandes directes
c'est ce que je pensais avoir fait, mais je n'y arrive pas, je suppose que ça vient des parentheses mal placées? mais ça fait 2 jours que j'essaye des centaines de fois sans y arriver, donc là je peux pas faire plus, tant pis je sens que je vais abandonnerSoit tu mets dans la boucle les commandes pour plusieurs servos.

#105
Posté 06 janvier 2012 - 09:41
Bon j'ai reessayé plein de fois je ne comprend pas pourquoi ça ne marche pas, je vous remet le code raccourci pour mieux voir et avec des commentaires de mes soucis
#include <Servo.h> Servo bras; Servo tete; Servo machoire; int bra = 0; int tet = 0; int mache = 0; int bouton = 2; void setup() { bras.attach(3); tete.attach(5); machoire.attach(6); Serial.begin(9600); pinMode(bouton, INPUT); } void loop() { if (digitalRead(bouton) == HIGH) { delay(2000); //pause 2s avant commencer animation { for(bra = 90; bra>=50; bra-=1) //le bras se lève for(tet = 90; tet < 110; tet += 1) //je voudrais que la tête bouge en même temps que le bras se lève, mais avec ce code la tete bouge en boucle rapidement et le bras monte hyper lentement pendant 30s, en fait les delay ne sont pas pris en compte et gènent et seulement apres le reste de l'animation se joue { tete.write(tet); delay(20); //ce sont ces delay qui genent l'anim, si je les enlève ça marcherait mais les servo s'actionnent trop rapidement bras.write(bra); delay(20); //ce sont ces delay qui genent l'anim, si je les enlève ça marcherait mais les servo s'actionnent trop rapidement } } delay(4000); //le bras reste levé 4s for(bra = 50; bra < 90; bra += 1) //le bras se baisse { bras.write(bra); delay(20); } delay(100); for(tet = 90; tet < 130; tet += 1) //la tête tourne a droite de 40° { tete.write(tet); delay(15); } for(tet = 130; tet>=50; tet-=1) //la tête tourne a gauche de 80° { tete.write(tet); delay(15); } delay(100); for(tet = 50; tet < 110; tet += 1) //la tête revient vers la droite, décalé du centre de 20° { tete.write(tet); delay(20); } delay(300); int compteur = 0; while (compteur < 6) //la machoire s'actionne 6 fois { for(mache = 90; mache < 120; mache += 1) { machoire.write(mache); delay(4); } for(mache = 120; mache>=90; mache-=1) { machoire.write(mache); delay(4); } compteur++; } } }
#107
Posté 29 janvier 2012 - 06:20
Bonjour,
Oui l'aide m'avait été donné par le forum Arduino, les petits mouvements de tête, aléatoire avec random et modulo pour atténuer les saccades, le code est sur ma page web, ainsi que la vidéo http://www.retroplane.net/mira3/page2.htm
Oui l'aide m'avait été donné par le forum Arduino, les petits mouvements de tête, aléatoire avec random et modulo pour atténuer les saccades, le code est sur ma page web, ainsi que la vidéo http://www.retroplane.net/mira3/page2.htm
#108
Posté 29 janvier 2012 - 06:34
Oui en effet , je trouve que ton projet et vraiment bien fait , c'est très réalise , très intéressent.
Tes pièce son vraiment très bien faites , et bien soigner , tu et une personne , comme on dit ( très soigneux ).
Je suis ravie que cela fonctionne maintenant , de plus ta pue réglé ton problème par toi même , on na pue constaté que tu et
une personne persévérante , et qui n'abonne pas son projet comme cela , et c'est pour ça , que je t'admire.
Sinon vas tu améliore ton projet , ou alors , vas tu en concevoir un autre ???
Tes pièce son vraiment très bien faites , et bien soigner , tu et une personne , comme on dit ( très soigneux ).
Je suis ravie que cela fonctionne maintenant , de plus ta pue réglé ton problème par toi même , on na pue constaté que tu et
une personne persévérante , et qui n'abonne pas son projet comme cela , et c'est pour ça , que je t'admire.
Sinon vas tu améliore ton projet , ou alors , vas tu en concevoir un autre ???
#109
Posté 29 janvier 2012 - 07:21
L'améliorer, oui en principe, je voulais intégrer la petite carte mp3 ou racheter un shield wave ou mp3 qui s'installerait plus facilement, sinon d'autres projets, oui mais ce sera en fin d'année, là il me faut déjà terminer ce planeur encore 4 mois de travail. Tu en avais acheté une de carte mp3? tu l'as faite marcher?
Répondre à ce sujet

1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users