Está en la página 1de 12

UPCT - ELECTRÓNICA INDUSTRIAL – 3º GITI

PROYECTO
OBLIGATORIO
ARDUINO
SISTEMA DE CONTROL DE NIVEL DE AGUA
DE UN DEPÓSITO
ÁLVARO ALBALADEJO GALINDO
OBJETIVO DEL TRABAJO

El trabajo se basa en el trabajo propuesto nº22 “Sistema de control de niveles en


depósito”. En el cual he desarrollado un sistema que permite medir el estado de la
capacidad de un depósito y mostrar esta medición por un LCD 16x2.

Además he implementado un sistema luminoso LED+Buzzer como complemento a


la pantalla ( o en caso de que ésta fallase), los LED se van encendiendo según el
nivel del agua.

El LCD muestra por pantalla el estado de la capacidad del depósito en todo


momento en forma de porcentaje, las diferentes situaciones son:

1-Capacidad 0-50% se muestra por pantalla el nivel + un led verde encendido.


2-Capacidad 50-93% se muestra por pantalla el nivel + 2 leds verdes encendidos.
3-Capacidad > 93% el LCD muestra “PELIGRO DE DESBORDAMIENTO” junto al
encendido del LED rojo y suena el Buzzer.

DESCRIPCIÓN DE LA SOLUCIÓN ADOPTADA.

I-Breve descripción de la solución:

El mayor problema era elegir un dispositivo de medición adecuado, barajé la


opción de utilizar sensores de presión dentro del depósito (varios en vertical) o
utilizar un sensor de ultrasonidos, finalmente elegí el sensor ultrasonidos puesto
que es más económico y solo necesitaría uno.

II-Cálculos justificativos de los elementos que lo requieran.

Este trabajo no requiere de un gran cálculo, simplemente seleccionar las


resistencias adecuadas para cada Led.

El único cálculo que merece ser explicado es el del sensor de ultrasonidos, para
medir la distancia a la cual se encuentran los objetos me base en:

El tiempo que transcurre entre el envío del pulso ultrasónico y la recepción del
rebote del mismo. Para ello use la función “pulseIn” explicada en el código con más
detalle.

La distancia que sería la variable principal viene dada como “tiempo*0,017”,


puesto que el valor de la velocidad del ultrasonido es 0,034 (cm/microsegundo) dividida
entre 2 porqué solo necesitas el tiempo de ida (no de ida y vuelta).
III-LISTA DE MATERIALES Y EXPLICACIÓN DE LOS MÁS SIGNIFICATIVOS.

1xPlaca Arduino UNO.


1xCable USB.
1xpotenciómetro 10kohmios.
16x pines macho 2.54 mm.
1xbobina de estaño.
1x soldador.
1x Protoboard.
2x Led verde.
1x Led rojo.
3x Resistencias.
N x Cables.

1xSensor ultrasonidos HC-SR04.


El sensor consta de 4 pines: "VCC" conectado a la salida de 5V de la placa, "Trig"
conectado al pin digital de la placa encargado de enviar el pulso ultrasónico, "Echo" al
pin de entrada digital que recibirá el eco de dicho pulso y "GND" a tierra.
1xPantalla LCD 16X2. Este dispositivo es uno de los que mayor trabajo han llevado a la hora de
su conexión, para aclarar el asunto adjunto una imagen de mi modelo y sus conexiones:

 VSS que es el pin de GND.

 VDD es la alimentación principal de la pantalla y


el chip.
 VO es el contraste de la pantalla.
 RS es el selector de registro.
 RW es el pin que comanda la lectura/escritura. En
nuestro caso siempre estará en 0 (conectado a
GND) para que escriba en todo momento.
 E es Enable, habilita la pantalla para recibir
información.
 D0~D3 no los vamos a utilizar.
 A y K son los pines del led de la luz de fondo de
la pantalla. A se conectará a 5 volts y K a GND.

Voy a explicar las conexiones puesto que verlas en una foto es un caos, en especial
para mi proyecto, hice las siguientes conexiones LCD-ARDUINO:

Conexión: fila GND (fila -) de la breadboard --> pin 1 de la LCD (VSS)


Conexión: fila 5V (fila +) de la breadboard--> pin 2 de la LCD (VDD)
Conexión: fila 5V (fila +) de la breadboard--> pin 15 de la LCD (A)
Conexión: fila GND (fila -) de la breadboard --> pin 16 de la LCD (K)
Conexión: primer pin del potenciómetro---> GND de la breadboard (fila -)
Conexión: pin de en medio potenciómetro --> pin 3 de la pantalla LCD (VO)
Conexión: tercer pin del potenciómetro---> 5V de la breadboard (fila +)
Conexión: pin 4 de la LCD (RS) ---> pin 7 del arduino (salida digital, PWM)
Conexión: pin 5 de la LCD (RW) --> GND de la breadboard (fila -)
Conexión: pin 6 de la LCD (E) --> pin 8 de la placa Arduino UNO (PWM)
Conexión: pin 11 de la LCD (D4) --> pin 9 de la placa Arduino UNO (PWM)
Conexión: pin 12 de la LCD (D5) --> pin 10 de la placa Arduino UNO (PWM)
Conexión: pin 13 de la LCD (D6) --> pin 11 de la placa Arduino UNO(PWM)
Conexión: pin 14 de la LCD (D7) --> pin 12 de la placa Arduino UNO (PWM)
1x Dremel. (Herramientas de corte).
1x Caja estanca. (Para protección del equipo contra humedad y salpicaduras)

