Select Page

Un teclados matricial viene de varias tecnologías, capacitivos, resistivos o mecánicos y todos son ensamblados en forma de matriz . El diagrama muestra un un teclado como una matriz de 4X4 — 16 teclas teclas configuradas configuradas en 4 columnas y 4 filas.

Los teclados de matriz son el tipo de teclados que se ven en teléfonos celulares, calculadoras, hornos de microondas, cerraduras de puertas, etc. Están prácticamente en todas partes.

Sin embargo, en electrónica DIY, son una excelente manera de permitir que los usuarios interactúen con tu proyecto y, a menudo, son necesarios para navegar por los menús, introducir contraseñas y controlar robots o colores en iluminación. Estos pueden ser inalámbrico o alambricos como los tipos a continuación.

QUÉ ES UN TECLADO MATRICIAL

Un teclado matricial es un dispositivo que agrupa varios pulsadores mecánicos y permite leerlos con un micro con MENOS PINES que si los conectaramos uno a uno individualmente a una entrada digital.

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 como vemos en las fotos anteriores, lo común es un teclado matricial de 4×4, dado que nos suma 8 bits en total, osea un byte, que es el tamaño de palabra de los microcontroladores como Arduino.

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…)

Características Técnicas (generales)

  • 16 botones con organización matricial (4 filas x 4 columnas)
  • Teclado tipo membrana
  • Mayor resistencia al agua y al polvo
  • Auto adhesivo en la parte de atrás
  • Tiempo de rebote (Bounce time): ≤5 ms
  • Máximo voltaje operativo: 24 V DC
  • Máxima corriente operativa: 30 mA
  • Resistencia de aislamiento: 100 MΩ (@ 100 V)
  • Voltaje que soporta el dieléctrico: 250 VRMS (@ 60Hz, por 1 min)
  • Expectativa de vida: 1.000.000 de operaciones
  • Dimensiones del pad: 6.9 x 7.6 cm aprox.
  • Cable de cinta plana de 8.5 cm de largo aprox. (incluido el conector)
  • Conector tipo DuPont hembra de una fila y 8 contactos con separación estándar 0.1″ (2.54mm)
  • Temperatura de operación: 0 a 50 °C

CÓMO FUNCIONA UN TECLADO MATRICIAL

Los teclados de membrana están hechos de un material de membrana delgado y flexible. Vienen en tamaños de 4 × 3, 4 × 4, 4 × 1, etc. Independientemente de su tamaño, todos funcionan de la misma manera.

Una de las mejores cosas de ellos es que vienen con un respaldo adhesivo para que puedas adjuntarlo a casi cualquier cosa. Solo tienes que despegar el papel.

Teclado Matricial o Membrana 7

Tomemos como ejemplo el teclado 4 × 4. Tiene un total de 16 llaves o switches. Debajo de cada tecla hay un interruptor de membrana especial.

Todos estos interruptores de membrana están conectados entre sí con trazas conductoras debajo de la almohadilla que forman una matriz cuadriculada de 4 × 4.

Teclado Matricial o Membrana 8

Si hubiera utilizado 16 botones individuales, habría requerido 17 pines de entrada (uno para cada tecla y un pin de tierra) para que funcionen. Sin embargo, con la disposición de la matriz, solo necesita 8 pines de microcontrolador (4 columnas y 4 filas) para escanear a través de la plataforma.

Qué es el rebote de los teclados matriciales

Estos teclados por ser mecánicos, al presionar el botón y unirse sus contactos, producen algo llamado REBOTE.

Este rebote se traduce a que los contactos estan abriendo y cerrando el circuito hasta que se estabilizan. Imagina que aprietas y sueltas el boton muchas veces, de manera muy rápida.

En la siguiente imagen de osciloscopio, podemos ver gráficamente a me refiero. El boton viene sin pulsar, y cuando lo presionamos, no baja a cero y se queda en cero, si no que rebota unas cuantas veces.

Teclado Matricial o Membrana 9

Este efecto no lo podemos ver ni escuchar por la alta velocidad con la que sucede, según esta medida de osciloscopio de rebote mecánico de un pulsador ronda los 200us.

Tu arduino, o cualquier otro micro moderno, es capaz de leer 3200 veces por segundo el estado de este pulsador y creeme cuando te digo que va a detectar que los apretamos y soltamos MUCHAS VECES.

