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 !
Code: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() {}
-----