Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Bespaar Arduino-pins: Sluit een 4x3-toetsenblok aan met slechts 3 verbindingen

Onderdelen en benodigdheden

Arduino UNO 1
4x3 matrix 12-toets keypad 1
Weerstand 330Ω 1
Weerstand 1kΩ 3
Weerstand 3kΩ 1

Benodigde tools

  • Solderbout

Apps en online diensten

  • Arduino IDE

Over dit project

Inleiding

Een standaard 4x3-matrix-keypad vereist 4+3 = 7 digitale pinnen. Op een Uno of Nano is dat veel. Dit project reduceert dat tot 3 analoge ingangen met een slimme weerstandsladder.

Mijn oplossing

Elke kolom heeft een eigen weerstandsladder (R5=R6=R7=1kΩ). De rijen hebben verschillende weerstanden: R1=0Ω (draad), R2=330Ω, R3=1kΩ, R4=3kΩ. Wanneer een toets wordt ingedrukt, ontstaat een spanningsdeler met een unieke spanning per toets per kolom.

De resulterende ADC-waarden (0–1023) liggen ver uit elkaar, zelfs met 5% tolerante weerstanden:

  • Rij 1 (R1=0): ~1023 (5V)
  • Rij 2 (330Ω): ~669–869
  • Rij 3 (1kΩ): ~412–612
  • Rij 4 (3kΩ): ~156–356
  • Geen toets: 0V

Met een extra analoge ingang en weerstand kan dit uitgebreid worden naar 4x4.

Arduino-aansluiting

Kolom 1 → A0, Kolom 2 → A1, Kolom 3 → A2. (Pinnen vrij te kiezen, mits analoge ingang).

Ik bouwde een prototype met gerecycled toetsen en een 5-pins connector. Werkt perfect.

Code

Analog4x3Keybf.ino – Testprogramma

/* Analog4x3Keybf - test 4x3 keypad met 3 analoge uitgangen
 * G. Carrera - 19/11/2018
 */

const int NADCm100[4] = {923, 669, 412, 156}; // ondergrenzen
const int NADCp100[4] = {1123, 869, 612, 356}; // bovengrenzen
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);
}

void loop() {
  char k = KeyPad();
  if (k != 'N') {
    Serial.print("toets = ");
    Serial.println(k);
    delay(500);
  }
}

char KeyPad() {
  KeyScan();
  if (keyval[0] + keyval[1] + keyval[2] < 40) return 'N'; // niets ingedrukt
  delay(10); // anti-bounce
  KeyScan();
  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);
}

Schema

Zie schematische tekening: 3 kolommen, elk met R5/R6/R7 (1kΩ) naar GND. Rijen: R1 (draad), R2 (330Ω), R3 (1kΩ), R4 (3kΩ) naar 5V. Kolom-uitgangen naar A0, A1, A2.

Productieproces

  1. Bouw en programmeer 8x8 & 16x16 WS2812 RGB LED-matrix animaties met Arduino en Excel
  2. Slimme Plantenalarmer – DIY Sensor voor Optimale Hydratatie
  3. Bouw een Italiaanse Woordklok met Arduino Nano, NeoPixel, LCD en RTC
  4. Bouw een Betrouwbare Sigfox kWh Meter met Arduino MKR Fox 1200
  5. Bluetooth Temperatuurmeter met Arduino Nano
  6. Contactloos Gebaarslot: Veilige toegang met APDS-9960 en Arduino
  7. Arduino Nano Companion Kit – Essentiële Componenten & Hulpmiddelen voor DIY Electronica
  8. USB MIDI Adapter Kit voor Arduino Micro / Leonardo – Complete Onderdelenlijst
  9. Geïsoleerde analoge ingangsschakeling voor Arduino bouwen
  10. RGB 32-band audio-spectrumvisualisator – Arduino LED-matrixproject
  11. Precisie Reactietijd Test met Arduino UNO