Afin de connaitre et afficher la tension de la batterie de la télécommande TT2J il faut utiliser une entrée analogique de l’arduino. Hors ces entrées ne peuvent mesurer que du 5V maximum, mais la batterie avec 2 éléments LIPO 18650 a une tension, au maximum de la charge, de 2*4.2V = 8.4V

Il faut donc utiliser un pont diviseur de tension pour mesurer cette tension avec l’arduino. J’ai suivit le très bon tutoriel suivant afin de faire le calcul des résistances et aussi l’adaptation du code Arduino pour la télécommande:

Calcul des résistances :

5 / 8.4 = 0.595
50/84 = R1/(R1+R2)
50(R1+R2)=84R1
50R1+50R2=84R1
50R2=84R1-50R1
50R2=34R1
R2=34/50R1

Si on prend R1 = 10 Kohms alors R2 = 6.8 Kohms et le rapport R1/(R1+R2) = 10/16.8=0.595

Ce qui fait que pour une tension maximum de 8.4V la tension mesurée sur l’entrée A0 de l’Arduino sera de 8.4*0.595=4.998V

Schéma de principe :

Voici un exemple avec avec un Arduino UNO, cela restera identique pour l’Arduino Mega 2560 du projet final. (Il n’y a pas les composants exactes dans Tinkercad)

Code adapté du tutoriel vidéo ci dessus :

Définition des variables au début du code

//***************** MESURE DE TENSION **********************************
// Sur Arduino la Tension Max à ne pas dépasser sur les Entrées Analogiques = 5V 
// pour mesurer 10V il faut un pont diviseur = (R1/(R1+R2)) d'un rapport de 1/2 (R1 = R2 = 10Kohm) 
// pour 15V il faut un rapport de 1/3 (R1 = 10Kohm, R2 = 20Kohm)
// pour mesurer 16V il faut un rapport de 1/3.2 (R1 = 10Kohm, R2 = 22Kohm)
const float R1 = 10000;          // 
const float R2 = 6800;          // R2 = 6800 pour 8.4v

float digitalVolt = 0;          // Pour la lecture digitale sur A0 ==> 0...1023
float analogVolt = 0;           // Pour convertir vers analog: 0...5v
float vBatt = 0;                // Tension mesuree
float previous_analogVolt = 0;  // Ancienne valeur

      // ***************** déclaration des fonctions **************
float vInput(float a, float b, float c);
// void checkBatt();

Initialisation de la pin A0 dans le Setup

 pinMode(A0, INPUT);  // pin pour lecture tension batterie

Lecture et affichage de la tension dans la console et sur l'”cran LCD, soit directement soit via une fonction

void loop() {
 
  ........

  tensionBATTERIE(); // calcul de la tension batterie

........
}

//************* CALCUL TENSION BATTERIE **************************

void tensionBATTERIE(){
   digitalVolt = analogRead(A0);         // digitally measuring input: 0...1023
   analogVolt = (digitalVolt/1023)*5;   // convertion digital(0...1023) ==> analog(0...5v)
   //delay(1000);
     if (analogVolt != previous_analogVolt) {    // si nouvelle valeur...
          Serial.print("Lecture sur l'entree A0 = ");
    Serial.println(digitalVolt);              // 0...1023
    Serial.println("");       // new line
    Serial.println("Le resultat en Volt est de:");
    Serial.print("(");              // 0...1023
    Serial.print(digitalVolt);              // 0...1023
    Serial.print(" / 1023) x 5 = "); 
    Serial.print(analogVolt,3);                 // 0...5v
    Serial.println(" Volts");
    Serial.println("");       // new line
    vBatt = vInput(analogVolt, R1, R2);       // fonction à 3 params 
    Serial.println("La tension Batterie est donc de:");  // print
    Serial.print(analogVolt); Serial.print(" / (");Serial.print(R1,0);Serial.print(" / (");
    Serial.print(R1,0); Serial.print(" + "); Serial.print(R2,0); Serial.println("))");
    Serial.print(" = ");
    Serial.print(analogVolt); Serial.print(" / ");Serial.print(R1/(R1+R2),3);
    Serial.print(" = "); Serial.println(vBatt,3);   // valeur avec 3 decimales
    Serial.println(" ***** ***** ***** ***** *****");       // Pour séparer
    Serial.println("");                   // new line
   
    previous_analogVolt = analogVolt;     // memorise la valeur
//**** affichage tension batterie sur LCD ****    
    lcd.setCursor (10, 3);      // ligne 3 case 8
    lcd.print("Batt=");
    lcd.print(vBatt,2);             // ecrire la tension avec 3 digits
    lcd.print("V"); 
     }
}

float vInput(float a, float b, float c) { 
  float result = a / (b /(b + c));   // vBatt = 0...5V / (10000 / 10000 + 6800) ==> 0...5V / 0,312       
  return result;
}

Avec ce montage et ce code j’arrive à avoir un affichage de la tension de la batterie sur l’écran de la télécommande T.T.2.J dans le coin inférieur droit. Charge à l’utilisateur de ne pas descendre sous une tension de 2.5V par éléments pour ne pas endommager les accus.
Personnellement pour la télécommande je chargerais les accus quand la tension affichée sera proche de 6V.