calcul d'une vitesse avec capteur ultra sons

Bonjour, je suis élève de première scientifique Science de l’ingénieur.
Notre projet consiste à construire un petit piano numérique de 5 touches, on souhaite donc calculer la vitesse de pression sur la touche pour avoir une vélocité(puissance de la note).

Sachant que la touche en position normale est a 8 cm du capteur et a 3 cm de celui-ci quand elle est appuyée.
Je calcul la distance grâce a un capteur ultra-sons HC-SR04.

Mon problème est que je souhaite calculer une seule vitesse par appui sur la touche mais le programme si-dessous tourne en boucle en en calcul plusieurs.

merci d’avance pour votre aide.

// définition des broches utilisées
int trig = 8;
int echo = 7;
float lecture_echo;
float cm;
unsigned long tempo1;
unsigned long tempo2;
int distb1 = 8; // cm
int distb2 = 3; // cm
int tempo_f;
unsigned long v;

void setup()
{
pinMode(trig, OUTPUT);
digitalWrite(trig, LOW);
pinMode(echo, INPUT);
Serial.begin(9600);
}

void loop()
{
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
lecture_echo = pulseIn(echo, HIGH);
cm = lecture_echo / 58;
// Serial.print("Distance : ");
// Serial.println(cm);

if (cm < distb1) // Si distance capteur < 8 cm
{
tempo1 = millis();
Serial.print("Tempo 1 : ");
Serial.println(tempo1);

if (cm < distb2) // Si distance capteur < 3 cm
{
tempo2 = millis();
Serial.println("");
Serial.print("Tempo 2 : ");
Serial.println(tempo2);

tempo_f = tempo2 - tempo1;

Serial.print(“Tempo 2 :”);
Serial.println(tempo2);
Serial.println("");

Serial.print(“Tempo 1 :”);
Serial.println(tempo1);
Serial.println("");

Serial.print(“Tempof :”);
Serial.println(tempo_f);
Serial.println("");

v = (distb1 - distb2) / tempo_f;
Serial.print("Vitesse pression : ");
Serial.println(v);

}
}
}

Comment allez vous savoir quand faire la mesure?

J-M-L:
Comment allez vous savoir quand faire la mesure?

La vitesse doit etre calculée une fois que la touche est enfoncée.
Merci de votre aide.

Une fois la touche enfoncée c’est trop tard pour faire la mesure de la vitesse d’enfoncement.

Donc il faut mesurer en permanence en notant le dernier moment avec la touche en haut et le premier moment avec la touche 3cm plus loin - vous aurez votre différence de temps pour calculer la vitesse

Je suis assez dubitatif cependant sur la capacité réelle à faire la mesure suffisamment rapidement pour que la vitesse soit précise —> quel capteur comptez vous utiliser et à quel distance du mécanisme ?

Il se peut qu’une autre approche avec un capteur de vibration qui aura une mesure différente en fonction de l’energie Mise dans l’appui

Idem, je doute que le capteur d’ultrasons choisi ait une cadence d’acquisition de mesures suffisamment rapide pour déterminer une vitesse?
Pourquoi ne pas utiliser simplement deux contacts électriques en haut et en bas, et chronométrer le temps de passage entre les deux ?

Dans un clavier tel que celui du Roland D-50, la vélocité est mesurée par la différence de temps entre deux contacts. Chaque touche du clavier est dotée de 2 contacteurs, l'un près de l'axe de rotation de la touche, l'autre près du bout de la touche. Par construction, quand on enfonce la touche, il y a un délai entre le 1er et le 2nd contact. En mesurant ce temps, on peut :

  • savoir qu'une touche a été enfoncée,
  • à quelle vitesse elle a été manoeuvrée.