Es por esto que tenemos que usar la librería Keypad.h a la hora de programar. Para ahorrarnos más de un dolor de cabeza.

En este caso el teclado tarda 200us en establecerse. Para eso utilizamos setDebounceTime(unsigned int time) con el tiempo que nuestro teclado requiera.

Algo parecido pasa si mantenemos presionado el botón por mucho tiempo. Tenemos que escribir correctamente nuestro programa para todo tipo de outcomes posibles y creeme cuando te digo que son muchos. Mira otras soluciones al final del post.

PinOut Teclado de membrana 4×4 y 4×3

El pinout del teclado de membrana 4 × 3 y 4 × 4 es el siguiente.

Teclado Matricial o Membrana 12

Como podemos ver en las imágenes, en el caso del teclado 4×4 tenemos 4 pines que corresponden a las filaes y 4 a las columnas. Esto es crítico a la hora de programarlo, dado que tenemos que conocer la cantidad de filas y columnas a barrer. Tengas el teclado que tengas, TENES QUE AVERIGUARLO.

Más adelante, vamos a ver que el papel de las filas y columnas será intercambiable, pero si tenemos que saber cuantas hay de cada.

Cómo escanear un teclado matricial

Veremos que en principio no importan la cantidad de filas y columnas, vamos a explicar el concepto, luego con este conocimiento podes extrapolarlo a cualquier tamaño.

El principio de funcionamiento es muy simple. Al presionar un botón se acorta una de las líneas de la fila con una de las líneas de columna, permitiendo que la corriente fluya entre ellas. Por ejemplo, cuando se presiona la tecla «4», la columna 1 y la fila 2 se acortan.

Teclado Matricial o Membrana 13

Un microcontrolador puede escanear estas líneas para un estado de botón presionado. Para hacer esto, sigue el siguiente procedimiento|algoritmo.

  1. El microcontrolador establece todas las líneas de columna y fila para ingresar.
  2. Luego, elige una fila y la establece como ALTA o HIGH.
  3. Después de eso, verifica las líneas de columna una a la vez.
  4. Si la conexión de la columna permanece BAJA, el botón de la fila no se ha presionado.
  5. Si pasa a ALTO, el microcontrolador sabe qué fila se configuró en ALTO y qué columna se detectó en ALTO cuando se marcó.
  6. Finalmente, sabe qué botón se presionó que corresponde a la fila y columna detectadas.

Como habrán deducido, no es posible realizar un multitouch, es decir si quieren presionar dos o más teclas al mismo tiempo, no es posible hacerlo con este método.

Conectando teclados 4×4 y 4×3 al Arduino

Ahora que sabemos todo sobre el teclado de membrana, podemos comenzar a conectarlo con Arduino.

Las conexiones son bastante fáciles. Empieza conectando el pin 1 del teclado al pin digital 9 en Arduino. Ahora sigue conectando los pines hacia la izquierda como 2 con 8, 3 con 7, etc.

Esta secuencia de pines no es obligatoria. Podes conectar a cualquiera de los pines digitales del arduino como quieras o te resulte más cómodo.

Ahorrar aún más pines

Hasta acá ya te quedo mas que claro, que la disposición «matricial» para un teclado de membrana, existe para ahorrarnos pines a la hora de conectar pulsadores. Pero…….

Qué pasa si tengo que conectar muchos teclados

BINGO! Es la pregunta del millón, a la hora de hacer un control de acceso, es normal que existan dos teclado, uno de cada lado de la puerta. O si queremos que más de una persona ingrese códigos de acceso y así maximizar el data entry? Al principio no para tan lógico, pero cuando tenes mas de 10 años de desarrollo electrónico a la fecha de escrito este post, te topas con esta pregunta.

Conforme avanza la tecnologia y la masividad de conocimiento, aparecen soluciones mejores, más eficiente y eficaces.

Si ya sos habitue de saber.patagoniatec.com veras que hay muchos post de como ahorrar pines, multiplicar salidas de actuadores o entradas de sensores de muchas maneras, una de ellas es con el I2C. Por eso te dejamos leer Teclado de Membrana por I2C

Código Arduino para teclado de membrana

