Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

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

Apps und Online-Dienste

Ü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

  1. 8×8 & 16×16 WS2812 RGB LED-Matrix Animationen mit Arduino und Excel programmieren
  2. Smart Thirst Alert: DIY Pflanzen-Alarm für optimale Bewässerung
  3. Italienische Word Clock mit Arduino Nano, NeoPixel, LCD & RTC
  4. Zuverlässiger Sigfox-kWh-Zähler mit Arduino MKR Fox 1200
  5. Bluetooth-Temperaturmonitor mit Arduino Nano
  6. Berührungsloses Gesten-Schloss: Sicherer Zugang mit APDS-9960 & Arduino
  7. Arduino Nano Begleiter-Set – Essentielle Bauteile & Werkzeuge für DIY-Elektronik
  8. USB-MIDI-Adapter für Arduino Micro / Leonardo – Komplettes Bauteil-Kit & Code
  9. Isolierter Analogeingang für Arduino: Spannung/Strom galvanisch trennen
  10. Präziser Reaktionszeit-Test mit Arduino UNO