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é