Mesure d'une vitesse de rotation d'un moteur pour projet étudiant

Bien le bonjour,
Je suis actuellement étudier en deuxieme année de classe préparatoire et doit réaliser un projet autour des transports. Je me suis penché sur la conception d'un drone, et mon sujet est le choix des moteurs pour un drone caméra

Je suis actuellement en train d'essayer de mesurer le temps de réponse d'un moteur brushless à un échelon de tension.
L'objectif final sera de comparer cette réponse à celle d'un moteur CC.
Pourquoi ?
Car, si j'ai bien compris, la PWM (ou MLI) serait une succession d'échelons permettant de contrôler un moteur. J'espère donc montrer que le moteur brushless répond plus rapidement aux échelons qu'un moteur CC, afin de justifier son utilisation dans la construction de drones(car si le moteur CC répond moins vite aux commandes, je suppose que le drone est moins maniable...)

A l'aide d'un potentiomètre, je fais tourner mon moteur. Un capteur à effet hall repère à chaque tour de mon moteur une petite pièce aimantée que j'ai accroché dessus.
Finalement, en créant un compteur qui se réinitialise toutes les 50ms par exemple, je suis en mesure de connaître approximativement la vitesse de mon moteur (la valeur du compteur s'affiche sur le moniteur).

Mais je n'arrive pas à arrêter l'expérience (jaimerais stopper l'affichage des valeurs après 10secondes).
Je crois comprendre qu'il s'agit d'une simple boucle while() avec une condition sur le temps...

Voici mon programme :

#include <Servo.h>
int valeur = 0; // Variable potentiomètre
Servo esc ;
int capteurpin = 2;
int sensorValue;
int lastsensorValue = LOW;
int compteur = 0 ;
unsigned long temps = 0;
unsigned long duree = 50;

void setup() {
  esc.attach(8);
  esc.writeMicroseconds(1000); // On attribue la valeur min
  Serial.begin(9600);
  temps = millis();
}

void loop() {
  // Lecture du potentiomètre pour régler la vitesse
  valeur = analogRead(A0);
  int valeuresc = map (valeur , 0 , 1023, 1000, 2000);
  esc.writeMicroseconds(valeuresc); // On attribue la variable mappée qu'on attribue à l'esc
  sensorValue = digitalRead(capteurpin);
  if (( sensorValue == HIGH) && (lastsensorValue == LOW)) compteur++;
  lastsensorValue = sensorValue;
  delay(1);

  if (millis() - temps > duree) {
    temps = millis();
    Serial.println(compteur);
    compteur = 0;
  }
}

Je suis conscient de vous en avoir beaucoup dit pour une question assez simple, mais j'aimerais connaître si possible votre avis sur cette expérience : pertinente ? en accord avec l'objectif?

Sinon il n'y a pas de soucis je comprends ne pas être vraiment au bon endroit pour élargir de trop le propos :wink:
Bonne fin de journée à vous et merci d'avance

(re)bonjour,

Une temporisation reste une temporisation. Que son rôle soit de cadencer un affichage ou de faire une autre tâche, le principe reste le même. Dans ton cas, il faut attendre un certain temps pour ensuite ne rien faire (ou plus exactement, faire quelque chose qui ne fait rien).

Pour arrêter au bout de 10 secondes, tu crées un second chronomètre que tu initialises comme le premier à la fin du setup. Dans la loop, SI le temps écoulé depuis l'initialisation dépasse la durée spécifié (10000 ms), il suffit de faire une boucle infinie genre while(1);

if (millis()-chrono > 10000ul) while();

Ah oui ok pour vos deux réponses...
Oui en fait ça paraît assez évident finalement.
Je ne sais même pas pourquoi je n'ai pas pensé à ça ^^.
Merci beaucoup pour votre aide une fois de plus ^^

Bonjour,

Je suis intéressé par ton montage pour mesurer la vitesse de rotation de ta roue, si possible.

Si tu as les références des composants je suis preneur.

D’avance merci à toi.