Outils pour utilisateurs

Outils du site


wiki:projets:compteur-passage_2

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); }

wiki/projets/compteur-passage_2.txt · Dernière modification: 2022/04/04 18:30 de RAMS Sean