Programme avec arduino pour piloter le rechargement de batteries

Fermé
zak343 Messages postés 7 Date d'inscription mercredi 10 mai 2017 Statut Membre Dernière intervention 22 décembre 2019 - Modifié le 23 déc. 2019 à 09:58
Bonjour ! J'ai récemment eu l'idée de crée un chargeur de batterie avec un arduino pour le commander. Une fois la carte crée, il ne manquait plus que le code a faire. Ce que j'ai fais. Durant les phases test tout marché pour le mieux. Cependant une fois arriver a l'étape final et bien c'est la que j'ai commencé a rencontré des soucis. Mon programme est censé gérer la rechargement de 3 batteries qui sont initialement branché, borne + en commun et la leur masse branché a un transistor Nmos pour chaque une des batteries. Je souhaité commander la grille des Nmos avec digitalWrite pour pouvoir les recharger une a une chaque une son tour. J'ai utiliser des pins en plus pour meublé tout ça avec des leds qui s'allume en fonction de l'état de charge de chaque batteries, en charge et chargé. Le plus gros problème que j'ai rencontré c'est lorsque une batterie par exemple la batterie 0 a atteint les 14.70volts a savoir la tension de seuil de basculement de la pin ici D2 reste a l'état haut alors qu'elle devrait passer a l'état bas. J'ai pu constater ce soucis sur les 3 pins qui gère les Nmos. Les leds associés aux Nmos ici par exemple D4 associé a D2 s'éteint bien lorsque la tension de seuil est franchie. Voila je me remet donc a vous pour pouvoir m'aider a trouver quelle est le problème dans mon code. Je vous remercie en avance pour votre aide !

float Ah0,Ah00,b0; // Ah0 valeur image de la tension batterie 0
float Ah1,Ah11,b1; // Ah1 valeur image de la tension batterie 1
float Ah2,Ah22,b2; // Ah2 valeur image de la tension batterie 2
int b; // Variable qui permet d'arrêter la boucle

void setup()
{


pinMode(2,OUTPUT); // Initialisation sortie batterie 0
pinMode(3,OUTPUT); // batterie 0 , chargé
pinMode(4,OUTPUT); // batterie 0 , en chage

pinMode(5,OUTPUT); // Initialisation sortie batterie 1
pinMode(6,OUTPUT); // batterie 1 , chargé
pinMode(7,OUTPUT); // batterie 1 , en chage

pinMode(13,OUTPUT); // Initialisation sortie batterie 2
pinMode(8,OUTPUT); // batterie 2 , chargé
pinMode(9,OUTPUT); // batterie 2 , en chage


digitalWrite(2,HIGH); // Nmos batterie 0
digitalWrite(3,LOW);  // Led témoin batterie 0 chargé
digitalWrite(4,LOW);  // Led témoin batterie 0 en charge

digitalWrite(5,LOW);  // Nmos batterie 1
digitalWrite(6,LOW);  // Led témoin batterie 1 chargé
digitalWrite(7,LOW);  // Led témoin batterie 1 en charge

digitalWrite(13,LOW); // Nmos batterie 2
digitalWrite(8,LOW);  // Led témoin batterie 2 chargé
digitalWrite(9,LOW);  // Led témoin batterie 2 en charge


b=0; // Variable qui permet d'arrêter la boucle
b0=0; // Variable qui permet de dire que batterie0 est chargé
b1=0; // Variable qui permet de dire que batterie1 est chargé
b2=0; // Variable qui permet de dire que batterie2 est chargé
  
    do {  // Execute au moins une fois 
          
      Ah0 = analogRead(A0); // Lecture du port A0
      Ah1 = analogRead(A1); // Lecture du port A1
      Ah2 = analogRead(A2); // Lecture du port A2
      
      Ah00 = (Ah0*26.35/1024.0); // Conversion en volts 
      Ah11 = (Ah1*26.18/1024.0); // Conversion en volts 
      Ah22 = (Ah2*26.10/1024.0); // Conversion en volts 
      

      if (b0==1) {} // si batterie0 est chargé sauter cette etape

      else {        // sinon 
      if ( (Ah00>6) && (Ah00<13.25) ) // si la tension batterie 0 > 6v et < 13.25v alors 
         {
          
    do {        

       Ah0 = analogRead(A0);      // Lecture du port A0
       Ah00 = (Ah0*26.35/1024.0); // Conversion en volts 
       digitalWrite(2,HIGH);      // Nmos ferme le circuit batterie 0
       digitalWrite(4,HIGH);      // Led batterie 0 en charge allumé
       digitalWrite(3,LOW);       // Led batterie 0 chargé éteinte  
       } 
        while(Ah00<14.70);        // Tant que tension batterie 0 < 14.70v
          
       digitalWrite(2,LOW);       // Nmos ouvre le circuit batterie 0
       digitalWrite(4,LOW);       // Led batterie 0 en charge éteinte
       digitalWrite(3,HIGH);      // Led batterie 0 chargé allumé
       digitalWrite(5,HIGH);      // Permet la fermeture du circuit de la batterie 1
       b0=1;                      // Indication que la charge batterie 0 effectué
          } 
  
   else {                         // Dans le cas ou b0=1
          digitalWrite(2,LOW);    // Laisse le Nmos a l'état bas de la batterie 0 
          digitalWrite(5,HIGH);   // Ferme le circuit batterie 1
        }
            }
 
 if (b1==1) {}  // si batterie1 est chargé sauter cette etape

 else {         // sinon
 if ( (Ah11>6) && (Ah11<13.25) ) // si la tension batterie 1 > 6v et < 13.25v alors 
    {
        do {

       Ah1 = analogRead(A1);        // Lecture du port A0 
       Ah11 = (Ah1*26.18/1024.0);   // Conversion en volts 
       digitalWrite(5,HIGH);        // Nmos ferme le circuit batterie 1
       digitalWrite(7,HIGH);        // Led batterie 1 en charge allumé
       digitalWrite(6,LOW);         // Led batterie 1 chargé éteinte

           } 
        while(Ah11<14.70);          //  Tant que tension batterie 1 < 14.70v
          
       digitalWrite(5,LOW);         // Nmos ouvre le circuit batterie 1
       digitalWrite(7,LOW);         // Led batterie 1 en charge éteinte
       digitalWrite(6,HIGH);        // Led batterie 1 chargé allumé
       digitalWrite(13,HIGH);       // Permet la fermeture du circuit de la batterie 2
       b1=1;                        // Indication que la charge batterie 1 effectué
    }
      
        else {                      // Dans le cas ou b1=1
      
          digitalWrite(5,LOW);      // Laisse le Nmos a l'état bas de la batterie 1
          digitalWrite(13,HIGH);    // Ferme le circuit batterie 2
        
             }
       }
if (b2==1) {}                       // si batterie2 est chargé sauter cette etape
      else {                              // sinon
      
      if ( (Ah22>6) && (Ah22<13.25) ) // si la tension batterie 1 > 6v et < 13.25v alors 
     {
        do {

       Ah22 = (Ah2*26.10/1024.0);     // Lecture du port A0
       Ah2 = analogRead(A2);          // Conversion en volts 
       digitalWrite(13,HIGH);         // Nmos ferme le circuit batterie 2
       digitalWrite(9,HIGH);          // Led batterie 2 en charge allumé
       digitalWrite(8,LOW);           // Led batterie 2 chargé éteinte
  
           } 
        while(Ah22<14.70);            //  Tant que tension batterie 2 < 14.70v
          
       digitalWrite(13,LOW);          // Nmos ouvre le circuit batterie 2
       digitalWrite(9,LOW);           // Led batterie 2 en charge éteinte
       digitalWrite(8,HIGH);          // Led batterie 2 chargé allumé
       digitalWrite(2,HIGH);          // Permet la fermeture du circuit de la batterie 0
       b2=1;                          // Indication que la charge batterie 2 effectué
     }
            }
      
        else {                        // Dans le cas ou b2=1
              digitalWrite(13,LOW);       // Laisse le Nmos a l'état bas de la batterie 2 
             }
             
      
      if (2<b0+b1+b2)  {b=1;}               // si la somme de b0+b1+b2 est supérieur a 2 , alors b vaut 1
                                
      }
      while(b!=1);                          // En sort de la boucle , sinon on répete la procédure
}

void loop()
{}