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
Bonne fin de journée à vous et merci d'avance