“AÑO DE LA UNIVERSALIZACIÓN DE LA SALUD”
FACULTAD DE INGENIERÍA
MICROCONTROLADORES: “SISTEMA CON UN
TECLADO MATRICIAL DE ENTRADA”
DOCENTE: HUAMAN ROJAS, Jezzy James
INTEGRANTES:
ALCANTARA JACOBI Jhimer
ASTO PARI DEYSI
ESTRADA BALDEON Edson
CANTORIN SAMANIEGO Jhon
CAMPOS GUTARRA Johann
CAÑARI DIAS, Katia
TOLENTINO CHUQUILLANQUI Giordan
PAYTAN VALERO Marco
CARRERA: INGENIERÍA ELÉCTRICA
SECCIÓN: 12835
HUANCAYO, PERÚ
2020
INTRODUCCIÓN
Un teclado no es más que una colección de botones, a cada uno de los cuales le
asignamos un símbolo o una función determinada. Pero botones, al fin y al cabo.
Leer botones es algo que ya no tiene secretos para nosotros, pero si conectáramos cada
tecla a un pin digital de nuestro Arduino, pronto estaríamos en apuros.
El teclado de nuestro ordenador suele ser de alrededor de 106 teclas, así que el método
de fuerza bruta va a entrar en apuros rápidamente. Necesitamos otra solución.
Y como el mundo está lleno de gente ingeniosa se les ocurrió una solución de lo más
elegante, una matriz de teclas.
Para que nuestro Arduino pueda saber que tecla se pulsa, basta con poner tensión en las
filas de forma secuencial y luego leer las columnas para ver cuál de ellas tiene
[Link] teclados matriciales usan una combinación de filas y columnas para conocer
el estado de los botones. Cada tecla es un pulsador conectado a una fila y a una
columna. Cuando se pulsa una de las teclas, se cierra una conexión única entre una fila y
una columna.
1. TECLADO MATRICIAL
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. Podemos emplear estos teclados como un controlador para
un autómata o un procesador como Arduino.
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.
Una de las desventajas de usar un teclado matricial es que pueden causar problemas
cuando se pulsa más de una tecla simultáneamente. Este es uno de los motivos por el
que los teclados de ordenador usan una disposición no rectangular, agrupando ciertas
teclas en circuitos diferentes (Ctrl, Alt, Shift...).
2. FUNCIÓN:
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 las pulsación de las teclas.
La siguiente imagen muestra, a modo de ejemplo, una disposición rectangular de 4x4,
aunque el funcionamiento es análogo en otras disposiciones. 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 2x8 necesitan 10 conductores, y en 4x4 sólo 8 conductores.)
En consecuencia, los teclados de 1xM, Nx1 y 2x2 no suponen ningún ahorro en
conductores, aunque, independientemente, puede que os resulten de utilidad únicamente
por agrupar en un mismo dispositivo la disposición que deseáis.
Como hemos comentado, la mayor desventaja de la disposición matricial es que pueden
dar problemas al detectar la pulsación de múltiples teclas de forma simultánea.
3. ESQUEMA DE CONEXIÓN
En consecuencia, los teclados de 1xM, Nx1 y 2x2 no suponen ningún ahorro en
conductores aunque, independientemente, puede que os resulten de utilidad únicamente
por agrupar en un mismo dispositivo la disposición que deseáis.
Como hemos comentado, la mayor desventaja de la disposición matricial es que pueden
dar problemas al detectar la pulsación de múltiples teclas de forma simultánea.
Que visto desde Arduino quedaría de la siguiente forma.
4. Librería
#include <Keypad.h>
const byte filas = 4;
const byte columnas = 4;
byte pinesFilas[] = {9,8,7,6};
byte pinesColumnas[] = {5,4,3,2};
char teclas[4][4] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
Keypad teclado1 = Keypad( makeKeymap(teclas), pinesFilas, pinesColumnas, filas,
columnas);
void setup() {
[Link](9600);
[Link]("Teclado 4x4 con Biblioteca Keypad");
[Link]();
}
void loop() {
//Verifica si alguna tecla fue presionada
char tecla_presionada = [Link]();
//Monitor Serial
if (tecla_presionada)
{
[Link]("Tecla: ");
[Link](tecla_presionada);
}
}
5. Sin Librería
byte pinesFilas[] = {9,8,7,6};
byte pinesColumnas[] = {5,4,3,2};
char teclas[4][4] = {{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}};
void setup()
{
for (int nL = 0; nL <= 3; nL++) {
pinMode(pinesFilas[nL], OUTPUT);
digitalWrite(pinesFilas[nL], HIGH);
}
for (int nC = 0; nC <= 3; nC++) {
pinMode(pinesColumnas[nC], INPUT_PULLUP);
}
[Link](9600);
[Link]("Teclado 4x4");
[Link]();
}
void loop()
{
//Barrido por las filas
for (int nL = 0; nL <= 3; nL++)
{
digitalWrite(pinesFilas[nL], LOW);
//Barrido en columnas buscando un LOW
for (int nC = 0; nC <= 3; nC++) {
if (digitalRead(pinesColumnas[nC]) == LOW)
{
[Link]("Tecla: ");
[Link](teclas[nL][nC]);
while(digitalRead(pinesColumnas[nC]) == LOW){}
}
}
digitalWrite(pinesFilas[nL], HIGH);
}
delay(10);
}
[/sociallocker]
ENLACE DEL DISEÑO PROPUESTO EN LA PLATAFORMA TINKERCAD:
[Link]
ANEXOS:
REFERENCIAS:
[Link]
keypad/
[Link]
[Link]
%20matriciales%20usan%20una,una%20fila%20y%20una%20columna.