Dado lo simple de este módulo, se puede usar sin librería. Es recomendado, para profesores y alumnos comenzar con este código, para entender lo que se está haciendo y aprender, dado que muchos otros módulos en la electrónica funcionan de manera matricial.

Sin Librería

El siguiente ejemplo de programación es una modificación a partir de los códigos disponibles en la librería Keypad.h en github, mas abajo les dejo el link..

const unsigned long period = 50;
unsigned long prevMillis = 0;
 
byte iRow = 0, iCol = 0;
const byte countRows = 4;
const byte countColumns = 4;
 
const byte rowsPins[countRows] = { 11, 10, 9, 8 };
const byte columnsPins[countColumns] = { 7, 6, 5, 4 };
 
char keys[countRows][countColumns] = {
  { '1','2','3', 'A' },
  { '4','5','6', 'B' },
  { '7','8','9', 'C' },
  { '#','0','*', 'D' }
};
 
// Leer el estado del teclado
bool readKeypad()
{
  bool rst = false;
 
  // Barrido de columnas
  for (byte c = 0; c < countColumns; c++)
  {
    // Poner columna a LOW
    pinMode(columnsPins,OUTPUT);
    digitalWrite(columnsPins, LOW);
    
    // Barrer todas las filas comprobando pulsaciones
    for (byte r = 0; r < countRows; r++)
    {
      if (digitalRead(columnsPins[r]) == LOW)   
      {
        // Pulsador presionado detectado, guardar fila y columna
        iRow = r;
        iCol = c;
        rst = true; 
      }
    }
    // Devolver la columna a alta impedancia
    digitalWrite(columnsPins, HIGH);
    pinMode(columnsPins, INPUT);
  }
  return rst;
}
 
// Inicializacion
void setup()
{
  Serial.begin(9600);
 
  // Columnas en alta impedancia
  for (byte c = 0; c < countColumns; c++)
  {
    pinMode(columnsPins, INPUT);
    digitalWrite(columnsPins, HIGH);
  }
 
  // Filas en pullup
  for (byte r = 0; r < countRows; r++)
  {
    pinMode(rowsPins[r], INPUT_PULLUP);
  }
}
 
void loop()
{
  if (millis() - prevMillis > period)   // Espera no bloqueante
  {
    prevMillis = millis();
    if (readKeypad())   // Detección de tecla pulsada
    {
      Serial.println(keys[iRow][iCol]);   // Mostrar tecla
    }
  }
}

Con Librería Keypad.h

Existen varias librerías diseñadas para facilitar la lectura y escaneo de teclados matriciales en Arduino. Por ejemplo, la librería Keypad.h, disponible en github. La librería proporciona ejemplos de código, que resulta aconsejable revisar.

#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);
   }
}
Si te ha gustado es

Como verán, hay una diferencia notable de líneas de código. Ideal para empezar a usar el teclado sin entender lo que está pasando de fondo y asumir que esta todo roto cuando no ande :)-

Debounce Keypad.h

  • setDebounceTime(unsigned int time) : Establece la cantidad de milisegundos que el teclado esperará hasta que acepte una nueva pulsación de tecla / evento de tecla.
  • char waitForKey() :Espera para siempre hasta que alguien presiona una tecla. Advertencia: bloquea el resto del código hasta que se presiona una tecla. Eso significa que no hay LED parpadeantes, no hay actualizaciones de pantalla LCD, nada, con la excepción de las rutinas de interrupción.
  • KeyState getState() : Devuelve el estado actual de cualquiera de las claves. Los cuatro estados están inactivos, presionados, liberados y retenidos.
  • boolean keyStateChanged() : Te avisamos cuando la clave ha cambiado de un estado a otro. Por ejemplo, en lugar de solo buscar una clave válida, puede probar cuándo se presionó una tecla.
  • setHoldTime(unsigned int time) : Establece la cantidad de milisegundos que el usuario tendrá que mantener presionado un botón hasta que se active el estado HOLD.
  • addEventListener(keypadEvent) : Activa un evento si se usa el teclado.

Donde comprar Teclados matriciales o de membrana

Existen muchos tipos, tamaños colores etc que podrían adaptarse a tu proyecto. No te quedes con un único modelo, dado que todos funcionan igual, son matriciales.

PatagoniaTec

Amazon

Alibaba

LINKS

A %d blogueros les gusta esto: