Projet bipède, gestion de l'alimentation.

Bonjour,

Je suis sur un projet de bipède (degrés de liberté de 6 sur chaque jambe) et je compte utiliser l'arduino pour le contrôler.
Seulement je ne suis encore qu'un petit débutant, niveau informatique pas de problème je suis en master, mais en ce qui concerne l'électronique... aïe!
Si certains veuillent bien prendre quelques minutes pour m'aider ce serrait vraiment très sympa.

Donc voila mon projet est de faire un bipède doté de 12 servomoteurs (SG-90) et d'un capteur IR.

Je voulais savoir lequel des deux schémas suivants était le plus approprié au niveau de l'alimentation? Les schémas sont-ils corrects?

Celui-ci représente une allimentation séparée, une alim de 4.8-6V (composée de 4-5 accu AAA de 1800 mAh) est destinée aux servomoteurs, puis une simple pile de 9V fournie l'alimentation de l'arduino (et celle du capteur).

Une autre solution qui me semble intéressante (du point du vue de mon projet) est de n'avoir qu'une seule batterie fournissant l'énergie à l'arduino, au capteur, ainsi qu'aux servomoteurs.
La pile de 9V serait remplacée par un pack de 8 à 10 accu AAA de 1800 mAh (9.6-12V) afin que celle-ci ne se décharge pas trop vite.

Je vous remercie tous d'avance.
Thomas

PS: Je remercie Nicolas Lassabe qui je penses ne m'en voudra pas pour lui avoir emprunté et modifié sauvagement son plan :wink: .
http://www.irit.fr/~Nicolas.Lassabe/robot.php

