[Aide] Voiture autonome

Bonjour @Toutes et @Tous, :slight_smile:

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 …. :stuck_out_tongue: )
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 :stuck_out_tongue: (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 ? :sweat_smile: :roll_eyes:
Je pilote bien le moteur avec le Bleu et le Marron (- et + ) ou ( + et - ) ? :~

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

Ensuite voici quelques questions d’électronique : :wink:

->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 ? :sweat_smile:
C’est çà, j’ai bon ? :blush:

->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" :wink: )

-> je compte baser mon détecteur de ligne sur 2x5 leds (5 lots d’émettrice/réceptrice) :slight_smile:
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 ? :open_mouth:
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 :grin:

@plus :wink:

Branchement_moteur.jpg

S1050710_copie.jpg

S1050712_copie.jpg

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 : Pololu - 7. Example Project #1: Line Following
C'est pour un autre contrôleur que l'Arduino mais le principe est facile a porter.
Le résultat est là :

@barbudor : MERCI ^^/ pour ta réponse XD
tu as pratiquement répondu à toutes mes questions en un post :astonished: :astonished:
MERCI beaucoup ! je regarde tout cela et je reviens :wink:

@plus

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 ? :smiley:
ça doit pas être compliqué, mais j'en ai jamais fait.... :blush:
Merci d'avance :wink:

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.

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

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 !! :fearful: :fearful:
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) :fearful: :fearful:
je pense qu'il va falloir démonter tout... :sweat_smile: :sweat_smile: =(

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

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

//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 :slight_smile:

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...

Bonsoir

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

Yankee76

@barbudor : :astonished: 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 :wink:

Et oui comme tu le dis ce n'est pas un servo "servomoteur" ,
quand je le regarde (sans le démonter :wink: ) 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 :wink: ) je voulais utiliser les "composants" de ma voiture (dans la mesure du possible :wink: )

@plus

Bonjour @toutes et @tous :smiley:

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 :astonished:)

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 :blush:... 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 :smiley:
(ç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ô :wink:

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 :blush:
    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 !!! :astonished: (là c'est pas bon :sweat_smile: )

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.... :blush:

Si ma question vous parait coe, désolé mais je suis encore un Rookie :blush: :wink:
(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 :wink:

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.

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.

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 :grin:

Bonsoir Ami(e)s Arduinaute :slight_smile:

barbudor:
Solution simple : prendre un 2eme module

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

barbudor:
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" ? :*

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

là par-contre je connais pas :stuck_out_tongue:

Merci @vous deux

si vous avez d'autres réponses ou des précisions, n'hésitez pas :wink:
@plus

Bon ben ....

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

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

@plus

je vous tiendrais au courant en fonctions des évolutions :wink:

S'il est vraiment prévu pour 6V, tu risques de l'user prématurément.

barbudor:
S'il est vraiment prévu pour 6V, tu risques de l'user prématurément.

je sais ... c'est embêtant :frowning: :frowning: :blush:
mais ça me fais ch*** d'utiliser 2 modules ... :frowning: j'avais prévu le 2eme pour autre chose....

y aurait-il pas un moyen moins barbare que le mien et moins onéreux que de mettre 2 modules ? :*

Merci d'avance :wink:

Bonjour à tous ! Je suis en projet de science de l'ingénieur en terminale.
J'ai pour projet de démontrer le fonctionnement d'une voiture autonome. Pour cela mon professeur m'a demandé de créer un programme Arduino, or je ne comprend pas bien même avec son aide.
J'appelle à l'aide !!
Merci d'avance.

On ne fait pas son nid dans celui des autres :grin:

Tu clique sur "New Topic" pour créer un autre fil.

N'oublie pas de mettre un titre explicite, pas de "au secours" ni de "à l'aide".

Expose clairement ton sujet.
Indique le matériel dont tu dispose : référence constructeur et liens vers les datasheets que tu a déjà identifiées car bien sûr avant de venir ici tu as déjà fait des recherches alors fait nous en profiter.

Donne un schéma électrique si tu en a un.

En un mot plus tu sera précis, plus tu aura de chance de trouver quelqu'un qui connait ton sujet et qui pourra t'aider.

@spliffman : c'est pas bien de squatter sans permission ]:smiley: ]:smiley:
@68tjs : Merci pour ton intervention :wink:

Bonjour @toutes et @tous
je profite de cet aparté pour vous donner des nouvelles de l'avancement de mon projet :slight_smile:
j'ai choisis d'utiliser 1 module de contrôle de moteur, je fais passer les 2 moteurs sous 5v (elle ira moins vite, c'est tout :stuck_out_tongue: )
j'utilise la batterie 9,6v pour alimenter la Nano, et je réduit le courant à 5v (de la batterie) pour les équipements.
elle possède (à ce jour) : 5 capteurs de suivi de ligne à l'avant, 1 Sharp infrarouge pour les obstacles à l'avant.
Tout cela est planté sur une platine CI faite sur mesure (bientôt les photos)

voilà pour l'instant il me reste plus qu'à trouver du temps pour finir la programmation. :stuck_out_tongue:

en pièce jointe mon schéma (pas très conventionnel) :sweat_smile: :wink:
@plus