Cómo conectar un teclado numérico a tu Raspberry Pi

Conectamos un teclado numérico a una Raspberry Pi

Para Arduino y la Raspberry Pi hay algunas módulos de teclado que se pueden conectar y leer con relativa facilidad. Al igual que el teclado numérico, estos teclados tienen teclas de 3×4 o 4×4. Estos módulos se pueden utilizar, por ejemplo, como cerraduras de código o para la construcción de una pequeña calculadora de bolsillo. Con la ayuda de algunos pequeños cambios, incluso se puede crear un teclado aT9, con el que se pueden escribir textos como en los teléfonos móviles más antiguos.

En este tutorial, vamos a explicar la conexión de dicho módulo de teclado y cómo leerlo fácilmente con los GPIOs. Para utilizar menos GPIOs, también es posible conectarlo a través del Expansor de Puerto I2C MCP23017.

Lista de componentes

Como ya he mencionado, existen varios modelos diferentes de estos «interruptores de membrana», que difieren principalmente en tamaño y etiquetado. En este tutorial, utilizaremos un teclado 3×4, pero no hay problema en ajustarlo para un teclado 4×4 (o superior).

Los siguientes modelos son válidos para el tutorial:

  • Matriz de teclado 3×4
  • Matriz de teclado 4×4
  • variantes especiales del teclado 4×4 con letras impresas (Estilo T9)

También debes tener a mano cables de conexión macho-hembra.

No importa qué modelo de Raspberry Pi uses, siempre y cuando tengas al menos 7 u 8 GPIOs sin usar.

Conexión y función del teclado con la Raspberry Pi

Básicamente todos los GPIOs libres y controlables pueden ser elegidos para la conexión. Dependiendo de si tienes un teclado de 3×4 o 4×4, 7 u 8 pines deberán utilizarse. Lo más adecuado para ello son los cables de puente macho-hembra, que encajan en los terminales del teclado. La estructura básica de esta matriz de teclado es la siguiente:

esquema conexion teclado a raspberry pi

Los primeros 4 pines de la izquierda son para las líneas, los otros 3 o 4 conexiones para una columna. En cuanto se pulsa una tecla, se conectan dos líneas. Para averiguar y, en caso afirmativo, qué tecla se ha pulsado, se envía una señal en cada caso mediante las cuatro primeras líneas. Los pines restantes están «roscados».

Si, por ejemplo, sólo se pulsa la tecla 6, se conectan las líneas «fila 2» y «columna 3». Así que si enviamos una señal al GPIO para la línea 2, sólo se recibirá una señal alta en el GPIO para la columna 3. Todos los demás GPIOs no reciben ninguna señal. Así que enviando una señal a través de todas las filas y comprobando todas las columnas, podemos saber si se ha pulsado una tecla y, por supuesto, cuál.

Bueno, como ya se ha mencionado, no importa qué 7 u 8 GPIOs uses, pero esto debe ser ajustado más adelante en el código si es necesario. En este ejemplo, utilizamos un teclado 3×4, por lo que sólo necesitamos 7 GPIOs para asignar. De izquierda a derecha la conexión es la siguiente:

3×4 Keypad Raspberry Pi
Pin 1 GPIO 7 (Pin 26)
Pin 2 GPIO 8 (Pin 24)
Pin 3 GPIO 11 (Pin 23)
Pin 4 GPIO 25 (Pin 22)
Pin 5 GPIO 9 (Pin 21)
Pin 6 GPIO 10 (Pin 19)
Pin 7 GPIO 15 (Pin 10)

Esquemáticamente es esto:

gráfico de esquema teclado raspberry pi

Código para controlar el teclado

Para poder usar el teclado pequeño ahora, cargamos una pequeña biblioteca de GitHub. Primero creamos una carpeta.

mkdir keypad-rpi && cd keypad-rpi

Luego descargamos el archivo:

wget -O keypad.py https://raw.githubusercontent.com/rainierez/MatrixKeypad_Python/master/matrix_keypad/RPi_GPIO.py

Si estás usando un teclado 4×4 o GPIOs diferentes a los de este tutorial, necesitarás ajustar los números GPIO en el código en consecuencia (sudo nano keypad.py).

Ahora podemos usar esa clase. Para aclarar la funcionalidad, hemos creado un pequeño ejemplo. Para copiar esto, cree un nuevo archivo

sudo nano example.py

con el siguiente código:

import time
import RPi.GPIO as GPIO
from keypad import keypad

GPIO.setwarnings(False)

if __name__ == '__main__':
# Initialize
kp = keypad(columnCount = 3)

# waiting for a keypress
digit = None
while digit == None:
digit = kp.getKey()
# Print result
print digit
time.sleep(0.5)

###### 4 Digit wait ######
seq = []
for i in range(4):
digit = None
while digit == None:
digit = kp.getKey()
seq.append(digit)
time.sleep(0.4)

# Check digit code
print(seq)
if seq == [1, 2, 3, '#']:
print "Code accepted"

Puedes guardar y salir del archivo con CTRL + O, CTRL + X.

Si ejecutamos el archivo ahora, se pueden seleccionar las entradas.

sudo python example.py

Veamos otra manera similar de hacerlo

Pin It on Pinterest

Shares