Bien le bonjour et bonne année à tous
Je suis étudiant en PSI (CPGE) à Angers et dois mener un TIPE qui est une recherche sur une expérience à trouver en quelque sorte pour ceux qui ne connaissent pas mais ce n'est pas super important à expliquer.
J'ai créé un programme Arduino à l'aide de tutoriels et de précieux conseils qui me permet de mettre en rotation un moteur brushless (on relie l'arduino au PWM de l'ESC) à une certaine vitesse à l'aide de mon potentiomètre.
L'idée de départ était de lancer le moteur à une vitesse constante à l'aide d'Arduino mais je n'y suis jamais parvenu... d'où la résolution d'utiliser un potentiomètre
Finalement mon montage comporte aussi un capteur à effet hall qui vient mesurer la vitesse de rotation de mon moteur, (car un aimant est placé sur l'arbre et est détecté à chaque tour) et à une certaine tension définie par la position du potentiomètre.
De cette façon je devrais être capable de mesurer la vitesse de rotation en fonction de la tension
J'obtiens à l'aide des informations fournies par mon capteur à effet hall un certain nombre de détection pour une intervalle de temps choisi (le nombre de tours sur cet intervalle donc car on détecte l'aimant à chaque passage).
J'obtiens après conversion une vitesse de rotation en radians par seconde qui pour le coup est très éloignée de la valeur constructeur du Kv (nombre de tours par minutes et par volts).
Je pense que mon erreur est de ne pas comprendre la fonction map correctement...
Du coup je me trompe surement sur la valeur de la tension envoyée à mon moteur...
Voilà donc mon problème...
Mais le sujet est en fait très intéressant car finalement l'arduino joue le rôle d'une carte de commande pour mon brushless donc j'imagine très bien que l'on peut faire un drone avec une arduino même si mes maigres connaissances ne me permettent pas de le faire ^^.
Je ne sais pas jusqu'à quel point la carte Arduino peut contrôler la vitesse d'un brushless... si on peut lui imposer instantanément une vitesse constante ou autre...
Je laisse le programme ici
#include <Servo.h>
int valeur = 0; // Variable potentiomètre
Servo esc ;
int capteurpin = 2; // Lecture
int sensorValue;
int lastsensorValue = LOW;
int compteur = 0 ;
unsigned long temps = 0;
unsigned long duree = 1000;
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);
Serial.println(valeur);
compteur = 0;
}
}
Excusez moi pour mes explications un peu farfelues j'espère que vous comprendrez quand même xD.
Je vous remercie d'avance pour d'éventuelles réponses
Bonne journée à vous