// ---------------- Parametres capteur ----------------
const int capteur = 2; // broche du capteur IR
unsigned long t1 = 0; // temps d'entrée
unsigned long t2 = 0; // temps de sortie
float longueur = 0.50; // longueur de l'objet en m
float vitesse = 0; // vitesse instantanée
bool objetEnCours = false;
// ---------------- Moyenne des mesures ----------------
const int NB_MESURES = 5; // nombre de mesures pour la moyenne
float vitesses[NB_MESURES]; // tableau des vitesses
int indexMesure = 0; // position dans le tableau
bool tableauRempli = false; // indicateur
// Fonction pour calculer la moyenne
float moyenneVitesse() {
int n = tableauRempli ? NB_MESURES : indexMesure;
if (n == 0) return 0;
float somme = 0;
for (int i = 0; i < n; i++) {
somme += vitesses[i];
}
return somme / n;
}
void setup() {
Serial.begin(9600);
pinMode(capteur, INPUT_PULLUP);
Serial.println("Systeme pret. Passez un objet devant la barriere IR.");
}
void loop() {
int etatCapteur = digitalRead(capteur);
// Détection début
if (etatCapteur == LOW && !objetEnCours) {
t1 = millis();
objetEnCours = true;
Serial.println("Objet detecte - debut mesure");
}
// Détection fin
if (etatCapteur == HIGH && objetEnCours) {
t2 = millis();
objetEnCours = false;
unsigned long tempsMs = t2 - t1;
float temps = tempsMs / 1000.0; // secondes
if (temps > 0) {
vitesse = longueur / temps; // instantanée
// Stocker la mesure dans le tableau
vitesses[indexMesure] = vitesse;
indexMesure++;
if (indexMesure >= NB_MESURES) {
indexMesure = 0;
tableauRempli = true;
}
float vMoyenne = moyenneVitesse();
// ----- Affichage Série -----
Serial.print("Temps de passage : ");
Serial.print(temps, 3);
Serial.println(" s");
Serial.print("Vitesse instantanee : ");
Serial.print(vitesse, 2);
Serial.println(" m/s");
Serial.print("Moyenne sur ");
Serial.print(tableauRempli ? NB_MESURES : indexMesure);
Serial.print(" mesures : ");
Serial.print(vMoyenne, 2);
Serial.println(" m/s");
Serial.print(" soit ");
Serial.print(vMoyenne * 3.6, 1);
Serial.println(" km/h");
Serial.println("------------------------");
}
}
}