You are on page 1of 13

UNIVERSIDAD NACIONAL DE SAN AGUSTIN DE AREQUIPA

FACULTAD DE INGENIERIA DE PRODUCCION Y SERVICIOS


ESCUELA PROFESIONAL DE INGENIERIA ELECTRONICA

CURSO:
Electrónica de potencia
TEMA:
PROYECTO FINAL

ALUMNOS:
 CCALA ACHAHUANCO MICHAEL RUBEN 20110793

Arequipa-Peru
Control de nivel del agua de un tanque
Una aplicación típica de los sistemas microcontroladores es el control del
llenado de tinacos de agua en un edificio de condominios, ya que es común que
la presión con la que el agua llega a la toma principal del edificio no alcance un
valor suficiente como para subir en forma directa el agua a los tinacos en las
azoteas.

En estos casos suele existir una cisterna de almacenamiento en el sótano del


edificio. El agua es entonces enviada a los tinacos a través de un sistema de
control que opera una bomba de agua, la cual se activa al detectarse un nivel
bajo del líquido en los tinacos y se apaga cuando el nivel alcanza un valor
máximo para evitar su derrame.

En este proyecto se construyó -con fines didácticos y demostrativos- un modelo


simple de control automático de llenado de un contenedor de agua, utilizando
el pic 16f877a. El sistema permite emular el proceso en forma repetitiva, y para
tal fin incluye un contendor de almacenamiento el cual puede ser llenado una y
otra vez a través de una mini bomba de agua sin necesidad de utilizar recipientes
adicionales.

Se trata de un sistema de control con 1 entrada y 1 salida, es decir, el


microcontrolador recibe una señal digital proveniente del sensor de nivel en
su entrada digital y, a través de su relevador, activará la mini bomba de agua..

El funcionamiento básico del control automático es el siguiente: si se detecta


un nivel bajo de agua en el contenedor (en cuyo caso el sensor de nivel se
encontrará con su switch cerrado), el microcontrolador activa la mini bomba de
llenado. El nivel de agua subirá hasta que el sensor de nivel abra su switch -lo
que será detectado por el microcontrolador- y se apague la bomba.
El sensor de nivel tiene un rango de histéresis, de tal manera que el nivel del
agua empezará a bajar hasta que el switch se cierre de nuevo y se active la mini
bomba, repitiendo el ciclo de llenado.

El display LCD muestra el estado del proceso de control automático, como


puede observarse en la figura Si se desea repetir el experimento con el
contenedor de control completamente vacío, entonces el usuario dispone de un
control manual de 2 botones (ver figura 1), mediante el cual puede vaciar ó
llenar dicho contenedor, pasando el agua hacia -ó desde- el contenedor de
almacenamiento.

FIGURA 1 entrada de menú en la lcd


FIGURA 2 inicio de proceso de control del sistema mostrado en el display

El funcionamiento se basa en dos niveles, uno alto y otro bajo, colocados en el


tanque, recipiente, etc. Al cargarse el agua supera el nivel inferior, y continúa hasta
llegar al nivel superior, que es en donde la salida (relé electromagnético) cambia de
estado provocando la interrupción de la carga de agua (motor). Entonces ahora se
produce la descarga (consumo de agua), bajando el agua ya sin estar en contacto
con el nivel superior la salida continúa en corte, hasta que el nivel de agua baje más
y deje de estar en contacto con el nivel inferior que es cuando vuelve el ciclo, y se
produce la carga.
El código en C:

PARTE DE CONTROL
#include <definiciones.h>

