domingo, 19 de abril de 2020

Cargador de baterías de coche con fuente de PC y controlador basado en Arduino.




Aprovechando estos días de confinamiento he terminado un cargador de baterías a partir de una fuente de PC.




Las fuentes de PC en principio solo suministran 11,6V en su sálida de 12 V, pero con algunas modificaciones en la patilla 1 del chip que controla la tensión esta se puede aumentar hasta superar los 14V y hacerla útil para cargar una batería de automoción.

Las fuentes están diseñadas para mantener los 5V del cable rojo independientemente de la carga de este porqe es la tensión que alimenta los dispósitivos eléctrónicos más criticos no siendo en las otras tensiones importante la exactitud.
Entonces la modificación que tenemos que hacer es que nuestra tensión de 12V sea la regulada en lugar de la de 5V, para ello es necesario hacer unas pequeñas modificaciones, pero que son críticas  y deben hacerse siempre con la fuente desenchufada:

-Buscar el chip TL494 o similar, encargado de la regulación de salida de la fuente, este integrado cuando en su patilla tiene menos de 2,5 V aumenta el tiempo de ciclo alto de la onda de salida para aumentar la tensión, si es mayor de esos 2,5, la disminuye, regulando de esa forma la tensión final de salida de la fuente en 5V.  Nuestro proposito es hacer que esa salida no esté referida a los 5 V, sino a los 12 que es la que nos interesa.
El chip que llevan las fuentes puede ser el TL494, pero también puede ser otro modelo de funcionamiento análogo  en cuyo caso habría que consultar el datasheet para buscar la patilla sobre la que actuar.

Preparación de la fuente:
- De la fuente vamos a utilizar los cables amarillos, los negros, un morado, el verde y un rojo si quisieramos incluir un led extra para indicar que la fuente esta encendida.  Conviene desoldar los grupos de cables rojos y naranja ( dejando uno por si alguna vez queremos utilizar la fuente para otra cosa ).
Sanear los cables que quedan cortandolos a la medida adecuada al proyecto y agrupandolos por colores con bridas para que quepan dentro de la caja sin tocar los ventiladores ni ocupando más espacio del imprescindible.

-Si la fuente tiene interruptor de encendido unimos el cable verde  con uno negro a través de una resistencia de 220 Ohm.  (La unión de estos cables es lo que indica a la fuente que debe encenderse), Si no hay interruptor de encendido podemos colocar el interruptor de encendico entre estos dos cables.

- Modificar la eléctrónica de la fuente para fijar la tensión de los cables amarillos a 14,4V ( En la carpeta de archivos he incluido uno que encontré en internet que describe detalladamente el proceso de modificación).

-Desoldar la patilla 1 de su punto de conexión, extraerla  y hacer la nueva conexión.La modificación debe hacerse sin tensión y de forma cuidadosa, no encender la fuente hasta asegurarnos de que esté todo correcto porque podríamos estropearla. :

- Comprobar la tensión de salida de los cables amarillos y actuando sobre la resistencia variable fijarla a 14,3-14,4V, que es la ideal para cargar las baterías.


Hasta aquí tendriamos una fuente normal, pero que no corta la carga. Con un sencillo circuito y un arduino podemos añadirle esa funcionalidad además de que nos indique con unos led,s como va más o menos el proceso. 


El arduino parará la carga cada rato y verifica la tensión en la batería. Si esta está por debajo de 13,6V continuará cargando. Al alcanzar los 13,6V se abre un relé y la carga se detiene.  El arduino lo vamos a alimentar con la salida de 5V morada, prescindiendo de las rojas de 5V.


Para dejar terminado el proyecto podemos incluir  un voltimetro-amperimetro electronico que nos permite de un rápido vistazo si todo está correcto o si la batería presenta problemas. En mi caso en el momento que escribo esto aún no me había llegado y lo espero para incluirlo a la salida hacia la batería.

Hay que armarse de paciencia y ser meticuloso para ejecutar el circuito de manera que quede dentro de la fuente confinado en el poco  espacio libre que hay, yo he utilizado una lámina plastica y cinta americana para mantener un pequeño espacio aislado del resto y a la vez no obstruya el paso del aire por dentro de la fuente.




Otra opción es situarlo todo en una cajita exterior a la la caja de la fuente, todo es valorar el espacio libre y las distintas posibilidades.






En esta carpeta están varios de los archivos utilizados para el proyecto: un pdf con la descripción completa y detallada  de la modificación de la fuente, el squetch de arduino, las pegatinas e instrucciones, esquema, etc..


https://drive.google.com/drive/folders/1YgTYMvVCEOkUrP3bPd8zOxeWQlujdnsX?usp=sharing




 Sketch:

