huborarduino.com

La web de Hubor para la simulación de Arduino con Proteus

Banner Guia Programacion Arduino Con Proteus

[Proteus versión 8.1]

En la lección de hoy vamos a aprender a controlar un teclado matricial desde nuestro equipo Arduino. Un teclado matricial es un dispositivo compuesto de una serie de pulsadores conectados de forma matricial (en filas y colúmnas).

lec15 001

La ventaja de disponerlos de esta manera es que se pueden leer la información de múltiples botones utilizando un número reducido de pines de nuestro microprocesador. Así, por ejemplo, un teclado matricial de 4×4 que se compone de 16 pulsadores, solamente necesita 4 pines para las filas y otros 4 pines para las colúmnas. De esta forma se pueden leer las 16 teclas utilizando solamente 8 pines, en lugar de los 16 que serían necesarios utilizando otra configuración.

lec15 002

lec15 003

El sistema en el que se basa el funcionamiento de un teclado matricial es el multiplexado. Configuramos cuatro pines de nuestro microprocesador como entradas y otros cuatro como salidas. Conectamos las entradas a las columnas y las salidas a las filas (o viceversa porque el funcionamiento sería el mismo). Empezamos con las cuatro salidas en nivel bajo. Activamos la salida de la primera fila y leemos las cuatro entradas. Cada una de ellas nos informará del estado de los cuatro pulsadores de esa fila. La entrada 1 el pulsador de la columna 1, la entrada 2 el pulsador de la columna 2 y así sucesivamente. A continuación, desactivamos la salida 1 y activamos la 2. En este momento en las cuatro entradas podemos leer el estado de los pulsadores situados en la segunda fila. Haremos lo mismo con las salidas 3 y 4 para obtener el estado de los pulsadores situados en las filas 3 y 4.

A continuación, vemos un esquema del momento en que hemos activado nuestra salida 2 (para leer el estado de los pulsadores de la segunda fila) y vemos como, si estuviera actuado el pulsador 6 (fila 2, columna2), tendríamos la entrada de la columna 2 activa.

lec15 004

Afortunadamente, no tenemos que preocuparnos de la programación de nuestro multiplexor, porque Arduino ya nos facilita librerías para ello. Así que el uso de un teclado matricial es muy sencillo. Proteus, también nos facilita varios modelos de teclados matriciales para poder llevar a cabo la simulación. Un teclado de calculadora reducido (keypad-smallcalc), un teclado de calculadora más amplio (keypad-calculator) y uno de teléfono (keypad-phone).

lec15 005

Cada uno de ellos difiere de los otros, no solo en el serigrafiado de los botones, sino también en el número de pulsadores y, consecuentemente, en el número de pines de entrada y salida necesarios para gobernarlos. Nosotros vamos a utilizar en nuestra práctica el teclado telefónico, aunque al lector no le costará nada aplicar luego los conocimientos adquiridos para gestionar cualquier otro tipo de teclado. El esquema que vamos a utilizar se muestra en la imagen siguiente:

lec15 006

La librería que viene en nuestra ayuda se llama keypad.h. Esta librería no viene de forma estándar con la distribución del compilador de Arduino. Así que tenemos que descargarla desde la web. La podemos encontrar en el siguiente enlace:

http://playground.arduino.cc/code/Keypad

Descargaremos el fichero comprimido zip a nuestro ordenador y lo desempaquetamos. Con esta operación obtendremos una carpeta llamada keypad. Esta carpeta la copiaremos en la carpeta 'Libraries' del directorio donde se encuentra instalado el compilador Arduino en nuestro equipo. En nuestro caso la ruta de acceso es:

Archivos de programa /(x86)/Arduino/libraries. 

lec16 006

Una vez hecho esto ya podemos escribir nuestro código. Vamos a realizar una aplicación que nos permite introducir con ayuda de nuestro teclado una clave de cuatro dígitos que nos posibilitará abrir o cerrar una caja fuerte. Si la clave introducida coincide con el número almacenado, encenderemos un led verde (simulamos que abrimos la caja). En caso contrario, encenderemos un led rojo (simulamos que cerramos nuestra caja fuerte).

lec16 007

Lo primero que hacemos es enlazar con la librería keypad. A continuación definimos una serie de constantes que utilizamos para indicar el número de filas y columnas de nuestro teclado. Y luego dos matrices que usamos para indicar los pines a los que conectaremos cada fila y cada columna.

lec16 008

A continuacíón creamos una serie de variables que utilizamos para diversas operaciones de control.

lec16 009

