Aller au contenu


Photo

Robot Lego


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

#1 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 03 janvier 2011 - 11:17

Bonjour !



Ce premier robot est pour moi une plateforme d'expérimentation et de tests, c'est pourquoi il est réalisé à partir d'éléments tels que Legos, Arduino et platine de test :



Image IPB



Pour le moment il ne fait pas grand chose... Il avance, tourne (mais ne recule pas). Il détecte les obstacles par contact grâce à ses "moustaches". Il est piloté (tant bien que mal) par une télécommande infrarouge.



Une vue de dessous, on voit en particulier les boutons de boitier ATX utilisés pour les "moustaches" (ils sont collés à la glue sur des pièces lego), les moteurs legos (9v, même sans réduction ils sont plutôt puissants), et les niches que j'ai aménagé pour loger les câbles.



Comme vous le voyez l'électronique est des plus simpliste. La prochaine étape sera de concevoir un double pont en H pour améliorer la mobilité, puis des capteurs infrarouge pour éviter d'utiliser les capteurs de contact. Et j'ai plein d'autres idées, mais chaque chose en son temps ;-)

#2 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 03 janvier 2011 - 11:53

C'est une très belle base !

N'hésite pas a complété ton poste au fur et a mesure de son avancement.

#3 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 04 janvier 2011 - 11:52

Chouette petite base de test, j'aime bien ! :)

C'est vrai que les Legos pour ce genre de choses, c'est assez génial. (Je n'en voudrai jamais assez à mon frère d'avoir donné l'énorme boite que nous avions à un de ses amis...) Et le petit interfaçage avec la télécommande IR, c'est sympa aussi !

Continue dans ce sens, c'est super !

#4 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 06 janvier 2011 - 04:15

J'ai ajouté un capteur IR de mesure de distance, ça fonctionne plutôt bien. J'ai été bloqué un moment par un problème bête : le capteur fonctionnait correctement sur le banc de test, mais dès que je posais le robot au sol les mesures étaient fantaisistes. J'en ai déduit que les moteurs "pompaient" la batterie et que le capteur n'était plus correctement alimenté. Avec une réduction mécanique de 1/4 en sortie du moteur, le problème n'est plus visible, ça semble donc confirmer cette histoire.

Je vois deux solutions :

- une alim pour la puissance, une autre pour la logique et les capteurs. C'est simple à mettre en place, mais pas très élégant.

- trouver un moyen électronique pour stabiliser l'alimentation quelle que soit la charge moteur. Est-ce qu'un pont en H de type L293D permet ceci ? J'avais prévu de construire moi même mon pont avec des MOSFET-N (IRLR8721PbF), histoire d'apprendre, mais je ne sais pas si un tel montage comprend tous les bénéfices qu'apporte un circuit intégré (surtout que le L239D semble être LA référence ultime dans le domaine...)

Je suis preneur de tout avis ;)

[quote"Esprit"] Et le petit interfaçage avec la télécommande IR, c'est sympa aussi ! [/quote]Sympa comme "rigolo", oui. Sympa comme "efficace", pas vraiment ! Je ne sais pas si ma méthode est mauvaise, ou si c'est mon capteur déssoudé sur une vieille chaîne hifi qui est fatigué, mais les commandes sont captées à peu près une fois sur quatre. Mais bon ce n'est pas ma priorité pour le moment.


#5 Wiwi31

Wiwi31

    Membre

  • Membres
  • 19 messages

Posté 06 janvier 2011 - 04:22

Pour ton problème d’alimentation tu peut utiliser un Ampli OP en suiveur !

#6 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 06 janvier 2011 - 04:40

Un AOP n'est pas fait pour alimenter (un TL081 sort typiquement 40mA, pour alimenter un moteur c'est pas du tout suffisant).
C'est toujours le même problème, la puissance et la commande ^^ je n'ai pas testé les L29X, sache que c'est limité à une intensité de l'ordre de 1A. souvent suffisant pour les petits moteurs... Moi je vais me faire une carte de contrôle avec MOSFET et optocoupleurs (une paire de LED / phototransistor, ainsi la commande est parfaitement isolée de la puissance, la transmission d'info se fait par impulsions lumineuses) dès que la fièvre acheteuse qui me touche en se moment m'y contraindra.
L'avantage du circuit intégré est... que c'est intégré. Mais si tu aimes bidouiller, ou/et que tu recherches des caractéristiques particulières, cela peut être une bonne idée de faire toi même ton pont en H.

Très chouette le robot au passage, rien de tel qu'une plateforme avec pleins des fils d'alim dispo pour pouvoir interfacer, tester des trucs rapidement.

#7 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 06 janvier 2011 - 05:22

Oui 1A me suffirait amplement, si mes mesures sont justes les moteurs pompent 80 mA environ.

J'ai pensé aux optocoupleurs et j'ai même essayé, mais je crois que je les ai grillé parce que j'obtiens des résultats complètement différents avec deux composants identiques. Et aucun comportement n'est celui indiqué par la datasheet :(

J'ai les composants sous la main pour bricoler les 2 ponts en H, donc je vais tenter comme ça (quitte à par la suite remplacer par un CI). Quand j'aurais plus de temps je posterais mon schéma parce que je ne suis pas tout à fait sur de moi...

#8 miky-mike

miky-mike

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 232 messages
  • Gender:Male
  • Location:Belgique

Posté 07 janvier 2011 - 03:43

Personnellement j'ai déjà utilisé des capteur RC5 et il n'y avais pas de problème, il me semble donc que c'est ton capteur (ou la télécommande) qui ne fonctionne pas bien

#9 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 12 janvier 2011 - 02:29

Une petite question...



J'ai fait ce montage simple, j'imagine que vous reconnaîtrez sans peine un pont en H basique :

Image IPB

J'ai oublié de le préciser sur le schéma, mais les pins 1 et 2 fournissent assez classiquement du 5V à 40mA.



Le moteur tourne bien dans les deux sens selon que j'active le pin 1 ou le pin 2.

Le problème c'est qu'aux bornes du moteur, je n'ai que 2,5V au lieu des 9V attendus !



Est-ce que j'ai mal choisi mes transistors ? En théorie ils sont largement suffisants, non ?



Ou bien c'est l'intensité de la commande qui n'est pas suffisante. Dans ce cas, comment l'augmenter ? Peut être en utilisant un transistor supplémentaire entre le pin et les MOSFET ? Mais je n'ai jamais pas vu ce type de montage lors de mes recherches, donc je ne suis pas convaincu...





edit : les diodes de roue libre sont incluses dans les MOSFET, c'est juste qu'on ne les voit pas sur le schéma car le composant n'existait pas dans la bibliothèque du soft

#10 cooljfo

cooljfo

    Membre

  • Membres
  • 14 messages

Posté 12 janvier 2011 - 11:57

pourrait tu explique comment tu a fait le code pour controller ton robot à partir d'une télécommande ? J'avais déja essayer mais tout se que j'avais trouver sur internet semblais un peu trop complexe

#11 zeqL

zeqL

    Membre passionné

  • Membres
  • PipPipPip
  • 393 messages
  • Gender:Male

Posté 13 janvier 2011 - 01:13

Hum tu utilises des MOSFET en discret ou dans un Circuit intégré ? Si oui lequel ?

#12 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 13 janvier 2011 - 02:08

J'utilise les Mosfet en discret, pas dans un CI.

[quote"cooljfo"]pourrait tu explique comment tu a fait le code pour controller ton robot à partir d'une télécommande ?[/quote]J'ai utilisé une bibliothèque que j'ai trouvé sur un forum. Je te poste le lien et le programme dès que je rentre chez moi.

#13 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 13 janvier 2011 - 02:36

Bonjour,



Quelles sont les références de tes MOSFET?

les mosfets logiques (type IRL540 ) Sont faits pour être pilotés par µC (c'est à dire avec une tension de commande de 5V), les autres (IRF 540 par exemple) , c'est plus du 10/15V qu'il leur faut pour se saturer.

Si tu utilises Le 2e type, le transistor n'est pas saturé (mode amplification donc) et c'est normal que tu n'aies pas toute la tension (bien qu'un transistor se comporte comme une source de courant et non pas de tension) je suis en train d'apprendre tout ces trucs sur les transistors (genre capacité de GATE aussi...), il est donc possible que je dises quelques bêtises. Mais ce n'est pas aussi simple que tu le penses pour autant!



Tes PIN 1 et 2, tu utilises bien digitalWrite et non pas analogWrite (tu ne te sers pas des signaux PWM) ? car si tu veux piloter en PWM il faut ajouter des résistances de Gate (entre pin 1 et Q1 par exemple)

Bon courage!

#14 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 13 janvier 2011 - 03:05

Ce sont bien des IRL (IRLU8721PbF). Si je comprends bien la doc, ils devraient saturer à 2V environ (C'est bien "Gate Threshold Voltage" qu'il faut regarder ?), donc je ne comprends pas.



Je vais essayer en envoyant une tension plus importante aux Gates, pour voir si le problème vient de là.



Tes PIN 1 et 2, tu utilises bien digitalWrite et non pas analogWrite (tu ne te sers pas des signaux PWM) ?

Non, pas de PWM. J'ai déjà assez de mal comme ça :p

#15 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 13 janvier 2011 - 03:17

Ha... je pense comme toi: à partir de 2V, ils devraient être saturés... Tu utilises une pile 9V? essaye en mettant le + de la pile à la fois au gate et au drain dans ton montage, juste pour relever la tension du moteur...

#16 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 13 janvier 2011 - 06:32

Ça me donne 6.8 V aux bornes du moteur. Décidément, il y a quelque chose qui m'échappe.

Je vais faire quelques circuits simples autour du Mofset pour essayer de mieux piger le fonctionnement.

#17 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 13 janvier 2011 - 06:37

6.8V c'est pas dramatique, le mosfet a une petite chute de tension à ses bornes... que tu peux d'ailleurs mesurer? le principal est qu'il envoie suffisemment de courant.

#18 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 13 janvier 2011 - 11:43

6.8V et 70mA, le moteur tourne très bien. Bon donc en gros faut que je réussisse à envoyer du 9V pour commander le pont en H.

Je teste avec un transistor en sortie du pin.


#19 Hexa Emails

Hexa Emails

    Membre passionné

  • Membres
  • PipPipPip
  • 439 messages
  • Gender:Male

Posté 13 janvier 2011 - 11:46

Si tu utilise un transistor classique (pas FET) n'oublie pas de mettre une résistance de base (entre PIN et le transistor) ça t'éviteras de faire de la fumée (je parle de vécu)

#20 thibsert

thibsert

    Membre

  • Membres
  • 18 messages

Posté 14 janvier 2011 - 03:40





Voilà, ça fonctionne bien avec les transistors :) Merci MrAlexis pour ton aide. Pour info, j'ai lu à plusieurs endroits que pour un pont utilisant seulement des mosfet N, la partie haute du pont devait être commutée avec une tension supérieure à la tension désirée en sortie. La prochaine fois je ferais un montage plus standard, avec deux N et deux P, qui ne présente pas cet inconvénient.



Plus qu'à faire le même montage pour l'autre moteur, et mon robot pourra faire des marche arrière et autres demis tours...







Cooljfo, en ce qui concerne la télécommande infrarouge, voici la librairy et le bout de code que j'ai bricolé. Comme je l'indiquais plus haut, ça ne fonctionnait pas très bien (pas très réactif), donc il y a sans doute pas mal de trucs à améliorer.



Les codes rc5 définis au début du programme varient selon ta télécommande. Le plus simple pour les connaitre est d'utiliser le code d'exemple "How to receive" et de relever les valeurs sur le Serial Monitor.






// Contrôle deux moteurs grâce à une télécommande infrarouge



#include //doc : http://www.arcfn.com/2009/08/multi-protocol-infrared-remote-library.html



// Définition des codes rc5 (varie selon le modèle de télécommande)

int rc5Haut = 4294950975;

int rc5Gauche = 8415;

int rc5Droite = 6375;

int rc5Bas = 765;

int rc5LED = 4294939245;



//diode IR

int RECV_PIN = 11;

IRrecv irrecv(RECV_PIN);

decode_results results;



//blinkenlights

const int RED_PIN = 5;

const int YELLOW_PIN = 4;

const int GREEN_PIN = 3;

//moteurs

const int RightPin = 9; // pin that the Right Motor is attached to

const int LeftPin = 10; // pin that the Left Motor is attached to



// variables de réglage

int delai_rot = 150; //temps nécessaire pour faire un quart de tour

int delai_av = 400; //réglage du "pas"





//Déclaration de quelques variables

int direction = 0;

int rc5;



void setup() {



pinMode(RED_PIN, OUTPUT);

pinMode(YELLOW_PIN, OUTPUT);

pinMode(GREEN_PIN, OUTPUT);





// initialize serial communications at 9600 bps:

Serial.begin(9600);



irrecv.enableIRIn(); // Start the receiver



pinMode(RightPin, OUTPUT);

pinMode(LeftPin, OUTPUT);

}



void loop() {







//reception du signal, diag

if (irrecv.decode(&results)) {

rc5 = (results.value);

Serial.println(rc5, HEX);





if (rc5 == rc5LED) {

Serial.print(rc5,HEX);

Serial.println(" : Signal LED");

direction = 4;



}





if (rc5 == rc5Haut) {

Serial.print(rc5,HEX);

Serial.println(" : Signal Avancer");

direction = 2;



}



if (rc5 == rc5Gauche) {

Serial.print(rc5,HEX);

Serial.println(" : Signal Gauche");

direction = 1;



}



if (rc5 == rc5Droite) {

Serial.print(rc5,HEX);

Serial.println(" : Signal Droite");

direction = 3;



}







if (rc5 == rc5Bas) {

Serial.print(rc5,HEX);

Serial.println(" : Signal Stop");

direction = 0;



}

irrecv.resume(); // Receive the next value





}



//action à effectuer en fonction du signal reçu :

switch (direction) {

case 2 : //avance d'un pas, puis stop

digitalWrite(LeftPin, HIGH);

digitalWrite(RightPin, HIGH);

delay(delai_av);

direction = 0;

break;

case 0 : //stop

digitalWrite(LeftPin, LOW);

digitalWrite(RightPin, LOW);

break;

case 1 : //1/4 tour à gauche, puis stop

digitalWrite(LeftPin, HIGH);

digitalWrite(RightPin, LOW);

delay(delai_rot);

direction = 0;

break;

case 3 : //1/4 tour à droite, puis stop

digitalWrite(LeftPin, LOW);

digitalWrite(RightPin, HIGH);

delay(delai_rot);

direction = 0;

break;

case 4 : //blinkenlights

digitalWrite(RED_PIN, HIGH);

delay(500);

digitalWrite(YELLOW_PIN, HIGH);

delay(500);

digitalWrite(RED_PIN, LOW);

digitalWrite(GREEN_PIN, HIGH);

delay(500);

digitalWrite(YELLOW_PIN, LOW);

delay(500);

digitalWrite(GREEN_PIN, LOW);

break;

default :

break;

}



}

[/code]




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

0 members, 0 guests, 0 anonymous users