void main(){

stup();

while(1){

inicio_flag=0;

nombre();

fase_inicio(); //Prende led RD0

Delay_ms(1000);

integrantes();

Delay_ms(1000);

fase_menu(); //Prende led RD1

menu();

while(!inicio_flag){

kp=0;

do{

kp = Keypad_Key_Press(); // Store key code in kp variable

if(activado_flag==1){

if(bomba_flag==1) Lcd_Out(1,26,"ON "); else Lcd_Out(1,26,"OFF");

if((aljibe_vacio==0)&&(aljibe_lleno==0)) Lcd_Out(1,10,"VACIO");

if((aljibe_vacio==1)&&(aljibe_lleno==0)) Lcd_Out(1,10,"BAJO ");

if((aljibe_lleno==1)&&(aljibe_vacio==1)) Lcd_Out(1,10,"ALTO ");

if((pozo_vacio==0)&&(pozo_lleno==0)) Lcd_Out(2,10,"VACIO");

if((pozo_vacio==1)&&(pozo_lleno==0)) Lcd_Out(2,10,"BAJO ");


if((pozo_lleno==1)&&(pozo_vacio==1)) Lcd_Out(2,10,"ALTO ");

}while (!kp);

tecla();

switch(kp){

case 65: activado(); break;

case 68: desactivado(); break;

case 35: salir();break;

}//fin main

Parte de los LCD Y TECLADOY SALIDAS

void tecla(void);

void activado(void);

void desactivado(void);

void salir(void);

void stup(void);

void fase_inicio(void);

void fase_menu(void);

void fase_activado(void);

void fase_desactivado(void);

void stup(){
ADCON1=0x06;

INTCON=0xA0;

OPTION_REG=0XD5; //preescaler 64

TRISE0_bit=0;

TRISD0_bit=0;

TRISD1_bit=0;

TRISD2_bit=0;

TRISD3_bit=0;

TRISD4_bit=0;

Lcd_Init();

Keypad_Init(); // Initialize Keypad

activado_flag=0;

PORTE=0x00;

PORTD=0x00;

void tecla(){

switch (kp) {

//case 10: kp = 42; break; // '*' // Uncomment this block for keypad4x3

//case 11: kp = 48; break; // '0'

//case 12: kp = 35; break; // '#'

//default: kp += 48;

case 1: kp = 49; break; // 1 // Uncomment this block for keypad4x4

case 2: kp = 50; break; // 2

case 3: kp = 51; break; // 3

case 4: kp = 65; break; // A

case 5: kp = 52; break; // 4

case 6: kp = 53; break; // 5

case 7: kp = 54; break; // 6


case 8: kp = 66; break; // B

case 9: kp = 55; break; // 7

case 10: kp = 56; break; // 8

case 11: kp = 57; break; // 9

case 12: kp = 67; break; // C

case 13: kp = 42; break; // *

case 14: kp = 48; break; // 0

case 15: kp = 35; break; // #

case 16: kp = 68; break; // D

void activado(){

activado_flag=1;

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Lcd_Out(1,1,txt16);

Delay_ms(1000);

Lcd_Out(1,1,txt14);

IRP_bit=1;

Lcd_Out(2,1,txt13);

Lcd_Out(1,17,txt15);

Lcd_Out(2,17,txt12);

IRP_bit=0;

fase_activado(); //Prende led RD2

void desactivado(){

activado_flag=0;

RE0_bit=0;
RD4_bit=0;

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

IRP_bit=1;

Lcd_Out(1,1,txt7);

Lcd_Out(2,17,txt12);

IRP_bit=0;

Lcd_Out(2,1,"Desactivado");

fase_desactivado(); //Prende led RD3

void salir(){

inicio_flag=1;

activado_flag=0;

void interrupt(){

if(TMR0IF_bit==1){ //entra aqui cada 4ms

if(activado_flag==1){

if((pozo_vacio==0)||aljibe_lleno==1){

RE0_bit=0;

RD4_bit=0;

bomba_flag=0;

if((pozo_lleno==1)&&(aljibe_vacio==0)){

RE0_bit=1;

RD4_bit=1;

bomba_flag=1;

}
TMR0=131;

TMR0IF_bit=0;

void fase_inicio(){

RD0_bit=1;

RD1_bit=0;

RD2_bit=0;

RD3_bit=0;

void fase_menu(){

RD0_bit=0;

RD1_bit=1;

RD2_bit=0;

RD3_bit=0;

void fase_activado(){

RD0_bit=0;

RD1_bit=0;

RD2_bit=1;

RD3_bit=0;

void fase_desactivado(){

RD0_bit=0;

RD1_bit=0;

RD2_bit=0;

RD3_bit=1;
}

Mensajes de salida en la LCD

void nombre(void);

void integrantes(void);

void menu(void);

void nombre(){

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

IRP_bit=1;

Lcd_Out(1,1,txt7);

Lcd_Out(2,1,txt9);

IRP_bit=0;

Lcd_Out(1,17,"_______________");

IRP_bit=1;

Lcd_Out(2,17,txt8);

IRP_bit=0;

void integrantes(){

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

Lcd_Out(1,1,txt21);

Lcd_Out(2,1,".");

Delay_ms(500);

Lcd_Out(2,1,"..");
Delay_ms(500);

Lcd_Out(2,1,"...");

Delay_ms(500);

IRP_bit=1;

Lcd_Out(1,1,txt3);

Lcd_Out(2,1,txt4);

Lcd_Out(1,17,txt6);

Lcd_Out(2,17,txt5);

IRP_bit=0;

void menu(){

Lcd_Cmd(_LCD_CLEAR); // Clear display

Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off

IRP_bit=1;

Lcd_Out(1,1,txt7);

Lcd_Out(2,1,txt10);

Lcd_Out(1,17,txt11);

Lcd_Out(2,17,txt12);

IRP_bit=0;

}
BIBLIOGRAFIA:

-https://es.wikipedia.org/wiki/Control_de_nivel

-http://www.aecosensors.com/index.cfm?&fuseaction=prodottiCatPadre&id=2&t=/aeco-level-
controls/&languageID=ES

-https://www.pepperl-fuchs.com/spain/es/classid_261.htm

-https://josebarca1.wordpress.com/2015/12/12/control-de-nivel-de-un-tanque/

-https://www.yoreparo.com/electronica/electronica-digital/preguntas/140371/control-de-
nivel-on-off-de-con-microcontrolador-con-lcd

You might also like