Sie sind auf Seite 1von 10

Compte rendu : projet Arduino

Voiture télécommandée via le smartphone

I. Objectifs :

Les objectifs principaux de notre projet étaient de pouvoir diriger une voiture avec un smartphone via le
module Bluetooth electronics ainsi qu’afficher, sur l’interface du smartphone, la distance à l’avant et à
l’arrière entre la voiture et un éventuel obstacle. L’utilisateur aurait donc pu voir sur l’interface du
smartphone quatre flèches directionnelles ainsi que deux afficheurs de la distance avant de la
voiture/obstacle et arrière de la voiture/obstacle.

En option s’il reste du temps nous avons aussi pensé à afficher la distance entre la voiture et le smartphone
pour prévenir l’utilisateur d’une éventuelle perte des commandes quand la portée limite du système
Bluetooth serait atteinte. En cas de perte des commandes la voiture aurait pu revenir en arrière en
effectuant l’inverse de la dernière action.

II. Déroulement des différentes séances :

1. Séance 1

La première semaine nous avons commencé la programmation des sonars avant et arrière ainsi que
les tests de ceux-ci. Nous n’avons rencontré aucun problème pour brancher le matériel et
programmer l’envoi des données des sonars dans le moniteur série du logiciel Arduino. Nous avons
alors pu mettre en place le module Bluetooth et envoyer les données sur le logiciel du smartphone.

En fin de séance on pouvait détecter les objets avec les sonars et afficher les données sur l’interface
du smartphone.

2. Séance 2

La deuxième semaine nous avons branché les moteurs et commencé la programmation de ceux-ci.
Nous avons commencé par brancher et programmer un seul moteur pour comprendre le
fonctionnement de la programmation, puis nous avons décidé d’utiliser un pont en H pour pouvoir
brancher deux moteurs qui pourront fonctionner vers l’avant et vers l’arrière. Le but est de pouvoir
faire tourner la voiture en actionnant les moteurs dans des sens différents (faire reculer la roue
droite et avancer la roue gauche pour tourner à droite, l’inverse pour tourner à gauche). La solution
pour brancher les moteurs avec le pont en H a été trouvée sur internet. A la fin de la séance le
programme fait tourner les moteurs dans des sens différents et à des vitesses différentes, sans
utiliser le smartphone.
3. Séance 3

Lors de la troisième semaine nous avons commencé à mettre les différentes fonctions du projet sur
la même interface du smartphone. Pour brancher les deux sonars et les deux moteurs nous avons
besoin de deux plaquettes de branchement. Avant de mettre en commun les programmes des
sonars et des moteurs, nous avons modifié le programme des moteurs afin de pouvoir activer les
roues avec l’interface du smartphone, les moteurs tournent donc toujours à la même vitesse et les
quatre flèches directrices activent différemment les moteurs. Quand on appui sur la flèche du haut
les deux moteurs tournent dans le même sens vers l’avant, si on appui sur la flèche de droite le
moteur gauche tourne vers l’avant et le moteur de droite vers l’arrière, quand on appui sur la flèche
du bas les deux moteurs tournent dans le même sens vers l’arrière, enfin si on appui sur la flèche de
gauche le moteur droit tourne vers l’avant et celui de gauche vers l’arrière. Malheureusement quand
on met en commun les programmes des sonars et des moteurs nous avons des problèmes dans
l’affichage des distances voiture/obstacle sur le smartphone. Des caractères spéciaux du type ( ; »)^
s’affichent sur l’interface du smartphone alors que la distance est affichée correctement dans le
moniteur série.

4. Séance 4

Au cours de la quatrième séance nous avons établi un croquis de la structure de notre voiture, dans
laquelle nous allons introduire tous les composants électroniques. Ensuite nous avons commencé la
conception de la maquette en carton que nous avons utilisé jusqu’à la fin du projet. La maquette est
composée de trois plaques de carton superposées dont une qui est creusée pour pouvoir insérer les
composants électroniques (deux plaquettes sur lesquelles sont branchés les moteurs et les sonars,
deux batteries pour alimenter les moteurs et l’arduino). On essaie aussi de corriger les problèmes du
programme pour l’affichage des distances voiture/obstacle.
5. Séance 5

Pendant la dernière séance nous avons finalisé la maquette de la voiture en attachant les roues et
les moteurs aux plaques de cartons préalablement collées. Une tige filetée est utilisée comme axe
des roues arrière, les roues avant sont directement connectées aux moteurs. Les batteries et les
plaquettes sont scotchées au carton. Maintenant que la maquette est achevée on peut tester « en
conditions réelles » la voiture et les commandes moteurs. On se rend compte que les moteurs
n’ont pas assez de puissance pour faire tourner la voiture alors qu’il n’y a aucun problème pour
avancer ou reculer en ligne droite.

Nous avons continué de travailler sur les problèmes du programme et l’affichage des distances
voiture/obstacle, on se rend compte que lors de l’affichage des distances sur l’interface du
smartphone il y a un lien qui est fait avec les flèches directionnelles, c’est-à-dire que certaines
informations des flèches directionnelles sont affichées à la place des distances et qu’une
interférence à lieu.

III. Rendu final :


