Projet visant à pouvoir compter des personnes dans un salle en utilisant deux capteurs infrasons (et aussi apprendre comment faire de l’Arduino. Code pour mesurer une distance avec le capteur:
# define Broche_Echo 7 Broche Echo du HC-SR04 sur la pin 7 # define Broche_Trigger 8 Broche Trigger du HC-SR04 sur la pin 8
long temps;
long Distance;
void setup() {
pinMode(Broche_Echo,INPUT); //Met le pin 7 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Trigger,OUTPUT); //Met le pin 8 (définie plus haut) relié à la broche en entré Serial.begin(9600); //Permet de pouvoir faire des prints via l'usb digitalWrite(Broche_Trigger, LOW);
}
void loop() {
digitalWrite(Broche_Trigger, HIGH); delay(0.02); digitalWrite(Broche_Trigger, LOW); //lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10) int temps = pulseIn(Broche_Echo, HIGH); Distance = temps*0.034/2; //Recupére sur temps le temps que écho est à 1. De plus si elle ne passe pas à low d'ici 55 micro seconde alors il cesse d'attendre. if (Distance>=400){ Serial.println("TROP loin"); } if (Distance<=2){ Serial.println("TROP proche"); }else{ Serial.print("Distance du capteur : "); Serial.println(Distance); } delay(100);
}
Mise à jour du code en incluant les deux capteurs fonctionnels , un problème comment compter les personne qui passe ?
# define Broche_Echo 7 Broche Echo du HC-SR04 sur la pin 7 # define Broche_Trigger 8 Broche Trigger du HC-SR04 sur la pin 8
# define Broche_Echobis 12Broche Echo du HC-SR04 sur la pin 7 # define Broche_Triggerbis 4 Broche Trigger du HC-SR04 sur la pin 8
long temps;
long Distance;
long Distancebis;
int entre;
int sort;
int nb_de_gens;
void setup() {
pinMode(Broche_Echo,INPUT); Met le pin 7 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Trigger,OUTPUT); Met le pin 8 (définie plus haut) relié à la broche en entré Serial.begin(9600); Permet de pouvoir faire des prints via l'usb digitalWrite(Broche_Trigger, LOW); digitalWrite(Broche_Triggerbis, LOW); entre = 0; sort = 0; nb_de_gens = 0; } void loop() { digitalWrite(Broche_Trigger, HIGH); delay(0.02); digitalWrite(Broche_Trigger, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10) temps = pulseIn(Broche_Echo, HIGH); Distance = temps*0.034/2; Recupére sur temps le temps que écho est à 1. De plus si elle ne passe pas à low d'ici 55 micro seconde alors il cesse d'attendre. if (Distance>=400){ Serial.println(“TROP loin”); }else{ if (Distance⇐2){ Serial.println(“TROP proche”); }else{ Serial.print(“Distance du capteur 1 : ”); Serial.println(Distance); } } delay(10); digitalWrite(Broche_Triggerbis, HIGH); delay(0.02); digitalWrite(Broche_Triggerbis, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10)
temps = pulseIn(Broche_Echobis, HIGH); Distancebis = temps*0.034/2; Recupére sur temps le temps que écho est à 1. De plus si elle ne passe pas à low d'ici 55 micro seconde alors il cesse d'attendre. if (Distancebis>=400){ Serial.println(“TROP loin 2”); } else{ if (Distancebis⇐2){ Serial.println(“TROP proche 2”); }else{ Serial.print(“Distance du capteur 2 : ”); Serial.println(Distancebis); Serial.println(“”); } } if (Distance < 90){ if(sort==0){ sort -=1; nb_de_gens -=1; }else{ if(entre == 0){entre +=1;} } } if (Distancebis < 90){ if(entre>0){ entre -=1; nb_de_gens +=1; }else{ if(sort == 0){sort +=1;} } } Serial.println(“”); Serial.println(nb_de_gens); Serial.println(entre); Serial.println(sort); Serial.println(“”); delay(1000); } Amelioration, le programe est quasi fonctionnel mais bug encore un peu. Code actuel: # define Broche_Echo 7 Broche Echo du HC-SR04 sur la pin 7 # define Broche_Trigger 8 Broche Trigger du HC-SR04 sur la pin 8 # define Broche_Echobis 4Broche Echo du HC-SR04 sur la pin 4 # define Broche_Triggerbis 12 Broche Trigger du HC-SR04 sur la pin 12 # define Objet_devant 90 Distance devant la quelle on considere qu'il est un objet devant le capteur 1
# define Objet_devant_bis 90 Distance devant la quelle on considere qu'il est un objet devant le capteur 2 long temps; long Distance; long avant; long Distancebis; long avantbis; int entre; int sort; int nb_de_gens; void setup() { pinMode(Broche_Echo,INPUT); Met le pin 7 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Trigger,OUTPUT); Met le pin 8 (définie plus haut) relié à la broche en entré pinMode(Broche_Echobis,INPUT); Met le pin 4 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Triggerbis,OUTPUT); Met le pin 12 (définie plus haut) relié à la broche en entré Serial.begin(9600); Permet de pouvoir faire des prints via l'usb
digitalWrite(Broche_Trigger, LOW); digitalWrite(Broche_Triggerbis, LOW);
temps = -1;
Distance = -1;
avant= Objet_devant;
Distancebis = -1;
avantbis = Objet_devant_bis;
entre = 0;
sort = 0;
nb_de_gens = 4;
}
void loop() {
digitalWrite(Broche_Trigger, HIGH); delay(0.02); digitalWrite(Broche_Trigger, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10) temps = pulseIn(Broche_Echo, HIGH); avant = Distance; Distance = temps*0.034/2; Recupére sur temps le temps que écho est à 1. De plus si elle ne passe pas à low d'ici 55 micro seconde alors il cesse d'attendre. if (Distance>=400){
Serial.println("TROP loin");
}else{ if (Distance⇐2){
Serial.println("TROP proche");
}else{ Serial.print(“Distance du capteur 1 : ”); Serial.println(Distance); } } delay(10);
digitalWrite(Broche_Triggerbis, HIGH); delay(0.02); digitalWrite(Broche_Triggerbis, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10) temps = pulseIn(Broche_Echobis, HIGH); avantbis = Distancebis; Distancebis = temps*0.034/2; Recupére sur temps le temps que écho est à 1. puis calcule la distance via vitesse*temps/2
Serial.print(“Distance du capteur 2 : ”); Serial.println(Distancebis); Serial.println(“”); if (Distance < Objet_devant){
if (avant>Objet_devant){ if(sort>0){ sort -=1; nb_de_gens -=1; }else{ entre +=1; } }
} if (Distancebis < Objet_devant_bis){
if (avantbis>Objet_devant_bis){ if(entre>0){ entre -=1; nb_de_gens -=1; }else{ sort +=1; } }
}
Serial.print(“Distance du capteur 1 : ”); Serial.println(Distance); Serial.print(“Distance du capteur 2 : ”); Serial.println(Distancebis); Serial.println(“”); Serial.println(“”); Serial.print(“nb_de_gens : ”); Serial.println(nb_de_gens); Serial.print(“entre : ”); Serial.println(entre); Serial.print(“sort : ”); Serial.println(sort); Serial.print(“avant : ”); Serial.println(avant); Serial.print(“avantbis : ”); Serial.println(avantbis); Serial.println(“”);
delay(100); }
Modification, ne marche pas mais début de la création de la pile.;
# define Broche_Echo 7 Broche Echo du HC-SR04 sur la pin 7 # define Broche_Trigger 8 Broche Trigger du HC-SR04 sur la pin 8
# define Broche_Echobis 4Broche Echo du HC-SR04 sur la pin 4 # define Broche_Triggerbis 12 Broche Trigger du HC-SR04 sur la pin 12
# define Objet_devant 90 Distance devant la quelle on considere qu'il est un objet devant le capteur 1 # define Objet_devant_bis 90 Distance devant la quelle on considere qu'il est un objet devant le capteur 2
long temps;
long Distance;
long avant[5] = {90, 90, 90, 90, 90 };
long Distancebis;
long avantbis[5] = {90,90, 90, 90, 90};
int entre;
int sort;
int nb_de_gens;
int pas_de_precedant(long *tab){
for (int i = 0;i<5;i++){ if (i <Objet_devant_bis){ return 0; } } return 1;
}
int ajout_val(long*tab,long nouveau){
for (int i = 0;i<4;i++){ tab[i+1]=tab[i]; } tab[0]=nouveau;
}
void setup() {
pinMode(Broche_Echo,INPUT); Met le pin 7 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Trigger,OUTPUT); Met le pin 8 (définie plus haut) relié à la broche en entré
pinMode(Broche_Echobis,INPUT); Met le pin 4 (définie plus haut) relié à la broche echo en entré pinMode(Broche_Triggerbis,OUTPUT); Met le pin 12 (définie plus haut) relié à la broche en entré
Serial.begin(9600); Permet de pouvoir faire des prints via l'usb digitalWrite(Broche_Trigger, LOW); digitalWrite(Broche_Triggerbis, LOW); temps = -1; Distance = -1; ajout_val(avant,Objet_devant); Distancebis = -1; ajout_val(avantbis,Objet_devant_bis); entre = 0; sort = 0; nb_de_gens = 4; } void loop() { digitalWrite(Broche_Trigger, HIGH); delay(0.02); digitalWrite(Broche_Trigger, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10) temps = pulseIn(Broche_Echo, HIGH); ajout_val(avant,Distance); Distance = temps*0.034/2; Recupére sur temps le temps que écho est à 1. De plus si elle ne passe pas à low d'ici 55 micro seconde alors il cesse d'attendre. delay(10); digitalWrite(Broche_Triggerbis, HIGH); delay(0.02); digitalWrite(Broche_Triggerbis, LOW); lance le trigger en le metant à l'état au haut pendant 8 micro secondes (max pour l'activer est 10)
temps = pulseIn(Broche_Echobis, HIGH); ajout_val(avantbis,Distancebis); Distancebis = temps*0.034/2; Recupére sur temps le temps que écho est à 1. puis calcule la distance via vitesse*temps/2 Serial.print(“Distance du capteur 2 : ”); Serial.println(Distancebis); Serial.println(“”); if (Distance < Objet_devant){ if (pas_de_precedant(avantbis)){ if(sort>0){ sort -=1; nb_de_gens -=1; }else{ entre +=1; } } } if (Distancebis < Objet_devant_bis){ if (pas_de_precedant(avantbis)){ if(entre>0){ entre -=1; nb_de_gens -=1; }else{ sort +=1; } } } Serial.print(“Distance du capteur 1 : ”); Serial.println(Distance); Serial.print(“Distance du capteur 2 : ”); Serial.println(Distancebis); Serial.println(“”); Serial.println(“”); Serial.print(“nb_de_gens : ”); Serial.println(nb_de_gens); Serial.print(“entre : ”); Serial.println(entre); Serial.print(“sort : ”); Serial.println(sort); Serial.print(“avant : ”); Serial.println(avant[0]); Serial.print(“avantbis : ”); Serial.println(avantbis[0]); Serial.println(“”); delay(100); }