GUIDE DE CONSTRUCTION Voiture Autonome Robobox Niveau IV Robot voiture Le modèle de ce mois est la voiture autonome. Capable de se déplacer et d’éviter les obstacles, elle vous permettra de découvrir l’utilisation du capteur de distance, des roues et de la puce L293D. 2X Blocs Roues 2X Moteurs + Réducteurs 1X Bloc lien Pièces 10X Cables malemale 2X Roues 1X Puce L293D Instructions Nous vous conseillons de suivre pas à pas les étapes ci-dessous. Encore plus de détails sont disponibles sur TeamRobobox.fr. N’hésitez pas à poser vos questions sur le site si vous êtes bloqué, nous vous répondrons rapidement. Pour ce montage vous aurez besoin de pièces de box précédentes, notamment la Carte Uno, la breadboard et quelques fils . Bonne chance ! Etape 1 Voiture Autonome _1_ M0NT4GE Déballez tous les composants et vérifiez que le nombre de pièces correspond au détail ci-dessus. Vous devrez au cours de ce montage récupérer des pièces d’anciens modèles comme la breadboard, des fils malefemelle, la carte Uno, le détecteur de distance et un servomoteur. Une fois votre montage terminé, n’hésitez pas à nous le montrer sur Twitter ou Facebook ☺ Etape 3 Etape 2 1 2 2 1 Incrustez les moteurs dans les « Blocs Roues » puis clipsez les roues à l’aide des embouts cylindriques. Faites à présent glisser la pile à l’intérieur du « Bloc Pile » prévu à cet effet. Etape 6 Etape 5 Etape 4 Voiture Autonome _1_ M0NT4GE Emboitez le détecteur de distance sur la « Mini-Breadboard ». Il doit être placé à la droite de la carte, car sur la gauche nous installerons la puce L293D (schéma 1.0 en page 5). Reliez le « Bloc Pile » à un « Bloc Corps » à l’aide du « Bloc lien », puis ajoutez la « Breadboard » équipée du « Capteur Ultrason » à l’avant de ce montage grâce à un « Bloc triangle ». Emboitez les deux « Roues », puis ajoutez la « Carte Uno » sur son « Cardholder ». Voiture Autonome Pin 4 _1_ M0NT4GE - Moteur GND GND droit + Moteur Pin 2 droit Pin 5 5V Schéma 2.0 – Montage en série du courant 5V Pin 11 5V Pin 12 Pin 8 - Moteur gauche GND GND + Moteur gauche Schéma 1.0 – Branchements L293D Etape 7 5V L’étape suivant est très délicate. Vous devez placer la puce L293D tout à gauche de la « Mini Breadboard », les pins avec des câbles male-male comme indiqué sur le schéma 1.0. Vous remarquerez que vous ne possédez pas assez de pins 5V et GND sur votre carte, vous devrez alors effectuer un montage en série pour récupérer le courant. Comme sur le schéma 2.0 ci contre. Voiture Autonome _2_ PR0GR4M4T10N Et voila ! Votre montage est terminé, il ne reste plus qu’à programmer votre carte! Il est fortement conseillé de débrancher la carte du montage avant d’envoyer le code dessus ! Etape 8 Ici nous verrons les instructions ‘logiciel’ c’est à dire le code qui sera envoyé dans notre petite machine. Ce code va permettre à la voiture autonome de suivre les instructions que nous désirons. Afin de taper ce code, lançons le logiciel Arduino. C’est dans la grande fenêtre blanche au centre que nous devrons écrire notre code. Vous pouvez recopier directement le code à l’intérieur de l’interface Arduino mais nous vous conseillons aussi de lire les explications ci-dessous. Bonne chance ! Le code de ce robot est beaucoup plus long que celui des précédents. N’hésitez pas à la copier/coller à partir de notre site teamrobobox.fr et de suivre les explications en parallèle. #include <NewPing.h> int pin1Moteur1 = 12; int pin2Moteur1 = 8; int pinPMoteur1 = 11; int pin1Moteur2 = 2; int pin2Moteur2 = 4; int pinPMoteur2 = 5; int TRIG_PIN = 10; int ECHO_PIN = 9; int DIST_MAX = 200; int i = 90; int distActuelle = 0; int cm; NewPing sonar(TRIG_PIN, ECHO_PIN, 200); Nous allons tout d’abord définir les variables globales que nous utiliserons à travers le code ainsi que les bibliothèques nécessaires. Dans un premier temps nous devons introduire la bibliothèque NewPing.h. Elle permet d’interagir avec le capteur de distance et vous l’avez déjà utilisée lors du précédent montage. Voiture Autonome _2_ PR0GR4M4T10N Ensuite nous créons un ensemble de 3 variables ‘pin moteur’ pour chaque moteur, avec un rôle précis pour toutes : - pin1moteur : instruction d’avancer (1 = avancer, 0 = ne rien faire) - pin2moteur : instruction de reculer (1= reculer, 0 = ne rien faire) - pinPmoteur : correspond à la puissance ( en % ) du moteur Etape 9 a Nous définissons ensuite des variables globales. Les variables TRIG_PIN et ECHO sont associées au capteur de distance et ont la valeur des pins auxquels elles seront reliées. La variable DIST_MAX est initialisée à 200 cm et correspond à la distance maximum que le robot pourra capter. Enfin nous créons un objet sonar qui reprend ces dernières variables. Maintenant nous devons initialiser notre programme, nous allons void setup() { seulement définir toutes les pinMode(pin1Moteur1,OUTPUT); variables ‘pin moteur’ créées plus pinMode(pin2Moteur1,OUTPUT); haut en ‘OUTPUT’ c’est-à-dire en pinMode(pinPMoteur1,OUTPUT); sortie. pinMode(pin1Moteur2,OUTPUT); pinMode(pin2Moteur2,OUTPUT); Puis, nous détaillons la fonction pinMode(pinPMoteur2,OUTPUT); ‘loop’, la boucle sans fin dans } laquelle nous procéderons en plusieurs étapes : void loop() { 1 – Récupérer la distance à laquelle distActuelle = lectureDistance(); se trouve l’objet en face de nous if (distActuelle > 20){ 2 – Si le robot se trouve à plus de avance(); 20 cm de l’objet devant lui alors il } peut avancer if (distActuelle < 20){ 3 – S’il se trouve à une distance de recule(); moins de 20 cm alors il doit reculer tourneDroite(); et tourner à droite } 4 – Nous attendons enfin 300 delay(300); millisecondes } Nous allons ensuite créer la fonction dirMoteur qui sera utilisée pour les fonctions avance(), recule() et tourneDroite(). Etape 9 b Voiture Autonome _2_ PR0GR4M4T10N La fonction dirMoteur prend 3 arguments : moteur, sens et void dirMoteur(int moteur,int sens,int pc) pourcentage. { - Moteur : définit le moteur à int pin1,etat1,pin2,etat2,pinP,puissance; contrôler ( 1 ou 2) - Sens : indique le sens du if (moteur==1){ moteur, 1 pour l’avant, -1 pin1=pin1Moteur1; pour l’arrière et 0 pour l’arrêt. pin2=pin2Moteur1; - Pourcentage : correspond à la pinP=pinPMoteur1; vitesse du moteur, 0% étant } l’arrêt et 100% étant la pleine else { vitesse. pin1=pin1Moteur2; pin2=pin2Moteur2; Dans un premier temps nous pinP=pinPMoteur2; définissons les pins } correspondant au moteur choisi. if (sens==1){ Dans un second temps nous etat1=1; définissons l’état correspondant etat2=0; au choix du sens, une valeur de 1 } pour la variable etat1 else if (sens==-1){ correspond à une avance, et une etat1=0; valeur de 1 pour la variable etat2 etat2=1; correspond à un recul. } else { Nous transformons ensuite la etat1=0; variable puissance d’une échelle etat2=0; de 0 à 100 à une échelle de 0 à } 255 grâce à la fonction ‘map’. puissance=map(pc,0,100,0,255); analogWrite(pinP,puissance); Enfin nous envoyons ces valeurs digitalWrite(pin1,etat1); aux pins, avec digitalWrite() digitalWrite(pin2,etat2); pour pin1 et pin2 et } analogWrite() pour pinP, ce qui permet d’envoyer une valeur comprise entre 0 et 255. Voiture Autonome _2_ PR0GR4M4T10N Nous allons ici utiliser la fonction dirMoteur() pour créer nos 3 fonctions : avance() , recule() et tourneDroite(). Etape 10 Pour créer la fonction avance() nous appelons deux fois la fonction dirMoteur() comme ceci : dirMoteur( 1 , 1 , 100 ); - Demande au moteur 1 - D’aller tout droit - À 100% de sa vitesse max void avance(){ dirMoteur(1,1,100); dirMoteur(2,1,100); } Pour faire avancer le second moteur nous changeons juste la première variable : dirMoteur(2,1,100); void recule(){ dirMoteur(1,0,100); dirMoteur(2,0,100); delay(2000); dirMoteur(1,-1,100); dirMoteur(2,-1,50); } Vous comprenez ainsi assez facilement comment vont s’orchestrer les prochaines fonctions, la fonction recule() arrête les moteurs : dirMoteur(1,0,100); Puis les fait reculer : void tourneDroite(){ delay(1000); dirMoteur(1,-1,100); dirMoteur(2,0,0); delay(1000); dirMoteur(1,-1,100); dirMoteur(2,1,50); delay(1000); } dirMoteur(1,-1,100); Enfin, la fonction tourneDroite() suit la même logique en faisant reculer une roue et en arrêtant l’autre. Voiture Autonome Etape 11 int lectureDistance() { delay(70); unsigned int uS = sonar.ping(); cm = uS / US_ROUNDTRIP_CM; if(cm == 0){ lectureDistance(); } else{ return cm; } _2_ PR0GR4M4T10N Pour terminer, nous créons la fonction lectureDistance() que nous avons déjà aperçue dans le passé. Cette fonction permet de récupérer la distance lue par le capteur de distance. Vous remarquerez qu’à l’intérieur de la fonction nous faisons appel à elle-même ! Cela peut paraître contre-intuitif mais est tout à fait possible. Nous indiquons au programme, que tant que la distance mesurée (cm) n’est pas supérieure à 0 alors on doit relancer la fonction. Le challenge de ce mois? Nous vous proposons de corser les choses en permettant à votre robot de voir tout autour de lui. Vous aurez besoin d’un servo moteur utilisé dans une des box précédents ! Bonne chance ! ...COMPLETED Voiture Autonome _3_ N0T35_D’ELECTR0N1QUE Le transistor Le transistor est un composant basique de la plupart des montages électroniques. Lorsque nous branchons une LED sur une pile, le courant passe directement au travers et nous ne pouvons pas le contrôler. Le transistor lui, va permettre de moduler ce courant et de l’adapter à nos besoins. Cette action est rendue possible par son branchement à une autre source de courant qui modifiera la résistance dans le montage. Au cœur du transistor se trouve un matériau ‘semiconducteur’, c’est-à-dire un matériau qui ne transmet le courant que lorsqu’il est lui-même relié à une source de courant. On utilise aujourd’hui principalement du Silicium. Un transistor a donc trois extrémités : - La base b - L’émetteur e - Le Collecteur c e b c Il existe deux types de transistors : PNP qui nécessite une tension négative à la base (b) pour laisser passer le courant. NPN qui nécessite une tension positive à la base (b) pour laisser passer le courant. On peut illustrer l’utilisation d’un transistor grâce au montage ci dessous. Lorsqu’on augmentera la tension au pin3 et le courant passera à travers le circuit (et la LED), le transistor agit comme un interrupteur. Pourquoi alors ne pas simplement utiliser le pin3 pour moduler le courant que l’on envoie à travers la LED et se passer du transistor? Et bien parce que le courant généré par la source 5V est beaucoup plus fort que celui généré par le pin3. Le transistor agit alors comme un amplificateur de courant. Le rapport entre le courant dans notre circuit et le courant issu du pin3 est appelé le gain en courant. pin3 1KΩ b 5V e c GND Voiture Autonome _3_ N0T35_D’ELECTR0N1QUE Le pont-H Les transistors permettent donc de gérer le courant qui traverse un composant (LED, buzzer ou encore moteur). Mais dans un montage un peu plus complexe, le pont-H, permet un usage encore plus intéressant. A la différence des LEDs, les moteurs ont la particularité de pouvoir fonctionner quelque soit le sens du courant. En revanche en faisant varier le sens du courant on modifiera le sens de rotation du moteur. + t1 M t2 - Si t1 et t3 sont ouverts : un courant positif traverse le moteur Si t2 et t4 sont ouverts : un courant négatif traverse le moteur Si plus de 2 transistors sont ouverts : le courant ne circule pas Si t1 et t2 ou t3 et t4 sont fermés : le montage court-circuite t3 - En utilisant un montage avancé, à l’aide de 4 transistors, nous pouvons modifier à distance le sens du courant qui traversera le moteur. Ce montage, illustré à droite, est appelé un pont-H. Sur nos schémas : t4 + t1 t4 M t2 t3 - Voiture Autonome _3_ N0T35_D’ELECTR0N1QUE Le L293D Pour éviter d’avoir beaucoup de fils, et donc faciliter le montage, il existe des composants contenant eux-mêmes un ou plusieurs pont-H. C’est le cas du L293D. Le L293D permet de gérer la puissance et la direction de deux moteurs grâce à deux pont-H intégrés. Le pin a peut recevoir deux états : HIGH ou LOW. Lorsque a reçoit un signal HIGH le moteur sur le côté gauche devient utilisable. Le pin p agit de la même manière pour le moteur droit. Les pins b et g sont les pins qui contrôlent le sens du moteur gauche : - Lorsque b est HIGH et g LOW : Le moteur tourne dans le sens horaire - Lorsque b est LOW et g HIGH : Le moteur tourne dans le sens antihoraire - Lorsque b et g sont HIGH – HIGH ou LOW-LOW rien ne se passe. En reprenant les schémas de la page précédente b HIGH correspond à t1 et t3 fermés et g LOW correspond à t1 et t3 ouverts. Les pins j et o font de même pour l’autre moteur. Le pin h reçoit la source de courant destinée au moteur (Vss). Elle peut aller jusqu’à 36V et 1200mA (600mA par channel). Le pin i reçoit lui le courant pour le contrôle interne du composant soit 5V (Vcc). Les pins d, e, l et m sont eux connectés à la terre. M Vss a i b j c k d l e m f n g o h p Vcc M