Alimentation du Arduino separee, alimentation des servos sur une ligne 5V ne passant pas par le arduino si tu me demandes mon avis.
Il est toujours possible de rajouter un regulateur 5V ( un 7805 par exemple), pour convertir du 9-12V en 5V. Pour ton projet il t'en faudra probablement plusieurs, puisqu'un servo va pomper environ 1A (si pas plus) en peak. Le probleme c'est qu'ils vont dissiper de la chaleur (et donc perte d'energie). Conclusion une batterie de 5V c'est mieux (ou 6V si tes servos le permettent, puisqu'a la find de la charge de ta batterie tu as une perte).

Cela dit je ne sais pas comment sortir 12 pwm du arduino (le signal de controle pour les servos), d'origine et sans hack, il y en a seulement 5 disponibles.

Merci Jeromelab,

Ok je vais rester sur la premier schéma.

Tu es sur qu'il faille utiliser des sorties PWM pour contrôler les servomoteurs?
Sur le lien en bas de mon premier message, les servos ne sont pas placés sur les sorties PWM.
Aussi le lien qui suit explique le contraire:
http://fribotte.free.fr/bdtech/pic/pic_et_servo.html

P.S.: la consommation des SG-90 lorsqu'ils sont actifs est de 150mA.

Salut
Pour les PWM il y a 2 solutions, soit en logiciel, et tu peux utiliser la sortie que tu veux, soit en matériel et tu dois utiliser les sorties spécifiques.
a+

Aussi il ne faut pas que tu oublies de relier la masse de l'alimentation des tes moteurs à celle de l'arduino.

Merci Vincent, donc pas de problème... ouf!... j'ai eu un peu peur :wink:

Sympa cette nouvelle vidéo Nicolas :smiley: , par contre ton quad se démonte un peu à l'arrière :wink:
C'est noté pour la masse, je remet donc le schéma correct pour tout le monde:

Petite question, est-il possible d'ajouter des I/O numériques/analogiques simplement sur l'arduino?
Si oui comment?
Juste pour une éventuelle évolution, ou un projet plus conséquent.

Oui mon quad se démonte un peu à l'arrière :slight_smile: C'est pas trop grave pour l'instant. Le problème est de lui donner un comportement cohérent. Il ne tourne par encore comme je veux :-/.

Pour rajouter des pwm le TLC5940. Arduino Playground - TLC5940

Pour rajouter des digital I/O, un 4051. Arduino Playground - 4051

Pour rajouter des input analogue, un MC14067BCP. http://fluid-forms.com/de/CassiusHow.php

Il existe d'autres multiplexer/demultiplexer ...

Merci jeromelab, je lis ça dès que je peux :slight_smile:

Nicolas, si ton problème est l'implémentation de l'algorithme de déplacement je peux peut être t'aider.

En ce moment je travail avec le robot lego nxt, le but étant de le faire sortir de la pièce.
J'ai trouvé ce lien: http://www.robot-intelligence-artificielle.com/tutoriels/logique-floue/eviter-des-obstacles-en-logique-floue.html
Je viens d'implémenter l'algorithme, je le test demain je te tiendrai au courant.
Par contre j'ai du refaire les règles, j'ai peu être pas bien compris mais pour moi il manque des ordres pour certains tuples et certaines règles s'appliquent sur plusieurs tuples :P.

Après on peu passer aux choses plus sérieuses avec la création d'un réseau de neurones.

Pas besoin de pwm pour des servos, il faut générer des pulses (0-1-0) de longueur adequat sur des sortie standard 5v.
Donc tu peux facilement controler 12 servos via l'arduino, pas de pb.
Les impulsions doivent avoir une largueur de 500 à 2500ms suivant l'angle que doit prendre le servo, et etre espacées de 70ms au moins il me semble.

En envoyant des impulsions de 500ms espacées de 70ms, ton servo ira gentilment se positionner à 0°.
En envoyant des impulsions de 2500ms espacées de 70ms, ton servo ira à 180° (s'il en est capable, j'ai des petits servos de 8g qui semblent etre limités à 120° environs... )
Pour les positions intermediaires, il faut calculer la largeur en fonction de l'angle de la position voulue.

Concernant, le GP2D12, j'ai le meme, et ca marche nickel, tu seras content...

Merci Skall :smiley:

Pour les impulsions on m'avait déjà mis au courant, merci pour ces précisions. Mes servomoteurs sont limités a 180° ce qui me semble parfait.
Si je comprends bien, l'angle où se positionne le servo est déterminé proportionnellement par rapport aux l'impulsions.
Des impulsions de 1500ms positionnera le servo a 90°, c'est ça?

Oui j'ai choisi un GP2D12 car j'ai lu beaucoup de bien sur celui-ci. :slight_smile:

Nicolas, pour l'algo je te dirais cela la semaine prochaine car le NXT déconnait.
A quatre sur l'algo plus notre prof on a pas compris :-?, le robot se bloque entre la fin d'un System.out.print et l'appel d'une méthode de déplacement.
Le System.out est bien affiché dans la console mais le programme ne rentre jamais dans la méthode qui suit, et pour couronner le tout le robot reculait de manière très lente et en non-stop.
Bref que du n'importe quoi.
Donc je vois ça la prochaine fois avec des piles neuves (le problème venait peut être de là???) et je te tiens au courant si ça t'intéresse.

Le System.out est bien affiché dans la console mais le programme ne rentre jamais dans la méthode qui suit,

Ca, ca ressemble drolement à un jardinage dans la pile... typiquement, ca arrive quand on ecrit au dela de la derniere case d'un tableau par exemple une chaine plus grande que la taille allouée pour cette variable...
c'est penible à debugger.... bonne chance...

Etrange tout de même, normalement il n't a aucun problème de pointeurs ...

PS: Au sujet de l'arduino et des impulsions sur les servos je t'ai envoyé un petit mp pour plus d'éclaircissement :wink: +

Etrange tout de même, normalement il n't a aucun problème de pointeurs ...

PS: Au sujet de l'arduino et des impulsions sur les servos je t'ai envoyé un petit mp pour plus d'éclaircissement :wink: +

Regarde bien ton code si tu n'as des points virgules qui traînent après des boucles. Du style
while(i<100);
{
i++;
}

Sinon c'est vrai que la logique floue ca peut-etre pas mal pour ce type de robot qui n'ont pas beaucoup de mémoire. Il y a pas mal d'autres techniques qui marchent aussi si on a un peu plus de mémoire.

Etrange tout de même, normalement il n't a aucun problème de pointeurs ...

PS: Au sujet de l'arduino et des impulsions sur les servos je t'ai envoyé un petit mp pour plus d'éclaircissement :wink: +

Regarde bien ton code si tu n'as des points virgules qui traînent après des boucles. Du style
while(i<100);
{
i++;
}

Sinon c'est vrai que la logique floue ca peut-etre pas mal pour ce type de robot qui n'ont pas beaucoup de mémoire. Il y a pas mal d'autres techniques qui marchent aussi si on a un peu plus de mémoire. Mais je suis intéressé par les résultats que tu vas obtenir. Le problème avec ton robot va être l'équilibre. Tu vas définir les mouvements de base à la main et appliquer la logique floue pour donner les autres de hauts niveaux (directions, etc) ? Pour l'équilibre tu peux utiliser un gyroscope peut-être.

Ok je vérifierai ça, mais je doute qu' Eclipse laisse passer se genre d'erreur (on code le NXT en java).

Je vous remercie pour votre aide, comme on s'évade un peu du sujet et de l'arduino si les problèmes persistent avec le NXT j'ouvrirai un post sur un forum approprié et je vous communiquerai l'adresse ;).

Je viens de tester l'arduino avec trois servos en série sur 4.8V c'est terrible ;D ;D ;D

Nicolas,

Si tu as de la doc pour les autres techniques je veux bien que tu me les envoi par email :D, pour la logique flou je te communiquerais mes résultats :wink:

En ce qui concerne le bipède-arduino je penses que je vais définir les mouvements de base (un pas en avant, un pas en arrière, tourner à droite ou à gauche avec quelques degrés 30°,60°, 90° et 180°)0

Pour l'équilibre j'ai investi dans un petit accéléromètre 3 axes, pas assez pour un gyro :-/, je pourrais déjà faire pas mal de chose avec.

Nicolas,

Si tu as de la doc pour les autres techniques je veux bien que tu me les envoi par email :D, pour la logique flou je te communiquerais mes résultats :wink:

En ce qui concerne le bipède-arduino je penses que je vais définir les mouvements de base (un pas en avant, un pas en arrière, tourner à droite ou à gauche avec quelques degrés 30°,60°, 90° et 180°)0

Pour l'équilibre j'ai investi dans un petit accéléromètre 3 axes, pas assez pour un gyro :-/, je pourrais déjà faire pas mal de chose avec.

Tu peux regarder les algorithmes génétiques, la programmation génétique ou les réseaux de neuronnes. Mais pour ca il te faut un simulateur et ensuite importer le programme dans le robot. Autant dire que c'est pas simple. Le plus simple pour toi sera certainement de définir à la main de mouvements de base en t'aidant des accéléromettres et après tu composes ces mouvements de bases avec un algo (pourquoi la logique floue) qui lui donnera son comportement générales. En clair, il y a pas mal de boulot :slight_smile: