Go Down

Topic: [Aide] Voiture autonome (Read 3338 times) previous topic - next topic

piflechien54

Bonjour @Toutes et @Tous,  :)

Voilà je viens vous embêter avec mes questions car je suis sur le point de me lancer sur un projet de voiture autonome
(radiocommandée, pas réelle ….  :P )
Je vais avoir du temps avec les vacances.... mdr  XD XD

Il s'agit de la voiture Nikko Renault Maxi Mégane R/C Evolutions Séries
Batterie 9,7V / 650mAh (Nostalgie... quand tu nous tiens  XD)

Mon but final c'est de lui inclure :
-   des capteurs de ligne (Blanche/noire) -> pour suivre une piste
-   des capteurs infrarouges -> pour éviter les obstacles (je vais partir sur 3x gp2d120)
-   des Dels -> pour faire joli :P (style soucoupe volante ou K2000)


Aussi j'ai besoin de quelques petites précisions :

->Sur le moteur, il y a 3 fils : (photo n° 1050710_copie, photo n° 1050712_copie)
-   Un marron relié à un pôle du moteur
-   Un bleu relié à un pôle du moteur
-   Un noir relié à la carcasse du moteur

Et les trois sont reliés entre eux par des condensateurs marqués « 473 ». (schéma branchement_moteur)

Rassurez-moi, le fil noir ne sert que de Masse ? non ?  :smiley-sweat: :smiley-roll-blue:
Je pilote bien le moteur avec le Bleu et le Marron (- et + ) ou ( + et - ) ?  :~


->Le servo moteur de direction comporte 7 fils !!!  :smiley-eek: :smiley-eek: (photo n° 1050715_copie, en bas à droite)
En avez-vous déjà vu des comme cela ?  :smiley-eek-blue:
Comment on fait pour les contrôler ???  :~


Ensuite voici quelques questions d'électronique :  ;)

->Pour pouvoir gérer la vitesse du moteur, je dois passer par un transistor sur lequel je balance un signal PWM plus ou moins rapide en fonction de la vitesse voulue ?   :smiley-sweat:
C'est çà, j'ai bon ?  :smiley-red:


->Si je veux inverser le sens de marche du moteur, je part sur des diodes avec le principe "d'inversion de feu de loco" ?  :~

