Menu
in

Open Alarm: El sistema de alarma hogareña de NeoTeo (III)

En esta oportunidad vamos a aprender todo lo necesario para aprovechar la posibilidad que brinda el modulo central del sistema de alarma propuesto para la conexión de una pantalla LCD alfanumérica. Se trata de un agregado ideal para facilitar la interacción entre el usuario y la alarma.

A pesar de lo económicos que son los módulos LED de 7 segmentos, los displays LCD se han impuesto en los aparatos de consumo. La baja de precios ha hecho que, si necesitamos representar más de 8 o 10 dígitos, el costo sea el mismo que si utilizásemos módulos LED. Además, una pantalla LCD permite representar todo tipo de caracteres (cuenta con todo un juego ASCII en su memoria), no está limitada a los dígitos del 0 al 9. Y como si esto fuera poco, el usuario puede definir sus propios caracteres especiales.

La alarma que estamos diseñando posee un conector que permite la utilización de una de estas pantallas. Afortunadamente, la mayoría de ellas utiliza el mismo protocolo de comunicaciones y pinout, gracias al empleo de un chip de Hitachi, el HD44780. Esto hace posible que el usuario pueda elegir usar desde un pequeño display de una sola línea de 8 caracteres (suficiente para ingresar una contraseña de activación/desactivación) hasta uno de 4 líneas de 40 caracteres. Dado que la programación de uno u otro display es idéntica, asumiremos para los ejemplos que brindaremos en este articulo que se ha conectado un modulo típico de 2 líneas de 16 caracteres.

En las figuras que están mas abajo podemos ver la función que cumple cada uno de los pines del conector previsto en nuestro modulo central (analizado en detalle en la primera entrega de este tutorial) y la de los pines del modulo LCD. Recordemos que la mayoría de ellos respeta este orden, pero que puede haber variaciones. Como siempre, lo mejor es tener a mano la hoja de datos de nuestro módulo para no cometer errores.

Tenemos que construir un cable que sirva de “cordón umbilical” entre nuestra placa central y el modulo LCD. Lo ideal es emplear un trozo de cable plano, de al menos 8 conductores. Si bien se venden el las tiendas de componentes electrónicos, por metro, puede que tengamos en casa algún cable de datos de una disquetera o de un disco duro viejo. Si es así, podemos cortar un pedazo de ese cable y ahorrarnos algo de dinero.

Una vez que tengamos el trozo de cable (unos 20 centímetros bastarán) procedemos a separar ligeramente los conductores en cada uno de los extremos. Utilizando el alicate de corte, le pelaremos uno o dos milímetros a cada conductor, y procederemos a estañar uno por uno.

Hecho esto, procederemos a soldar los 8 cables a la posición correspondiente del conector del LCD. Para ello, utilizaremos el esquema de la pagina anterior, teniendo cuidado de no equivocarnos. También deberemos unir entre si varios terminales (los que corresponden a GND, RW, D0, D1, D2 y D3). Es una muy buena idea incluir un potenciómetro de 10K, conectado como se ve en el esquema anterior, para permitir modificar el contraste de la pantalla en caso de que las condiciones de iluminación no sean las adecuadas.

También puede utilizarse la función de “backlite” disponible en casi todos los módulos LCD. Como puede verse, los pines 15 y 16 del conector de la pantalla no se han utilizado, y son los que corresponden a los LEDs que proporcionan la iluminación trasera al LCD, permitiendo su uso en la oscuridad. Para llevar a cabo esta modificación, veremos en la hoja de datos del display la tensión necesaria y la corriente que consumen estos LEDs, y se la proporcionaremos a partir de los conductores de alimentación que provienen de la placa central. La mayoría de las veces, basta con aplicarle los 5V mediante un resistor de unos 680 ohm. Pero para no cometer errores, lo ideal es basarse en la hoja de datos de la pantalla que tengamos.

En el otro extremo del cable podemos poner un conector hembra que “calce” en la tira de pines de bronce del modulo central, o, si no pensamos volver a quitar la pantalla, directamente soldar cada cable a cada uno de los pines. Debemos tener en cuenta el orden en que van, y que al soldarlos dos pines adyacentes no queden en contacto. No es una tarea difícil, pero requiere de toda nuestra atención para no dañar nada. Antes de alimentar el circuito, conviene repasar a fondo todo el trabajo.

La programación del display LCD, utilizando el lenguaje BASIC incluido en el PIC SIMULATOR IDE, es bastante simple. Ya le hemos dedicado un capitulo de nuestro curso de programación de microcontroladores, así que seria conveniente que lo leas antes de encarar esta etapa del sistema de alarma.

Podemos dar dos usos al display de nuestra alarma. El primero de ellos tiene que ver con la notificación al usuario del estado en que se encuentra el sistema. Se pueden implementar, con mucha sencillez, mensajes del tipo “ALARMA ACTIVADA”, “DISPARO” o cualquiera que el lector crea conveniente. Tampoco tenemos que olvidar que el modulo principal propuesto cuenta con tres LEDs encargados de avisar los estados mas importantes de la alarma, y que veremos en las próximas entregas como sacarle partido.

