#include <LiquidCrystal.h>
/*Asignación de pines*/
LiquidCrystal lcd(22, 23, 5, 18, 19, 21); // Crea un objeto LCD. Parametros: (rs = 22, enable = 23, d4 = 5, d5 = 18, d6 = 19, d7 = 21)
const int trigPin = 2;
const int echoPin = 4;
const int portPin = 34;
int potValor =0;
/*Datos de los tanques*/
const int nivel7Max=30; /*distancia del sensor al nivel maximo Tq #7*/
const int nivel7Min=600; /*Distancia del sensor hasta el fondo del tanque #7*/
float radioTanque7Cm=149.696413;
float litrosPorCmTq7; /*Factor de tanque #7*/
const int nivel8Max=60; /*distancia del sensor al nivel maximo Tq #8*/
const int nivel8Min=879; /*Distancia del sensor hasta el fondo del tanque #8*/
float radioTanque8Cm=200.251540;
float litrosPorCmTq8; /*Factor de tanque #8*/
/*Mediciones*/
float distancia1; /*Distancia del sensor a la superficie Tq #7*/
float distancia2; /*Distancia del sensor a la superficie despues de 1 minuto en Tq #7*/
long tiempo; /*Tiempo de ida y vuelta del eco*/
float nivelCmTq7; /*Distancia desde el fondo al espejo del líquido en Tq #7*/
float nivel1CmTq8; /*lectura de nivel del líquido en Tq #8*/
float nivel2CmTq8; /*Lectura de nivel del liquido despues de 1 minuto en Tq #8*/
/*Datos constantes*/
const int temperatura=20;
float velocidadSonidoMPs=331+(temperatura*0.6);/*Velocidad del sonido en el aire a 0°C es de 331 m/s
por cada grado de temperatura aumenta la velocidad en 0.6 m/s */
/*Cálculos*/
float velocidadSonidoCmPMs;
int volumenTq7Lt;
int capacidadTq7;
float dosificacionTq7;
int volumenTq8Lt;
int capacidadTq8;
float dosificacionTq8;
void setup() {
lcd.begin(16,2); // Inicializa la interface de la pantalla LCD, y muestra la medida del fondo a la superficie (con la altura)
lcd.setCursor(0,0);
lcd.print("NIVEL ");
lcd.setCursor(0,1);
lcd.print("TANQUES 7 Y 8");
delay(5000);
lcd.clear();
delay(5000);
lcd.clear();
velocidadSonidoCmPMs=velocidadSonidoMPs*0.0001;
/*331 metros/seg x 100/1 centimetros/metro x 1/1000000 segundos/microsegundo */
litrosPorCmTq7=PI*(radioTanque7Cm*radioTanque7Cm)/1000;
litrosPorCmTq8=PI*(radioTanque8Cm*radioTanque8Cm)/1000;
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(115200);
}
void loop()
{
potValor = analogRead (portPin);
Serial.println(potValor);
for(int i = 9; i >= 0; i--){ // Recorre cada bit del valor leído
byte bit = bitRead(potValor, i); // Lee el bit en la posición i
Serial.print(bit); // Imprime el bit
}
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
/***CALCULAR NIVEL Y VOLUMEN***/
tiempo = pulseIn(echoPin, HIGH);
distancia1=(tiempo*velocidadSonidoCmPMs)/2;
nivelCmTq7 = nivel7Min - distancia1;
capacidadTq7=(nivelCmTq7*100)/(nivel7Min-nivel7Max);
nivel1CmTq8 =(potValor/5);
Serial.print(nivel1CmTq8);
capacidadTq8=(nivel1CmTq8*100)/(nivel8Min-nivel8Max);
delay(10);
lcd.setCursor(0,0);
lcd.print(nivelCmTq7,1);
lcd.print(" cm");
delay(10);
lcd.setCursor(0,1);
/*lcd.print("V=");
lcd.print(volumenTq7Lt);
lcd.print(" Lt");*/
lcd.print(nivel1CmTq8,1);
lcd.print(" cm");
delay(10);
/*lcd.setCursor(11,1);
lcd.print("C=");
lcd.print(capacidadTq7);
lcd.print("%");*/
delay(10);
//Serial.print("VelocidadSonidoMPS = "); Serial.print(velocidadSonidoMPs);Serial.println();
//Serial.print("VelocidadSonidoCmPMs = ");Serial.print(velocidadSonidoCmPMs,4);Serial.println();
//Serial.print("litrosPorCmTq7 = ");Serial.print(litrosPorCmTq7);Serial.println();
//Serial.print("Distancia1 = ");Serial.print(distancia1);Serial.println();
//Serial.print("Contenido = ");Serial.print(capacidadTq7);Serial.print(" %");Serial.println();
//Serial.print("Nivel: ");Serial.print(nivelCmTq7);Serial.print(" cm");Serial.println();
volumenTq7Lt=nivelCmTq7*litrosPorCmTq7;
//Serial.print("Volumen Tq #7");Serial.print(volumenTq7Lt);Serial.print(" Lt");Serial.println();
volumenTq8Lt=nivel1CmTq8*litrosPorCmTq8;
Serial.print("Volumen Tq #8 ");Serial.print(volumenTq8Lt);Serial.print(" Lt");Serial.println();
delay(29930);
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
tiempo = pulseIn(echoPin, HIGH);
distancia2=(tiempo*velocidadSonidoCmPMs)/2;
//Serial.print("Distancia2 = ");Serial.print(distancia2);Serial.println();
dosificacionTq7=litrosPorCmTq7*2*(distancia2-distancia1);
Serial.print("Dosificación Tq #7 ");Serial.print(dosificacionTq7);Serial.print(" LPM");Serial.println();
potValor = analogRead (portPin);
nivel2CmTq8 =(potValor/5);
Serial.print(nivel2CmTq8);
dosificacionTq8=litrosPorCmTq8*2*(nivel1CmTq8-nivel2CmTq8);
Serial.print("Dosificación Tq #8 ");Serial.print(dosificacionTq8);Serial.print(" LPM");Serial.println();
lcd.setCursor(8,0);
lcd.print(dosificacionTq7,1);
lcd.print(" LPM");
lcd.setCursor(8,1);
lcd.print(dosificacionTq8,1);
lcd.print(" LPM");
}