La variable position la utilizaremos para ir ordenando las cifras que componen nuestra clave. La variable redPin almacena el pin de salida donde conectamos nuestro led rojo. La variable greenPin almacena el pin de salida donde conectaremo nuestro led verde. La variable secretCode contiene nuestra clave válida. Nosotros hemos puesto 2468. Luego generamos una matriz para identificar cada una de las teclas con el símbolo que tiene rotulado. Por último creamos un objeto del tipo keypad (este tipo se define en la librería keypad.h) que nos permite inicializar todos los datos del objeto que controla nuestro teclado. Como se ve, para inicializar el objeto, se llama a la función keypad() y se le pasa cinco parémetros. El primero es una llamada a la función makeKeymap() que, a su vez, recibe como parámetro la matriz con los símbolos serigrafiados. El segundo y tercer parámetro son las matrices que contienen los pines a los que conectamos las columnas y filas. Por último, el cuarto y quinto parámetro son las variables con el número de filas y columnas de nuestro teclado.

Como se ha visto, la librería es muy fácil de adaptar a diversas configuraciones de teclados matriciales, simplemente cambiando las definiciones de las matrices keys, rowPins, colPins y de las variables rows y cols.

El siguiente paso es inicializar nuestro equipo utilizando la función setup().

lec16 010

En este caso, sólo configuramos los pines a los que hemos conectado los dos leds, como pines de salida y realizamos una llamada a la función setLocked() pasando como parámetro la constante true. La función setLocked() se encuentra situada al final de nuestro código.

lec16 011

Su funcionamiento es muy sencillo. Cuando la llamamos pasando como parámetro true, encendemos el led rojo y apagamos el verde (no se abrió la puerta). Si pasamos como parámetro false, encendemos el led verde y apagamos el rojo (se abrió la puerta). Por eso, de mano, la hemos llamado pasando como parámetro true, para indicar que empezamos con la puerta de nuestra caja fuerte cerrada.

Veamos ahora el último trozo de código que está contenido en la función loop().

lec16 012

Primero asignamos el resultado del método getKey() de nuestro objeto keypad a la variable key. De esta manera tan sencilla la librería nos indica qué botón de nuestro teclado matricial ha pulsado el usuario. A continuación evaluamos si se ha pulsado las teclas '*' o '#'. En caso afirmativo, ponemos el contador de cifras introducidas a cero y cerramos la caja llamando a la función setLocked() con el parámetro true.

Si la tecla introducida es una diferente a estas dos (es decir, cualquiera que tenga una cifra serigrafiada), comprobamos si el valor de la tecla introducida coincide con la el valor del código secreto de esa misma posición. En caso afirmativo pasamos a la segunda cifra y así sucesivamente hasta llegar a la cuarta cifra.

Cuando hemos acertado con las cuatro cifras de nuestra clave secreta, abrimos la caja llamando a la función setLocked() pasándole el parámetro false.

Vamos a compilar nuestro programa para ver como funciona. Si es la primera vez que utilizamos nuestra librería keypad.h encontraremos un mensaje de error porque Proteus no sabe que esa carpeta se ha añadido a nuestro proyecto. Para solventarlo tenemos que utilizar la opción de menú Construir->reconstruir el proyecto.

lec16 013

Ahora ya se habrá compilado correctamente si no nos hemos equivocado al escribir el código de nuestro programa. Ya podemos arrancar la simulación y observar que nuestra caja empieza cerrada (led rojo encendido).

lec16 014

Ahora ya podemos probar a meter la clave secreta en nuestro teclado pulsando sobre las teclas 2, 4, 6 y 8. Si lo hacemos en el orden correcto veremos cómo se abre nuestra caja fuerte (led verde encendido).

lec16 015

Para volver a cerrar la caja o para poner el contador de cifras a cero, sólo tenemos que pulsar los botones '*' o '#'.

Es evidente que no iremos muy lejos con nuestra caja fuerte si el funcionamiento real fuera como el que se muestra en esta lección. El programa sólo pretende mostrar el funcionamiento de un teclado matricial. 

Como ejercicio, proponemos en esta ocasión utilizar cualquiera de los otros teclados y realizar algún proyecto controlándolos desde nuestro Arduino.

Esperamos que la lección os haya resultado interesante.

 

Comparte este artículo en redes sociales

Submit to FacebookSubmit to Google PlusSubmit to TwitterSubmit to LinkedIn


Esta página es propiedad de Hubor.

2014.

¡Atención! Este sitio usa cookies y tecnologías similares. Si no cambia la configuración de su navegador, usted acepta su uso. Ampliar información