Ce projet a été réalisé au cours de la deuxième session de l’inter-semestre 2015, par : Likuang Yang, Reda affane et Hatim Tbez.
L’objectif de ce projet est de pouvoir télécommander un robot (une voiture) par de simples gestes de la main. La conception et la réalisation de ce projet a porté sur deux grandes parties :
La voiture : Un robot de type Arduino, muni d’une interface Bluetooth lui permettant de recevoir les directives de la part du système de commande, conçu sous forme d’un gant.
Le système de commande : Muni de capteurs de flexions, ce système permet de capter 4 mouvements différents de la main, et de les envoyer à travers l’interface Bluetooth vers la voiture. Chacun des 4 mouvements de la main ordonne à la voiture soit d’avancer, de freiner, de tourner à droite ou de tourner à gauche.
Voici un schéma récapitulant le fonctionnement de notre prototype:
Matériel utilisé:
- 2 cartes Arduino Uno
- 2 bornes Bluetooth BlueSMiRF
- Support de voiture ( 2 moteurs, 4 roues, châssis…)
- 2 BreadBoard
- 2 batteries
- Fils de connexions
Montage du système de commande:
Code:
Le code du système de commande est le suivant:
#include <SoftwareSerial.h>
SoftwareSerial mySerial(2, 3); // RX, TX
int r=0;
int v=A1;
int w=A2;
int capa=0;
int capb=0;
const int shreshhold=630;
const int s1=690;
const int s2=810;
const int numReadings = 10;
int readings[numReadings]; // the readings from the analog input
int index = 0; // the index of the current reading
int total = 0; // the running total
int average = 0; // the average
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(9600);
mySerial.begin(9600);
pinMode(v, INPUT);
for (int thisReading = 0; thisReading < numReadings; thisReading++)
readings[thisReading] = 0;
}
void loop() // run over and over
{ total= total – readings[index];
// read from the sensor:
readings[index] = analogRead(w);
// add the reading to the total:
total= total + readings[index];
// advance to the next position in the array:
index = index + 1;
// if we’re at the end of the array…
if (index >= numReadings)
// …wrap around to the beginning:
index = 0;
// calculate the average:
average = total / numReadings;
// send it to the computer as ASCII digits
capb=average;
capa=analogRead(v);
Serial.println(capb);
if (capa<shreshhold){
if (capb<s1){
mySerial.println(52);
Serial.println(« droit »);
}else if(capb>s2){
mySerial.println(53);
Serial.println(« gauche »);}
else {
mySerial.println(49);
Serial.println(« avance »);
}
}
else{
mySerial.println(51);Serial.println(« arete »);
}
delay(100);
}