Ver mensaje
  #19  
Antiguo 01-12-2017, 01:06
Avatar de Capicua
Capicua Capicua esta desconectado
Capitán pirata
 
Registrado: 04-10-2010
Localización: A
Edad: 65
Mensajes: 586
Agradecimientos que ha otorgado: 155
Recibió 256 Agradecimientos en 119 Mensajes
Sexo:
Predeterminado Re: Esquema Conexion Placas-baterias-bm2-separador

// Monitor D2-55 flujo de agua salada y cotrol de conmutacion de carga entre bancos de bateria, panel solar.
#include <LiquidCrystal.h> //Inclui a biblioteca do LCD
int contaPulso; //Variável para a quantidade de pulsos
int i=0; //Variável para contagem de tiempo
float V1;
float V2;
float V3;
float vazao; //Variável para armazenar o valor em L/min
float media=0; //Variável para tirar a média a cada 1 minuto
float litros;
unsigned long pulsos_Acumulados = 0; // Variable que almacena el número de pulsos acumulados del sensor de fluxo
const int Rele1 = 13; // cria uma constante com o numero do pino LED/alarma
const int Rele2 = 10; // Comando rele carga bateria motor
const int Rele3 = 10; // Comando rele carga bateria Thruster
LiquidCrystal lcd(12, 11, 5, 4, 3, 8); // Pinos para se comunicar com o LCD *** Quidado el pino 2 mormalmente utilizado fue substituido por el 8 para ser utilizado con la rutina de interrupcion
// Rutina de servicio de la interrupción (ISR)
void incepulso()
{
contaPulso++; // Incrementa en una unidad el número de pulsos
}
void setup()
{
// definiciones funcion de los pinos para comandos de rele e interrupcion para conteo de pulsos del sensor de flujo
pinMode(Rele1, OUTPUT); // declara o pino do led como saída
digitalWrite(Rele1, LOW); // desliga o led pino 13/alarma
Serial.begin(9600); //Inicia a serial com um baud rate de 9600
pinMode(Rele2, OUTPUT); // declara o pino do led como saída
digitalWrite(Rele2, LOW); // desliga o led pino 13/alarma
pinMode(Rele3, OUTPUT); // declara o pino do led como saída
digitalWrite(Rele3, LOW); // desliga o led pino 13/alarma
pinMode(2, INPUT);
attachInterrupt(0, incepulso, RISING); ; //Configura o pino 2(Interrupção 0) para trabalhar como interrupção
Serial.println("\n\nInicio\n\n"); //Imprime Inicio na serial
}
void loop ()
{
contaPulso = 0; //Zera a variável para contar os giros por segundos
sei(); //Habilita interrupção
delay (1000); //Aguarda 1 segundo
cli(); //Desabilita interrupção
vazao = contaPulso / 5.5; //Converte para L/min 5.5 es el factor de conversion del sensor/ podrián solo ser utilizados los pulsos
media=media+vazao; //Soma a vazão para o calculo da media
pulsos_Acumulados += contaPulso; // Número de pulsos acumulados
litros = pulsos_Acumulados * 1.0/348; // formula para calculo de los litros acumulados 5.5x60, solo para tener referencias
i++;
if (media < 1 ) // Valor para acionamiento de la alarma, fue colocado 1 para teste *** este valor será determinado una vez instaldo en el motor y segun cada motor**
{
digitalWrite(Rele1, HIGH); // Acciona la alarma y el LEd de la puerta 13
}
else
{
digitalWrite(Rele1, LOW); // Desliga la alarma y el led de la puerta 13
}
// calculo de tesnsiones y comparación entre bancos de baterias
V1=analogRead (A0); // Lee la tesion del pino analogico 0
V2=analogRead (A1); // Lee la tesion del pino analogico 1
V3=analogRead (A2); // Lee la tesion del pino analogico 2
V1=(V1*19.9)/1023;// convierte lecturas en tension (observacion 20 conversor lectura hay que hacer divisor de tension rsistivo 4 a 1 )
V2=(V2*19.9)/1023;// convierte lecturas en tension (observacion 20 conversor lectura hay que hacer divisor de tension resistivo 4 a 1 )
V3=(V3*19.9)/1023;// convierte lecturas en tension (observacion 20 conversor lectura hay que hacer divisor de tension resistivo 4 a 1 )

if (V1 > 14.2)// valor de tension de las baterias e servicio para considerar derivasion de tension para motor y thruster
{
if (V2 <12.4) // Valor de tensión referencia para activar carga de bateria (12.5V) (baterias motor acido)
{
digitalWrite(Rele2, HIGH); // Acciona rele carga baterias motor
}
else
{
digitalWrite(Rele2, LOW); // Desliga rele Carga de baterias motor
}
}
{
if (V1 > 14.2)// valor de tension de las baterias e servicio para considerar derivasion de tension para motor y thruster
{
if (V3 < 12.4 ) // Valor de tensión referencia para activar carga de bateria (12.4V) (baterias thruster acido)
{
digitalWrite(Rele3, HIGH); // Acciona rele carga baterias thruster
}
else
{
digitalWrite(Rele3, LOW); // Desliga rele carga baterias thruster
}
}
}
//Condicion para apagado de distribucion de carga
{
if (V1 <13.4)// condicion de tension de las baterias e servicio para considerar derivasion de tension para motor y bou thruster
{
digitalWrite(Rele2, LOW); // Desliga rele carga baterias servicio
digitalWrite(Rele3, LOW); // Desliga rele carga baterias thruster
}
}
{
if (V2>12.3)// condicion en que no entra carga baterias motor
digitalWrite(Rele2, LOW); // Desliga rele carga baterias motor
}

{
if (V3>12.2)// condicion en que no entra carga baterias thruster
digitalWrite(Rele3, LOW); // Desliga rele carga baterias thruster
}

{
}
{
// comunicacion monitor serial (sera futuramente eliminado)
Serial.print(vazao); //Imprime na serial o valor da vazão
Serial.print(" L/min - "); //Imprime L/min
Serial.print(i); //Imprime a contagem i (segundos)
Serial.println("s"); //Imprime s indicando que está em segundos
// Configuración parametros display
lcd.begin(16, 2); //Inicia o LCD com dimensões 16x2(Colunas x Linhas)
lcd.setCursor(0, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(vazao); //Escreve no LCD "vazao!"
lcd.setCursor(5, 0); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD
lcd.print("L/min"); //Escreve no LCD "Litros por minuto"
lcd.setCursor(13,0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(i);
lcd.setCursor(14, 0); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print("s");
lcd.setCursor(0, 1); //Posiciona o cursor na primeira coluna(0) e na segunda linha(1) do LCD

lcd.print(V1);// escrive la tensión baterias servicio
lcd.setCursor(6, 1); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(V2); //escrive la tensión baterias motor
lcd.setCursor(12, 1); //Posiciona o cursor na primeira coluna(0) e na primeira linha(0) do LCD
lcd.print(V3); //escrive la tensión baterias thruster

//lcd.print("Litros Acumulados")
if(i==10) // tiempo de espera para sacar media 10 segundos
{
media = media/10; //Tira a media dividindo por 10 segundos podria ser 60 par un minuto
Serial.print("\nMedia por minuto = "); //Imprime a frase Media por minuto =
Serial.print(media); //Imprime o valor da media
Serial.println(" L/min - "); //Imprime L/min
Serial.println("\n\nInicio\n\n"); //Imprime Inicio indicando que a contagem iniciou

media = 0; //Zera a variável media para uma nova contagem//
i=0; //Zera a variável i para uma nova contagem
}
}
}
__________________
MMSI 205801910 Call OR8019
Ham Call CX6AAT , PY2ZP ,PW2A
Citar y responder