ULPGC, Universidad de Las Palmas de Gran Canarias. Facultad de Informática. Asignatura: Diseño de Sistemas Basados en Microprocesadores Profesor: Ricardo Pérez García. Regador Automático ACOSTA PADRÓN, OMAR ÁLVAREZ ROMERO, YERAY A día 6 de Junio del año 2009 1. ÍNDICE Índice de contenido INTRODUCCIÓN................................................................................................................................2 CONTENIDO.......................................................................................................................................2 OBJETIVOS DEL PROYECTO.....................................................................................................2 IDEA PROPUESTA........................................................................................................................3 DESARROLLO....................................................................................................................................3 La temperatura.................................................................................................................................3 La humedad......................................................................................................................................6 El agua.............................................................................................................................................8 Circuito general del proyecto...........................................................................................................8 El microprocesador...................................................................................................................10 Las conexiones..........................................................................................................................10 La señal analógica.....................................................................................................................11 Umbrales...................................................................................................................................11 El código...................................................................................................................................11 PRUEBAS..........................................................................................................................................13 CONCLUSIONES..............................................................................................................................13 ANEXO I............................................................................................................................................14 BIBLIOGRAFÍA................................................................................................................................18 2. INTRODUCCIÓN Este documento es el informe de prácticas de la asignatura: Diseño de Sistemas Basados en Microprocesadores. Cumpliendo con el proyecto docente, hemos desarrollado un proyecto al que nombramos Regador Automático. Este proyecto tiene como objetivo principal, satisfacer la demanda de un dispositivo electrónico capaz de proporcionar agua a plantas de manera automática y autónoma. 3. CONTENIDO 1. OBJETIVOS DEL PROYECTO El objetivo del proyecto, es idear y desarrollar un dispositivo capaz de Página 2 proporcionar agua a una cantidad limitada de plantas, de forma automática y cumpliendo dos requisitos: • La planta puede ser regada si la cantidad de humedad de la tierra está por debajo de cierto nivel, y debe ser regada si la temperatura no sobrepasa un umbral establecido. 2. IDEA PROPUESTA Para satisfacer las condiciones establecidas, debemos medir la temperatura ambiente y la humedad de la tierra. Para medirlas, se requiere de un sensor de temperatura y un sensor de humedad. Para controlar los sensores y decidir convenientemente, es preciso, usar un microprocesador. Para trasladar el agua desde el contenedor hasta la superficie a humedecer, necesitamos un circuito hidráulico. Proponemos como idea, desarrollar un sistema dotado de un microprocesador, un sensor de temperatura, un sensor de humedad y un circuito hidráulico. Las entradas a este sistema son, la información que proporcionan los sensores y la salida es la orden de regar. El computo de la información en el sistema y la toma de decisiones del mismo, se realiza mediante un programa que es interpretado por el microprocesador. Los objetivos secundarios son: Desarrollar un circuito que informe sobre la temperatura. Desarrollar un circuito que informe sobre la humedad. Desarrollar un circuito que relacione todos los circuitos anteriormente mencionados. Desarrollar un programa que ejerza el control sobre el circuito. Página 3 3. DESARROLLO 1. La temperatura La medición de la temperatura se realiza de manera eficiente con el siguiente circuito electrónico. El elemento electrónico principal en el circuito, es el sensor de temperatura LM335. Este circuito nos permite hacer mediciones de la temperatura, obteniendo T. Output es la tensión de salida, la cual, permite obtener T si resolvemos la siguiente ecuación: T = 273 – Output(mV) / 10 en grados centi-grados. Si quisiéramos variar el umbral de temperatura, tenemos que modificar las constantes internas al código. Para evitarlo, incluimos al circuito un potenciómetro. Con este elemento, podemos variar Output consiguiendo modificar el umbral de temperatura sin necesidad de reprogramar el microprocesador. Página 4 2. La humedad En el mercado, a fecha actual podemos comprar sensores de humedad a un alto coste económico. Nosotros hemos desarrollado nuestro propio sensor de humedad para este proyecto. El objetivo secundario de nuestro sensor de humedad consiste en medir la resistencia eléctrica que ejerce la tierra al paso de la corriente eléctrica. Cuanto más húmeda está la tierra, menor resistencia se ejerce al paso de la corriente. Cuanto más seca está la tierra, mayor resistencia se ejerce al paso de la corriente. Esta información nos permite medir la cantidad de humedad de la tierra de manera eficaz. El circuito desarrollado es: Página 5 Para medir la humedad de la tierra, necesitamos introducir en la tierra dos barras conductoras separadas entre sí. Si alimentamos el circuito, con las barras conductoras introducidas en la tierra de la planta y separadas entre sí. Output va a tener una tensión determinada que identifica la cantidad de humedad presente en la tierra en ese momento. Este circuito amplifica la cantidad de corriente que circula por la tierra mediante un transistor. Si circula corriente por la tierra, el transistor deja pasar toda o parte de la tensión de entrada V1. La cantidad de tensión que deja circular el transistor es directamente proporcional a la cantidad de corriente que conduce la tierra, y con suficiente magnitud para que pueda ser computada. Para obtener la tensión de salida del circuito añadimos la resistencia R1. Por lo cual podemos obtener Output(V), información que indica la cantidad de humedad presente. Página 6 3. El agua El sistema de riego es alimentado por una corriente de potencial 5V que proporciona el circuito. Existen diferentes medios para conseguir regar la planta. Por ejemplo, usando un motor de riego o una grifo eléctrico. 4. Circuito general del proyecto Página 7 Los elementos principales del circuito son: el microprocesador, el sensor de riego y el sensor de humedad. Al conectar los diferente elementos obtenemos el siguiente sistema: Página 8 1. El microprocesador El microprocesador que escogimos para resolver la parte de computación del proyecto es el PIC16F876A. Este microprocesador consta de un conversor analógico digital incorporado y tres puertos. Además, incorpora una funcionalidad que permite al microprocesador mantenerse en un estado de consumo mínimo denominado sleep. El tiempo de duración es variable y se controla mediante una herramienta denominada Watchdog Timer. 2. Las conexiones El puerto A está configurado para permitir la entrada de determinadas señales en determinados pines. La configuración del número de pines de entrada analógica o digital, puede ser modificada. El puerto C está configurado como un puerto de salida, el cual permite accionar el sistema hidráulico. 3. La señal analógica La información de entrada al sistema, es decir, la información que proporcionan los sensores en una señal. Esta señal de entrada es una señal analógica, la cual, para poder ser computada ha de ser transformada en otra señal digital. Para digitalizar la señal de entrada, el microprocesador proporciona un conversor analógico digital. Para ello proporciona al programador una serie de instrucciones. La relación entre la señal analógica y la digital es recogida en la siguiente tabla. Página 9 TENSIÓN SALIDA BINARIO HEXADECIMAL DECIMAL 0.5 V 1110 0000 1C 28 1V 1100 1000 32 50 1.5 V 0100 1100 4C 76 2V 0110 0111 67 105 2.5 V 1000 0000 80 128 3V 1001 1010 9A 154 3.5 V 1011 0100 BA 180 4V 1100 1101 CA 205 4.5 V 1110 0111 E7 231 5V 1111 1111 FF 255 5. Umbrales Para establecer los umbrales hay que tener en consideración un criterio. Ya que poseemos dos potenciómetros, uno para cada sensor, proporcionamos al usuario la posibilidad de variar los umbrales del sistema sin necesidad de modificar el código fuente. Para establecer los umbrales, el criterio a seguir es escoger un umbral optimo para ambos sensores y ajustar los potenciometros de forma que la variación del umbral sea la máxima. Para conseguirlo, hemos realizado diversas pruebas, de las cuales hemos concluido que ambos potenciómetros deben estar ajustados a la mitad, que el umbral de temperatura es óptimo a 26ºC y la humedad optima proporciona una tensión de salida de 1.2V. 6. El código Lo pasos a seguir para computar la información la podemos representar en un diagrama de bloque como este: Página 10 4. PRUEBAS Hemos realizado diferentes pruebas con el objetivo de observar el buen funcionamiento del dispositivo y, además, obtener los umbrales optimos. Página 11 3 voltios indican 27ºC. 5. CONCLUSIONES El proyecto desarrollado cumple las condiciones iniciales establecidas, además de otras que hemos añadido. Hemos posibilitado el cambio de los umbrales de temperatura y humedad de forma manual. El desarrollo e implementación del sistema puede ser ampliado, pero el tiempo dedicado debe ser mayor. La interfaz del usuario con el dispositivo podría ser mejorada incorporando varios lcd-7segmentos, que informen de la temperatura y humedad. Permitiendo también la modificación de los umbrales, mediante botones que posibiliten una mayor precisión que el potenciómetro. Proporcionar una alimentación renovable mediante paneles solares o pequeños molinos de viento, aumentaría la autonomía del dispositivo. Página 12 6. ANEXO I ;************************************************************************************** ; REGADOR AUTOMÁTICO ;************************************************************************************** ;INDICAR CUANTAS INSTRUCCIONES SON NECESARIAS PARA TENER 1 MICROSEGUNDO #DEFINE MICROSEG 1 LIST P=16F876A INCLUDE <P16F876A.INC> ;-------------------CONTADOR UMBRAL EQU UMBRAL_TEMPERATURA UMBRAL_HUMEDAD HUMEDAD_USUARIO TEMP_USUARIO EQU 0x26 0X27 EQU 0X28 EQU 0X29 EQU 0X30 EQU 0X31 ; MACROS ***************************************************************************** ;-------------------BANCO0 MACRO BCF STATUS,RP0 BCF STATUS,RP1 ENDM ;-------------------BANCO1 MACRO BSF STATUS,RP0 BCF STATUS,RP1 ENDM ;-------------------BANCO2 MACRO BCF STATUS,RP0 BSF STATUS,RP1 ENDM ;-------------------BANCO3 MACRO BSF STATUS,RP0 BSF STATUS,RP1 ENDM ;-------------------PORTA_IN MACRO BANCO1 MOVLW 0FFh MOVWF TRISA ;TRISA=1 => PUERTO ENTRADA BANCO0 ENDM ;-------------------PORTB_OUT MACRO BANCO1 CLRF TRISB ;TRISB=0 => PUERTO SALIDA BANCO0 ENDM Página 13 ;-------------------PORTC_OUT MACRO BANCO1 CLRF TRISC BANCO0 ENDM ;TRISC=0 => PUERTO SALIDA ;-------------------SSELECC_CANAL_ANALOG_ENTRADA MACRO CANAL ;[0..7] CLRF ADCON0 ;LIMPIAMOS EL ADCON0 PARA ELIMINAR LOS BITS QUE QUEDEN ALMACENADOS EN EL REGISTRO BANCO0 ;EN LA ÚLTIMA SELECCIÓN MOVLW CANAL MOVWF B0TMP_REG BCF STATUS,C RLF B0TMP_REG,F ;ROTAMOS 3 VECES, PARA DISPONER DEL NUMERO CORRESPONDIENTE EN LOS BITS(5-3) DEL ADCON0 RLF B0TMP_REG,F RLF B0TMP_REG,F MOVFW B0TMP_REG IORWF ADCON0,F ENDM ;-------------------SELEC_RELOJ_CONVERSION MACRO RELOJ ;[0-3] BANCO0 MOVLW RELOJ MOVWF B0TMP_REG BCF STATUS,C RLF B0TMP_REG,F ;LOS BITS DEL ADCON0 PARA SELECCIONAR EL RELOJ, SON EL 7 Y EL 6 RLF B0TMP_REG,F RLF B0TMP_REG,F RLF B0TMP_REG,F RLF B0TMP_REG,F RLF B0TMP_REG,F MOVFW B0TMP_REG IORWF ADCON0,F ;EN ESTE PUNTO, TENEMOS EL ADCON0 CON UN CANAL DE ENTRADA SELECCIONADO, Y UN RELOJ DE CONVERSIÓN ENDM ;-------------------INICIAR_CONVERSION MACRO LOCAL ESPERAR_20MS,E20MS ESPERAR_20MS MOVLW MICROSEG MOVWF B0CONTA20 BCF STATUS,C RLF B0CONTA20,F; X2 RLF B0CONTA20,F; X4 RLF B0CONTA20,F; X8 RLF B0CONTA20,F; X16 E20MS DECFSZ B0CONTA20,F GOTO E20MS BANCO0 BSF ADCON0,2 ENDM ;-------------------- Página 14 ESPERAR_CONVERSION MACRO LOCAL EC BANCO0 EC BTFSC ADCON0,2 CONVERSIÓN NO HABRÁ FINALIZADO GOTO EC ENDM CONVERSOR_ON MACRO BANCO0 BSF ADCON0,0 ENDM CONVERSOR_OFF MACRO BANCO0 BCF ADCON0,0 NADA ENDM ;MIENTRAS EL BIT 2 DEL ADCON0 SEA 1, LA ;ACTIVA EL FUNCIONAMIENTO DEL CONVERSOR ;DESACTIVA EL CONVERSOR A/D, Y NO CONSUME ; DECLARACION DE CONSTANTES ********************************************************** #DEFINE CONTROL PORTA,1 #DEFINE ENTRADA_ANALOGICA PORTA,0 ; DECLARACION DE VARIABLES *********************************************************** #DEFINE BASE_MEM_USUARIO_BANCO0 20H B0TMP_REG EQU BASE_MEM_USUARIO_BANCO0 B0CONTA20 EQU BASE_MEM_USUARIO_BANCO0+1 ; ZONA DE CÓDIGOS ******************************************************************** ORG 0x00 GOTO INICIO ORG 0x05 ;------------------------------------------------------------------------------------------; CONFIGURACIONES ;------------------------------------------------------------------------------------------INICIO ;ASIGNAMOS EL PRESCALER AL WDT, Y LE ASIGNAMOS EL VALOR MAXIMO 111 PARA CONSEGUIR 2,3 SEG MOVLW 0FH MOVWF OPTION_REG ;ASIGNAMOS LOS VALORES A NUESTRAS VARIABLES DE CONTROL DE HUMEDAD Y TEMPERATURA, DE LAS MACROS DEFINIDAS MOVLW 08DH MOVWF UMBRAL_TEMPERATURA MOVLW 03FH MOVWF UMBRAL_HUMEDAD ;CONFIGURAR PUERTOS DE SALIDA PORTB_OUT PORTC_OUT ;CONFIGURAR PUERTOS DE ENTRADA PORTA_IN BANCO1 MOVLW 02h ;0,1,2,3,4 -> ANALOGICOS, RESTO DIGITALES MOVWF ADCON1 Página 15 BANCO0 ;------------------------------------------------------------------------------------------; BUCLE PRINCIPAL ;------------------------------------------------------------------------------------------BUCLE MOVLW 0FFH ;RESETEAMOS EL CONTADOR QUE NOS PERMITIRÁ DORMIR LA PLACA DURANTE 9,77 MINUTOS MOVWF CONTADOR CALL LEER_TEMPERATURA ;CUANDO TERMINAMOS DE LEER LAS MEDIDAS, DORMIMOS GOTO DORMIR ;------------------------------------------------------------------------------------------; LEER TEMPERATURA ;------------------------------------------------------------------------------------------LEER_TEMPERATURA SELECC_CANAL_ANALOG_ENTRADA 0 ; SELECCIONAR CANAL DE ENTRADA 0 => TEMPERATURA SELEC_RELOJ_CONVERSION 1 ; SELECCIONAR EL RELOJ DE CONVERSIÓN CONVERSOR_ON ; ACTIVAR CONVERSOR INICIAR_CONVERSION ESPERAR_CONVERSION MOVFW ADRESH ;OBTENEMOS LOS VALORES CONVERTIDOS DE LA DIRECCION ADRESH SUBWF UMBRAL_TEMPERATURA,W ;RESTAMOS AL VALOR DE LA TEMPERATURA LEIDA, EL UMBRAL DE TEMPERATURA BTFSC STATUS,C ;SI EL VALOR LEIDO ES MAYOR QUE EL UMBRAL, SE PRODUCE UN BIT DE ACARREO QUE EL REGISTRO C DEL STATUS NOS INDICA CALL LEER_HUMEDAD ;SI SE CUMPLEN LAS CONDICIONES, COMPROBAMOS TAMBIÉN LA HUMEDAD RETURN ;VOLVEMOS AL BUCLE PRINCIPAL ;------------------------------------------------------------------------------------------; LEER HUMEDAD ;------------------------------------------------------------------------------------------LEER_HUMEDAD SELECC_CANAL_ANALOG_ENTRADA 1 ;SELECCIONAR CANAL DE ENTRADA 0 => TEMPERATURA SELEC_RELOJ_CONVERSION 1 ;SELECCIONAR EL RELOJ DE CONVERSIÓN CONVERSOR_ON ;ACTIVAR CONVERSOR INICIAR_CONVERSION ESPERAR_CONVERSION MOVFW ADRESH SUBWF UMBRAL_HUMEDAD,W ;RESTAMOS AL VALOR DE LA HUMEDAD LEIDA, EL UMBRAL DE HUMEDAD BTFSC STATUS,C ;SI EL VALOR LEIDO ES MAYOR QUE EL UMBRAL, SALTAMOS A REGAR CALL REGAR RETURN ;VOLVEMOS AL BUCLE PRINCIPAL, POR SI HAY QUE LEER OTROS SENSORES ;------------------------------------------------------------------------------------------; REGAR ;------------------------------------------------------------------------------------------REGAR Página 16 BSF PORTC,1 ;ACTIVAMOS EL MOTOR SLEEP ;DORMIMOS DURANTE 10 MINUTOS APROVECHANDO LA CONFIGURACIÓN PREVIAMENTE HECHA DECFSZ CONTADOR,1 ;YA QUE LOS BITS ACTIVOS DEL PUERTOC, PERMANECEN ASÍ DURANTE EL SLEEP GOTO REGAR MOVLW 0FFH ;RESETEAMOS EL CONTADOR, PARA DORMIR LA PLACA MOVWF CONTADOR CLRF PORTC ;LIMPIAMOS EL PUERTOC, YA QUE SE TERMINÓ DE REGAR RETURN ;------------------------------------------------------------------------------------------; DORMIR ;------------------------------------------------------------------------------------------DORMIR SLEEP DECFSZ CONTADOR,1 ;ESPERAMOS A QUE EL WDT SALTE 255 VECES PARA CONSEGUIR APROX 10 MINUTOS DE SLEEP GOTO DORMIR GOTO BUCLE ;------------------------------------------------------------------------------------------END -----------------------------------------------------------------------------------------------;CÁLCULOS DEL TIEMPO PARA EL SLEEP Y REGAR -----------------------------------------------------------------------------------------------;En las características eléctricas del 16f876A, se especifica que el WDT salta cada 18 ms de media sin prescaler. ;Esto qiere decir que con un ratio de prescaler máximo, 128, obtenemos 2,3 segundos por cada despertar del wdt. ;Si a ello, le añadimos un contador de valor máximo 255, obtenemos los 9,792 minutos que usamos en nuestro algoritmo. ;Con otros contador podríamos obtener 19,5 minutos. Si añadiésemos un contador dentro del contador ya establecido, podríamos ;irnos hasta más de 4 horas. 7. BIBLIOGRAFÍA. Los documentos visitados son los datasheet de los componentes electrónicos utilizados. Y la información no documentada nos la ha proporcionado el profesor de la asignatura, Ricardo Perez García. Página 17