El Sketch requerirá comprobación y ajustes personalizados en cada circuito, debido a las pecularidades de los componentes utilizados en el divisor de tensión que verifica la tensión de salida ( no hay dos resistencias con un valor igual ).
Armarse de paciencia hasta que nos quede bien ajustado modificando los valores en los que se compara la lectura del pin analógico almacenado en la variable S1, para ello comprobaremos con un voltimetro que la salida de tensión son las indicadas en los comentarios del Sketch.
El programa tiene un sistema de seguridad que si no detecta tensión externa en las pinzas no cerrará el relé ( Tenerlo en cuenta para hacer las verificaciones, por ejemplo desacactivando esa linea, está hacia el final del squetch ... 
if (analogRead(A1)<301 .....="" font="">):

// Visual Micro is in vMicro>General>Tutorial Mode
//
/*
    Name:       Cargador  baterias.ino
    Created:  03/03/2020 22:20:59
    Author:     DESKTOP-H6FCVQ6\Fernando
    Arduino se alimenta a trabvés del cable morado +5V de la fuente.
*/


  int S1;    // Declarar voltimetro.
  int t4=-4;  // Memoria de control de tiempo de muestreo
  int c;  // Multiplicador de tiempo de retardo según carga
  long t0=150000; // Tpo en milisegundos de la revisión

 
void setup()
{
byte x;
    Serial.begin(57600);

    pinMode(2, OUTPUT); // FUNCIONAMIENTO ROJO,<11 br="">    pinMode(3, OUTPUT); // FUNCIONAMIENTO amarillo,>12,1V
    pinMode(4, OUTPUT); // FUNCIONAMIENTO verde,>13,1V
    pinMode(13, OUTPUT);// Rele de control


    Serial.println("Centralita del cargador de Fernando Herraiz");
    Serial.println("Led rojo intermitente indica V> 11,1, fijo indica V> 11,6 ;L2 amarillo intermitente  indica V> 12,1.");
    Serial.println("Led 2 amarillo indica V > 12,6 ; L3 verde intermitente indica V >13,1  fijo indica V>=13,6,");
    Serial.println(" Punto en que abre el rele y se acaba la carga: 13,6V");
    Serial.println("  ");

for (x=0;x<5 x="x+1){<br">      digitalWrite(4, HIGH);digitalWrite(2, LOW);delay(180);digitalWrite(3, HIGH);digitalWrite(4, LOW);delay(160);digitalWrite(2, HIGH);digitalWrite(3, LOW);delay(170);
     
} // Esperar estabilización de la fuente.

} // Fin setup()



void loop()
{
  float t; // Variable temporizaddor
  boolean t2;  //  Control de intermitencia
  int t3;  // Vatiable tpo cada 5 min.; 300000=5 min
  int S2;
 
  t = int(millis() / 70); // t=medios segundos para leds intermitentes
  if (int(t / 2) == t / 2) { t2 = HIGH; } else { t2 = LOW; }


    t3= int(millis()/t0);  //  Tiempo cadda x minutos verificar voltímetro entre 30 y 5 min,  según carga
  //  Serial.println(t3);  Serial.print(" T/5min. : ");  Serial.println(t4);

 
   if (t3 > t4+c) {                                                             // Leer tensión con carga desconectada
       digitalWrite(13, LOW);    // Abrir rele para pausar carga
    
                                //Pausa 1 seg);
      digitalWrite(4, HIGH);digitalWrite(3, HIGH);digitalWrite(2, HIGH);delay(500);
      digitalWrite(2, LOW);digitalWrite(4, LOW);digitalWrite(3, LOW);delay(400);
     
       S1 = analogRead(A1);  // Leer tensión en batería.

       delay(100);

       S2= analogRead(A1); // Hacer segunda lectura de comprobación
       if (abs(S2-S1)<4 br="" correcta.="" lectura="" t4="t3;} ">      
       }
    
 // Serial.print("->  Voltímetro: "); Serial.println(S1);

c=1;
 
  if (S1 > 826) { digitalWrite(2, HIGH);  c=3;} else { digitalWrite(2, LOW); }                     // Encender y apagar led 1 a 11,6.
  if ((S1 > 790)&& ( t2 == HIGH)) { digitalWrite(2, HIGH); }                                  // Intermitencia a 11,1
 
  if (S1 > 898) { digitalWrite(3, HIGH);  c=2;}  else { digitalWrite(3, LOW); }                    // Encender y apagar led 2 a 12,6.
  if ((S1 > 862) && (t2 == HIGH)) { digitalWrite(3, HIGH); }                                  //  Intermitencia a 12,1

  if (S1 > 969) { digitalWrite(4, HIGH); digitalWrite(13, LOW);c=0; t4=-4; }      // Encender y apagar led 3 y rele a 4,4V.
      else { 
        digitalWrite(4, LOW);                         
        if ((millis()<43200000 amp=""> 300)) {digitalWrite(13, HIGH) ; }                 // Mantener alimentación si hay menos de 13,6V, menos de 12 horas de funcionamiento y hay batería en las pinmzas.
      }
     
  if ((S1 > 934) && (t2 == HIGH)) { digitalWrite(4, HIGH); c=0; }                                   //  Intermitencia a 13,1

  if (t3<3 15="" aumentar="" br="" c="0; " camprobaciones="" de="" else="" los="" minutos="" n="" nbsp="" primeros="" t0="300000;}                                                      " tensi=""> 
  if (analogRead(A1)<301 bateria.="" br="" detectan="" en="" hay="" las="" n="" nbsp="" no="" pinzas="" porqueno="" si="" tensi="">    t4=-4;c=-1; 
    digitalWrite(13, LOW);  }
    else {
   delay(130);}  //Pausa
}