El segundo uso es el más interesante, y se relaciona con la entrada de datos por medio del teclado. Si bien podemos mantener muy simple el diseño de nuestra alarma haciendo que se active y desactive simplemente pulsando una tecla, es mucho mejor que dichas tareas se ejecuten previo ingreso de una contraseña. Podemos elegir entre una palabra clave (o numero clave) que permita llevar a cabo ambas tareas (que es lo habitual) o también podemos disponer de una clave para la activación y una diferente para la desactivación. Eso es lo bueno de diseñar nuestro propio sistema de seguridad.

Dado que la programación del display esta íntimamente ligada al uso del teclado, les proponemos un ejemplo que utiliza a ambos elementos: un pequeño programa que se encarga de leer el teclado y mostrar un mensaje en la pantalla indicando que tecla se ha pulsado. Este es el listado:

‘———————————-
‘Alarma NeoTeo
‘Ejemplo lectura Teclado y
‘escritura en el LCD.
‘———————————-
AllDigital  ‘Todos los pines del puerto A como E/S.
TRISA = %11111111  ‘Puerto A como entradas
TRISB = %00001111  ‘Puerto B: 4 entradas, 4 salidas

‘Declaro las variables a utilizar
Dim tecla As Byte  ‘Tecla presionada

tecla = 16  ’16 = no hay tecla presionada

‘Declaro los parametros para el LCD
Define LCD_BITS = 4
Define LCD_DREG = portd
Define LCD_DBIT = 4
Define LCD_RSREG = portc
Define LCD_RSBIT = 6
Define LCD_EREG = portc
Define LCD_EBIT = 7

Lcdinit 0  ‘inicializo el lcd sin cursor.

‘Bucle principal
   Lcdout "ALARMA LISTA"  ‘Muestra el texto…   WaitMs 1000  ‘Espero un segundo   Lcdcmdout LcdClear  ‘borro el display

loop:   ‘Leo el teclado   Gosub leoteclado   WaitMs 10  ‘Espero      ‘Si se presiono una tecla, la muestro   If tecla <> 16 Then       Gosub muestrotecla       WaitMs 100  ‘espero y…       Lcdcmdout LcdClear  ‘Borro el contenido de la pantalla   Endif

Goto loop  ‘vuelvo a loop: para repetir indefinidamente.

End                                              

leoteclado:       tecla = 16  ’16 = no hay tecla presionada       ‘Leo la primer columna       PORTB = %10000000       If PORTB.3 = 1 Then tecla = 1  ‘Tecla "1"       If PORTB.2 = 1 Then tecla = 4  ‘Tecla "4"       If PORTB.1 = 1 Then tecla = 7  ‘Tecla "7"       If PORTB.0 = 1 Then tecla = 10  ‘Tecla "*"
       ‘Leo la segunda columna       PORTB = %01000000       If PORTB.3 = 1 Then tecla = 2  ‘Tecla "2"       If PORTB.2 = 1 Then tecla = 5  ‘Tecla "5"       If PORTB.1 = 1 Then tecla = 8  ‘Tecla "8"       If PORTB.0 = 1 Then tecla = 0  ‘Tecla "0"
       ‘Leo la tercer columna       PORTB = %00100000       If PORTB.3 = 1 Then tecla = 3  ‘Tecla "3"       If PORTB.2 = 1 Then tecla = 6  ‘Tecla "6"       If PORTB.1 = 1 Then tecla = 9  ‘Tecla "9"       If PORTB.0 = 1 Then tecla = 11  ‘Tecla "#"
       ‘Leo la cuarta columna       PORTB = %00010000       If PORTB.3 = 1 Then tecla = 12  ‘Tecla "TEST"       If PORTB.2 = 1 Then tecla = 13  ‘Tecla "PANICO"       If PORTB.1 = 1 Then tecla = 14  ‘Tecla "F1"       If PORTB.0 = 1 Then tecla = 15  ‘Tecla "F2"
Return                                           

muestrotecla:   Lcdcmdout LcdClear  ‘Borro el contenido de la pantalla   If tecla < 10 Then Lcdout "Tecla: ", #tecla   If tecla = 10 Then Lcdout "Tecla: *"   If tecla = 11 Then Lcdout "Tecla: #"   If tecla = 12 Then Lcdout "Tecla: TEST"   If tecla = 13 Then Lcdout "Tecla: PANICO"   If tecla = 14 Then Lcdout "Tecla: F1"   If tecla = 15 Then Lcdout "Tecla: F2"
Return

Si has leído nuestro tutorial sobre programación de microcontroladores, no deberías tener problemas para comprender el funcionamiento de este pequeño programa. Si aun no lo has hecho, esta es una buena oportunidad para darle un vistazo.

Con esto damos por terminada la tercera entrega de este tutorial. En el próximo, veremos como construir la sirena, como controlarlos LEDs indicadores y mucho más.

Escrito por Ariel Palazzesi

Leave a Reply