¿Estás buscando una forma de incorporar una interfaz de teclado de membrana 4×3 o 4×4 en tus proyectos con Arduino? ¡Has llegado al lugar correcto! En este artículo, exploraremos cómo utilizar y conectar este tipo de teclados con tu placa Arduino para crear proyectos innovadores y prácticos. Sigue leyendo para descubrir todo lo que necesitas saber sobre la interfaz de teclado de membrana 4×3 y 4×4 con Arduino.
Los teclados de membrana son un excelente punto de partida para agregar entradas importantes a un proyecto porque son económicos, duraderos y resistentes al agua. Y saber cómo conectarlos a un Arduino es extremadamente útil para crear una variedad de proyectos que requieren la entrada del usuario para la selección de menús, el ingreso de contraseñas o la operación del robot.
Los teclados de membrana vienen en diferentes tamaños, siendo los más habituales el teclado 4×3 (12 teclas) y el teclado 4×4 (16 teclas). Su diseño es similar al del teclado de un teléfono estándar, lo que facilita su uso por cualquier persona.
No importa el tamaño que sean, todos funcionan igual. Obtenga más información sobre los teclados de membrana.
Construcción de un teclado de membrana.
Los teclados de membrana están hechos de un material de membrana delgado y flexible y normalmente constan de seis capas:
Superposición gráfica – Las superposiciones gráficas suelen estar hechas de poliéster porque tiene mejor resistencia a la flexión que el policarbonato.
cúpulas metálicas – En esta capa hay cúpulas metálicas o polidomos que proporcionan retroalimentación táctil.
Capa de circuito superior – Suele ser una capa de poliéster impresa con tintas eléctricamente conductoras rellenas de plata. Esta capa termina como una cola flexible que proporciona una conexión con el mundo exterior.
Espaciadores – Esta capa separa los circuitos superior e inferior para que el interruptor normalmente permanezca abierto hasta que se presione el teclado.
Capa de circuito inferior – Suele ser una capa de poliéster impresa con tintas conductoras de electricidad rellenas de plata. Esta capa también termina en una cola flexible.
Capa adhesiva trasera – Esta capa pega el teclado a casi cualquier cosa que sea práctica.
Si quitas el papel protector del teclado podrás ver cómo está hecho.
Para reducir la cantidad de conexiones de E/S, como puede ver, todas las filas y columnas están conectadas entre sí. Si este no fuera el caso, por ejemplo, conectar 16 pulsadores individuales requeriría 17 pines de E/S, uno para cada pulsador y otro para una tierra común. Al conectar filas y columnas, solo se requieren 8 pines para controlar todo el teclado 4×4. Esta técnica de controlar una gran cantidad de entradas con menos pines se llama Multiplexación.
¿Cómo funciona el teclado matricial?
El teclado matricial consta de contactos de botón conectados a las líneas de fila y columna. Hay un pin para cada columna y un pin para cada fila. Entonces el teclado 4×4 tiene 4 + 4 = 8 pines, mientras que el teclado 4×3 tiene 4 + 3 = 7 pines.
Esta ilustración de una distribución básica de teclado 4×3 muestra cómo los conductores internos conectan las filas y columnas.
Cuando se presiona el botón, una de las filas se conecta a una de las columnas, permitiendo que la corriente fluya entre ellas. Por ejemplo, presionar la tecla «4» conectará la columna 1 y la fila 2.
Al detectar qué columna y fila están conectadas, podemos determinar qué tecla se presionó.
Escaneando el teclado
Así es como un microcontrolador escanea filas y columnas para determinar qué tecla se presionó.
- Cada fila está conectada a un pin de entrada y cada columna está conectada a un pin de salida.
- Los pines de entrada se elevan a ALTO activando resistencias pull-up internas.
- Luego, el microcontrolador establece el pin en BAJO para cada columna por turno y luego verifica si alguno de los pines de la fila está en BAJO. Debido a que se utilizan resistencias pull-up, las líneas estarán altas a menos que se presione una tecla.
- Cuando un pin de fila está BAJO, indica que se presiona la tecla para esa fila y columna.
- Luego, el microcontrolador espera a que se suelte el interruptor. Luego busca en la matriz del mapa de teclas el carácter que corresponde a ese botón.
Asignación de pines del teclado de membrana 4×3 y 4×4
El teclado tiene un conector Dupont hembra. Mirando el frente del teclado, las filas de pines están en el lado izquierdo y generalmente tienen una franja oscura cerca del conector para que sean más fáciles de identificar. La asignación de pines es la siguiente:
Conexión de un teclado de membrana 4×3 y 4×4 a un Arduino
Ahora que sabemos todo sobre el teclado de membrana, podemos empezar a conectarlo a Arduino.
La conexión es bastante sencilla ya que las conexiones de Arduino se realizan en el mismo orden que la conexión del teclado. Comience conectando el pin 1 del teclado al pin digital 9 de Arduino. Haz lo mismo con los siguientes pines (2 a 8, 3 a 7, etc.).
La forma más conveniente de conectar todo es utilizar un cable plano Dupont de 8 pines (macho a macho).
Instalación de la biblioteca de teclados
Para determinar qué tecla se presionó, debemos escanear continuamente filas y columnas. Afortunadamente, teclado.h fue escrito para abstraer esta complejidad innecesaria.
Para instalar la biblioteca, navegue hasta Bosquejo > Incluir biblioteca > Administrar bibliotecas… Espere a que el administrador de la biblioteca descargue el índice de la biblioteca y actualice la lista de bibliotecas instaladas.
Filtra tu búsqueda escribiendo 'Teclado'. Buscar Teclado de Mark Stanley y Alexander Brevig. Haga clic en esta entrada y luego seleccione «Instalar».
código de ejemplo de arduino
El siguiente esquema básico imprime las pulsaciones de teclas en el monitor serie.
Código para teclado 4×3
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3}; //connect to the column pinouts of the keypad
//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();// Read the key
// Print if key pressed
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
Código para teclado 4×4
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup(){
Serial.begin(9600);
}
void loop(){
char key = keypad.getKey();// Read the key
// Print if key pressed
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
Después de cargar el boceto, abra su monitor serie de 9600 baudios. Ahora presione algunas teclas del teclado. El monitor serie debe mostrar los valores clave.
Explicación del código
El boceto comienza incluyendo la biblioteca Keypad.h y definiendo constantes para el número de filas y columnas en el teclado. Si utiliza un teclado diferente, cambie estas constantes en consecuencia.
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
Luego definimos una matriz de mapa de teclas bidimensional. keys[ROWS][COLS]
que contiene caracteres que se imprimirán cuando se presiona una tecla específica del teclado. En nuestro boceto, los caracteres están ordenados exactamente como aparecen en el teclado.
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
Sin embargo, puede definirlos como desee. Por ejemplo, si desea crear un proyecto de calculadora, simplemente cambie la definición de la matriz de la siguiente manera:
char keys[ROWS][COLS] = {
{'1','2','3','4'},
{'5','6','7','8'},
{'9','0','+','-'},
{'.','*','/','='}
};
Se definen dos matrices más. Estas matrices especifican las conexiones de Arduino a los pines de fila y columna del teclado.
byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad
A continuación, creemos un objeto de biblioteca de teclado. El constructor acepta cinco argumentos.
makeKeymap(keys)
Inicializa la asignación de teclado interna para que coincida con la asignación de teclado definida por el usuario.rowPins
YcolPins
Especifique las conexiones de Arduino a los pines de fila y columna del teclado.ROWS
YCOLS
representan las filas y columnas del teclado.
//Create an object of keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
En la configuración inicializamos el puerto serie.
void setup(){
Serial.begin(9600);
}
En el bucle usamos esto getKey()
Método para recuperar un valor clave cuando se detecta una pulsación de tecla. Luego lo imprimimos en el monitor serie.
void loop(){
char key = keypad.getKey();// Read the key
// Print if key pressed
if (key){
Serial.print("Key Pressed : ");
Serial.println(key);
}
}
Algunas funciones útiles de la biblioteca de teclados
Hay muchas funciones útiles que puede utilizar con el objeto Teclado. Algunos de ellos se enumeran a continuación:
- char esperarForKey() espera eternamente hasta que alguien presiona una tecla. Advertencia: bloquea todos los demás códigos hasta que se presiona una tecla. Eso significa que no hay LED parpadeantes, ni actualizaciones de la pantalla LCD, nada más que rutinas de interrupción.
- Estado clave getState() devuelve el estado actual de cualquier clave. Los cuatro estados son INACTIVO, PRESIONADO, LIBERADO y MANTENER.
- clave booleanaStateChanged() Le permite saber si la clave ha cambiado de un estado a otro. Por ejemplo, en lugar de simplemente probar si una tecla es válida, también puede probar cuándo se presionó una tecla.
- setHoldTime (hora int sin firmar) Determina cuántos milisegundos el usuario debe mantener presionada una tecla antes de que se active el estado HOLD.
- setDebounceTime (hora int sin firmar) Establece cuántos milisegundos espera el teclado antes de aceptar una nueva pulsación de tecla/evento.
- addEventListener(tecladoEvento) desencadena un evento cuando se utiliza el teclado.
Interfaz teclado de membrana 4×3 y 4×4 con Arduino
Los teclados de membrana son un excelente punto de partida para agregar entrada de teclas a un proyecto porque son económicos, duraderos y resistentes al agua. Y saber cómo interfazarlos con un Arduino es extremadamente útil para construir una variedad de proyectos que requieren entrada de usuario para selección de menú, entrada de contraseña u operación de robot.
Construcción de Teclado de Membrana
Los teclados de membrana están hechos de un material delgado y flexible y típicamente tienen seis capas:
- Capa de superposición gráfica – Hecha típicamente de poliéster.
- Cúpulas metálicas – Proporcionan retroalimentación táctil.
- Capa de circuito superior – Impresa en poliéster con tinta conductora de plata.
- Separador – Separa los circuitos superior e inferior.
- Capa de circuito inferior – Impresa en poliéster con tinta conductora de plata.
- Capa adhesiva posterior – Para pegar el teclado a casi cualquier cosa.
Para reducir el número de conexiones de E/S, todas las filas y columnas están cableadas juntas. Esta técnica de controlar un gran número de entradas con menos pines se conoce como Multiplexado.
Funcionamiento del Teclado Matricial
El teclado matricial consiste en contactos de botones conectados a las líneas de fila y columna. Hay un pin para cada columna y un pin para cada fila.
Al presionar un botón, se conecta una de las filas a una de las columnas, permitiendo que fluya corriente entre ellas. Al presionar la tecla ‘4’, por ejemplo, la columna 1 y la fila 2 están conectadas.
Pinout del Teclado Membrana 4×3 y 4×4
El teclado tiene un conector hembra Dupont. Cuando se ve de frente, los pines de fila están a la izquierda y generalmente tienen una franja oscura cerca del conector para ayudar a identificarlos.
Conexión de un Teclado Membrana 4×3 y 4×4 a un Arduino
La conexión es bastante sencilla, ya que las conexiones de Arduino se realizan en el mismo orden que el conector del teclado. Comience conectando el pin 1 del teclado al pin digital 9 de Arduino y continúe de la misma manera con los pines siguientes (2 a 8, 3 a 7, y así sucesivamente).
Instalación de la Biblioteca del Teclado
Para determinar qué tecla se ha presionado, debemos escanear continuamente las filas y columnas. Afortunadamente, la biblioteca Keypad.h fue escrita para abstraer esta complejidad innecesaria.
Para instalar la biblioteca, navegue hasta Sketch > Include Library > Manage Libraries… Espere a que el Administrador de bibliotecas descargue el índice de bibliotecas y actualice la lista de bibliotecas instaladas.
Filtre su búsqueda ingresando ‘keypad’. Busque Keypad de Mark Stanley, Alexander Brevig. Haga clic en esa entrada y elija Instalar.
Ejemplo de Código Arduino
El siguiente esquema básico imprimirá las pulsaciones de teclas en el Monitor Serie.
Código para Teclado 4×3
#include <Keypad.h> const byte ROWS = 4; //cuatro filas const byte COLS = 3; //tres columnas char keys[ROWS][COLS] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'}, {'*','0','#'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //conectar a los pines de fila del teclado byte colPins[COLS] = {5, 4, 3}; //conectar a los pines de columna del teclado //Crear un objeto de teclado Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey();// Leer la tecla // Imprimir si se presionó la tecla if (key){ Serial.print("Tecla Presionada: "); Serial.println(key); } }
Código para Teclado 4×4
#include <Keypad.h> const byte ROWS = 4; //cuatro filas const byte COLS = 4; //cuatro columnas char keys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //conectar a los pines de fila del teclado byte colPins[COLS] = {5, 4, 3, 2}; //conectar a los pines de columna del teclado //Crear un objeto de teclado Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); void setup(){ Serial.begin(9600); } void loop(){ char key = keypad.getKey();// Leer la tecla // Imprimir si se presionó la tecla if (key){ Serial.print("Tecla Presionada: "); Serial.println(key); } }
Después de cargar el esquema, abra su monitor serie a 9600 baudios. Ahora, presione algunas teclas en el teclado; el monitor serie debería mostrar los valores de las teclas.
Explicación del Código
El esquema comienza incluyendo la biblioteca Keypad.h y definiendo constantes para el número de filas y columnas en el teclado.
A continuación, definimos una matriz bidimensional de mapeo de teclas keys[ROWS][COLS] que contiene caracteres a imprimir cuando se presiona un botón en el teclado.
Sin embargo, puede definir estos caracteres como desee. Por ejemplo, si tiene la intención de crear un proyecto de calculadora, simplemente cambie la definición de la matriz a esto:
Se definen dos matrices más que especifican las conexiones de Arduino a los pines de fila y columna del teclado.
A continuación, creamos un objeto de biblioteca de teclado. El constructor acepta cinco argumentos.
En Setup, inicializamos el puerto serie.
En Loop, usamos el método getKey() para obtener un valor de tecla cuando se detecta una pulsación de tecla. Luego lo imprimimos en el monitor serie.
Algunas funciones útiles de la biblioteca Keypad
- waitForKey() – Espera indefinidamente hasta que alguien presione una tecla.
- getState() – Retorna el estado actual de cualquier tecla.
- keyStateChanged() – Indica cuándo la tecla ha cambiado de estado.
- Y muchas más funciones…
¡Buena explicación! Ahora tengo más claro cómo puedo utilizar un teclado de membrana con Arduino. ¡Gracias por compartir!
¡Interesante artículo! Me encanta cómo explican el funcionamiento de la interfaz de teclado de membrana con Arduino. ¡A seguir aprendiendo!