Teclado analógico de 4 botones KC11B04 - angelmicelti/Arduineando-en-la-E.S.O. GitHub Wiki
Contenido
- Teclados analógicos
- Teclado analógico de 4 botones KC11B04
- Calibración del teclado
- Vídeo de funcionamiento
Teclados analógicos
Los teclados son muy necesarios en nuestros proyectos, dado que, muy habitualmente, necesitamos que reaccionen a sencillas pulsaciones del usuario.
Un teclado digital precisa de tres cables para su funcionamiento, además de la colocación de una resistencia para poder realizar un pull-up o un pull-down.
He descubierto unos teclados analógicos que permiten obtener, con una sola placa y tres cables, un número bastante elevado de pulsadores, sin necesidad de añadir más componentes electrónicos. Uno de ellos es éste.
Teclado analógico de 4 botones KC11B04
Este teclado posee cuatro botones y ofrece 7 salidas, dado que se pueden pulsar dos o tres teclas simultáneamente. He encontrado el teclado en este enlace.
He realizado este montaje:
cuya programación puedes ver en Arduinoblocks, en este enlace.
Calibración del teclado
En este teclado, como se ha visto, tenemos cuatro botones sobre la placa, y tres pines:
- Vcc, alimentación.
- GND, masa.
- A0, que irá conectado a la entrada analógica.
Realizamos el siguiente montaje:
Y elaboramos un sencillo programa que nos envía a la consola serie la lectura del valor que tenemos en la entrada A0. Lo tenemos disponible en este enlace (Arduinoblocks), o bien en el código de aquí abajo:
double teclado;
void setup(){
Serial.begin(9600);
pinMode(A0, INPUT);
teclado = 0;
}
void loop()
{
teclado = analogRead(A0);
Serial.println(teclado);
delay(100);
}
Realizamos diversas pulsaciones a los botones, y observamos que se obtienen diferentes valores en la consola serie:
Esto va bien.
No obstante, vemos que al mantener una tecla pulsada (por ejemplo, la tecla K2) el valor que se obtiene en A0 no es un valor exacto, sino que oscila un poquito.
Esto nos lleva a pensar que no podremos hablar en nuestros programas de un valor de A0, sino de un intervalo en el que se podrá encontrar A0. Esto es fundamental para nuestros programas, porque si no lo tenemos en cuenta, podremos confundir una pulsación con una ausencia de la misma, o viceversa.
Para registrar los datos, hemos utilizado el programa Realterm que nos permite, tal y como se explica en este artículo, capturarlos y guardarlos en un archivo. Incluso, como se indica en dicho artículo, podríamos graficar los datos con KST, si fuera necesario, pero no lo vamos a hacer.
Una vez que hemos obtenido una muestra lo suficientemente grande de valores para cada una de las pulsaciones:
- K1
- K2
- K3
- K4
- K1+K2
- K1+K3
- K2+K3
y los hemos guardado en un archivo, los llevo a esta hoja de cálculo, donde los procesamos.
Calculamos la media aritmética de los valores observados, así como la desviación típica de cada conjunto de datos. Una vez hecho esto, utilizamos el "criterio de las 3 sigmas" (el intervalo de confianza estará entre media-3 x sigma y media + 3 x sigma), y obtenemos los siguientes intervalos:
K1 | K2 | K3 | K4 | |
---|---|---|---|---|
K1 | 400-410 | 502-512 | 673-681 | >1020 |
K2 | 602-612 | 758-768 | >1020 | |
K3 | 808-818 | >1020 | ||
K4 | >1020 |
En esta tabla de doble entrada indicamos la pulsación simultánea de dos pulsadores: por ejemplo K1 con K1 indica que sólo se pulsa la tecla K1.
Fnalmente, para hacer la comprobación del funcionamiento, hacemos este sencillo montaje, con el LED RGB conectado directamente a los pines 11, 12, 13 y GND de Arduino.
creamos un sencillo programa para hacer que un LED RGB muestre distintos colores en función de la tecla que se haya pulsado.
Tenemos este programa en este enlace (Arduinoblocks) o en el siguiente código:
double teclado;
void setup()
{
Serial.begin(9600);
pinMode(A0, INPUT);
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
teclado = 0;
}
void loop()
{
teclado = analogRead(A0);
Serial.println(teclado);
if (((teclado >= 400) && (teclado <= 410))) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
if (((teclado >= 602) && (teclado <= 612))) {
digitalWrite(12, HIGH);
} else {
digitalWrite(12, LOW);
if (((teclado >= 808) && (teclado <= 818))) {
digitalWrite(11, HIGH);
} else {
digitalWrite(11, LOW);
if (((teclado >= 502) && (teclado <= 512))) {
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
} else {
digitalWrite(11, LOW);
digitalWrite(12, LOW);
if (((teclado >= 673) && (teclado <= 681))) {
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
} else {
digitalWrite(12, LOW);
digitalWrite(13, LOW);
if (((teclado >= 758) && (teclado <= 768))) {
digitalWrite(11, HIGH);
digitalWrite(13, HIGH);
} else {
digitalWrite(11, LOW);
digitalWrite(13, LOW);
if ((teclado >= 1020)) {
digitalWrite(11, HIGH);
digitalWrite(12, HIGH);
digitalWrite(13, HIGH);
} else {
digitalWrite(11, LOW);
digitalWrite(12, LOW);
digitalWrite(13, LOW);
}
}
}
}
}
}
}
delay(50);
}
Vídeo de funcionamiento
El resultado puede verse en el siguiente vídeo: