

Animation pilote dans une maquette
#22
Posté 22 décembre 2011 - 12:23
bon maintenant je vais voir comment on programme pour faire bouger plusieurs servos et comprendre les lignes pour chaque action.
Si je comprend bien, quand on injecte un code à la carte, ça écrase celui qu'il y avait précédement? si on doit modifier un code il faut donc se l'enregistrer sur le pc? ou bien on peut le récupérer de la carte? car je n'ai pas trouvé la manoeuvre inverse carte vers pc
#23
Posté 22 décembre 2011 - 12:35
Content, j'ai réussi a faire bouger un servo, par contre il me faut obligatoirement apporter du 5v au bornier bleu + du courant à la carte via l'usb ou prise jack, si je n'envoi pas de courant au bornier bleu ça ne marche pas, c'est normal? ou y'a pas un cavalier a deplacer pour n'avoir que la source usb ou pwrin a brancher?
bon maintenant je vais voir comment on programme pour faire bouger plusieurs servos et comprendre les lignes pour chaque action.
Si je comprend bien, quand on injecte un code à la carte, ça écrase celui qu'il y avait précédement? si on doit modifier un code il faut donc se l'enregistrer sur le pc? ou bien on peut le récupérer de la carte? car je n'ai pas trouvé la manoeuvre inverse carte vers pc
Bonjour et bravo pour cette réalisation.
Si cela te rassure, je te propose de te faire un schéma de câblage. (Ce soir au plus trard).
Pour ton code, oui tu écrases le code que tu as précédemment envoyé sur le µC et non, il ,'est pas possible de récupérer le code qui se trouve sur le µC. Mais ce n'est pas un problème, car tu as ce code sur ton PC.
Je peux aussi profiter pour te donner un code fonctionnel avec plusieurs servos.
Il ne te restera plus qu'as changer les valeurs de positions en fonction des mouvements que tu souhaites faire.
Il n'est pas possible d'est aussi doué que tu l'es en moulage et réalisation de modélisme et en plus d'être un expert en programmation.
Nous sommes donc là pour les parties qui te poses problème

A tout a l’heure donc.
Si entre-temps tu me décris d'éventuels chagelemnts, je les intégrerais au code.
Cdlt
Yves
#24
Posté 22 décembre 2011 - 02:43
Oui je veux bien merciJe peux aussi profiter pour te donner un code fonctionnel avec plusieurs servos.
en fait je suis parti de l'exemple servo inclu dans le soft de programmation, j'ai vu a peu pres a quoi correspondait les instructions, mais le problème c'est pour comprendre comment ajouter d'autre servos, et si possible avoir les lignes de commentaires d'instruction en français, innocemment j'ai fait un copié/collé pour tout doubler, et juste changer le n° de pin du branchement du 2eme servo, mais bien sûr ça ne marche pas. Et là je n'arrive pas a trouver facilement de site qui donnent des exemples concrets et bien expliqués, j'ai l'impression que ça s'adresse a un niveau qui ne part pas de 0. Mais bon une fois les instructions comprises, je devrais arriver a parametrer comme il faut l'annimation du pilote en fonction de ce que j'ai envie d'obtenir. Enfin grace à vous j'ai quand même fait un tout petit pas
#26
Posté 22 décembre 2011 - 05:23
#27
Posté 22 décembre 2011 - 05:28
j'ai commencé a trifouiller et reussit a faire tourner 2 servos, l'un derriere l'autre, par contre un truc que je n'arrive pas a trouver, avec void loop() ça tourne en boucle indefieniment, mais comment definir par exemple 1 ou 2 cycles? mais merci de ton aide, c'est obscur et prise de tête quand on fait en tatonnant sans vraiment bien comprendre
Tu n'as aucune base en C ?
Tu peux consulter ces tutoriels sur developpez.com ou le site du zéro. Il y a plusieurs possibilités, tu dois regarder du côté des boucles.
Esprit
*Rêve d'en caser un dans un robot*
#28
Posté 22 décembre 2011 - 05:31
non absolument aucuneTu n'as aucune base en C ?
Mais au fait, il n'existe pas de logiciel de programmation autre que celui de l'arduino, qui serait graphique, on cocherait par exemple 3 servo, 1 moteur... il y aurait des cases a cocher pour definir les angles, durée... et a la fin ça générerait le code, un peu comme les logiciels WYSIWYG qui permettent de generer le code html en cliquant sur une icone d'insertion d'image ou de lien, plutot que de taper des lignes de codes
#30
Posté 22 décembre 2011 - 05:59
Ce qui ne t'empêche pas bien sur de faire un tour par le site du Zéro. (Esprit à rzison

