// // Contrôle commande de moteur brushless "aviation" // Mesure sur AN0 de la tension du potentiomètre de 10 kilo ohm. // C'est l'accélérateur du moteur. // Sortie des impulsions vers le contrôleur par D9. // /****************************************************/ // Déclaration de variables globales. int distance=0; // Valeur de la mesure de la tension du potentionmère sur A0 // plus tard ce sera la tension du capteur de distance // qui y sera connecté. unsigned int temps_pulse; // largeur d'impulsion de la sortie int sortie_servo=9; // numéro de PIN du module arduino utilisé en sortie pour la connexion // vers la commande du contrôleur brushless. unsigned long debut_periode; // pour noter le début de chaque période de 20 millisecondes qui doit séparer les // impulsions de commande du contrôleur brushless. int pinDistance =0; // numéro de PIN de conversion analogique digitale du module arduino // utilisé pour lire la tension du potentiomètre qui sert d'accélérateur void mesures(void) // fonction appelée pour mesurer l'entrée analogique { distance=0; //la valeur nommée distance est moyennée // pour diminuer l'effet de quelques relevés entâchés de parasites for(int ii=0; ii<16; ii++) { distance += analogRead(pinDistance); } //distance est prise une 16 fois . //et divisé par 16 (en décalant 4 fois à droite) pour faire une moyenne rapide distance = (distance >>4); // Le convertisseur travaille sur 10 bits, // la valeur distance sera comprise entre 0 et 1023 // Serial.print("Distance :");// Affichage éventuel pour vérifier la mesure // Serial.println(distance); } void faire_pulse(int commande) { // On utilise une largeur minimale d'impulsion de 0,99 ms // et un maximum de 0,99 + 1,023 = 2,013 ms temps_pulse = (990 + constrain(commande,0,1023)); // constrain utilisé pour que la durée de l'impulsion reste dans les // limites précédentes, même en cas d'errer sur commande. digitalWrite(sortie_servo,HIGH); // mise à l'état haut de D9 delayMicroseconds(temps_pulse); // maintien à l'état haut digitalWrite(sortie_servo,LOW); // retour à l'état bas } /*******************************************/ // Début du programme du langage Arduino /*******************************************/ void setup()//Initialise l'utilisation des PINs de l'arduino { pinMode(sortie_servo,OUTPUT); // PIN D9 en sortie digitalWrite(sortie_servo,LOW); // PIN D9 à l'état bas Serial.begin(9600);// pour déboggage éventuel analogReference(DEFAULT);// référence du convertisseur // est la tension d'alimentation } void loop() { // En fonctionnement normal : boucle infinie while(1) { debut_periode = micros(); // enregistre le début de la boucle en microsecondes mesures(); // prendre la tension du potentiomètre accélérateur faire_pulse(distance);// appeler la fonction qui génrère l'impulsion while( (micros()-debut_periode) < 19999); // attendre les 20 millisecondes pour faire la période suivante } }