(heu, je sais c'est pas ça, mais je parle juste du "principe"  ;) )


-> je compte baser mon détecteur de ligne sur 2x5 leds (5 lots d'émettrice/réceptrice)  :)
cependant sur le net, il y a tout pleins d'idée et de versions =(, j'hésite entre :
- Une led émettrice : led de couleur blanche || Une led réceptrice : une photorésistance
ou
- Une led émettrice : led infrarouge || Une led réceptrice : led réceptrice infrarouge

qu'en pensez-vous ?
En avez vous déjà monter ? créer ?  :smiley-surprise:
quels ont été vos résultats ?  :~



MERCI @toutes celles et @tous ceux qui auront pris le temps de me lire.  XD XD
Je suis ouvert à toutes vos réflexions  :smiley-mr-green:

@plus  ;)





Proverbe Tibétain : Un mensonge est un saut du haut du toit

barbudor

Oui la masse métalique du moteur ne sert à rien.
les 3 condensateurs sont des 47nF.

Le contrôle d'un moteur à 2 directions se fait avec un pont en H qui comporte 4 transistors.
Il faut que tu mesures le courant max du moteur (en charge, en forçant un peu sur l'axe) et la tension de fonctionnement.

Je te conseille un pont en H intégré à base de MOSFET et d'éviter le vieux L298 bipolaire qui t'obligera à dissiper de la chaleur et d'utiliser une tension supérieure de 1 à 2V au besoin du moteur.
Perso avec des micros moteurs j'utilise le Toshiba TB6612FNG sur un module breakout de Sparkfun.


Pour le capteur de ligne j'utilise celui-ci : http://www.pololu.com/catalog/product/960 dont je n'utilise que 5 capteurs.

Pour le suivit de ligne, tout les bricolage de code ne donne que des résultats décevant. Une seule solution marche bien c'est la régulation PID.
Voir l'artcile sur le site de Pololu : http://www.pololu.com/docs/0J21/7
C'est pour un autre contrôleur que l'Arduino mais le principe est facile a porter.
Le résultat est là :

http://www.youtube.com/watch?v=KDKY5knWRVg&feature=plcp
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

piflechien54

@barbudor :  MERCI \^^/ pour ta réponse  XD
tu as pratiquement répondu à toutes mes questions en un post  :smiley-eek: :smiley-eek:
MERCI beaucoup ! je regarde tout cela et je reviens  ;)

@plus
Proverbe Tibétain : Un mensonge est un saut du haut du toit

piflechien54

ayé j'ai commandé le matos, j'attends les colis  XD

@barbudor : tu pourrais m'en dire plus concernant le pilotage du pont en H pour le contrôle des moteurs ?  :D
ça doit pas être compliqué, mais j'en ai jamais fait.... :smiley-red:
Merci d'avance   ;)
Proverbe Tibétain : Un mensonge est un saut du haut du toit

barbudor

Pas compliqué du tout
Si tu prends un composant comme le TB6612, il y a 2 pont en H à l'intérieur.

Pour chaque pont tu as 3 entrées :
- PWM
- IN1
- IN2
Tu as la table de vérité à la page 4 de la datasheet

Mais l'utilisation la plus simple c'est :
- PWM = controle de vitesse par une broche PWM. A 0, arret.
- IN1 et IN2 = controle de sens, en mettant toujours IN1 opposé à IN2.
  Pour IN1 et IN2, tu peux soit utiliser 2 pins distinctes (ca en fait 3 avec PWM) ce qui te permet si besoin de gérer tous les cas de la tabel de vérité
  Sur mon robot je n'utilise qu'un pin de controle et un inversue 74'04 pour une IN2 soit toujours à l'opposé de PIN1.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

piflechien54

@barbudor : Merci pour ta réponse si rapide  XD
à voir ton explication, ce n'est pas si dur que cela !!  ;)

Pour mon projet j'ai :
- un moteur (pour avancer et reculer)
- un servo-moteur (pour la direction)

donc je prends pour mon moteur : PWM, IN1, IN2 (avec IN1 != IN2, je pense qu'en programmant cette sécurité, on est sur de pas faire des bétises) -> 3broches

Par contre pour le servo-moteur, là c'est plus dur !!  :smiley-eek-blue: :smiley-eek-blue:
Il possède 6 fils !  =( =(

sur ce site il explique que : http://nikkoevolution.fr/article/article_fiche.php?articleID=278

- le fil rouge : +
- le fil noir : -
ceci ça va  XD mais après ça ce corse :
- le fil bleu : masse
- le fil blanc : milieu de potentiomètre
- le fil vert : borne de potard
- le fil jaune : borne de potard

car sur ce servo, on a un retour du potard....

mais chez moi, les fils sont de couleurs différentes.... (dans l'ordre : blanc,gris,violet,bleu)  :smiley-eek-blue: :smiley-eek-blue:
je pense qu'il va falloir démonter tout... :smiley-sweat: :smiley-sweat: =(

et ensuite je pense que je commanderai le servo via la platine TB6612 (avec le 2ème pont)  ;)

Pour info j'ai trouver un code correspondant à la platine TB6612 :

Code: [Select]
//motor A connected between A01 and A02
//motor B connected between B01 and B02

int STBY = 10; //standby

//Motor A
int PWMA = 3; //Speed control
int AIN1 = 9; //Direction
int AIN2 = 8; //Direction

//Motor B
int PWMB = 5; //Speed control
int BIN1 = 11; //Direction
int BIN2 = 12; //Direction

void setup(){
  pinMode(STBY, OUTPUT);

  pinMode(PWMA, OUTPUT);
  pinMode(AIN1, OUTPUT);
  pinMode(AIN2, OUTPUT);

  pinMode(PWMB, OUTPUT);
  pinMode(BIN1, OUTPUT);
  pinMode(BIN2, OUTPUT);
}

void loop(){
  move(1, 255, 1); //motor 1, full speed, left
  move(2, 255, 1); //motor 2, full speed, left

  delay(1000); //go for 1 second
  stop(); //stop
  delay(250); //hold for 250ms until move again

  move(1, 128, 0); //motor 1, half speed, right
  move(2, 128, 0); //motor 2, half speed, right

  delay(1000);
  stop();
  delay(250);
}

void move(int motor, int speed, int direction){
//Move specific motor at speed and direction
//motor: 0 for B 1 for A
//speed: 0 is off, and 255 is full speed
//direction: 0 clockwise, 1 counter-clockwise

  digitalWrite(STBY, HIGH); //disable standby

  boolean inPin1 = LOW;
  boolean inPin2 = HIGH;

  if(direction == 1){
    inPin1 = HIGH;
    inPin2 = LOW;
  }

  if(motor == 1){
    digitalWrite(AIN1, inPin1);
    digitalWrite(AIN2, inPin2);
    analogWrite(PWMA, speed);
  }else{
    digitalWrite(BIN1, inPin1);
    digitalWrite(BIN2, inPin2);
    analogWrite(PWMB, speed);
  }
}

void stop(){
//enable standby 
  digitalWrite(STBY, LOW);
}


Voilà @plus  :)
Proverbe Tibétain : Un mensonge est un saut du haut du toit

barbudor

Ce que je comprend de cet article c'est que le servo Nikko n'est pas un servo traditionnel.
C'est pas tant que l'on a un retour, c'est qu'il n'a pas l'électronique d'asservissement

Un servo nomal reçoit une alimentation ( + et - )
Un signal de commande sous la forme d'une impulsion de période total 20ms et dont la durée de l'état haut varie entre 1,5ms et 2,5ms.
A 1,5ms le servo est tout a gauche, a 2ms il est au milieu à 2,5ms il est tout a droite.

Cela marche grâce à une petite carte électronique dans le servo qui compare la longueur de l'impulsion à la position du servo (via le potentiomètre).

Dans le cas du servo Nikko, pas de carte de contrôle.
Tu as accès directement à la commande du moteur et au potentiomètre.

Comment faire ?

- Pour la commande du moteur, il te reste un pont en H de dispo dans le TB6612
- Le potar tu relie une borne au +5V, l'autre borne au GND et la borne du milieu à une entrée analogique da l'Arduino.
Et puis il va falloir faire ta régulation tout seul

C'est à dire que dans la loop() tu va :
- lire la position du potar (analogRead) qui donne une valeur entre 0 et 1023
- calculer la différence avec la consigne c'est à dire la valeur que tu veux atteindre (genre 0 tout à gauche, 512 milieu, 1023 tout à droite)
- En fonction de la différence (signe + ou - et amplitue (valeur absolue) tu va commander le moteur du servo

Le mieux étant là d'utiliser le fameux algorithme PID qui est un peu plus compliqué que prendre en compte la différence de valeur instantanée.

Maintenant comment repérer les fils ?

Tu va devoir sonder avec un ohmmètre, en plaçant le moteur vers le milieu (pas en butée)
Tu devrais trouver :
- 2 fils qui ont entre eux une résistance ni nulle ni infinie et une résistance infinie avec les 4 autres fils : c'est le moteur
- 3 fils qui ont entre eux une résistance ni nulle ni infinie et une résistance infinie avec les 3 autres fils : c'est le potentiometre

Sur les 3 fils du potentiomètre, tu trouve celle du milieu (BC) telle que résistance(B1, BC) + résistance(BC, B2) = résistance(B1, B2)

Celui qui reste c'est la masse...

Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

yankee76

Bonsoir

Il serait peut plus simple d'acheter un servo "classique".

Yankee76

piflechien54

@barbudor :   :smiley-eek: Woo !
MERCI pour tes explications si détaillées !! j'en demandais pas tant  XD XD
j'étais même prêt à démonter ce simili servo  ;)

Et oui comme tu le dis ce n'est pas un servo "servomoteur" ,
quand je le regarde (sans le démonter  ;) ) on voit très bien le moteur sans carte électronique

Je vais appliquer ce que t'as dit, et sinon .... ben je prendrais un tournevis  XD XD

@yankee76 : je suis d'accord avec toi surtout que j'en ai commandé pour mon hexapode...  XD
mais (ben oui, y-a toujours un mais ;) ) je voulais utiliser les "composants" de ma voiture (dans la mesure du possible ;) )

@plus
Proverbe Tibétain : Un mensonge est un saut du haut du toit

piflechien54

Bonjour @toutes et @tous  :D

voilà donc j'ai avancé un peu dans mon projet, il ne reste plus que le chassis de la voiture, son moteur et son servo de direction avec sa direction. (c'est super léger  :smiley-eek:)

