Arduino, moteur brushless (modelisme) et ESC
Article mis en ligne le 12 mars 2022
dernière modification le 15 mars 2022

par Rémi

A présent que j’ai mon Arduino nano qui fonctionne avec le Bluetooth, passons à la seconde partie :
Faire fonctionner un moteur brushless avec son ESC ( Electronic Speed Control) grâce au nano.

La logique de travail :

 
[une batterie]
    |
    +=> [elle alimente l'ESC] =======> [ qui pilote le moteur (puissance/vitesse) ]
                           ^
                           |
                           v
        [ le nano pilote l'ESC, et est aussi alimenté par celui-ci ]

Pour que le nano soit alimenté par l’ESC, il faut que celui-ci soit de type BEC

Le pilotage de l’ESC sera fait par la broche pwd n° 3 pour les tests (on se réservera la broche 5 pour le prochain test)


Premiers tests
J’ai une batterie pour avion qui me reste, je vais l’utiliser. Le connecteur n’est pas le même que celui de l’ESC, il va falloir bricoler un peu, mais pour tester, cela devrait aller.
Branchements réalisés : la sortie de l’ESC est connectée au nano (GND, 5V et D3 ) et le moteur en sortie : le fil jaune sur la sortie B, le câble noir sur la sortie C, et pour finir, le câble rouge sur la sortie A.
Branchement de l’accu : l’Arduino s’allume (youpi), et l’ESC bip, mais le moteur ne tourne pas.
C’est relativement normal. Il faut initialiser de l’ESC avant utilisation (procédure Arduino "initialisation()" )

Après pas mal de recherches et de tests, vu que je ne disposais pas de la doc de mon ESC, j’ai réussi à faire un programme qui permet l’initialisation de l’ESC, et de faire varier la vitesse du moteur.
Je vous donne le code ici :

#include <Servo.h> // bibliothèque de gestion des servo commandes

Servo ESC; // Création de l'objet permettant le contrôle de l'ESC
char data; // données sur la console de l’Arduino pour test

void setup() {
 delay(500);
 Serial.begin(115200);

 // Partie initialisation de l'ESC
 ESC.attach(3, 1000, 2000); // On attache l'ESC au port numérique 9 (port PWM obligatoire)
 delay(1000);
 ESC.write(180);
 delay(1000);
 ESC.write(0);
 delay(1000);
 // Fin d'initialisation
 
 Instructions();
 Serial.println("Attendez la fin de l'initialisation de l'ESC pour vos commandes (deux bips de l'ESC)");
}

void loop() {
 if (Serial.available() > 0) {
       data = Serial.read();

       switch (data) {
           // 0
           case 48 : Serial.println("Envoi de la valeur 0 ");
                     ESC.write(0);
           break;

           // 1
           case 49 : Serial.print("Phase de test dans 1 seconde ...");
                     delay(1000);
                     test();
           break;
           
           // 2
           case 50 : Serial.println("Envoi de la valeur  50 ");
                     ESC.write(50);
           break;

           // 3
           case 51 : Serial.println("Envoi de la valeur  100 ");
                     ESC.write(100);
           break;

           // 4
           case 52 : Serial.println("Envoi de la valeur 180 ");
                     ESC.write(180);
           break;

       }
   }

}

void test()
{
   for (int i=0; i<=180; i++) {
       Serial.print("Vitesse = ");
       Serial.println(i);
       
       ESC.write(i);
       
       delay(200);
   }

   Serial.println("Fin -> arret");
   ESC.write(0);
}

void Instructions()
{  
   Serial.println("Instructions :");
   Serial.println("\t0 : Valeur 0 pour le moteur (arret)");
   Serial.println("\t1 : execution d'un test de toutes les valeurs\n");
   Serial.println("\t2 : moteur à 50");
   Serial.println("\t3 : moteur à 100");
   Serial.println("\t4 : moteur à 180 (valeur max)");
}

Pour tester :
Brancher le moteur à l’ESC, la masse et le fil blanc du BEC, mais pas le rouge (pas d’alimentation de l’Arduino), à GND et la broche 3 du nano.
Quand tout est près, brancher la batterie, puis tout de suite le nano ;
Ouvrir le moniteur (Shift-Ctrl-M) sur Arduino attendre la fin de l’initialisation,
taper ’1’ et la touche ’enter’, le test devrait se lancer avec le moteur qui se lance petit à petit.

Cool !
Reste à associer le HC05 et l’ESC.
Ce sera un prochain article.