Bonjour,
J'ai apporté quelques modifications concernant mon dernier post du 29/04
Voici l'algorithme :
clignoter la led13
mesurer la tension
mesurer le courant
calculer la capacité
si temps = 1mn
alors désactiver le relai 0
mesurer la tension électrochimique E
si temps = 4s
alors réactiver relai 0
si on appuie charge_decharge
alors autoriser la charge ou la décharge
calcul de la résistance interne de la batterie
afficher la tension en volt
afficher le courant en ampère
afficher la capacité en mAh
afficher le temps
Le code est le suivant :
#include <Wire.h>
#include <SoftwareSerial.h>
#include <TimerOne.h>
#include <LiquidCrystal.h>
#define led13 13
#define relays1 12
#define relays0 11
#define charge_decharge 9
#define on_off 10
LiquidCrystal lcd(7,6,2,3,4,5); // (RS=7, E=6, D4=2, D5=3, D6=4, D7=5)
/******************************************************************/
float tension,tensionACS=0; // Initialisation
float courant=0;
float sensible=0.185; // Sensibilité du capteur
float ACSoffset=2.5; // Valeur de tension de sortie du capteur lorsque le courant=0
float capacite=0;
float R;
float E=1.2 ; // tension électrochimique
int heure=0,minute=0,seconde=0; // le temps
/*****************************************************************/
void setup()
{
Timer1.initialize(1000000); // initialize timer1, and set a 0,1 second period => 100 000 pour 0.01s 10 000
Timer1.attachInterrupt(callback); // attaches callback() as a timer overflow interrupt
pinMode(led13, OUTPUT);
pinMode(A0, INPUT); // On défini A0 en entrée
pinMode(relays1, OUTPUT); // On défini relay1 en sortie
pinMode(relays0, OUTPUT); // On défini relay0 en sortie
Serial.begin(9600);
lcd.begin(20,4); //et pas lcd begin comme cetraine biblio
lcd.clear(); // Effacer le l'écran
digitalWrite(relays0,HIGH);
} // fin setup
// Interruptions tous les 1s fait par le timer1****************
void callback()
{
seconde++;
if ( digitalRead(13)== 1 ) {digitalWrite(13,LOW);} else {digitalWrite(13,HIGH);}
tension=analogRead(A0); // Lecture de la valeur récupèrée de A0
tension=tension*(5.0/1023.0); // Conversion de cette valeur en une tension comprise entre 0 et 5V (Batterie)
tensionACS=analogRead(A1); // Lecture de la valeur récupèrée de A1
tensionACS=(tensionACS*5.0)/1023; // Conversion de cette valeur en une tension comprise entre 0 et 5V (Capteur ASC)
courant=(tensionACS-ACSoffset)/sensible; // Calcul du courant
capacite=(courant/3.6)+capacite; // (I(A)*1000)/(1s/3600)+capacite
} // fin void callback
void temps()
{ if(seconde>=60){seconde=0;
minute++;
digitalWrite(relays0,LOW);
if(minute>=60){minute=0;
heure++;
}
if(heure>=24){heure=0;
lcd.clear();
}
}
if(seconde==4){digitalWrite(relays0,HIGH);}
} // fin void temps
/*********************************************************/
void loop()
{
temps();
if (digitalRead(charge_decharge)==0)
{digitalWrite(relays1,LOW);R=(tension-E)/courant;} // charge
else
{digitalWrite(relays1,HIGH);R=E/courant;} // décharge
/*************Affichage sur l'écran LCD****************/
lcd.setCursor(0,0);
lcd.print(tension,2);
lcd.print("V");
lcd.print(" ");
lcd.print(courant,2);
lcd.print("A");
lcd.setCursor(0,1);
lcd.print(R,2);
lcd.print("ohm");
lcd.print(" ");
lcd.print(capacite,0);
lcd.print("mAh ");
lcd.setCursor(5,2);
lcd.print(heure);
lcd.print("h ");
lcd.print(minute);
lcd.print("m ");
lcd.print(seconde);
lcd.print("s");
}//fin loop ;
Vérification et simulation Isis :
En charge :
Pour être en charge, il faut désactiver l’interrupteur charge_decharge de l’entrée. On a alors l’alimentation de 1.5V de recharge la batterie à 1A.
En effet, le courant batterie correspond à l’équation suivante : I=(U-E)/R
Sur la figure suivante, on peut observer que le courant de charge est bien à 1A et que la tension de la batterie correspond bien à 1.3V. la mesure de la résistance interne affiche 0.09Ω presque égale à la valeur paramétrée dans la simulation.
Lorsque la tension de la batterie est à 1.5V et que le courant est de 0.1A alors il y a l’arrêt de la charge.
De plus, si le temps de charge est plus grand que 3 heures, la charge s’arrête.
En décharge :
Pour la décharge, on active l’interrupteur charge_decharge. La batterie se décharge sur la résistance de décharge (0.9ohm). La tension de décharge est de 1.2V et le courant de décharge est 1A.
Le courant de batterie en décharge correspond à l’équation suivante : I=E/(R+r(0.9))
Dans la simulation Isis, représentée sur la figure ci-dessous, on observe que le courant de charge est égal à 1A et que la tension de la batterie correspond bien à 1.1V.
La résistance interne affichée est de 1.12Ω : ce qui est presque égale à la valeur paramétrée dans la simulation.
Voici le lien pour télécharger le fichier Isis :
https://drive.google.com/file/d/1aHmKApdtJsQLtyKSUddmVvACPW5-L8TQ/view?usp=sharing
Pour plus d'information concernant le projet, je vous invite à télécharger le dossier dont le lien
est le suivant : batterie.docx - Fichier Doc
Perspectives :
Notre testeur NiMH fonctionne bien, mais pour sécuriser le fonctionnement, un capteur de température LM35 va permettre de mesurer la température externe de la batterie.
Si celle-ci est supérieure à 50°C, alors la charge ou la déchargé sera bloquée.
Dans un deuxième temps, de réaliser un testeur de deux batteries NiMH de type AA et AAA à la fois en parallèle avec une Nano.
Merci.










