Mais si c'est juste pour 1 projet il est sans doute inutile de te gaufrer tout le tuto de langage C.
Par la suite, il est vrai sur c'est le meilleur tuto FR que nous connaissons, et zvoir les bases n'est pas inutile.
#31
Posté 22 décembre 2011 - 06:43
Oui je veux bien merci
en fait je suis parti de l'exemple servo inclu dans le soft de programmation, j'ai vu a peu pres a quoi correspondait les instructions, mais le problème c'est pour comprendre comment ajouter d'autre servos, et si possible avoir les lignes de commentaires d'instruction en français, innocemment j'ai fait un copié/collé pour tout doubler, et juste changer le n° de pin du branchement du 2eme servo, mais bien sûr ça ne marche pas. Et là je n'arrive pas a trouver facilement de site qui donnent des exemples concrets et bien expliqués, j'ai l'impression que ça s'adresse a un niveau qui ne part pas de 0. Mais bon une fois les instructions comprises, je devrais arriver a parametrer comme il faut l'annimation du pilote en fonction de ce que j'ai envie d'obtenir. Enfin grace à vous j'ai quand même fait un tout petit pas
Nous allons donc commencer par quelques explications à lire dans les commentaires de chaque ligne.
Voici donc un code qui déclare 2 servos et qui leur fait faire exactement la même chose.
Nous verrons ensuite comment leur faire faire des choses différentes.
// Sweep // by BARRAGAN <http://barraganstudio.com> // This example code is in the public domain // Cela veut simplement dire que ce code est un code en domaine public et donc distribuable sans licence. (A condition de laisser le nom du developper). //Nous allons commencer par declarer certaines choses dont le code a besoin pour fonctionner. // c'est à dire, les Librairies dont nous avons besoin, ainsi que les variables communes à toutes les fonctions du code. // Il est en effet possible de declarer des variables qi ne seront reconnues qu'a l'interrieur d'une fonction. MAis celle declarées dans cette partie du dode te permettra d'y faire reference à tout endroit du code. #include <Servo.h> // Cette ligne declare la Librairie Servo.h que tu dois copier dans ton dossier Libgrairie // (Cette librairie existe en natif dans le dossier librairie il est donc inutile de la chercher ou de la télécharger) // Toutefois, à l'avenir, c'est ici qu'il faut regarder pour connaitre les Librairies que ton code utilise. Servo servo1; // Declare un onjet Servo ce qui est assez pratique puiseque tu n'aura qu'a appeler ce cervo pour agir dessus // Nous verrons comment faire un peux plus bas // Attention, il est precisé que cette librairie ne peut gerer que 8 servos à la fois. Ce qui est largement suffisant dans ton cas. // Mais pour d'autres projets necessitant plus de 8 servos, tu devras passer par une autre librairie que celle la. // Pour declarer un autre servo il te suffit de creer un autre objet servo. Servo servo2; // Voila, nous avons desormais 2 servos un que tu appellera par l'objet servo1 et l'autre que tu appellera par servo2 // Attention, ne pas oublier le ";" à la fin de la ligne. int pos1 = 0; // "pos" est une variable de type "int" (Integer) donc numérique sans virgule. Cette variable ne peut donc contenir que des nombres entiés. // Elle contient la valeur de position de tes servos. // Elle est initialisée à "0" Mais tu peut lui donner toute autre valeur d'initialisation (pour le moment laissons la à "0" // Npis allons commencer par la fonction "setup()" //Comme toutes les fonctions, elle est suivie pas des "()" dans lesquelles il y aura des valeurs ou pas. // Celles que nous utiliseront n'en contiendront pas //une fonction execute tout le codes compris entre "{ et }" qui le suive.(ne surtout pas les oublier le code ne fonctionnerait pas) //Cette fonction n'est executé qu'une seule fois au lancement du programme. // Elle permet donc d'initialiser certaines choses dont ton code a besoin pour fonctionner void setup() { // Nous devons par exemple dire au code sur quelle Pin du µC tu as connecté ton servo servo1.attach(9); // attaches the servo on pin 9 to the servo object servo2.attach(10); // conc idem pour le éeme servo mais sur la pin 10 (attention, les servos doivent etre connectés a une Pin PWM donc pas n'importe lesquelles. } // Voila la fonction Loop // tout ce qui se trouve entre "{ et }" de cette fonction sera executé en boucle void loop() { // Nous allons maintenant faire une autre boucle (mais celle si nous en connaissons la fin. for(pos1 = 0; pos1 < 180; pos1 += 1) // Nous allons commencer par lui donner la totalité de la plage de ton servo (soit de 0 à 180) // Comment cela fonctionne ? // nous mettons la variable pos1 à 0 puis nous lui demandons que tant que pos1 est plus petite que 0 pos1 s'incremente de 1 à chaque passage de boucle // Conc au 1 passage pos1 est egale à 0 a qui on ajoute 1 ce qui la met a 1 et on execute les 2 lignes situées entr "{ et }" situées juste en dessous Pui nous bouclon pousque pos1 est plus petit que 180 //Nous testons si Pos1 est plus petit que 180 (elle est égale à 1 donc nous lui agouton 1 ce qui la passe a 2 et nous executons a npuveau les deux lignes situées au dessous // et aisi de suite jusqu'au moment ou pos1 n'est pls plus petit que 180 et nous sortons ce cette boucle pour executer le code qui suit la fermeture de l'acolade soit apres "}" { servo1.write(pos1); // le servo va a la position indiquée par la valeur de pos1 servo2.write(pos1); // Le servo2 va à la position de pos1 //Nous avancons donc de 0à 180 par pas de 1 delay(15); // Nous attendons 15miliseconde pour donner le temps au servo d'aller à la position indiqué avant de continuer (c'est a dire reprendre la boucle ou sortir de la boucle en fonction de la valeur de pos1 } // Ensuite, (une fois que nous somme sortie de la boucle et donc que pos1 est égale à 180), nous lancons une autre boucle // qui fait exactement la même chose mais en sens inverse. // Nous testons donc notre variable pour que nous alion de 180 à 0 // A chaque passage de boucle, nous retirons 1 à pos1 et testons si pos1 est plus grand ou egale à 1 et nous retirons 1 à sa valeur à chaque passage de boucle for(pos1 = 180; pos1>=1; pos1-=1) // goes from 180 degrees to 0 degrees { servo1.write(pos1); // De la meme facon, nous envoyons servo1 à la position de pos1 servo2.write(pos1); delay(15); // et nous attendons 15 ms avant de passer a la suite, c'est a dire reprendre la boucle ou d'en sortir en fonction de la valeur de Pos1 } // Lorsque nous sommes sortie de cette deuxieme boucle, nous ecommencons au debut de la fonctionloop }
Ce code comme tu as pu le voir passe par des boucles, mais ce n'est pas une obligation tu peux parfaitement envoyer directement tes servos a une position precise.
Mais tu dois allonger le temps de "delay" pour donner le temps à tes servos de s'y rendre.
Par exemple, voici un code qui envoi deux seros a des positions différentes sans passer par des boucles.
Les boucles étaient surtout la comme exemple.
// Sweep // by BARRAGAN <http://barraganstudio.com> // This example code is in the public domain // Cela veut simplement dire que ce code est un code en domaine public et donc distribuable sans licence. (A condition de laisser le nom du developper). #include <Servo.h> // Cette ligne declare la Librairie Servo.h que tu dois copier dans ton dossier Libgrairie Servo servo1; // Declare un onjet Servo ce qui est assez pratique puiseque tu n'aura qu'a appeler ce cervo pour agir dessus Servo servo2; // Voila, nous avons desormais 2 servos un que tu appellera par l'objet servo1 et l'autre que tu appellera par servo2 // int pos1 = 0; // "pos" est une variable de type "int" (Integer) donc numérique sans virgule. Cette variable ne peut donc contenir que des nombres entiés. // int pos2 = 0; void setup() { servo1.attach(9); servo2.attach(10); } void loop() { servo1.write(180); // Nous envoyons servo1 a 180 servo2.write(150); // Nous envoyons servo2 à 150 delay(100); // Nous attendons 100ms (mais a voir si c'est suffisant (ou si tu veux donner un temps d'attente avant la suite) servo1.write(0); // Nous envoyons servo1 a 0 servo2.write(30); // Nous envoyons servo1 a 30 delay(100); // Nous attendons 100ms (mais a voir si c'est suffisant (ou si tu veux donner un temps d'attente avant la suite)ortir en fonction de la valeur de Pos1 }
Voila
As tu toujours besoin d'un schéma ?
Cdlt
Yves
#33
Posté 22 décembre 2011 - 07:27
merci Yves, j'ai essayé ça marche, demain je regarderais de trés près pour essayer de comprendre
tu parles de faire un schéma à propos de quoi?
Pour le câblage de ton µC et de tes servos, mais tu semble t'en être parfaitement sortie.
Donc apparemment inutile.
Si tu as des question, n’hésites pas.
Bien sur tu as compris comment modifier les valeurs de position sur mon 2eme code.
Cdlt
Yves
#34
Posté 23 décembre 2011 - 04:10
merci de votre patience

