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.