PARKUINO

Envoyé par le 2 Fév 2013

PARKUINO ? Par qui ? Pour qui ?

 

PARKUINO est un projet développé durant la première semaine d’inter-semestre 2013 par le trio d’élèves FARHANE Karim, ELIDRISSI Yassir, HADFAT Ayoub.

Il est destiné à venir en aide au stationnement des voitures dans les parkings ou les garages.

Le fruit de ce projet se présente sous forme de deux boîtiers :

  • L’un posé sur l’obstacle devant lequel la voiture veut se garer ; il permet l’allumage de feux de signalisation (verts/jaunes/rouges) au fur et à mesure que la voiture s’approche de l’obstacle et finalement la sonnerie d’alarme d’un buzzer lorsque celle-ci est trop proche.
  • L’autre situé à l’intérieur de la voiture ; il permet d’afficher la distance de la voiture à l’obstacle.

 

La réalisation de ce projet a nécessité le recours au matériel suivant :

 

  • 2 Arduino UNO.
  • 2 Shields Xbee.
  • 2 LED rouges, 2 LED jaunes, 2 LED vertes.
  • 1 Buzzer.
  • 1 Télémètre SRF.
  • 1 Afficheur LCD, 1 potentiomètre.

 

montage emetteur

 

 

montage recepteur

Schéma du montage et principe de fonctionnement :

emetteur

Montage émetteur

Code Emetteur :

const int Spin = 8; // pin du télémètre

const int led[] = {9,2,3,4,5,6}; // leds indicatrices

const int hp = 7; // haut-parleur

const int borne[] = {5, 15, 30, 60, 90, 120}; // on définit les distances d’activation des leds

const byte borneLim=240;//Limite au-delà de laquelle on éteint l’afficheur du montage récépteur

void setup() {

for(int i=0; i<6; i++){

pinMode(led[i], OUTPUT);

}

pinMode(hp, OUTPUT);

Serial.begin(9600); // démarrage port série

}

void loop() {

byte distance=calculDistance();

if (distance < borne[0] ) {

for(int i =0; i<6;i++){

digitalWrite(led[i], HIGH);

}

digitalWrite(hp, HIGH);

}

if (distance > borne[0] and distance <= borne[1] ) {

for(int i =0; i < 5;i++){

digitalWrite(led[i], HIGH);

}

digitalWrite(led[5], LOW);

digitalWrite(hp, LOW);

}

if (distance > borne[1] and distance <= borne[2]) {

for(int i =0; i < 4;i++){

digitalWrite(led[i], HIGH);

}

for(int i =4; i < 6;i++){

digitalWrite(led[i], LOW);

}

digitalWrite(hp, LOW);

}

if (distance > borne[2] and distance <= borne[3]) {

for(int i =0; i < 3;i++){

digitalWrite(led[i], HIGH);

}

for(int i =3; i < 6;i++){

digitalWrite(led[i], LOW);

}

digitalWrite(hp, LOW);

}

if (distance > borne[3] and distance <= borne[4]) {

for(int i =0; i < 2;i++){

digitalWrite(led[i], HIGH);

}

for(int i =2; i < 6;i++){

digitalWrite(led[i], LOW);

}

digitalWrite(hp, LOW);

}

if (distance > borne[4] and distance < borne[5]) {

for(int i =0; i < 1;i++){

digitalWrite(led[i], HIGH);

}

for(int i =1; i < 6;i++){

digitalWrite(led[i], LOW);

}

digitalWrite(hp, LOW);

}

if (distance >= borne[5] and distance <= borneLim) {

for(int i =0; i < 6;i++){

digitalWrite(led[i], LOW);

}

digitalWrite(led[0], LOW);

digitalWrite(hp, LOW);

}

if(distance > borneLim) distance =borneLim+1;

Serial.write(distance);

delay(100);

}

byte calculDistance() { //Fonction pour calculer la distance

byte distance = 0;

int duration;

pinMode(Spin, OUTPUT);

digitalWrite(Spin, LOW);

delayMicroseconds(2);

digitalWrite(Spin, HIGH);

delayMicroseconds(10);

digitalWrite(Spin, LOW);

pinMode(Spin, INPUT);

duration = pulseIn(Spin, HIGH);

distance = duration / 58;

return(distance);

  }

recepteur

Montage récepteur

 

Code Récepteur:

#include <LiquidCrystal.h>

 

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

byte incomingByte;

const byte borneLim=241;

 

void setup() {

Serial.begin(9600);

lcd.begin(16,2);

}

 

void loop() {

 

if (Serial.available() > 0) {

incomingByte = Serial.read();

Serial.println(incomingByte);

}

if(!(incomingByte==borneLim)) {

lcd.setCursor(0, 0);

lcd.print(« DISTANCE: « );

lcd.print(incomingByte);

lcd.print( » cm »);

lcd.setCursor(0,1);

if(incomingByte < 10) lcd.print(« ATTENTION ! »);

if(incomingByte >= 10 and incomingByte < 30) lcd.print(« DOUCEMENT »);

if(incomingByte >= 30) lcd.print(« CONTINUEZ »);

lcd.setCursor(16,1);

}

else {

 

}

 

delay(100);

lcd.clear();

}

 

 

Le télémètre SRF mesure constamment la distance de la voiture à l’obstacle.

Au fur et à mesure que celle-ci descend au dessus des bornes prédéfinies, une LED de plus s’allume suivant cet ordre :

1 LED verte → 2 LEDs vertes → 2 LEDs vertes + 1 LED jaune → 2 LEDs vertes + 2 LEDs jaunes →

2 LEDs vertes + 2 LEDs jaunes + 1 LED rouges → 2 LEDs vertes + 2 LEDs jaunes + 2 LEDs rouges

Lorsque toutes les LEDs sont allumées, la sonnerie d’alarme du buzzer se déclenche en plus, signalant que la voiture a atteint une position critique.

En même temps, le Xbee monté sur l’Arduino émetteur se charge d’envoyer la distance (en centimètres) captée par le télémètre à l’autre Xbee monté sur l’Arduino récepteur.

Cette distance est alors affichée sur l’afficheur LCD (en centimètres) et accompagnée d’une commande qui en dépend :

  • « Continuez » tant qu’aucune LED jaune n’est allumée.

  • « Doucement » tant qu’aucune LED rouge n’est allumée.

  • « Attention ! » lorsque toutes les LEDs sont allumées et que la sonnerie du buzzer est déclenchée.

Remarques :

  • Le potentiomètre qu’on peut voir sur le montage sert à régler la luminosité de l’afficheur LCD.

  • Pour des raisons de codage sur 1 byte, la distance maximale à partir de laquelle le capteur télémètre devient sensible est 255 cm.

Version 2.0 ?

Comme les stationneurs deviennent de plus en plus paresseux, nous sommes conscients que la version actuelle du projet ne peut pas les satisfaire entièrement.

Une perspective d’amélioration serait donc d’intégrer au système un moyen de reconnaissance vocale permettant de lire via un haut parleur la distance affichée sur l’écran LCD.

Encore mieux : ajouter au système une caméra permettant au chauffeur de voir en temps réel l’évolution de son espace de stationnement.

 

 

 

Laisser une réponse

Votre adresse e-mail ne sera pas publiée.