ENIB 2020 : capteur de mouvement
Révision datée du 20 janvier 2020 à 15:13 par P7brosse (discussion | contributions) (→photo de l'équipe)
photo de l'équipe
Que fait ce projet ?
Ce projet consiste à faire un détecteur de mouvement. En fonction de la distance de la personne ou de l'objet, une partie des Leds vont s'allumer.
Liste des composants
- LEDS
- capteurs de distance a ultrasons HC-SR04
- résistances
- fils
- Cartons (pour l'esthétique)
Code
ici je pose mon code documenté ! // LEDs pins #define TR1 8 #define TR2 3 #define TR3 4 #define TR4 5 #define TRIGGER_PIN 6 #define ECHO_PIN 7 /* Constantes pour le timeout */ const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s /* Vitesse du son dans l'air en mm/us */ const float SOUND_SPEED = 340.0 / 1000; void setup() { pinMode(TR1, OUTPUT); pinMode(TR2, OUTPUT); pinMode(TR3, OUTPUT); pinMode(TR4, OUTPUT); pinMode(TRIGGER_PIN, OUTPUT); digitalWrite(TRIGGER_PIN, LOW); pinMode(ECHO_PIN, INPUT); Serial.begin(9600); } void loop() { /* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */ digitalWrite(TRIGGER_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGGER_PIN, LOW); /* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */ long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT); /* 3. Calcul la distance à partir du temps mesuré */ float distance_mm = measure / 2.0 * SOUND_SPEED; if (distance_mm > 0 && distance_mm <= 100) { digitalWrite(TR4,HIGH); digitalWrite(TR3,LOW); digitalWrite(TR2,LOW); digitalWrite(TR1,LOW); Serial.println(" premier"); } else if(distance_mm > 100 && distance_mm <= 200) { digitalWrite(TR4,LOW); digitalWrite(TR3,HIGH); digitalWrite(TR2,LOW); digitalWrite(TR1,LOW); Serial.println("deuxieme"); } else if(distance_mm > 200 && distance_mm <= 300) { digitalWrite(TR4,LOW); digitalWrite(TR3,LOW); digitalWrite(TR2,HIGH); digitalWrite(TR1,LOW); Serial.println("troisieme"); } else if(distance_mm > 300 && distance_mm <= 400) { digitalWrite(TR4,LOW); digitalWrite(TR3,LOW); digitalWrite(TR2,LOW); digitalWrite(TR1,HIGH); Serial.println("dernier"); } else //if (distance_mm == 0 || distance_mm > 2800) { digitalWrite(TR4,LOW); digitalWrite(TR3,LOW); digitalWrite(TR2,LOW); digitalWrite(TR1,LOW); Serial.println("aucune"); } /* Affiche les résultats en mm, cm et m */ Serial.print(F("Distance: ")); Serial.print(distance_mm); Serial.print(F("mm (")); Serial.print(distance_mm / 10.0, 2); Serial.print(F("cm, ")); Serial.print(distance_mm / 1000.0, 2); Serial.println(F("m)")); /* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */ delay(1000); }Catégories