Je vais vous présenter un robot détecteur d’obstacle à base d’Arduino.
Sa réalisation a été faite en trois parties.
Il y a d’abord l’utilisation du capteur ultrason
Puis l’utilisation de shield Moteur pour contrôler les 2 moteur à courant continu à partir de l’Arduino.
Enfin il y a la réalisation de l’algorithme de déplacement du robot.
(Pour voir les 2 premières étapes cliquez sur capteur ou shield_moteur.
Coté Hardware nous avons:
-Arduino Uno Rev3
-Breadboard
-Capteur ultrason HC-SR04
-Shield Moteur L298N V3
-2 Moteurs à courant continu
-Châssis W4D
-Adaptateur Arduino pour pile 9V
-3 Leds
-3 résistances de 560 ohm
-Des fils pour breadboard
I) Assemblage du robot:
On connecte les 2 moteurs à courant continu sur le shield aux bornes A+ A- B+B-. (veillez à bien branchez les 2 moteurs dans le même sens, rouge sur + et noir sur – pour les deux moteurs).
Puis on connecte leds et les broches du capteur comme indiqué par les #define du programme présenté plus bas.
Une fois assemblé, voilà ce que ça donne:
II) L’algorithme de déplacement:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
//moteur droite # define dir1PinA 13 # define dir2PinA 12 # define speedPinA 10 //moteur gauche # define dir1PinB 11 # define dir2PinB 8 # define speedPinB 9 //Radar # define trigger 7 # define eccho 6 //leds # define led_rouge 5 # define led_orange 4 # define led_verte 3 //Variables int dir= 0; int var_tourner =0; int *pointeur; int *pointeur2; void radar(int*); void avancer(); void reculer(int*); void tourner(int*); void setup() { Serial.begin(9600); pinMode(trigger,OUTPUT); pinMode(led_rouge,OUTPUT); pinMode(led_orange,OUTPUT); pinMode(led_verte,OUTPUT); pinMode(eccho,INPUT); pinMode(dir1PinA, OUTPUT); pinMode(dir2PinA, OUTPUT); pinMode(speedPinA, OUTPUT); pinMode(dir1PinB, OUTPUT); pinMode(dir2PinB, OUTPUT); pinMode(speedPinB, OUTPUT); pointeur=&dir; pointeur2=&var_tourner; } void loop() { radar(pointeur); analogWrite(speedPinA, 200); // vitesse fixée arbitrairement analogWrite(speedPinB, 200); if (dir == 0) { avancer(); } if(dir == 1 && var_tourner == 0) { reculer(pointeur2); } if(var_tourner == 1) { tourner(pointeur2); } } void radar(int* pointeur) { long lecture_eccho; long distance; digitalWrite(trigger,HIGH); delayMicroseconds(10); digitalWrite(trigger,LOW); lecture_eccho=pulseIn(eccho,HIGH); distance=lecture_eccho/58; if(distance < 20.0) { digitalWrite(led_rouge,HIGH); digitalWrite(led_orange,LOW); digitalWrite(led_verte,LOW); *pointeur=1; } if(distance > 20.0 && distance < 40.0) { digitalWrite(led_rouge,LOW); digitalWrite(led_orange,HIGH); digitalWrite(led_verte,LOW); *pointeur=0; } if(distance > 40.0) { digitalWrite(led_rouge,LOW); digitalWrite(led_orange,LOW); digitalWrite(led_verte,HIGH); *pointeur=0; } delay(10); } void reculer(int* pointeur2) { digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); digitalWrite(dir1PinB, LOW); digitalWrite(dir2PinB, HIGH); delay(500); *pointeur2=1; } void tourner(int* pointeur2) { analogWrite(speedPinA, 255); analogWrite(speedPinB, 255); digitalWrite(dir1PinA, LOW); digitalWrite(dir2PinA, HIGH); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); delay(1500); *pointeur2=0; } void avancer() { digitalWrite(dir1PinA, HIGH); digitalWrite(dir2PinA, LOW); digitalWrite(dir1PinB, HIGH); digitalWrite(dir2PinB, LOW); } |
bj je souhaiterais savoir si il etait possible d avoir un shema de cablage meme simple pour les differents elements. Je suis en projet avec mes eleves et j aurais souhaiter montrer et realiser votre robot aux eleves.
Merci beaucoup
technollogie@yahoo.fr
Bonjour
Voici un schéma de cablage des éléments.
http://andyautuori.fr/?attachment_id=324
note: ce sont des résistances 560 ohms et pas 560k ohms
Tenez-moi au courant de l’avancée du projet avec vos élèves
Bonne journée
bj merci beaucoup mais j ai un petit souci au niveau du capteur sur le schéma vous m indiquer trig et eccho pin 4 et 2 et dans le pgr c est define 7 et 6. de plus pour les led c est 4,5 et 6 et sur votre schema ce n est pas pareil du coup je dois utiliser deux fois la pin 4 sur l arduino ???
et d autre part comment relier vous les sources d alimentation ( piles ) sur l arduino ou moteur shield
désolé de vous embêter autant merci pour votre aide précieuse!!
Encore moi!!!! est ce que vous pourriez m aider a concevoir un prg pour que le robot pivote a droite des quil rencontre un obstacle a 1cm ou moins. En fait je lui faire faire un parcours et je dois le faire tourner a droite a chaque fois. Pensez vous que c est possible et auriez vous une piste merci encore pour votre aide
je vous laisse mon mail technollogie@yahoo.fr