de plus je connais maintenant le code couleur des fils du servo de direction  XD (Merci barbudor) :

- gris -> borne moteur
- Blanc -> borne moteur
- violet -> masse moteur

- Rouge -> borne potentiomètre
- Bleu -> borne potentiomètre
- Noir -> borne du milieu du potentiomètre (celle qui varie  :smiley-red:... enfin vous comprenez  XD )

j'ai plus qu'à m'atteler à créer un programme de gestion de la direction, et ensuite un programme pour qu'elle suive sa ligne  :D
(ça me changera de mon programme du serpent, que j'arrive toujours pas à finaliser...  :0 )

@plus pour de nouvelles aventures dans le monde fantastique de la robotique  XD XD
tchô  ;)
Proverbe Tibétain : Un mensonge est un saut du haut du toit

piflechien54

Bonjour @toutes et @tous les Arduinautes  XD

voilà j'ai un souci avec le Module TB6612FNG :


car j'ai 2 moteurs :
- le premier pour avancer et reculer piloté sur A01, A02 avec PWMA, AIN1, et AIN2, son alimentation de 9,6V sur VM
(ça c'est ok  XD )
- le deuxième sert à la direction mais celui-ci ne peut être piloté que sous 6V  :smiley-red:
or si je le branche sur B01, B02 avec PWMB, BIN1, et BIN2
il sera alors alimenté grâce à VM qui est en 9,6V !!!  :smiley-eek: (là c'est pas bon  :smiley-sweat: )

il y aurait-il un moyen de garder le câblage mais de rajouter une petite chose entre mes bornes moteur de direction et B01, B02 afin qu'il soit sous une tension <=6v....  :smiley-red:

Si ma question vous parait co**e, désolé mais je suis encore un Rookie :smiley-red:  ;)
(et puis tant que l'on apprend des choses en posant des questions, elles ne sont jamais c***e heu... inutiles  XD)

@plus et Merci  ;)
Proverbe Tibétain : Un mensonge est un saut du haut du toit

barbudor

Bonjour

Solution simple : prendre un 2eme module

Solution stupide (mais j'en vois pas d'autre) : mettre 2 séries tête bèches de 5 x 1N4007 pour faire chuter la tension.
Barbuduino: Arduino sur Breadboard & VinciDuino: Clone Leonardo // WR703: Mini-routeur hacké // LauchPad MSP430 et Stellaris // Panda II Arduino-like .NetMF sous VisualC#
RTFC: Read That F.....g Code / RTFD: Read That F.....g Doc / RTFDS: Read That F.....g DataSheet / RTFS: Read That F.....g Schematic / Wot da ya wanna D.I.Y. today ?

Artouste


Bonjour

Solution simple : prendre un 2eme module

Solution stupide (mais j'en vois pas d'autre) : mettre 2 séries tête bèches de 5 x 1N4007 pour faire chuter la tension.


Bonsoir Barbudor,
idée rapide peut etre finalement pas viable, mais les sorties BO1 B02 selon le sens sont en inversion de courant (principe du H)
je me demande si l'emploi d'un couple de regulo 7806/7906 ne serait pas utilisable ?
pas le courage ce soir de verifier  :smiley-mr-green:

piflechien54

Bonsoir Ami(e)s Arduinaute :)

Solution simple : prendre un 2eme module

ça je peux faire, j'en avais acheté un de + (au cas ou) :)
mais c'est dommage d'en avoir 2 pour seulement 2 moteurs (au lieu de 4)  :smiley-red: :~

Solution stupide (mais j'en vois pas d'autre) : mettre 2 séries tête bèches de 5 x 1N4007 pour faire chuter la tension.

je peux aussi mais c'est pas un peu à la "barbare" ?  :*

je me demande si l'emploi d'un couple de regulo 7806/7906 ne serait pas utilisable ?

là par-contre je connais pas  :P

Merci @vous deux

si vous avez d'autres réponses ou des précisions, n'hésitez pas ;)
@plus
Proverbe Tibétain : Un mensonge est un saut du haut du toit

piflechien54

Bon ben ....

après des tests, en élevant graduellement la tension, le moteur de direction tient bon le 9v  :smiley-red:

acceptez toutes mes excuses, pour vous avoir embêter avec ma question...  :smiley-red: :smiley-red:

@plus

je vous tiendrais au courant en fonctions des évolutions  ;)
Proverbe Tibétain : Un mensonge est un saut du haut du toit

Go Up