Aide : déterminer la durée d'une chute libre

Bonjour à tous,

Je me lance sur Arduino et mon projet est de déterminer la durée d'une chute libre.

Mon montage :

  • Electroaimant grove (branché sur la broche 2)
  • Un bouton poussoir pour commander la chute d'une bille (broche 7)
  • Une photorésistance avec un laser (A0)

Lorsque j'appuie sur le bouton poussoir, cela déclenche bien la chute de la bille et lorsqu'elle passe devant le laser celui-ci détecte bien le passage de la bille.

Malheureusement la durée enregistrée n'est pas bonne du tout, elle est 10 fois trop faible. (Typiquement pour une chute de 10cm j'obtiens environ 10 ms alors que d'après les lois de la chute libre je devrais avoir un ordre de grandeur de 100ms)

Est-ce lié à la fonction "micros" ? Un problème de déclenchement?

Je vous remercie d'avance pour votre aide.

const int bouton = 7; // Broche numérique utilisée pour le bouton poussoir
int aimant=2;
int eclairement;
unsigned long tempsDebut=0; 
unsigned long tempsFin=0; 
unsigned long tempsChute=0; // en µs

void setup() {
Serial.begin(9600);
pinMode(bouton, INPUT); 
pinMode(aimant, OUTPUT);
}

void loop() {
  digitalWrite(aimant, HIGH);
if (digitalRead(bouton) == HIGH){
  digitalWrite(aimant, LOW);
  tempsDebut = millis();
  
  delay(10);
}
  eclairement=analogRead(A0);
  if(eclairement>110){
  tempsFin = millis();
  tempsChute= (tempsFin-tempsDebut);
  Serial.print("debut=");
  Serial.println(tempsDebut);
  Serial.print("fin=");
  Serial.println(tempsFin);
  Serial.print("duree =");
  Serial.println(tempsChute);
  Serial.println(eclairement);
  delay(1);
  
}


}

Tu peux avoir un rebond du bouton qui remet ton chrono à zéro : utilise un booléen qui passe à true pour indiquer que tu as lancé le chrono, et tu initialises tempsDebut seulement si le booléen est à false.

Fais la même chose pour arrêter le chrono.

Déplace digitalWrite(aimant, HIGH); dans le setup

De plus, si j'ai bonne mémoire : t = racine (2*h/g) donc pour h = 0.1m et g ~ 10 j'obtiens 140ms et pas 100ms. Pour plus de précision, tu peux utiliser micros() à la place de millis()

Enfin, la photorésistance va déclencher l'arrêt du chrono lorsque le bas de la bille va passer devant : il faut donc mesurer la distance de chute entre le bas de la bille lorsqu'elle est sous l'électro-aimant et la barrière laser.

hello
si l'on prend en compte le temps de réaction d'une photo résistance (temps de montée/descente) et du temps que va durer le passage de la bille devant cette photorésistance, j'ai un doute sur un fonctionnement fiable de ton système.

en plus clair, la bille passe si vite devant la photorésistance que je me demande comment elle peut réagir.

1/voir le temps de réaction d'une photodiode même longueur d'onde que le laser
2/brancher le signal de coupure sur D2 et utiliser l' interruption 0

Bonjour,

Il se peut aussi que la libération de la bille ne soit pas instantanée et que le champ magnétique se maintienne quelques ms après coupure du courant.

Je vous remercie pour vos réponses !

Lorsque je réfléchis à mon dispositif, la durée de chute mesurée devrait être supérieure à la durée réelle à cause des temps de réponses. Lorsque mon dispositif fonctionnera, je vais évaluer le temps de réponse du dispositif, à retrancher.

Pour ce qui est de la détection du passage de la bille, pas de soucis, je fais augmenter la hauteur, la détection est bonne, la durée augmente ...

Je vais donc m'intéresser de plus près à la problématique du bouton poussoir et m'initier au booleen.

A plus tard !
Marieke

kamill:
Bonjour,

Il se peut aussi que la libération de la bille ne soit pas instantanée et que le champ magnétique se maintienne quelques ms après coupure du courant.

Et donc :
utiliser deux capteurs espacés d'une distance parfaitement connue pour détecter le passage de la bille.
utiliser plutôt une photodiode bien plus rapide qu'une photorésistance.
L'avantage c'est que depuis Newton l'équation de la chute des corps est bien connue tu peux bien déterminer ton banc de mesure.

Attention le pas de mesure de la fonction micro est de 4 µs : c'est du à la configuration arduino.
Si comme je le pense c'est pour un projet scolaire je te laisse voir si ce pas de 4 µs est gênant ou pas.
S'il est gênant il y a moyen de modifier la configuration de base du micro de ta carte arduino.
Au fait c'est quoi comme carte ? Normalement cela s'annonce dès le premier post.