Está en la página 1de 15

PROYECTO LLENADO Y VACIADO DE TANQUE

// LCD

#include <LiquidCrystal.h>aq // RW va siempre a negativo.

LiquidCrystal lcd (9, 8, 7, 6, 5, 4);// (RS, E, D0, D1, D3, D4).

// Sensor y llenado.

const int trigPin = 3; // Pin disparador del sensor.

const int echoPin = 2;// Pin recividor de la seal.

const int relay = 10; // Pin controlador de el llenado.

float duration; // Tiempo de regreso del eco.

float distanceCm; // Distancia medida en centimetros.

float LlenadoT;

float nivel; //Nivel de liquido registrada.

// Panel de control.

const int Start = 11; // Boton de inicio y parado.

const int Emergencia = 12; // Boton de emergencia y parado de llenado.

int ButtonState = 0 ; //Estado inicial del boton 1.

int ButtonState2 = 0 ; // Estado inicial del botno 2 .

int salida = 0; // Constante para activacin de bucle 1.

int salida2 = 0; // Constante para activacion de bucle 2.

/*

// PWM
int brightness = 0; // how bright the LED is

int fadeAmount = 2.5;

int apagado = 0;

int encendido = 5;

*/

// Medidas a CAMBIAR segun modelo utilizado.

float Tanque = 15.5; // Altura del tanque en centimetros.

float AlturaS = 23.5;// Altura a la que esta puesta el sensor.

// Medidas fijas.

float Altura;

float porcentaje; // Porcentaje de llenado.

float porciento = 100; // 100%

int percent; // 20% de el tanque

float AlturaT;

// Indicadores visuales.

int verde = 0;

int amarillo = 1;

int rojo = 13;

