Fecha de publicación: Dec 21, 2018 1:10:12 AM
Muchas veces no podemos estar pendientes si nuestra cisterna tiene un nivel aceptable de liquido o no.
El presente proyecto, pretende demostrarles como podemos automatizar un sencilla bomba de agua para que nos eleve el liquido al tanque cuando este se encuentra en un nivel medio o menor, y siempre cuidando el desborde apagandolo o mencionando la alerta desde mensaje y grafica analogica del nivel de tanque...Como complemento, se le suma una salida para accionar nuestros equipos ionizadores para tanques
El funcionamiento del programa DEMO que anexo para que puedan armar sus propios prototipos es el siguiente:
Cuando el nivel del tanque se inferior a 56%, arrancara la bomba y apagara el proceso de ionizacion:
Cuando el nivel del tanque se inferior a 50% o menos, encendera la bomba y apagara el proceso de ionizacion y seguira en marcha hasta superar el 90%
En estado de repozo, o sea, cuando la bomba no funciona, se somete el liquido al proceso de ionizacion
Si por alguna razon, el tanque sobrepasa el limite superior (superior al 98%), apagara bomba eh indicara mensaje de alerta en el display
En este proyecto en particular, notamos que el valor de la lectura del ADC, se convirtio en porcentaje... Para muchos, realizar la simple regla de conversion seria la solucion, pero en este caso particular, estamos hablando de trabajar con microcontroladores, por lo tanto, la aplicacion matematica es distinta... A continuacion, les dejo un ejemplo de coversion
'****************************************************************
' Name : EjemploADC_porcentaje.pbp
' Author : prof.martintorres@educ.ar
' Notice : Copyright (c) 2018 ETI (EducacionTecnicaInformal)
' : All Rights Reserved
' Date : 19/12/2018 *
' Version : sencillo ejemplo de lectura del ADC y conversion
' Notes : a porcentaje... muy util para establecer niveles
' : de de sensores u otras aplicaciones
'****************************************************************
include "modedefs.bas"
@ DEVICE xt_OSC
DEFINE OSC 4
TRISA = %00001011
TRISB = %00011111
TRISC = %00000000
ADCON1 = 4 ;PortA 0, 1, 4 entradas A/D
DEFINE ADC_BITS 8
DEFINE ADC_CLOCK 2
DEFINE ADC_SAMPLEUS 50
DEFINE LCD_LINES 2 ; define un LCD de 2 líneas
DEFINE LCD_DREG PORTC ; define pines del LCD B4 a B7
DEFINE LCD_DBIT 0 ; empezando desde el Puerto B4 hasta el B7
DEFINE LCD_RSREG PORTC ;define el puerto B para conectar el bit RS
DEFINE LCD_RSBIT 5 ;este es el puerto B3
DEFINE LCD_EREG PORTC ;define el puerto B para conectar el bit Enable
DEFINE LCD_EBIT 4 ;este es el puerto B2
;VARIABLES
PNMin con 5 ;Porcentaje Nivel Minimo de TANQUE
LB var BYTE
adVal var BYTE
aVal var BYTE
NIVEL VAR BYTE
NIVEL_TK VAR BYTE
LCDOut $FE,1
pause 100
'****************************************************************
'******************** Programa Principal **********************
'****************************************************************
DISPLAY:
GOSUB verNIVEL1_TK
GOSUB CALCULO
LCDOUT $fe,$80,"Lectura ADC a %"
LCDOUT $fe,$c0,"NivelTK:",DEC3 NIVEL_TK,"-",DEC3 NIVEL,"%"
PAUSE 100
GOTO DISPLAY
'****************************************************************
'*********************** SUB Programas **********************
'****************************************************************
;Subrutina para calculo de porcentaje llenado de tanque
CALCULO:
if aval<>NIVEL_TK then
LB=(255/100)*PNMin
if NIVEL_TK>=LB then
NIVEL=(NIVEL_TK-LB)/((255-LB)/100) ;CONVERTIMOS EL VALOR EN PORCENTAJE
IF NIVEL>100 THEN NIVEL=100
IF NIVEL<5 THEN NIVEL=0
endif
ENDIF
aval=NIVEL_TK
return
'****************************************************************
;Subrutina para leer el puerto analogico que esta el sensor de NIVEL
verNIVEL1_TK:
ADCON0 = $41
Gosub leerADC
NIVEL_TK = ADRESH
Return
;Subrutina de conversion lectura analogico/digital
leerADC:
PAUSEUS 50
ADCON0.2 = 1
WHILE ADCON0.2
WEND
Return
'****************************************************************
END