Nous avons réussi à contrôler la voiture avec le smartphone via l’application Bluetooth, c’est-à-dire que nous
pouvons activer les moteurs à distance directement sur le smartphone qui sert de télécommande. Nous
avons des problèmes dans l’affichage des distances voiture/obstacle sur l’interface du smartphone, nous
savons que le problème vient de l’application Bluetooth electronics car les distances s’affichent
correctement dans le moniteur série sur l’ordinateur. Nous n’avons pas eu le temps de mettre en place
l’option énoncée dans les objectifs car nous n’avons déjà pas pu résoudre les problèmes de la fonction
principale « affichage des distances voiture/obstacle » malgré de nombreux essais et recherches.

Diaporama
Aspect « Code » :
Dans un premier temps on déclare toutes nos variables et les ports spéciaux pour le bleutooth et les sonars
ainsi que pour les moteurs .
#include <SoftwareSerial.h> //Software Serial Port

#define RxD 10 //Pin 10 pour RX (pin0=serial) vert

#define TxD 13 //Pin 11 pour TX, on peut changer noir

#include <NewPing.h>

SoftwareSerial BTSerie(RxD,TxD);

const int trigAvant=6;

const int echoAvant=7;

const int trigArriere=3;

const int echoArriere=1;

float lecture_echo;

float distanceAvant;

float distanceArriere;

float dAvant;

float dArriere;

// float portabilite;

char BleutoothData;

int pin1Moteur1=12; //pin de commande moteur 1

int pin2Moteur1=8; // pin de commande moteur 1

int pinPMoteur1=11;// pin PWM moteur 1

int pin1Moteur2=2; // pin de commande moteur 2

int pin2Moteur2=4; // pin de commande moteur 2

int pinPMoteur2=5; // pin PWM moteur 2


Dans un deuxième temps on créer des fonctions qui nous permet de faire avancer la voiture afin de faire
fonctionner les roues dans les deux sens appeler rouler qui prend en paramètre le moteur concernée le
sens dans la quelle tourne le moteur et le pourcentages de la puissance de celui ci pendant sa rotation .
void Rouler(int moteur,int sens,int pourcentage){
int pin1,etat1,pin2,etat2,pinP,puissance; //variable de la fonction
if (moteur==1){
pin1=pin1Moteur1;
pin2=pin2Moteur1;
pinP=pinPMoteur1;
}
else { // on les remets par defaut ne marche pas
pin1=pin1Moteur2;
pin2=pin2Moteur2;
pinP=pinPMoteur2;
}
//test sens du moteur 1 en avant ,-1 sens arrière
if (sens==1){
etat1=1;
etat2=0;
}
else if (sens==-1){
etat1=0;
etat2=1;
}
else { // sinon on remet a défault
etat1=0;
etat2=0;
}
puissance=map(pourcentage,0,100,0,255);
analogWrite(pinP,puissance);
digitalWrite(pin1,etat1);
digitalWrite(pin2,etat2);
}
Nous avons de plus une fonction que l'on peut qualifier de fonction a « états » qui permet de réagirs
suivants différent cas de commande que l'on exécute afin de rouler et de s’arrêter en effet il correspond a
l'état 5.
void action(String etat){
if (etat=="etat1"){
Rouler(1,-1,100);
Rouler(2,1,100);
}
if(etat=="etat2"){
Rouler(1,-1,100);
Rouler(2,-1,100);
}
if(etat=="etat3"){
Rouler(1,1,100);
Rouler(2,-1,100);
}
if (etat=="etat4"){
Rouler(1,1,100);
Rouler(2,1,100);
}
if (etat=="etat5"){
Rouler(1,0,0) ;
Rouler(2,0,0) ;
}
}
Et enfin dans la boucle nous déterminons la distance avant et arrière qui nous renvoie de bonnes valeurs
dans le moniteurs série . Suivants plusieurs cas c'est a dire suivant les touches presser dans le téléphone
androïde
void loop() {
char BleutoothData;
String etat;
//On lit caractere par caractere sur le
//BTSerie et on affiche sur le Terminal
//Serie
NewPing sonarAvant(trigAvant,echoAvant,200);
NewPing sonarArriere(trigArriere,echoArriere,200);
distanceAvant=sonarAvant.ping_cm();
distanceArriere=sonarArriere.ping_cm();
dAvant=distanceAvant;;
dArriere=distanceArriere;;
BTSerie.print("*D");
BTSerie.print(String(dAvant)+",");
BTSerie.print("*");
delay(100);
//BTSerie.print("*G");
//BTSerie.print(dAvant);
//BTSerie.print("*");
// BTSerie.print("*G"+(dArriere)+"*");
//BTSerie.print("*G"+String(portabilite,1)+"*");calcul de la distance par rapport au module bleutooth
(non aboutit)
if(dAvant<=10){
etat="etat5";
action(etat);
}
//if(dArriere<=10){ cette condition détecte l'obstacle à 10 cm et arrete la voiture
// etat="etat5";
// action(etat);
//}
if (BTSerie.available()) {
BleutoothData = BTSerie.read();
if (BleutoothData=='R'){
etat="etat1";
action(etat);
}
if(BleutoothData=='Y'){
etat="etat2";
action(etat);
}
if(BleutoothData=='G'){
etat="etat3";
action(etat);
}
if (BleutoothData=='B'){
etat="etat4";
action(etat);
}
if (BleutoothData=='W'){
etat="etat5";
action(etat);
}
}
}