1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
| #define echoPin 8 // déclaration de la Pin Echo sur la broche 8 de la carte arduino
#define trigPin 9 // déclaration de la Pin Trigger sur la broche 9 de la carte arduino
#define echoPin1 11 // déclaration de la Pin Echo sur la broche 11 de la carte arduino
#define trigPin1 12 // déclaration de la Pin Trigger sur la broche 12 de la carte arduino
float k; // déclaration de la variable " k " qui est égale à ( 1/2 * vitesse * cos Q ) de type réel (float)
float dist; // déclaration de la variable " dist " de type réel (float)
float tmoy; // déclaration d'une variable " tmoy " de type réel (float)
float Vit = 340.5; // déclaration de la variable " Vit " de type réel (float) et de valeur 340.5
int duree; // déclaration de la variable " duree " de type entier (integer)
int tmin = 32767; // déclaration de la constante "tmin" de valeur 32767 de type entier (integer) qui est la valeur maximale d'un entier positif signé (15 bits --> 32767 = 2^15 - 1)
int tmax = 0; // déclaration de la constante " tmax " de type entier (integer) et de valeur 0
int dmax = 80; // déclaration de la constante " dmax " de valeur 80 cm de type entier (integer)
int dmin = 15; // déclaration de la constante " dmin " de valeur 15 cm de type entier (integer)
int BUZZER = 10; // déclaration de la Pin de l'avertisseur sonore " BUZZER " sur la broche 10 de la carte arduino
void setup() // fonction setup - début de l'exécution du programme et définition des entrées et des sorties
{
pinMode(trigPin, OUTPUT); // déclaration de la pin trig comme étant une étant une sortie
pinMode(echoPin, INPUT); // déclaration de la pin echo comme étant une étant une entrée
pinMode(trigPin1, OUTPUT); // déclaration de la pin trig comme étant une étant une sortie
pinMode(echoPin1, INPUT); // déclaration de la pin echo comme étant une étant une entrée
pinMode(BUZZER, OUTPUT); // déclaration de la pin du buzzer comme étant une sortie
k = Vit / 20000;
/*la valeur retournée par pulseIn est en microsecondes et la valeur de la vitesse est en m/s c'est pour cela qu'on a divisé la valeur de k par 10000 afin d'avoir la valeur en cm
et ensuite on a redivisé la valeur de k par 2 pour n'avoir qu'un trajet*/
}
void loop() // s'exécute le programme en boucle sans fin
{
tmin = 32767; // on définit la valeur de "tmin" à 32767
tmax = 0; // on définit la valeur de "tmax" à 0
/*on a redéfinit les valeurs de MinDur et MaxDur pour que ces deux variables prennent les valeurs de 32767 et 0 pendant chaque exécution de la fonction " loop " */
for (int i = 0; i < 10; i++) // pour chaque nouvelle mesure , on va calculer la durée d'aller retour de l'onde 20 fois pour s'assurer de la valeur calculer par le capteur
{
digitalWrite(trigPin, LOW); // mettre la pin trig en niveau bas " 0 logique " ( 0 volt )
delayMicroseconds(2); // niveau bas de la pin trig pendant 2 microsecondes pour garantir une impulsion HIGH propre
digitalWrite(trigPin, HIGH); // mettre la pin trig en niveau haut " 1 logique " ( 5 volts )
delayMicroseconds(10); // le capteur est déclenché par une impulsion émettrice HIGH de 10 microsecondes
digitalWrite(trigPin, LOW); // mettre la pin trig en niveau bas " 0 logique " ( 0 volt )
duree = pulseIn(echoPin, HIGH); // la fonction pulseIn attend que la broche echoPin passe au niveau HAUT,c'est à dire la réception d'une onde sur l'echo du capteur ultrasonique HC-04
/*on va tesrer si la valeur de la durée est toujours dans la plage de mesure adéquate qui sera entre 0 et 32767*/
if (duree > tmax)
{
tmax = duree;
}
else if (duree < tmin)
{
tmin = duree;
}
delay(50);// on fait un temps d'attente pour éviter les échos parasites
/* ces tests sont faits pour s'aapprocher au maximum de la valeur réelle de la durée d'aller-retour de l'onde et de s'assurer que la valeur de la durée soit positive
pour ensuite calculer la distance qui sera impérativement de valeur positive*/
}
tmoy = (tmax + tmin) / 2;
/*on a déterminé les valeurs de tmax et tmin aprés 10 mesures successives et de la on va calculer la distance à partir de la formule
Distance = k (vitesse) * durée (temps d'aller retour de l'onde) ,tout on fesant la moyenne de tmax et tmin afin d'approximer la valeur exacte de la durée d'aller retour de l'onde*/
dist = tmoy * k;
if (dist <= dmin) // si distance <= dmin (15cm)
{
tone(BUZZER, 1000, 1000); // declanchement de l'avertisseur sonore
}
if ((dist >= dmin) and (dist <= dmax))// si distance >= dmin (15cm) et distance <= dmax(80cm)
{
tone(BUZZER, 500, 150); // declanchement de l'avertisseur sonore
}
} |
Partager