void setup() {

lcd.begin(16, 2); // Inicializa la pantalla LCD


// Mensaje de entrada.

lcd.print(" BIENVENIDOS ");

delay(1000);

lcd.setCursor (0, 0);

lcd.print(" ARROCERA ");

lcd.setCursor (0, 1);

lcd.print(" SAN FRANCISCO ");

delay (2000);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO ");

lcd.setCursor (0, 1);

lcd.print(" ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO. ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO.. ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO... ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO. ");

delay(500);

lcd.setCursor (0, 0);


lcd.print(" CALIBRANDO.. ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO... ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO. ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO.. ");

delay(500);

lcd.setCursor (0, 0);

lcd.print(" CALIBRANDO... ");

delay(500);

// Sensor y llenado.

pinMode(trigPin, OUTPUT); // Pin controlador de sensor como salida

pinMode(echoPin, INPUT); // Pin recividor de seal en entrada.

pinMode (relay, OUTPUT); // Pin controlador de llenado como salida.

// Panel de control.

pinMode(Start, INPUT); // Estado de entrada del boton 1.

pinMode(Emergencia, INPUT); // Estado de entrada del boton 2.

pinMode (verde, OUTPUT);


pinMode (amarillo, OUTPUT);

pinMode (rojo, OUTPUT);

digitalWrite (rojo, LOW);

digitalWrite (amarillo, LOW);

digitalWrite (verde, LOW);

void loop() {

// Panel de control.

ButtonState = digitalRead (Start); // El estado del boton1 sera igual a la lectura digital.

ButtonState2 = digitalRead (Emergencia); // El estado del boton2 sera igual a la lectura digital.

// Empieza el bucle

if (ButtonState == LOW ) // Si el boton 1 esta en LOW.

salida = 1 - salida; // Salida sera igual a 1.

if (salida == 1) // Si salida es 1.

//Sensor.

digitalWrite(trigPin, LOW); // Inicializa el sensor en bajo.

delayMicroseconds(2); // por 2 microsegundos.

digitalWrite(trigPin, HIGH); // Se mantiene en alto por 10 microsegundos y luego baja.

delayMicroseconds(10);

digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH); // Tiempo que tarda la seal en llegar.

// Calculos.

distanceCm = duration * 0.034 / 2; // Calculo de centimetros.

AlturaT = AlturaS - 4 ;

Altura = AlturaT - Tanque; // Calculo para altura del sensor con el tanque.

LlenadoT = Tanque - 5.0 ;

nivel = Tanque - distanceCm + 4.5 ; // Calculo de nivel de agua.

porcentaje = nivel * porciento / LlenadoT ; // Calculo de porcentaje al que esta el tanque.

percent = 20 * Tanque / 100; // Calculo del 20%

//brightness = brightness - fadeAmount;

lcd.setCursor(0, 0); // Coloca el cursor de la pantalla en la posicion "0" para empezar a escribir.

lcd.print("Nivel: "); // Coloca "Nivel; " en la pantalla.

lcd.print(nivel); // Coloca el nivel al que esta el liquido.

lcd.print("cm "); // Coloca la sigla centimetros.

delay(675); // lo hace cada 0.80 segundos.

// Condiciones de llenado.

if (nivel <= LlenadoT - percent) // Si el liquido del tanque esta por debajo del 80%.

digitalWrite (relay, HIGH); // El llenado se activa.

if (ButtonState2 == LOW) // Si boton 2 esta en bajo.

{
salida2 = 1 - salida2; // Salida 2 sera 1.

digitalWrite (rojo, HIGH);

digitalWrite (amarillo, HIGH);

digitalWrite (verde, HIGH);

delay (500);

digitalWrite (rojo, LOW);

digitalWrite (amarillo, LOW);

digitalWrite (verde, LOW);

delay (500);

digitalWrite (rojo, HIGH);

digitalWrite (amarillo, HIGH);

digitalWrite (verde, HIGH);

delay (500);

digitalWrite (rojo, LOW);

digitalWrite (amarillo, LOW);

digitalWrite (verde, LOW);

if (nivel >= LlenadoT || salida2 == 1) // Si el liquido del tanque esta al 100% o Salida 2 es igual a
1.

digitalWrite (relay, LOW); // El llenado se apaga.

// Colocacion del porcentaje presente en el tanque.

if (nivel == nivel) // Cuando se lea el nivel del liquido.


{

// Se imprimira el porcentaje de llenado.

lcd.setCursor (0, 1);

lcd.print (" Tanque: ");

lcd.setCursor(9, 1);

lcd.print(porcentaje);

lcd.setCursor (14, 1);

lcd.print (" % ");

// Si el tanque ha superado su maximo nivel, se mantiene el valor colocado al 100%

if (nivel > LlenadoT - 0.5) {

lcd.setCursor (0, 0);

lcd.print ("Nivel: ");

lcd.setCursor (0, 7);

lcd.print (LlenadoT);

lcd.setCursor (0, 1);

lcd.print ("Tanque: 100.0% ");

// Si el nivel es menor o igual que 0 el porcentaje sera siemore 0% .

if (nivel <= LlenadoT + 0.99 - LlenadoT) {

lcd.setCursor (0, 0);

lcd.print ("Nivel: ");

lcd.setCursor (0, 7);

lcd.print (LlenadoT - LlenadoT);

lcd.setCursor (0, 1);

lcd.print ("Tanque: 0.000% ");


digitalWrite (rojo, HIGH);

delay (200);

digitalWrite (rojo, LOW);

delay (200);

digitalWrite (rojo, HIGH);

delay (200);

digitalWrite (rojo, LOW);

delay (200);

if (porcentaje < 40.0) {

digitalWrite (rojo, HIGH);

digitalWrite (amarillo, LOW);

digitalWrite (verde, LOW);

if ( porcentaje > 40.0) {

digitalWrite (rojo, LOW);

digitalWrite (amarillo, HIGH);

digitalWrite (verde, LOW);

if (porcentaje > 80.0) {

digitalWrite (rojo, LOW);

digitalWrite (amarillo, LOW);

digitalWrite (verde, HIGH);

/* if (nivel >= Tanque/2) {


digitalWrite ();

*/

else // Si el boton no esta en LOW.

digitalWrite (relay, LOW); // El llenado se apaga.

digitalWrite (rojo, HIGH);

digitalWrite (amarillo, LOW);

digitalWrite (verde, LOW);

// Se imprimira un mensaje de espera e inicializacion.

lcd.setCursor (0, 1);

lcd.print ("=================");

delay (2000);

lcd.setCursor (0, 0);

lcd.print (" PAUSADO ");

delay (2000);

lcd.setCursor (0, 0);

lcd.print (" EMPEZAR? ");

delay (3000);

https://www.youtube.com/watch?v=nSbVfp--ttE