Caja estanca con hueco para LCD + 3 agujeros para salida de los Leds

IV Esquemático:

Las conexiones quedan explicadas en el apartado anterior, del LCD y del sensor
ultrasónico individualmente, he desarrollado en Fritzing el esquema final
combinando ambos y quedaría así:

En el esquema faltan los 3 leds + Resistencias con su salida PWM cada uno y
conexión a tierra puesto que fue una idea a posteriori.
FOTOS DEL MONTAJE:

1-MONTAJE LCD EN CAJA

2-Alimentación

3- Sensor ultrasonidos (Direccionado al agua)


4-Caja Estanca Abierta

5-Capacidad 0-50% = 1 led encendido


6-Capacidad 51-93% = 2 leds encendidos

7-Capacidad > 93% = led rojo + Buzzer


V. FLUJOGRAMA DEL CÓDIGO.
VI. CÓDIGO DESARROLLADO.

#define trigPin 6 /*Es la parte del sensor que emitirá el tren de impulsos*/
#define echoPin 5 /*Parte del sensor que recibirá el eco de los ltrasonidos*/
#include <LiquidCrystal.h> /*Librería del LCD*/

LiquidCrystal lcd(7, 8, 9, 10, 11, 12); /*Entradas/salidas del LCD*/

void setup ( ) {
Serial.begin (9600);

/*Variables como salida o entrada del sensor de ultrasonidos*/

pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
void loop() {
int duracion, nivel, distancia, capacidad; /*Variables para operar*/

/*Definimos las variables y su salida*/

int led1ybuzzer = 4;
int led2 = 3;
int led3 = 2;

/*Definimos como salidas*/

pinMode(led3,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led1ybuzzer,OUTPUT);

/*Comandos para controlar el sensor de ultrasonidos*/

digitalWrite(trigPin, HIGH); /*Emitimos ultrasonidos*/


delayMicroseconds(1000); /*tiempo de espera*/
digitalWrite(trigPin, LOW); /*Paramos la emisión*/
duracion = pulseIn(echoPin, HIGH); /*Lo que tarda en recibir el eco*/

/*Calculamos la distancia como ya se ha dicho en el apartado de material necesario


“Sensor de ultrasonidos”*/

distancia= int(0.017*duracion);

nivel = -3 + distancia; /*Pues he situado el medido 3cm por encima del depósito*/

capacidad = 100 -((nivel)/27)*100;


/* /27 es porque mi depósito mide 27cm de altura, así sacaremos el porcentaje
*100. Después, se lo restamos al 100% puesto que al medir desde arriba estamos
midiendo la distancia en la cual no hay agua */

/*Para las 3 situaciones he usado un if, else if, else*/

if (capacidad > 93){ /*Situación de peligro*/

lcd.begin(16, 2);
lcd.setCursor(0,0); /*Primera línea*/
lcd.write("PELIGRO DE ");
lcd.setCursor(0,1); /”Segunda línea”/
lcd.write("DESBORDAMIENTO");

digitalWrite(led3,LOW); /*Led verde1 nivel BAJO*/


digitalWrite(led2,LOW); /*Led verde2 nivel BAJO*/
digitalWrite(led1ybuzzer,HIGH); /*Led rojo + buzzer nivel ALTO*/
}

else if(capacidad > 50) {

digitalWrite(led2,HIGH); /*Led verde1 nivel ALTO*/


digitalWrite(led3,HIGH); /*Led verde2 nivel ALTO*/
digitalWrite(led1ybuzzer,LOW); /*Led rojo+buzzer nivel BAJO*/

/*Mostramos el nivel por el LCD*/

lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.write("CAPACIDAD ACTUAL:");
lcd.setCursor(0,1);
lcd.print(capacidad);
lcd.setCursor(2,1);
lcd.print("%");
}

else {

digitalWrite(led2,HIGH); /*Led verde1 nivel ALTO*/


digitalWrite(led3,LOW); /*Led verde2 nivel BAJO*/
digitalWrite(led1ybuzzer,LOW); /*Led rojo+buzzer nivel BAJO*/

/*Mostramos el nivel por el LCD*/


lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.write("CAPACIDAD ACTUAL:");
lcd.setCursor(0,1);
lcd.print(capacidad);
lcd.setCursor(2,1);
lcd.print("%");

delay(1000); /*La medición del nivel de agua se hace cada segundo*/


}

C. LINK A UN VÍDEO EXPLICATIVO DE 10 MINUTOS COLGADO EN YOUTUBE

http://youtu.be/kHufLb4hH0Y

D. OTRAS CONSIDERACIONES

 El dispositivo al ser “portátil” por ir dentro de la caja estanca se puede transportar


fácilmente con lo que solo haría falta un dispositivo para medir en varios
depósitos.

 Podemos observar, en el vídeo, que el porcentaje cambia un 1-2% en cada medida,


Por ejemplo podemos observar cómo cambia del valor 5% al 4%, y esto no es
lógico pues cada vez contiene más agua, esto se explica por el error de medida del
sensor que es de 3cm por cada metro y el depósito tiene 30cm de longitud por lo
que el error de 1cm es normal en la medida, a esto hay que añadirle la variación
debida a las ondulaciones de agua y a los ecos que pueda recibir de las paredes.

 El dispositivo está programado para medir el nivel de agua de un depósito, sin


embargo, este mismo modelo de hardware y montaje nos serviría por ejemplo,
para montar un sensor de aparcamiento o un metro digital con unos cambios
insignificantes en el código.

También podría gustarte