Resultat recherché
On doit réaliser 4 circuits régulateurs variables basés sur 4 LM317...
Matériel
- 5x Régulateurs LM317
- 4 Potentiomètres 100Ohms
- 9 Diodes Type 1N4002
- 5 Condensateurs céramiques 0.1uF
- 4 Résistances 220 ohms
- 5 Résistances 1.5K
- 1 Résistance 680 ohms
- 1 Condensateur 1uF
- 4 DuoLed
- 1 Arduino Nano
- Connecteurs
- Nappe de fils
- Un vieux chargeur
Conception électronique
Côté "porte piles", on raccorde...
Programmation de l'Arduino
Le programme est très simple...
Télécharger le programme Arduino (.ino)
float COEFFICIEN_VOLTS = 231.3529;
float TEMPS_CHARGE = 120;
float TEMPS_PAUSE = 5;
float TENSION_CONSIGNE = 1.60;
float TENSION_PILE_HS = 1.25;
int LED_ERREUR_PILE[] = {4,6,8,10};
int LED_CHARGE_PILE[] = {5,7,9,11};
int PIN_READ[]={3,2,1,0};
boolean CHARGE_OK[]={false,false,false,false};
boolean CHARGE_KO[]={false,false,false,false};
int PULSE_CHARGE = 13;
void setup() {
Serial.begin(9600);
//Pin d'impulsion de Charge
pinMode(13, OUTPUT);
//Pins de Charge 4,6,8,10
//Pins de défaut 5,7,9,11
for (int i = 4; i <=11; i++)
{pinMode(i, OUTPUT);}
}
//Fonction de lecture des Tensions
float TENSION_PILE_CHARGEUR(int pin)
{float value = 0.0; value = analogRead(pin); return value / COEFFICIEN_VOLTS;}
void loop() {
//------------ DEBUT DE TEST DES TENSIONS DES PILES ------------
for (int i = 0; i < 4; i++)
{
//Si la tension mesurée est inférieure à la limite PILE HS alors allumage des d'erreur.
if (TENSION_PILE_CHARGEUR(PIN_READ[i]) < TENSION_PILE_HS)
{CHARGE_KO[i]=true;} else {CHARGE_KO[i]=false;}
//Si la tension mesurée est inférieure à la consigne alors allumage des voyants de charge sinon Arrêt voyant de charge.
if (TENSION_PILE_CHARGEUR(PIN_READ[i]) < TENSION_CONSIGNE) {CHARGE_OK[i]=true;} else {CHARGE_OK[i]=false;}
}
for (int i = 0; i < 4; i++)
{
// Si il y a une erreur alors on allume la LED associée sinon on l'éteint.
if (CHARGE_KO[i]==true) {digitalWrite(LED_ERREUR_PILE[i],HIGH);}else {digitalWrite(LED_ERREUR_PILE[i],LOW);}
// Si pas d'erreur, allume le voyant de charge.
if (CHARGE_OK[i]==true) {digitalWrite(LED_CHARGE_PILE[i], HIGH);}
// Si pas d'erreur mais charge désactivée (Car pile chargée) on éteint les leds.
if (CHARGE_OK[i]==false and CHARGE_KO[i]==false) {digitalWrite(LED_CHARGE_PILE[i], LOW);}
}
//---------------- MISE EN ROUTE DE LA CHARGE ----------------
//Ecriture Serial Début de charge
Serial.println("Debut de charge de " + String(TEMPS_CHARGE) + " Secondes");
//Début de Charge
digitalWrite(PULSE_CHARGE, HIGH);
//Délai de charge
delay(TEMPS_CHARGE * 1000 - 500);
//Ecriture des tensions en fin de cycle charge:
Serial.print("Tensions de fin de charge:\n");
for (int i=0;i<4;i++){Serial.print(String(TENSION_PILE_CHARGEUR(PIN_READ[i]), 3) + "v ");}
Serial.print("\n");
//-------------------- ARRET DE LA CHARGE --------------------
//RESET des Leds
for (int i = 3; i >= 0; i--) {digitalWrite(LED_CHARGE_PILE[i], LOW);}
//Arrêt de la charge
digitalWrite(PULSE_CHARGE, LOW);
//Ecriture Serial Début de pause
Serial.println("Pause de " + String(TEMPS_PAUSE) + " Secondes");
//Pause de charge
delay(TEMPS_PAUSE * 1000 - 500);
//Ecriture des tensions à vide
Serial.print("Tensions a vide:\n");
for (int i=0;i<4;i++){Serial.print(String(TENSION_PILE_CHARGEUR(PIN_READ[i]), 3) + "v ");}
Serial.print("\n\n");
}
Fonctionnement
Au début du cycle de charge...