/* Claude EMERY 22/03/2026
Utiliisation du capteur Ultrason HC-SR04
*/
#define Broche_Echo 7 // Broche Echo du HC-SR04 sur D7
#define Broche_Trigger 8 // Broche Trigger du HC-SR04 sur D8
int MesureMaxi = 100; // Distance maxi a mesurer en cm
int MesureMini = 20; // Distance mini a mesurer en cm
int myBip = 5; // Buzzer
long Duree;
long Distance;
void setup()
{
pinMode(Broche_Trigger, OUTPUT); // Broche Trigger en sortie
pinMode(Broche_Echo, INPUT); // Broche Echo en entree
pinMode(LED_BUILTIN, OUTPUT); // Broche led rouge
pinMode(myBip,OUTPUT); // Broche Buzzer
digitalWrite(LED_BUILTIN, LOW); // Eteindre la led rouge
noTone(myBip); // Coiuper le son
Serial.begin (9600);
}
void loop() {
// Debut de la mesure avec un signal de 10 μS applique sur TRIG
digitalWrite(Broche_Trigger, LOW); // On efface l'etat logique de TRIG
delayMicroseconds(2);
digitalWrite(Broche_Trigger, HIGH); // On met la broche TRIG a "1" pendant 10μS
delayMicroseconds(10);
digitalWrite(Broche_Trigger, LOW); // On remet la broche TRIG a "0"
// On mesure combien de temps le niveau logique haut est actif sur ECHO
Duree = pulseIn(Broche_Echo, HIGH); //Fonction pulseIn - Lecture des pulses
// Calcul de la distance grace au temps mesure
//(Durée totale (aller-retour ultrasons) * La vitesse du son (0.034 cm/μs)) / 2
Distance = Duree * 0.0344 / 2; // 0.034 ou 0.344 - Aller/Retour donc on divise par 2
// Verification si valeur mesuree dans la plage
if (Distance >= MesureMaxi || Distance <= MesureMini) {
//Si la distance est hors plage, on affiche un message d'erreur
Serial.println("Distance de mesure en dehors de la plage (20 cm à 1 metres)");
noTone(myBip);
}
else {
// Affichage dans le moniteur serie de la distance mesuree
Serial.print("Distance mesuree :");
Serial.print(Distance);
Serial.println("cm");
}
// -----------------------------------------------------------
// ---------------- A VERIFIER LA LED RESTE ALLUMER -----------
// -----------------------------------------------------------
// Eteindre la led rouge si superieur à 50 cm
if (Distance < 50){
digitalWrite(LED_BUILTIN,LOW);
}
// Alarme - tone(pin, fréquence, durée) & noTone(pin)
if (Distance <= 49 && Distance >= 40) {
digitalWrite(LED_BUILTIN, HIGH);
tone(myBip, 1500);
delay(200);
noTone(myBip);
delay(200);
Serial.println("entre 40 et 49");
}
if (Distance <= 39 && Distance >= 30) {
digitalWrite(LED_BUILTIN, HIGH);
tone(myBip, 1500);
delay(100);
noTone(myBip);
delay(100);
Serial.println("entre 30 et 39");
}
if (Distance <= 29 && Distance >= 20) {
digitalWrite(LED_BUILTIN, HIGH);
tone(myBip, 1000);
Serial.println("entre 20 et 29");
}
//delay(1000);
}