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

Slechts drie pinnen voor een 4x3-toetsenbord

Componenten en benodigdheden

Weerstand 330 ohm
× 1
Weerstand 1k ohm
× 3
Weerstand 3k ohm
× 1
4x3 matrix 12 key array switch-toetsenbord
× 1
Arduino UNO
× 1

Benodigde gereedschappen en machines

Soldeerbout (algemeen)

Apps en online services

Arduino IDE

Over dit project

Inleiding

Het doel van dit project is om het aantal pinnen dat nodig is voor een numeriek toetsenbord aanzienlijk te verminderen. Dit komt omdat we vaak veel I/O-pinnen nodig hebben in vergelijking met de pinnen die beschikbaar zijn op de Arduino Uno of Nanoboards.

De gewone numerieke toetsenborden zijn gestructureerd in matrix:een 4x3 toetsenbord vereist 4+3 Arduino digitale pinnen. Er zijn talloze bibliotheken beschikbaar op het internet om het met Arduino te gebruiken.

Mijn oplossing

De oplossing die ik voorstel is veel beter omdat het slechts drie analoge ingangen gebruikt, met een circuit zoals dat in de volgende afbeelding wordt getoond.

Voor elke kolom zijn er slechts 4 spanningswaarden, overeenkomend met elk van de 4 toetsen, plus nul volt als er geen toets wordt ingedrukt. In het equivalente schema (b) geeft de R1e een van de vier weerstanden R1-R4 aan, terwijl R2e een van de drie weerstanden R5-R7 is.

Laten we nu eens kijken hoe we de vier breedst mogelijke intervallen kunnen maken. Allereerst kunnen de weerstanden R2e =R5 =R6 =R7 gelijk worden gemaakt, dan kunnen we R1 =0 instellen om de uitgangen die overeenkomen met de eerste lijn op 5V te hebben.

Met R2=330 ohm, R3=1 k ohm, R4=3 k ohm en R5, R6, R7=1 k ohm worden de volgende intervallen voor elke uitgang verkregen:

Zoals je kunt zien, zijn de intervallen op de drie uitgangen de grootst mogelijke en kun je zes standaardweerstanden gebruiken met een tolerantie van ±5%. Met een extra analoge ingang en een andere weerstand kan een 4x4 toetsenbord worden gebruikt enzovoort. De volgende afbeelding toont de verbindingen met Arduino.

In het diagram is de weerstand R1 verbonden met lijn 2 omdat degene op lijn 1 deze met een draad heeft getekend, dus de weerstandsreferenties zijn met één geschaald. Pintoewijzingen kunnen naar behoefte worden gewijzigd, zolang ze maar analoog kunnen worden geconfigureerd.

Als Arduino wordt gevoed met 3,3 V, verandert er natuurlijk niets, omdat de ADC-converter standaard de voedingsspanning gebruikt en de ADC-nummers niet veranderen.

Om het programma te testen, zonder een toetsenbord van dit type, heb ik het gebouwd met gerecyclede toetsen, de onderstaande afbeelding toont mijn prototype. De 5-pins rechter connector wordt gebruikt om het op Arduino aan te sluiten.

Code

  • Analog4x3Keybf.ino
Analog4x3Keybf.inoArduino
Eenvoudig programma om KeyPad() functie te testen
/* programma Analog4x3Keybf * test voor 4x3 toetsen toetsenbord met 3 analoge uitgangen * G. Carrera - 19/11/2018 */// limieten van toetsenbord output waarden: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); // gebruikt met seriële monitor}void loop() {char k; k =KeyPad();// lees toetsenbord als (k !='N'){ // een toets is ingedrukt Serial.print("key ="); Serieel.println(k); vertraging (500); }}/******** Functies gebruikt door programma ********/char KeyPad(){// lees toetsenbord en retourneer de char key// key ='N' voor geen KeyScan();// lees analoog toetsenbord als (keyval[0]+keyval[1]+keyval[2] <40) { return 'N'; } else { // er is een toets ingedrukt delay(10);// antibounce KeyScan();// herlees analoog toetsenbord voor (i=0; i <3; i++){//identificeer tot welke kolom het behoort als (keyval [i]> 40){ colp=ik; val=keyval[i];// dit is de corresponderende waarde voor (int j=0; j <4; j++){// identificeer welke toets is ingedrukt in de kolom if (val>=NADCm100[j] &&keyval <=NADCp100[j]){ return key[colp*4+j]; pauze; } } } } }}void KeyScan(){// lees analoog toetsenbord keyval[0]=analogRead(A0); vertraging(1); keyval [1] =analoog lezen (A1); vertraging(1); keyval [2] =analoog lezen (A2); vertraging(1); }

Schema's


Productieproces

  1. Excel voor WS2812 RGB LED-array-animaties
  2. Dorstalarm plantalarm
  3. Italiaanse Word Clock
  4. Sigfox kWh-meter
  5. Bluetooth-temperatuurmeter
  6. Gebarengestuurd slot
  7. The Companion IC
  8. USB MIDI-adapter
  9. Een geïsoleerde analoge ingang voor Arduino
  10. RGB 32-bands audiospectrumvisualizer
  11. Meet je reactietijd