La Taberna del Puerto

La Taberna del Puerto (https://foro.latabernadelpuerto.com/index.php)
-   Foro Náutico Deportivo (https://foro.latabernadelpuerto.com/forumdisplay.php?f=2)
-   -   Bricobarco Distribuidor de carga Bancos de Baterias (https://foro.latabernadelpuerto.com/showthread.php?t=170800)

Capicua 19-07-2018 02:22

Distribuidor de carga Bancos de Baterias
 
Como me sobrava carga de los paneles solares , decidi hacer un distribuidor de cargas. Asi los paneles me pueden cargar las Baterias de servicio, motor y Buw Thruster.

Dejo el codigo para quien le sea de interes. Esta vercion controla Mosfet. Tengo otra con rele. Sobra espacio para colocar un medidor de flujo, asi podemos saber si la circulacion de agua refrigerante es la correcta.

Vamos al Codigo.


// distribucion de carga de baterias para paneles solares
// Arduino Nano
float V1;
float V2;
float V3;
float V4;
int Caso;
const int Bat1 = 11; // Comando Mosfet bat Serviço
const int Bat2 = 9; // Comando Mosfet bat Motor
const int Bat3 = 4; // Comando Mosfet bat Thruster
const int Bat4 = 2; // Comando Mosfet bat extra

void setup()
{
Serial.begin(9600); //Inicia a serial com um baud rate de 9600, para monitorar e ajustar sistema
pinMode(Bat1, OUTPUT); // declara o pino comando
digitalWrite(Bat1, LOW); // Coloca comando a LOW
pinMode(Bat2, OUTPUT); // declara o pino comando
digitalWrite(Bat2, LOW); // Coloca comando a LOW
pinMode(Bat3, OUTPUT); // declara o pino comando
digitalWrite(Bat3, LOW); // Coloca comando a LOW
pinMode(Bat4, OUTPUT); // declara o pino comando
digitalWrite(Bat4, LOW); // Coloca comando a LOW

Serial.println("\n\Montitor de Bancos Baterias Capicúa \n\n"); //Imprime en el monitor serial que comienz a monitorar
}
void loop ()
{

for(int i=0;i<10000;i++)// Hace mil lectoras
V1=V1+analogRead (A0); // Lee la tesion del pino analogico 0 Bateria Servicio
V1=(V1*22.80)/1023/10000;// Hace la media de las mil lecturas y convierte lecturas en tension (obs 20 conversor tension4 a 1 )
for(int i=0;i<10000;i++)
V2=V2+analogRead (A1); // Lee la tesion del pino analogico 1
V2=(V2*22.60)/1023/10000;// convierte lecturas en tension (observacio 20 conversor lectura hay que hacer divisor de tension 4 a 1 )
for(int i=0;i<10000;i++)
V3=V3+analogRead (A2); // Lee la tesion del pino analogico 2
V3=(V3*22.66)/1023/10000;// convierte lecturas en tension (observacio 20 conversor lectura hay que hacer divisor de tension 4 a 1 )
for(int i=0;i<10000;i++)
V4=V4+analogRead (A3); // Lee la tesion del pino analogico 2
V4=(V4*23.09)/1023/10000;// convierte lecturas en tension (observacio 20 conversor lectura hay que hacer divisor de tension 4 a 1 )
{

// Se manda al monitor serial la lectura en Volts de cada banco de baterias
Serial.print ("Tensino en Volts Banco de Batraia Servicio\n\n"); Serial.print(V1); Serial.print ("V\n\n") ;
delay (10000);// Se detiene la lectura por 10 segundos
Serial.print ("Tension en Volts Batearia Motor \n\n");Serial.print(V2); Serial.print (" V\n\n");
delay (10000);// Se detiene la lectura por 10 segundos
Serial.print ("Tension en Volts Banco de Bateria Bow Thruster\n\n");Serial.print(V3); Serial.print ("V\n\n");
delay (10000);// Se detiene la lectura por 10 segundos
Serial.print ("Tension en Volts Banco de Baterias Extra\n\n");Serial.print(V4); Serial.print ("V\n\n");
delay (10000);// Se detiene la lectura por 10 segundos
// se inica el analisis de cada banco de bateria
Serial.println("\n\Verificando carga de los bancos de baterias\n\n"); //Imprime Inicio na serial
delay (10000);// Se detiene la lectura por 10 segundos
}
{

if ((V1<10.7) and (V2 <10.7) and (V3<10.7) and (V4<10.7))
{Caso=0;// caso no tengamos ninguna bateria conectada o las baterias esten dañadas.
}

if ((((V1>13.7) or (V1<10.7)) and (V2<12.5)) and (V2>10.7))
{Caso=2;// Carga bateria de motor, si las de servicio ya estan cagadas.
}

if (( (((V1>13.7) or ( V1<10.7)) and (( V2>12.5) or (V2< 10.7))) and (V3<12.5)) and ( V3>10.7))
{Caso=3; // Carga bateria do buw thruster , caso baterias de servico y de motro esten con plena carga o não tengamos estas baterias.
}

if ((((V2>12.5) or (V2< 10.7)) and (( V3>12.5) or (V3<10.7))) and ( V1>10.7))
{Caso=4;// Carga bateria de servicios y libera puerto extra, caso las baterias de motor e buw thruster esten con carga superior a 12.5 volts
}

if ((V1<13.5)and (V1>10.7))
{Caso=1;// carga batrias de servicio.
}

switch (Caso){

case 0:
digitalWrite(Bat1, LOW);
digitalWrite(Bat2, LOW);
digitalWrite(Bat3, LOW);
digitalWrite(Bat4, LOW);
Serial.println("****** No Identificamos Baterias ******");
delay (10000);
break;
case 1:
digitalWrite(Bat1, HIGH);
digitalWrite(Bat2, LOW);
digitalWrite(Bat3, LOW);
digitalWrite(Bat4, LOW);
Serial.println("******Cargando Baterias Servicio*****");
delay(300000);
break;

case 2:
digitalWrite(Bat1, LOW);
digitalWrite(Bat2, HIGH);
digitalWrite(Bat3, LOW);
digitalWrite(Bat4, LOW);
Serial.println("*****Cargando Baterias Motor*****");
delay(300000);
break;
case 3:
digitalWrite(Bat1, LOW);
digitalWrite(Bat2, LOW);
digitalWrite(Bat3, HIGH);
digitalWrite(Bat4, LOW);
Serial.println("*****Cargando Baterias Blowtruster*****");
delay(300000);
break;
case 4:
digitalWrite(Bat1, HIGH);
digitalWrite(Bat2, LOW);
digitalWrite(Bat3, LOW);
digitalWrite(Bat4, HIGH);
Serial.println("*****Cargando Baterias Servicio2*****");
delay(600000);
break;
}
}
}


Todas las horas son GMT +1. La hora es 13:03.

Powered by vBulletin® Version 3.7.0
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
© La Taberna del Puerto