Nada he testesteado y sigue igual, a la que baja el sol da picos y acaba forzandome todo el "Field" me vale la pena cortar a la que empiece a pasar seguido.
ideare algo como que... cada vez que tenga un corte espere de contajes el arduino,durante un tiempo prudencial si no hay mas cortes seguirá igual y contaje a 0 , si hay mas cortes seguidos, que corte field hasta que vuelva a cargar o durante unas horas.
saludos !!!
Hola @Surbyte, es posible hacer esto, para que la carga de cada batería se diferente
if (valueA >= 13.00) {
digitalWrite(releA, HIGH); // salida NC relé
if (valueB >= 11.00) {
digitalWrite(releB, HIGH); // salida NC relé
Serial.print ("BAT A ON-->");
}
if (valueA < 12.90) {
if (!disparado) {
digitalWrite(releA, LOW); // salida NO relé
if (valueB < 11.40) {
if (!disparado) {
digitalWrite(releB, LOW); // salida NO relé
disparado = true; // solo lo disparo 1 vez
timbat1off = millis(); // comienzo a contar el tiempo
Saludos
Hola, foro en español, les platico mi experiencia con las baterías de acido plomo, (batería de automóvil) si quieres que la vida de tu batería se larga, la tienes que cargar con al menos 13.3 volts ideal 13.6, y que tu rele detenga la carga a 13.0 o 12.9, y la inicie a 12.7 o 12.8 volts, y su vid útil sera de 3 años o mas, si la cargas con menos de 12.5 off 12.2 on la vida de la batería no pasa de un año, en un auto moderno el alternador da entre 14.5 o 15.0 cargando, y detiene la carga a los 13.2,algunos paneles solares solo dan 12.0v, tienen que usar un Modulo Elevador De Voltaje Step-up Dc-dc Xl6009e1 este modelo es para 2.5 amp., hay modelos para mas amp., según la necesidad de cada quien. Una batería cargada al 100% 13.00v una batería a 12.5 60% de carga una batería a 12.2 v 20% de carga 11.8v 0%.
Saludos.
Muy buena explicación @silvia96 te agradezco la ayuda y experiencia aportada con las baterías de acido, Veo un problema con el modulo amplificador/elevador el mppt solo tiene una salida por la que carga y consume según necesidad, si le pongo el elevador de voltaje... es bidireccional?
estudiare lo que me has comentado
muchas gracias!
Hola, no es bidireccional
Ya estuve mirando, no puedo cargar la batería con el modulo comentado, ya que el mppt necesita leer de la batería para cargarla o no al no ser bidireccional, no puedo utilizarlo, en este caso.
,me estudiare configuración por si puedo hacer algo con el mppt en este caso de carga.
gracias por tu tiempo!
yo creo que debes engañar al mppt el te 12v después de el pones el booster y el arduino corta el voltaje que predetermines ejemplo del mppt salen 12v que recibe el booster del booster salen 13v que llegan al rele y cuando la batería tenga 12.9 el Arduino apaga el rele y la batería se deja de cargar es una idea estúdiala
Hola @silvia96 , ya lo pensé, pero el mppt es el que decide cuanta carga envía si no hay bidireccionalidad cargaría todo el rato lo cual me acabaría perjudicando la batería, he visto que el mppt puedo decir carga total de batería y esta en 13 v y que corte en 11,3 , no puedo tocar mas en el corte no me deja aumentar esa cifra, aun así en la caída de sol me da esos picos cuando las baterías están bajas, que me estresan todo el "field", estoy esperando que me llegue un relé de 12v que ira conectado en salida y cada vez que corte dará un contaje al arduino, cuando llegue el momento de on/off continuo o llegue la batería un porcentaje, cortare el "field", tengo que ver como actúa todo.
Hola @laghzer, me parece buena idea, yo estoy modificando tu código, para que cargue dos tipos de baterías, con diferente voltaje una es acido plomo 12.8 v, y la otra es un banco de litium de 12 celdas a 16v y salida con diodos para evitar conflicto entre ellas, cuando lo termine lo subo.
Saludos
@silvia96 me alegro que te sirva, hoy me llego el material, me toca montar y probar códigos, ya ire comentando.
saludos a todos!
ok ! conseguido, me falta montarlo, he modificado algo el código ya que tenia errores y me di cuenta, al repasarlo:
const int sensorPinA = A0; // seleccionar la entrada para el sensor
const int sensorPinB = A2; // seleccionar la entrada para el sensor
const int sensorPinD = A4; // seleccionar la entrada para el sensor
const int LED = 13; //contador?
int sensorValueA; // variable que almacena el valor raw (0 a 1023)
int sensorValueB; // variable que almacena el valor raw (0 a 1023)
int sensorValueD; // variable que almacena el valor raw (0 a 1023)
float valueA; // variable que almacena el voltaje (0.0 a 25.0)
int releA = 8; //salida 8
float valueB; // variable que almacena el voltaje (0.0 a 25.0)
int releB = 7; //salida 7
float valueD; // variable que almacena el voltaje (0.0 a 25.0)
int releC = 4; //salida 4
int contar = 0; //contador
unsigned long timbat1off = 0;
unsigned long timeStart;
bool disparado = false; // flag en NO disparo
void setup() {
Serial.begin(9600);
pinMode(8, OUTPUT);
pinMode(7, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
digitalWrite(releC, HIGH); // control salida corriente hay?¿
{
sensorValueA = analogRead(sensorPinA); // realizar la lectura
valueA = amap(sensorValueA, 0, 1023, 0.0, 25.0); // cambiar escala a 0.0 - 25.0
Serial.print("ValueA: ");
Serial.println(valueA); // mostrar el valor por serial
sensorValueB = analogRead(sensorPinB); // realizar la lectura
valueB = bmap(sensorValueB, 0, 1023, 0.0, 25.0); // cambiar escala a 0.0 - 25.0
Serial.print("ValueB: ");
Serial.println(valueB); // mostrar el valor por serial
sensorValueD = analogRead(sensorPinD); // realizar la lectura
valueD = cmap(sensorValueD, 0, 1023, 0.0, 25.0); // cambiar escala a 0.0 - 25.0
Serial.print("ValueD: ");
Serial.println(valueD); // mostrar el valor por serial
Serial.print("contaje: ");
Serial.println(contar);
}
if (valueA >= 12.8) {
digitalWrite(releA, LOW); // salida NC relé
digitalWrite(releB, LOW); // salida NC relé
Serial.print("BAT A ON-->");
}
if (valueA < 12,7) {
if (!disparado) {
digitalWrite(releA, HIGH); // salida NO relé
digitalWrite(releB, HIGH); // salida NO relé
disparado = true; // solo lo disparo 1 vez
timbat1off = millis(); // comienzo a contar el tiempo
Serial.print("BAT B ON-->");
}
if (millis() - timbat1off > 7200000UL) { // cuando se cumpla el tiempo habilito el flag para prepararlo de nuevo
disparado = false;
}
if (valueD < 12.0) { ///si hay interrupción
contar++; //contar +1
Serial.print("contaje: ");
Serial.println(contar);
} //imprimir cont para ver contaje
if (contar>50) {
; ///si se cumple contar= 5
Serial.print("contaje: ");
Serial.println(contar);
digitalWrite(releC, LOW); //cambio rele off
digitalWrite(LED, HIGH); //testigo 13
Serial.print("PROTECCION ACTIVADA BAT OFF-->"); ///aviso bat off
delay(7200000); //144000000 ///tiempo de espera
if (valueA >= 12.8) {
contar = 0 ; ///poner contar a 0 reseteo contar
digitalWrite(LED, LOW);
} // testigo 13 se apaga
}}
}
float amap(int x, int in_min, int in_max, float out_min, float out_max) {
return ((float)x - (float)in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}
float bmap(int x, int in_min, int in_max, float out_min, float out_max) {
return ((float)x - (float)in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}
float cmap(int x, int in_min, int in_max, float out_min, float out_max) {
return ((float)x - (float)in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}
En resumen he separado el map de cada batería, así se calculan por separado y no en la misma línea, me daba errores...
el contaje me lo da un tercer map en la salida el cual corta salida a "field" con un tercer relé, si ve que flaquea el mppt da un contaje, llegado a cierto contaje bloquea durante una hora, suficiente para cargar algo la batería o para volver otra vez a bloquear continuamente hasta que tenga "chicha" la batería.
iré testeando si le meto mas tiempo o si poner otro contaje que bloquee mas horas si no hay "chicha", en si evitare ese molesto on/off que me genera el mppt.
me falta otra parte que es la de dar alimentación al arduino, el cual en un principio cogere del mppt pero tengo pensado ponerle un bloque de baterías tipo 3,7v pequeño para el que se cargue también con una plaquita solar.
Comentario:
Esa hora es arbitraria de tu parte. Teniendo todos los elementos para medir las baterias porque no te tomas el tiempo que haga falta, sea 30min, 1 o 4 hs? Lo mides y cuando este OK la habilitas.
De eso se trata, he puesto algo para empezar si veo que necesito mas o menos ya jugare, de hecho cuando empieza a pasar muy seguido es cuando debe cortar, seguramente le encajetare mas horas
saludos!
No me has entendido o me he explicado mal.
Cuando determines que debes cambiar de batería lo haces pero.. .luego no la olvidas, la vas monitoreando (chequeando su tensión de carga) y cuando estes dendro de valores aceptables puedes volver.
Es muy diferente de darle 1 hora y ver que pasó, o 2 o 3 hs. No. Le das el tiempo que requiera a menos que la otra batería tamb este en problemas pero eso es indicativo de que ambas estan agotadas.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.