Hola compañeros!
mejorando el proyecto y refrescando la memoria con millis, me puse a arreglar un problema que me a surgido con mi sistema de placas solares y baterías para mi huerto hidropónico
refresco un poco:
el Arduino me sirve para decir que batería trabaja y cuanto tiempo estar funcionando con chequeos de tensión, cogiendo de A o B según tensión leída o tiempo pasado mediante millis.
Tengo dos placas solares, dos mppt y dos baterías, así me ahorro conectar baterías en paralelo ya que son de diferentes amperios y se acabarían estropeando.
Bien me encuentro que los mppt ( controladores de carga de las baterías) cuando la batería tiene poca carga, solo que se cargue un poco va haciendo intermitencias on/off continuadas lo cual perjudica las baterías hasta que se quedan sin carga, lo cual estresa a todo el sistema y perjudica la vida de la baterías.
Entonces ahora he intentado que cuando detecte que los mppts cortan corriente el arduino bloquee con un relé la salida a "field", y así proteger todo el sistema del on/off continuado por el mppt
Mi idea es solida y le he metido cabeza al tema, pero la programación la llevo floja y es fácil poner algo mal y que no funcione como quieres(aunque la compilación sea exitosa), así que creo que he metido algo mal y no acaba de funcionar correctamente el tema.
adjunto programación:
const int sensorPinA = A0; // seleccionar la entrada para el sensor
const int sensorPinB = A2; // 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)
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
int releC = 4; //salida 4
int contar=0; //contador
int cont= contar;// imprimir
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 = fmap(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 = fmap(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
}
if (valueA >= 12.0) {
digitalWrite(releA, LOW); // salida NC relé
digitalWrite(releB, LOW); // salida NC relé
Serial.print ("BAT A ON-->");
}
if (valueA < 11.8) {
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> 10000000UL) { // cuando se cumpla el tiempo habilito el flag para prepararlo de nuevo
disparado = false;}
if (valueB <8.00 && valueA < 8.00) { ///si hay interrupción
contar = contar+1 ; //contar +1
Serial.println(cont);}//imprimir cont para ver contaje
else if (contar= 5); { ///si se cumple contar= 5
digitalWrite (releC,LOW); //cambio rele off
digitalWrite(LED, HIGH); //testigo 13
Serial.print ("PROTECCION ACTIVADA BAT OFF-->");///aviso bat off
delay(6000); //144000000 ///tiempo de espera
contar = 0 ; ///poner contar a 0 reseteo contar
digitalWrite(LED, LOW);} // testigo 13 se apaga
}}
float fmap(float x, float in_min, float in_max, float out_min, float out_max)
{
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
no se si he colocado correctamente las sentencias o { corchetes, y acaba funcionando que cuando A me baja de tensión, el relé C me corta sin tener en cuenta el contaje o voltaje de B... la función es cuando los dos están bajos corta.
Aunque pongo que me imprima el contaje siempre lo veo a 0, no veo que sume en ningún momento, el Else tampoco se si esta bien puesto ya que es la opción que pasa si -->contaje llega a 5 se ejecuta esa sentencia...
- hardware utilizado
- un Arduino
- 3 relés
- 2 sensores de voltaje
Gracias por vuestro tiempo
saludos!


