Hemat Pin Arduino: Hubungkan Keypad 4x3 dengan Hanya Tiga Koneksi
Komponen dan perlengkapan
Resistor 330 ohm
×
1
Resistor 1k ohm
×
3
Resistor 3k ohm
×
1
Switch keypad array kunci 12 4x3 matriks
×
1
Arduino UNO
×
1
Alat dan mesin yang diperlukan
Pakuin solder (umum)
Aplikasi dan layanan online
Arduino IDE
Tentang proyek ini
Pengantar
Tujuan proyek ini adalah untuk secara signifikan mengurangi jumlah pin yang diperlukan oleh keypad numerik. Ini adalah karena kita sering memerlukan banyak pin I/O dibandingkan dengan yang tersedia pada papan Arduino Uno atau Nano.
Keypad numerik biasa terstruktur dalam matriks: keypad 4x3 memerlukan 4+3 pin digital Arduino. Banyak library yang tersedia di internet untuk menggunakannya dengan Arduino.
Solusi Saya
Solusi yang saya usulkan jauh lebih baik karena hanya menggunakan tiga input analog, dengan rangkaian seperti yang ditunjukkan dalam gambar berikut.
Untuk setiap kolom hanya ada 4 nilai tegangan, yang sesuai dengan masing-masing 4 kunci, plus nol volt jika tidak ada kunci yang ditekan. Dalam skema setara (b) R1e menunjukkan salah satu dari empat resistor R1-R4, sementara R2e adalah salah satu dari tiga resistor R5-R7.
Sekarang mari kita lihat cara membuat interval yang lebar mungkin. Pertama-tama resistor R2e = R5 = R6 = R7 dapat dibuat sama, lalu kita dapat mengatur R1 = 0 untuk memiliki keluaran yang sesuai dengan baris pertama pada 5V.
Dengan R2=330 ohm, R3= 1 k ohm, R4= 3 k ohm dan R5, R6, R7= 1 k ohm, interval berikut diperoleh untuk setiap keluaran:
Seperti yang Anda lihat, interval pada ketiga keluaran adalah yang paling lebar yang mungkin dan Anda dapat menggunakan enam resistor standar dengan toleransi ±5%. Dengan input analog tambahan dan resistor lain, keypad 4x4 dapat digunakan dan seterusnya. Gambar berikut menunjukkan koneksi dengan Arduino.
Dalam diagram resistor R1 terhubung ke baris 2 karena yang pada baris 1 digambar dengan kabel, jadi referensi resistor telah diubah skala satu. Penugasan pin dapat dimodifikasi sesuai kebutuhan, asalkan pin dapat dikonfigurasi sebagai analog.
Tentu saja, jika Arduino diberi daya 3.3V, tidak akan berubah apa pun karena konverter ADC secara default menggunakan tegangan pasokan dan angka ADC tidak berubah.
Untuk menguji program, tidak memiliki keyboard jenis ini, saya membuatnya dengan kunci daur ulang, gambar di bawah ini menunjukkan prototipe saya. Kanan konektor 5 pin digunakan untuk menyalurkannya ke Arduino.
Kode
Analog4x3Keybf.ino
Analog4x3Keybf.inoArduino
Program sederhana untuk menguji fungsi KeyPad()
/* program Analog4x3Keybf * test for 4x3 keys keyboard with 3 analog outs * G. Carrera - 19/11/2018 */ // limits of keyboard output values: 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); // used with serial monitor } void loop() { char k; k = KeyPad();// read keypad if (k != 'N'){ // a key was pressed Serial.print("key = "); Serial.println(k); delay(500); } } /******** Functions used by program ********/ char KeyPad(){ // read keypad and return the char key // key = 'N' for none KeyScan();// read analog keyboard if (keyval[0]+keyval[1]+keyval[2] < 40) { return 'N'; } else { // a key was pressed delay(10);// antibounce KeyScan();// reread analog keyboard for (i=0; i < 3; i++){//identify which column it belongs to if (keyval[i] > 40){ colp= i; val= keyval[i];// this is the corresponding value for (int j=0; j < 4; j++){// identify which key was pressed on the column if (val >= NADCm100[j] && keyval <= NADCp100[j]){ return key[colp*4+j]; break; } } } } } } void KeyScan(){// read analog keyboard keyval[0]= analogRead(A0); delay(1); keyval[1]= analogRead(A1); delay(1); keyval[2]= analogRead(A2); delay(1); }