Arduino-Pins sparen: 4x3 Tastenfeld mit nur 3 Anschlüssen verbinden
Komponenten und Materialien
| Widerstand 330 Ohm | 1 |
| Widerstand 1k Ohm | 3 |
| Widerstand 3k Ohm | 1 |
| 4x3 Matrix 12-Tasten Keypad | 1 |
| Arduino UNO | 1 |
Benötigte Werkzeuge und Maschinen
- Lötkolben (allgemein)
Apps und Online-Dienste
- Arduino IDE
Über dieses Projekt
Einführung
Ziel: Deutliche Reduzierung der für ein numerisches Tastenfeld benötigten Pins. Oft braucht man mehr I/O-Pins als auf Arduino Uno oder Nano verfügbar sind.
Gewöhnliche numerische Tastenfelder sind als Matrix aufgebaut: Ein 4x3 Keypad benötigt 4+3 = 7 digitale Arduino-Pins. Viele Bibliotheken dafür existieren.
Meine Lösung
Deutlich besser: Nur drei analoge Eingänge werden benötigt, mit der Schaltung aus der folgenden Abbildung.
Für jede Spalte gibt es nur 4 Spannungswerte (entsprechend den 4 Tasten) plus 0V wenn keine Taste gedrückt ist. Im Ersatzschaltbild (b) steht R1e für einen der vier Widerstände R1-R4, R2e für einen der drei Widerstände R5-R7.
Ziel: Vier größtmögliche Spannungsintervalle schaffen. Zunächst R2e = R5 = R6 = R7 gleich setzen. Dann R1 = 0 für 5V-Ausgang bei erster Zeile.
Mit R2=330 Ohm, R3=1k Ohm, R4=3k Ohm und R5,R6,R7=1k Ohm ergeben sich folgende Intervalle pro Ausgang:
(Bild zeigt die Intervalle – sie sind maximal und nutzen 6 Standardwiderstände mit ±5% Toleranz. Mit einem zusätzlichen analogen Eingang und weiterem Widerstand lässt sich ein 4x4-Tastenfeld realisieren.)
Die folgende Abbildung zeigt die Arduino-Verkabelung. Im Schaltplan ist R1 an Leitung 2 angeschlossen (Leitung 1 hat Drahtbrücke, daher Referenzen um 1 verschoben). Pin-Belegung kann angepasst werden, solange Pins als analog konfigurierbar sind.
Bei 3,3V Arduino-Versorgung ändert sich nichts: ADC nutzt standardmäßig Versorgungsspannung, ADC-Werte bleiben gleich.
Zum Testen (kein solches Tastenfeld vorhanden) baute ich es aus recycelten Tasten – Bild zeigt Prototyp. 5-poliger rechter Stecker für Arduino-Verkabelung.
Code
Analog4x3Keybf.ino
/* program Analog4x3Keybf
* Test für 4x3 Tasten-Tastatur mit 3 analogen Ausgängen
* G. Carrera - 19/11/2018
*/
// Grenzwerte der Tastatur-Ausgangswerte:
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); // Für Serial Monitor
}
void loop() {
char k = KeyPad(); // Tastatur auslesen
if (k != 'N') { // Taste gedrückt
Serial.print("key = ");
Serial.println(k);
delay(500);
}
}
/******** Funktionen ********/
char KeyPad() {
KeyScan(); // Analoge Tastatur einlesen
if (keyval[0] + keyval[1] + keyval[2] < 40) {
return 'N'; // Keine Taste
} else {
delay(10); // Entprellen
KeyScan(); // Erneut einlesen
for (i = 0; i < 3; i++) {
if (keyval[i] > 40) {
colp = i;
val = keyval[i];
for (int j = 0; j < 4; j++) {
if (val >= NADCm100[j] && val <= NADCp100[j]) {
return key[colp * 4 + j];
}
}
}
}
}
return 'N';
}
void KeyScan() {
keyval[0] = analogRead(A0); delay(1);
keyval[1] = analogRead(A1); delay(1);
keyval[2] = analogRead(A2); delay(1);
}
Schaltplan
Schaltplan als Bild verfügbar (siehe Originalprojekt).
Herstellungsprozess
- 8×8 & 16×16 WS2812 RGB LED-Matrix Animationen mit Arduino und Excel programmieren
- Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
- Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
- Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200
- Bluetooth-Temperaturmonitor mit Arduino Nano
- Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
- Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
- USB-MIDI-Adapter für Arduino Micro / Leonardo – Komplettes Bauteil-Kit & Code
- Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
- Präziser Reaktionszeit-Test mit Arduino UNO