Dificultad: Intermedia
Un teclado matricial es un dispositivo que agrupa varios pulsadores y permite controlarlos empleando un número de conductores inferior al que necesitaríamos al usarlos de forma individual.
Estos dispositivos agrupan los pulsadores en filas y columnas formando una matriz, disposición que da lugar a su nombre. Es frecuente una disposición rectangular pura de NxM columnas, aunque otras disposiciones son igualmente posibles.
Los teclados matriciales son frecuentes en electrónica e informática. De hecho, los teclados de ordenador normales son teclados matriciales, siendo un buen ejemplo de teclado matricial con disposición no rectangular.
Podemos emplear teclados matriciales en nuestros proyectos de electrónica y robótica, por ejemplo, para cambiar el modo de funcionamiento de un montaje, para solicitar una contraseña, como teclas de dirección para controlar un brazo robótico o un vehículo, o proporcionar instrucciones a un robot.
¿Cómo funciona un teclado matricial?
Como hemos dicho, un teclado matricial agrupa los pulsadores en filas y columnas formando una matriz, lo que permite emplear un número menor de conductores para determinar la pulsación de las teclas.
La siguiente imagen muestra una disposición rectangular de 4×4. Al detectar la pulsación en la columna X y la fila Y, sabremos que se ha pulsado la tecla (X,Y).
Internamente la disposición de los pulsadores es la siguiente, que es muy similar a la disposición que vimos al tratar sobre displays LED matriciales.
Para detectar la pulsación de una tecla actuaremos de forma similar a la lectura simple de un pulsador. En resumen, ponemos a tierra un extremo del pulsador, y el otro lo conectamos a una entrada digital con una resistencia de pull-up.
Para leer todas las teclas tendremos que hacer un barrido por filas. En primer lugar ponemos todas las filas a 5V, y definimos todas las columnas como entradas con resistencia de pull-up.
Progresivamente ponemos una fila a 0V, y leemos las entradas de la columna. Una vez realizada la lectura volvemos a ponerla a 5V, pasamos a la siguiente fila, y volvemos a realizar el progreso hasta recorrer todas las filas.
Para detectar NxM pulsadores necesitamos sólo N+M conductores. Por tanto ahorro de conductores es superior cuanto más grandes sean N y M, y más parecidos entre sí. (ej: 16 pulsadores en 2×8 necesitan 10 conductores, y en 4×4 sólo 8 conductores).
Lista de componentes:
- Arduino Uno
- Teclado matricial 4×4
- Cables de conexión
- Protoboard (opcional)
Imágenes ilustrativas de componentes:
Paso 1: Conexión de componentes:
El esquema de conexión es sencillo. Simplemente conectamos todos los pines a entradas digitales de Arduino. Por ejemplo, en el ejemplo de un teclado de 4×4 el esquema quedaría de la siguiente forma:
Esto se interpretaría de la siguiente forma:
- El pin 4 del arduino debe ir conectado al pin 8 (columna) del teclado,
- El pin 5 del arduino debe ir conectado al pin 7 (columna) del teclado,
- El pin 6 del arduino debe ir conectado al pin 6 (columna) del teclado,
- El pin 7 del arduino debe ir conectado al pin 5 (columna) del teclado,
- El pin 8 del arduino debe ir conectado al pin 4 (fila) del teclado,
- El pin 9 del arduino debe ir conectado al pin 3 (fila) del teclado,
- El pin 10 del arduino debe ir conectado al pin 2 (fila) del teclado,
- El pin 11 del arduino debe ir conectado al pin 1 (fila) del teclado.
Aquí se muestra una imagen ilustrativa de cómo quedaría una conexión directa entre el arduino y el teclado:
Paso 2: Programación
Existen varias librerías diseñaras para facilitar la lectura de teclados matriciales en Arduino. Por ejemplo, la librería Keypad, disponible en este enlace (https://github.com/Chris–A/Keypad).
La librería proporciona ejemplos de código, que resulta aconsejable revisar.
El siguiente ejemplo es una modificación a partir de los disponibles en la librería.
#include <Keypad.h>
const byte rowsCount = 4;
const byte columsCount = 4;
char keys[rowsCount][columsCount] = {
{ ‘1’,’2′,’3′, ‘A’ },
{ ‘4’,’5′,’6′, ‘B’ },
{ ‘7’,’8′,’9′, ‘C’ },
{ ‘#’,’0′,’*’, ‘D’ }
};
const byte rowPins[rowsCount] = { 11, 10, 9, 8 };
const byte columnPins[columsCount] = { 7, 6, 5, 4 };
Keypad keypad = Keypad(makeKeymap(keys), rowPins, columnPins, rowsCount, columsCount);
void setup() {
Serial.begin(9600);
}
void loop() {
char key = keypad.getKey();
if (key) {
Serial.println(key);
}
}
En este ejemplo se determina una función a cada una de las teclas de la matriz, y al presionarla se visualizaran en el monitor serial del Arduino IDE.