Solo tres pines para un teclado de 4x3
Componentes y suministros
| × | 1 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Herramientas y máquinas necesarias
|
Aplicaciones y servicios en línea
|
Acerca de este proyecto
Introducción
El objetivo de este proyecto es reducir significativamente la cantidad de pines que requiere un teclado numérico. Esto se debe a que a menudo necesitamos muchos pines de E / S en comparación con los disponibles en Arduino Uno o Nanoboards.
Los teclados numéricos ordinarios están estructurados en matriz:un teclado 4x3, requiere 4 + 3 pines digitales Arduino. Numerosas bibliotecas están disponibles en la red para usarlo con Arduino.
Mi solución
La solución que propongo es mucho mejor porque utiliza solo tres entradas analógicas, con un circuito como el que se muestra en la siguiente figura.
Para cada columna hay solo 4 valores de voltaje, correspondientes a cada una de las 4 teclas, más cero voltios en caso de que no se presione ninguna tecla. En el esquema equivalente (b), R1e indica una de las cuatro resistencias R1-R4, mientras que R2e es una de las tres resistencias R5-R7.
Ahora veamos cómo hacer los cuatro intervalos más amplios posibles. En primer lugar, las resistencias R2e =R5 =R6 =R7 se pueden igualar, luego podemos configurar R1 =0 para que las salidas correspondan a la primera línea a 5V.
Con R2 =330 ohmios, R3 =1 k ohmios, R4 =3 k ohmios y R5, R6, R7 =1 k ohmios, se obtienen los siguientes intervalos para cada salida:
Como puede ver, los intervalos en las tres salidas son los más grandes posibles y puede usar seis resistencias estándar con una tolerancia de ± 5%. Con una entrada analógica extra y otra resistencia, se puede utilizar un teclado 4x4 y así sucesivamente. La siguiente figura muestra las conexiones con Arduino.
En el diagrama, la resistencia R1 está conectada a la línea 2 porque la de la línea 1 la ha dibujado con un cable, por lo que las referencias de resistencia se han escalado en uno. Las asignaciones de pines se pueden modificar según las necesidades, siempre que sean configurables como analógicas.
Por supuesto, si Arduino se alimenta a 3.3V, nada cambiaría porque el convertidor ADC de forma predeterminada usa el voltaje de suministro y los números de ADC no cambian.
Para probar el programa, al no tener un teclado de este tipo, lo construí con teclas recicladas, la siguiente figura muestra mi prototipo. El conector derecho de 5 pines se utiliza para conectarlo a Arduino.
Código
- Analog4x3Keybf.ino
Analog4x3Keybf.ino Arduino
Programa simple para probar la función KeyPad ()/ * programa Analog4x3Keybf * prueba para teclado de 4x3 teclas con 3 salidas analógicas * G. Carrera - 19/11/2018 * /// límites de valores de salida del teclado:const int NADCm100 [4 ] ={923,669,412,156}; const int NADCp100 [4] ={1123,869,612,356}; const char key [13] ={'1', '4', '7', 'C', '2', '5' , '8', '0', '3', '6', '9', 'E'}; int keyval [3]; int i, colp, val; void setup () {Serial.begin (9600); // usado con el monitor serial} void loop () {char k; k =KeyPad (); // leer el teclado if (k! ='N') {// se presionó una tecla Serial.print ("key ="); Serial.println (k); retraso (500); }} / ******** Funciones utilizadas por el programa ******** / char KeyPad () {// leer el teclado y devolver la tecla char // key ='N' para ninguna KeyScan (); // leer el teclado analógico if (keyval [0] + keyval [1] + keyval [2] <40) {return 'N'; } else {// se presionó una tecla delay (10); // antibounce KeyScan (); // releer el teclado analógico para (i =0; i <3; i ++) {// identificar a qué columna pertenece if (keyval [i]> 40) {colp =i; val =keyval [i]; // este es el valor correspondiente para (int j =0; j <4; j ++) {// identifica qué tecla se presionó en la columna if (val> =NADCm100 [j] &&keyval <=NADCp100 [j]) {tecla de retorno [colp * 4 + j]; descanso; }}}}}} void KeyScan () {// leer teclado analógico keyval [0] =analogRead (A0); retraso (1); keyval [1] =analogRead (A1); retraso (1); keyval [2] =analogRead (A2); retraso (1); }
Esquemas
Proceso de manufactura
- Excel para animaciones de matriz de LED RGB WS2812
- Alerta de sed Alarma de planta
- Reloj Word en italiano
- Medidor de kWh Sigfox
- Monitor de temperatura Bluetooth
- Bloqueo controlado por gestos
- El IC complementario
- Adaptador MIDI USB
- Una entrada analógica aislada para Arduino
- Visualizador de espectro de audio RGB de 32 bandas
- Mide tu tiempo de reacción