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