[Tuto] Détecteur de présence

Posté sur: oct. 16, 2013

Catégories: Arduino

Tags: arduino , detecteur , detecteur-de-presence , exemple

Après le tuto sur le sujet d'hier, aujourd'hui l'un des clients du shop nous a soumis des vidéos de son montage que je relais donc sur ce blog.

Voici le fonctionnement de ce montage: Le principe est d'avoir un montage mobile qui se reparamétre à chaque nouvel emplacement.

Il prend une première mesure, 10sec plus tard, une seconde mesure, si elles sont différentes de plus de 5cm il recommence. Ensuite, il prend la moyenne des deux comme référence.

Si un objet est détecté a moins que la distance de référence, la Led s'allume 1sec et la distance retenue est affiché.

Croquis du schéma de câblage
Croquis du schéma de câblage

#include

LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);

const int led=11;

const int led2=12;

int mesure1;

int mesure2;

int distanceorigine;

int resultatsortie;

int compteur;

nint trig = 3;

int echo = 2;

long lecture_echo;

long cm;

void setup()

compteur=0;

pinMode(trig, OUTPUT); 

digitalWrite(trig, LOW); 

pinMode(echo, INPUT); 

Serial.begin(9600); 

pinMode( led, OUTPUT);

pinMode(led2, OUTPUT);

digitalWrite(led2, HIGH);

lcd.clear(); 

lcd.begin(16, 2);

lcd.setCursor(0,0); 

lcd.print("initialisation"); 

delay(1000);

lcd.clear();

lcd.print("mesure distance origine");

mesure1=0;

mesure2=0;

distanceorigine=0;

compteur=1;

do //debut prise mesure origine

{

lcd.clear(); //|

lcd.setCursor(0,1); //|

lcd.print("en cours."); //|

digitalWrite(led, HIGH); // } prise de la première mesure

digitalWrite(trig, HIGH); //|

delayMicroseconds(10); //|

digitalWrite(trig, LOW); //|

lecture_echo = pulseI

(echo, HIGH); //|

mesure1 = lecture_echo / 58; //|

lcd.clear();

lcd.setCursor(0,1); 

lcd.print("en cours.. 1/2");

lcd.setCursor(0,0);

lcd.print(mesure1);

delay(10000/compteur); //delai entre les deux mesures qui serra divisé par 2,3,3... si la boucle se répète

  digitalWrite(trig, HIGH); 

delayMicroseconds(10); 

digitalWrite(trig, LOW); 

lecture_echo = pulseIn(echo, HIGH); 

mesure2 = lecture_echo / 58; 

lcd.clear();

lcd.setCursor(0,1);

lcd.print("en cours... 2/2"); 

lcd.setCursor(0,0);

lcd.print(mesure2); 

delay(3000/compteur);

resultatsortie =mesure1-mesure2; //différence de distance entre les deux mesures

compteur++; //incrémentation du compteur

if (compteur>=20){

resultatsortie=0; //SI le compteur arrive a 20, alors on sort de la boucle

}

}

while(abs(resultatsortie)>5); //sortie boucle de mesure

if(compteur>=20) //SI on est sortie de la boucle grace au compteurs alors, le sonar n'a pas detecté d'obstacle a moins de 4mn { 

distanceorigine=300; //on demande une detection sur 3m pour éviter les erreur 

lcd.clear();

lcd.setCursor(0,0);

lcd.print(" aucun obstacle");

lcd.setCursor(0,1);

lcd.print("distance max =");

delay(2000);

lcd.setCursor(0,1);

lcd.print(" ");

lcd.setCursor(0,1);

lcd.print(distanceorigine);

delay(5000);

}nelsen {

distanceorigine=((mesure1+mesure2)/2); //SINON ( sortie de la boucle avec 2 mesures proches, on prend comme repère la moyenne

lcd.clear();

lcd.setCursor(0,0);

lcd.print("distance retenue");

lcd.setCursor(0,1);

lcd.print(distanceorigine);

delay(6000);

}

mesure1=0;nmesure2=0;

}

void loop()

{

lcd.setCursor(0, 0);

digitalWrite(led, HIGH);

digitalWrite(led2, HIGH);

digitalWrite(trig, HIGH); 

delayMicroseconds(10); 

digitalWrite(trig, LOW); 

lecture_echo = pulseIn(echo, HIGH); 

mesure1 = lecture_echo / 58; 

//deux mesures pour éviter les detections parasites

digitalWrite(trig, HIGH); 

delayMicroseconds(10); 

digitalWrite(trig, LOW); 

lecture_echo = pulseIn(echo, HIGH); 

mesure2 = lecture_echo / 58; 

if(mesure1 - mesure2 < 20) //si les deux mesures sont cohérentes 

{

cm=((mesure1+mesure2)/2); //on prend la moyenne

lcd.print("Distance en cm : "); 

if( cm<(distanceorigine-10)) // si cette mesure se situe entre l'obstacle ( ou les 3m ) et le capteur ( avec une marge de 10cm) 

{

lcd.print(" ");

digitalWrite(led2,LOW);

lcd.setCursor(10, 1); //inscrire sur le 10em charactère 

lcd.println(cm); //la distance a laquel a été detecté l'objet

delay(500);

}

lcd.setCursor(0, 1);

if(cm <= 400)

{

lcd.println(cm); 

}

else

{ //si la mesure n'est pas compris entre l'obstacle ( ou les 3m ) et le capteur 

lcd.print("err"); //afficher "ERR"n digitalWrite(led, LOW); //allumer la led rouge d'erreur

}

}

else

{}

delay(10);

}

//rédigé par Louis-Marie Le Méné pour un usage strictement personnel

http://letmeknow.fr/img/cms/blog/wp-content/uploads/2013/10/MOV_6613.mp4

http://letmeknow.fr/img/cms/blog/wp-content/uploads/2013/10/MOV_6614.mp4

http://letmeknow.fr/img/cms/blog/wp-content/uploads/2013/10/MOV_6609.mp4

Ce montage est pour un usage privé uniquement.

Un grand merci à Louis-Marie Le Méné pour avoir partagé son montage.

laissez un commentaire

Se connecter