Crazymakers

Tutoriels DIY • Impression 3D • Laser • CNC • Electronique

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

Le chargeur est basé sur 4 régulateurs LM317...

Voici le schéma électronique du système...

Le routage du circuit...

Vue 3D sous Proteus...

Côté "porte piles", on raccorde...

Version complète

Version Light

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...

Projet terminé