Présentation du tutoriel
Piloter une voiture par Bluetooth avec un téléphone Android. Pour se faire on a utilisé le châssis d’une ancienne voiture qu’on n'a assemblé avec le matériel que nous avons listé ci dessous pour réaliser ce projet. Pour les moteurs qui ont permis à la propulsion et la direction nous avons utilisé ceux d’origine qui se trouvaient déjà sur la voiture (puisqu'ils étaient en bon état).
Vous pouvez avoir tous ces composant sur Dakar Proto Shop
Ce dont vous avez besoin
- 1 Arduino UNO R3
- 1 Bluetooth SMIRF Silver
- 1 ProtoShield
- 1 circuit intégré L239D H-bridge
- 1 châssis voiture
- 2 moteurs DC
- 5 piles AA assemblées
- 4 leds
- 2 résistances 220 Ohm pour les phares
- 2 résistances de 1000 Ohm pour les transistors
- 2 transistors 2N3904 NPN ou équivalent
- Des fils de différentes couleurs
- Des connecteurs males et femelles
Vous pouvez avoir tous ces composant sur Dakar Proto Shop
1- Montage sur BreadBord
Image1: Câblage sur une breadbord
Apres avoir terminé avec les phares nous allons vous montrer comment nous avons monté le kit Bluetooth. Mais tout d’abord nous allons faire un petit résumé sur ce module Bluetooth pour vous faciliter sa compression.
Comme nous l'avons dis précédemment à la partie matériel nous avons utilisé un BlueSMIRF silver qui a une portée maximale de 10 mètre contrairement au Gold qui peut atteindre les 100 mètres. Il est facile à utiliser et très compatible avec Arduino UNO R3 ici utilisé. Vous pouvez le trouver ici et ici.
2- Présentation de la carte bluetooth
Il contient deux LEDS. Une LED rouge appelée «STAT LED» et une LED verte appelée «CONNECT LED». Elles sont utilisées pour montrer l’état dans lequel se trouve la carte.
Image2: la carte bluetooth et les différentes parties
Les entrées, sorties et puissance
Les entrées, sorties et puissance
Nom des pins
|
Fonction des pins
|
Entrées sorties et puissance
|
Description
|
RTS-O
|
Request to send
|
Output
|
RTS est utilisé pour le contrôle de flux matériel dans
certaines interfaces série. Cette sortie n’est pas critique pour la communication série simple. |
RX-I
|
Serial receive
|
Input
|
Cette broche reçoit des données de série d'un autre
appareil. Il doit être raccordé au TX de l'autre appareil. |
TX-O
|
Serial transmit
|
Output
|
Cette broche transmet les données série à un autre
appareil. Il doit être connecté à la RX de l'autre appareil. |
VCC
|
Voltage supply
|
Power In
|
Ce signal de tension d'alimentation est acheminé à
travers un régulateur de 3,3 V, alors acheminé vers le module Bluetooth. Il devrait se situer entre 3,3 V à 6V. |
CTS-I
|
Clear to send
|
Input
|
CTS est un autre signal série de contrôle de flux.
Comme RTS, il ne est pas nécessaire pour la plupart, des interfaces série simples. |
GND
|
Ground
|
Power In
|
La tension de référence 0V, commune à un autre appareil
connecté au modem Bluetooth. |
Le BlueSMiRF s’alimente aussi bien en 3,3V qu’en 5V. La tension fournie aux broches VCC / GND peut être ne importe où entre 3,3 et 6V. Les tensions sur les signaux séries et de commande d'entrée (RX-I et CTS-I) peuvent être comprises entre 3,3 V et 5 V. Les signaux de sortie (TX-O et O-RTS) sont à 0 V pour le niveau logique bas, et VCC pour un niveau logique haut.
3-Comment monter sa carte BlueSMiRF ?
Nous avons souder des pins sur la carte pour faciliter son montage sur notre protoshieldImage3: la carte avec des pins soudés
TX-O est reliée au pin 2 de l'Arduino, RX-i est reliée au pin 3 de l’arduino, GND à GND, VCC à 5V. Les broches CTS-I et RTS-S ne sont pas connectées. Les broches TX-O et RX-I pourraient être connectées à n’importe quelle broche numérique (supérieur à 0 et 1), si vous avez besoin 2 et 3 pour autre chose.
Image4: montage de la carte BlueSMiRF sur un Arduino UNO R3
Après avoir préparé notre carte Bluetooth on va à présent faire un peu de soudure sur le Protoshield. On va ajouter le H-Bridge L239D IC ( dans le cercle rouge) et des pins femelles pour monter la carte. Comme dans l’image qui suit.
Image4: montage de la carte BlueSMiRF sur un Arduino UNO R3
Après avoir préparé notre carte Bluetooth on va à présent faire un peu de soudure sur le Protoshield. On va ajouter le H-Bridge L239D IC ( dans le cercle rouge) et des pins femelles pour monter la carte. Comme dans l’image qui suit.
Image5: Protoshield et le H-Bridge monté la dessus.
Un petit commentaire sur le L239D IC s’impose parce que c’est un élément très important pour le pilotage. Le circuit intégré H-Bridges L239D IC permet de contrôler deux moteurs DC grâce à ses 16 pins dont 4 pins de contrôle qui sont ici les pins (2, 7, 10 et 15) pins respectives des moteurs de propulsion et direction. Il s’active avec le Enable pin qui se trouve sur ces pattes (1 et 9). Ses deux pattes du milieu de chaque cote sont relies au GND (ground, 0V). Les autres les pattes (4, 5, 12 et 13) sont raccordées aux deux moteurs. Et le reste de ses pattes (8 et 16) sont reliées au VCC (5V). Et c’est grâce à ce petit circuit intégré qu’on peut contrôler les moteurs dans notre application. Vous pouvez vous procurer ce composant dans sur dakarprotoshop.
Si vous avez des questions n’hésitez pas à les posez en commentaires.
Un petit commentaire sur le L239D IC s’impose parce que c’est un élément très important pour le pilotage. Le circuit intégré H-Bridges L239D IC permet de contrôler deux moteurs DC grâce à ses 16 pins dont 4 pins de contrôle qui sont ici les pins (2, 7, 10 et 15) pins respectives des moteurs de propulsion et direction. Il s’active avec le Enable pin qui se trouve sur ces pattes (1 et 9). Ses deux pattes du milieu de chaque cote sont relies au GND (ground, 0V). Les autres les pattes (4, 5, 12 et 13) sont raccordées aux deux moteurs. Et le reste de ses pattes (8 et 16) sont reliées au VCC (5V). Et c’est grâce à ce petit circuit intégré qu’on peut contrôler les moteurs dans notre application. Vous pouvez vous procurer ce composant dans sur dakarprotoshop.
Code Arduino:
#include <SoftwareSerial.h> // bluetooth setup int bluetoothTx = 2; // TX-O pin of bluetooth mate, Arduino D2 int bluetoothRx = 3; // RX-I pin of bluetooth mate, Arduino D3 SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); // H-Bridges pins int const controlPin1=6; // pin 2 on L293D IC int const controlPin2 = 4; // pin 7 on L293D IC int const controlPin3 = 8; // pin 10 on L293D IC int const controlPin4 = 11; // pin 15 on L239D IC int const enablePin1 = 9; // pin 1 on L239D IC int const enablePin2 = 10;// pin 9 on L293D IC // lights pins int ledPin1 = 7; // LED connected to pin 7 int ledPin2 = 12; // LED connected to pin 12 int hornPin = 5; int motorSpeed = 100; boolean warningOn=false; boolean frontLightOn=false; boolean backLightOn=false; void setup() { //Setup des pins pinMode(controlPin1, OUTPUT); pinMode(controlPin2, OUTPUT); pinMode(enablePin1, OUTPUT); pinMode(controlPin3, OUTPUT); pinMode(controlPin4, OUTPUT); pinMode(enablePin2, OUTPUT); pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT); pinMode(hornPin, OUTPUT); digitalWrite(controlPin1, LOW); digitalWrite(controlPin2, LOW); digitalWrite(enablePin1, LOW); digitalWrite(controlPin3, LOW); digitalWrite(controlPin4, LOW); digitalWrite(enablePin2, LOW); digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); digitalWrite(hornPin, LOW); Serial.begin(9600); // Begin the serial monitor at 9600bps // activation du bluetooth bluetooth.begin(115200); // The Bluetooth Mate defaults to 115200bps bluetooth.print("$"); // Print three times individually bluetooth.print("$"); bluetooth.print("$"); // Enter command mode delay(100); // Short delay, wait for the Mate to send back CMD bluetooth.println("U,9600,N"); // Temporarily Change the baudrate to 9600, no parity // 115200 can be too fast at times for NewSoftSerial to relay the data reliably bluetooth.begin(9600); // Start bluetooth serial at 9600 bluetooth.flush(); } void loop() { char val; // variable to receive data from the serial port if(bluetooth.available()) // If the bluetooth sent any characters { val =(char)bluetooth.read(); // read it and store it in 'val' } switch(val) { case 'F': forward (); // car run forward straight(); break; case 'B': back (); // car run back straight(); break; case 'R': turnRight (); // car turn Rght stopProp(); break; case 'L': turnLeft (); // car turn Left stopProp(); break; case 'W': frontLightOn=true; // light front on break; case 'w': frontLightOn=false; // light front off break; case 'U': backLightOn=true; // light back on break; case 'u': backLightOn=false; // light back off break; case 'G': { turnLeft(); forward (); } break; case 'I': { turnRight(); forward (); } break; case 'H': { turnLeft (); back (); } break; case 'J': { turnRight (); back(); } break; case 'V': hornOn (); break; case 'v': hornOff (); break; case 'X': warningOn=true; break; case 'x': warningOn=false; break; case 'S': stopAll (); break; default: //Get velocity if(val=='q') { motorSpeed= 255; //Full velocity } else { if((val >= 48) && (val <= 57)) //Chars '0' - '9' have an integer equivalence of 48 - 57, accordingly. { //Subtracting 48 changes the range from 48-57 to 0-9. //Multiplying by 25 changes the range from 0-9 to 0-225. motorSpeed= (val- 48)*25; Serial.print("motorSpeed:"); Serial.println(motorSpeed); } } } setLight(); } void forward () { digitalWrite(controlPin1,LOW); digitalWrite(controlPin2,HIGH); analogWrite(enablePin1, motorSpeed); } void back () { digitalWrite(controlPin1,HIGH); digitalWrite(controlPin2,LOW); analogWrite(enablePin1, motorSpeed); } void stopProp () { analogWrite(enablePin1, 0); } void turnLeft () { digitalWrite(controlPin3, HIGH); digitalWrite(controlPin4, LOW); analogWrite(enablePin2, 250); } void turnRight () { digitalWrite(controlPin3, LOW); digitalWrite(controlPin4, HIGH); analogWrite(enablePin2, 250); } void straight () { analogWrite(enablePin2, 0); } void stopAll () { analogWrite(enablePin1, 0); analogWrite(enablePin2, 0); } void hornOn () { tone(hornPin, 220); } void hornOff () { noTone(hornPin); } void setLight () { if (warningOn){ if (millis()%1000 <500) { digitalWrite(ledPin1, HIGH); digitalWrite(ledPin2, HIGH); } else { digitalWrite(ledPin1, LOW); digitalWrite(ledPin2, LOW); } } else { digitalWrite(ledPin1, frontLightOn); digitalWrite(ledPin2, backLightOn); } }
Si vous avez des questions n’hésitez pas à les posez en commentaires.
COOLL
RépondreSupprimer