#35
Posté 23 décembre 2011 - 04:29
Bon j'ai a peu près compris les paramètres de réglages de ce que tu m'as donné, mais en ce qui concerne le fonctionnement en boucle, j'ai été voir les sites du zero, mais là je n'y comprend absolument rien, ce serait possible de connaitre la synthaxe pour pouvoir faire fonctionner les servos, mais pas en boucle, juste de façon à faire une annimation scénarisée, type, servo du bras se lève, reste quelques s en position haute et s'abaisse, ensuite servo de la tête bouge, puis la bouche bouge, s'arrête.... mais pas que les actions tournent en boucle,
merci.
Pas de problème.
Mais en fait il y a deux possibilités
1/ Il y a un événement déclencheur (à définir)
2/ une boucle (mais cette boucle peut avoir autant d'événements que tu souhaites.)
Je m'explique.
1 / Un événement déclenchant
Cela peut être lancé par la détection d'un capteur de tout type.
Par exemple lorsque quelqu'un passe devant, mais il y a un nombre incalculable de solutions à toi de dire ce que tu souhaites.
2/ La la boucle ne fait que deux positions.
Mais il est possible qu'elle en ait autant que tu souhaites avec des temps d'arrêt à définir.
Par exemple
Il lève le bras,
Ouvre la bouche un nombre défini de fois pour simuler une phrase
Baisse le bras
Ouvre la bouche un nombre défini de fois pour simuler une autre phrase
Attends 1 seconde (ou autant de temps que tu le souhaites)
Relève le vras
Le baisse
Ouvre le bras en bougeant la bouche sur une 3 eme phrase
etc... (Mais là c'est aussi une boucle. Elle va être très longue ou très courte, mais une fois fini elle va reprendre.
Alors que la solution 1 ne boucle pas, tu mets des boucles en route en fonction d'événement déclenché par un ou des capteurs.
Nous pouvons faire ce que nous voulons.
Donne-moi simplement ta séquence ou ce que tu aimerais que ton pilote fasse, et je te ferais le code
#36
Posté 23 décembre 2011 - 05:16
je construis à peu près un planeur par an, et j'aime franchir a chaque fois des étapes de progressions, donc pour le prochain il est fort probable que je refasse un pilote plus sophistiqué, mais là pour le 1er animé comme ça, je ne vais pas essayer de bruler les étapes et me dégouter d'une programmation que je n'arriverais pas à maitriser
Donc pour un premier essai je vais simplifier au maximum, c'est a dire declencher manuellement la bande son via le lecteur mp3 avoir un bip de départ qui va me permettre de lancer "manuellement" l'arduino avec ma radiocommande, via un contacteur electronique qui se branche sur une voie de mon recepteur, en fait cet inter va juste alimenter la carte et lancer la sequence.
A ce propos on est obligé d'avoir 2 alimentations pour la carte? actuellement elle ne marche qu'en l'alimentant via usb ou prise jack + alim 5v au bornier bleue. Y'a pas moyen d'alimenter tout l'ensemble que par une seule source de courant, usb ou prise jack? peut être un cavalier à deplacer? mais dans ce cas si on envoie 12v à la prise jack, est-ce que ça regule automatiquement à 5v aux servos?
#37
Posté 23 décembre 2011 - 06:27
Tant que tu ne prends pas les 5v sur la Pin 5v de la carte ou que tu fasses tourner tes servos avec comme seule alimentation ta prise USB il n'y a pas de PB
En fait tu as plusieurs solutions pour alimenter ce genre de carte.
1 l'USB
Il délivre 5v en 500mA donc ne jamais dépasser les 500mA sous peine de griller le port USB de ton PC
Le Jack de la carte
Il est bien pratique, car il te permet de mettre entre 6 et 12v pour alimenter la carte. Il passe par deux régulateurs 500mA pour le 5v et le 3.3v
Mais il est fait pour alimenter la logique et uniquement de la logique (pas les servos)
La Pin 5v de la carte
Très pratique, mais il faut lui donner du 5v / 5.5v régulé.
Le Bornier Servo
Il est spécialement fait pour alimenter de la puissance.donc les servos
Tu peux avec le cavalier mettre ton alimentation sur ce bordier et laisser le cavalier pour alimenter à la fois la logique et les servos.
Pour tes séquences, je pense que tu vas vite te rendre compte que de déclencher manuellement tes sons et les mouvements va être une galère.
En effet, la Carte Arduino ne démarre pas instantanément à l'allumage.
Elle doit démarrer (pas comme ton PC, mais ça ressemble a ça tout de même.
Quand tu alimentes la carte, elle doit s'initialiser lire le code et exécuter les lignes de code SetUp puis seulement démarrer les séquences. Donc il va être compliqué de lancer le tout a la main.
Par contre, il n'est pas très compliqué de je faire avec du code. Et si nous t'aidons, tu ne risques pas de te décourager

Mais comme tu veux.
#38
Posté 23 décembre 2011 - 07:27
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter : https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/
Besoin d'une impression 3D grand format ? Contactez moi !
#39
Posté 23 décembre 2011 - 07:36
Il est vrai qu'il débute et il serait dommage qu'il se deguoute de ce genre de projet.
Nous lui proposons toute l'aide qu'il souhaiterait, mais il préfère (et je le comprend) maîtriser toutes les phases de son projet.
C'est tout à son honneur de ne pas compter sur les autres.
Mais si il lit ces lignes (et il le fera). Il peux compter sur nous sur ce 1er projet et complètement gérer le suivant.
Mais c'est à lui de décider.
#40
Posté 23 décembre 2011 - 07:42
le recepteur ir de la telecommande, ça se branche directement sans rien d'autre sur le shield? ou bien il faut adapter en plus des composants electroniques?
Répondre à ce sujet

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