Komponen · 4 mnt baca

Cara Memakai Keypad: Kunci Password 4x4 dengan Arduino

Bagaimana cara kerja keypad matriks? Pengkabelan keypad 4x4 dan 3x4, pemindaian baris-kolom, library Keypad, membaca tombol, input password dan kunci password dengan servo, pemakaian dengan LCD, plus ESP32 dan Pico.

Keypad adalah perangkat input murah, mirip tombol di telepon, yang memungkinkanmu memasukkan angka atau huruf ke proyekmu. Kunci pintu berpassword, brankas, kalkulator, panel alarm, dan sistem menu dibuat dengan keypad. Model yang paling umum adalah keypad membran tipis dengan bagian belakang berperekat, dalam susunan 4x4 (16 tombol) dan 3x4 (12 tombol).

Keypad membran 4x4
Keypad membran 4x4: angka 0–9, huruf A–D, serta tombol * dan #; kabel pita di bagian bawah punya 8 pin.

Bagaimana cara kerja keypad? Matriks baris-kolom

Kalau setiap tombol dari 16 tombol punya pin sendiri, kamu butuh 16 pin. Sebagai gantinya, keypad menyusun tombolnya dalam matriks: ada 4 baris dan 4 kolom, setiap tombol berada di persilangan satu baris dan satu kolom, dan menekannya menyambungkan baris itu dengan kolom itu. Arduino membuat baris menjadi LOW satu per satu lalu membaca kolomnya; kolom mana pun yang terbaca LOW ketika baris tertentu LOW menunjukkan tombol mana yang ditekan. Karena pemindaian ini terjadi ratusan kali per detik, 16 tombol bisa dibaca hanya dengan 8 pin.

JenisTombolPinPemakaian umum
Membran 4x416 (0–9, A–D, *, #)8Password, menu, kalkulator
Membran 3x412 (0–9, *, #)7Input angka seperti keypad telepon
Membran 1x445Menu sederhana dan tombol pilihan

Pinout dan pengkabelan keypad

Dengan tombol menghadapmu, pin kabel pita biasanya dari kiri ke kanan adalah R1, R2, R3, R4, C1, C2, C3, C4: empat pertama adalah baris dan empat terakhir adalah kolom. Tidak perlu resistor tambahan; library memakai resistor pull-up internal Arduino untuk kolomnya.

Pin keypadFungsiArduino Uno
1R1 (1, 2, 3, A)D9
2R2 (4, 5, 6, B)D8
3R3 (7, 8, 9, C)D7
4R4 (*, 0, #, D)D6
5C1 (1, 4, 7, *)D5
6C2 (2, 5, 8, 0)D4
7C3 (3, 6, 9, #)D3
8C4 (A, B, C, D)D2
Kalau menekan 1 menghasilkan D dan menekan 4 menghasilkan C, urutan baris dan kolomnya terbalik. Daripada mengubah kabel, cukup balik urutan larik rowPins dan colPins di kode.

Membaca tombol dengan library Keypad

Di Library Manager, cari Keypad dan instal library buatan Mark Stanley dan Alexander Brevig. Kode di bawah mencetak setiap tombol yang kamu tekan ke Serial Monitor:

C++ (Arduino IDE)
1#include <Keypad.h>
2
3const byte ROWS = 4, COLS = 4;
4char keys[ROWS][COLS] = {
5  {'1', '2', '3', 'A'},
6  {'4', '5', '6', 'B'},
7  {'7', '8', '9', 'C'},
8  {'*', '0', '#', 'D'}
9};
10byte rowPins[ROWS] = {9, 8, 7, 6};     // R1–R4
11byte colPins[COLS] = {5, 4, 3, 2};     // C1–C4
12Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
13
14void setup() {
15  Serial.begin(9600);
16}
17
18void loop() {
19  char key = keypad.getKey();          // tuş yoksa 0 döner / returns 0 if no key
20  if (key) {
21    Serial.println(key);
22  }
23}

getKey() tidak memblokir programmu: kalau tidak ada tombol yang ditekan pada momen itu, fungsi ini langsung mengembalikan 0, jadi kamu bisa mengerjakan hal lain di loop(). Library menangani pantulan tombol sendiri dan melaporkan setiap tekanan hanya sekali. Kalau ingin menunggu sampai ada tombol yang ditekan, pakai waitForKey().

Membuat kunci password

Sekarang mari kumpulkan tombol yang ditekan dalam sebuah string lalu bandingkan dengan password yang tersimpan. Tombol * menghapus input dan tombol # mengonfirmasinya. Kalau password-nya benar, motor servo membuka kunci selama 3 detik. Untuk pengkabelan servo, baca Apa Itu Motor Servo?

C++ (Arduino IDE)
1#include <Keypad.h>
2#include <Servo.h>
3
4const byte ROWS = 4, COLS = 4;
5char keys[ROWS][COLS] = {
6  {'1', '2', '3', 'A'},
7  {'4', '5', '6', 'B'},
8  {'7', '8', '9', 'C'},
9  {'*', '0', '#', 'D'}
10};
11byte rowPins[ROWS] = {9, 8, 7, 6};
12byte colPins[COLS] = {5, 4, 3, 2};
13Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
14
15Servo lock;
16const String PASSWORD = "1234";
17String input = "";
18
19void setup() {
20  Serial.begin(9600);
21  lock.attach(10);
22  lock.write(0);                        // kilitli / locked
23}
24
25void loop() {
26  char key = keypad.getKey();
27  if (!key) return;
28  if (key == '*') {                     // temizle / clear
29    input = "";
30  } else if (key == '#') {              // onayla / confirm
31    if (input == PASSWORD) {
32      Serial.println("Doğru, açılıyor / correct, opening");
33      lock.write(90);
34      delay(3000);
35      lock.write(0);
36    } else {
37      Serial.println("Yanlış şifre / wrong code");
38    }
39    input = "";
40  } else if (input.length() < 8) {
41    input += key;
42    Serial.print('*');                  // tuşu gizle / hide the key
43  }
44}
Kunci ini untuk belajar dan proyek hobi. Untuk pintu sungguhan, tambahkan masa blokir setelah beberapa kali salah, simpan password di EEPROM alih-alih sebagai teks biasa di kode, dan letakkan elektroniknya di tempat yang tidak bisa dijangkau dari luar.

Memakainya dengan LCD

Layar membuatmu jauh lebih mudah melihat apa yang sedang kamu lakukan ketika memasukkan password. LCD I2C hanya memakai pin A4 dan A5, jadi tidak mengganggu 8 pin digital keypad. Cetak satu bintang di baris bawah LCD setiap kali tombol ditekan, lalu tampilkan “Terbuka” atau “Salah” di baris atas setelah konfirmasi. Pengkabelan dan perintah layar dibahas di Cara Memakai Layar LCD I2C.

Lebih sedikit pin: keypad I2C dan analog

Keypad saja sudah memakan 8 dari 20 pin Uno. Ketika pinmu kurang, ada dua solusi: adaptor keypad I2C berbasis PCF8574 mengurangi keypad menjadi hanya dua kabel dan berbagi bus dengan LCD. Pada keypad analog, setiap tombol menghasilkan hambatan yang berbeda dan seluruh keypad dibaca dari satu pin analog; kabelnya lebih sedikit, tetapi tidak bisa mendeteksi dua tombol yang ditekan bersamaan.

Keypad dengan ESP32 dan Raspberry Pi Pico

Library Keypad juga bekerja di ESP32. Karena pin baris dipakai sebagai output dan pin kolom sebagai input dengan pull-up, hindari GPIO 34–39, yang tidak bisa menjadi output dan tidak punya resistor pull-up; misalnya, pilih 13, 12, 14, dan 27 untuk baris serta 26, 25, 33, dan 32 untuk kolom. Di Pico dengan MicroPython, pemindaiannya bisa kamu tulis sendiri dalam beberapa baris:

MicroPython
1from machine import Pin
2import time
3
4KEYS = ["123A", "456B", "789C", "*0#D"]
5rows = [Pin(n, Pin.OUT, value=1) for n in (2, 3, 4, 5)]        # R1–R4
6cols = [Pin(n, Pin.IN, Pin.PULL_UP) for n in (6, 7, 8, 9)]     # C1–C4
7
8def scan():
9    for r, row in enumerate(rows):
10        row.value(0)                         # bu satırı etkinleştir / activate this row
11        for c, col in enumerate(cols):
12            if col.value() == 0:             # tuş basılı / key pressed
13                row.value(1)
14                return KEYS[r][c]
15        row.value(1)
16    return None
17
18last = None
19while True:
20    key = scan()
21    if key and key != last:                  # her basışı bir kez yaz / print each press once
22        print(key)
23    last = key
24    time.sleep_ms(50)

Ide proyek keypad

  • Brankas berpassword: kotak yang terbuka ketika kodenya dimasukkan, dengan motor servo, LCD, dan buzzer.
  • Kalkulator: pakai tombol A–D sebagai empat operasi hitung dan tampilkan hasilnya di LCD.
  • Pemilih warna: ganti warna LED RGB berdasarkan angka yang dimasukkan.
  • Panel alarm: aktifkan dan nonaktifkan alarm dengan sensor PIR memakai kode.
  • Game tebak angka: temukan angka yang dipilih Arduino dengan petunjuk “lebih besar” dan “lebih kecil”.
  • Keyboard pintasan: ubah setiap tombol menjadi pintasan komputer dengan Arduino Leonardo.

Kesalahan umum dan cara mengatasinya

  • Tombol yang terbaca berbeda dengan yang ditekan: urutan baris dan kolom terbalik; balik urutan larik rowPins dan colPins.
  • Tidak ada tombol yang terbaca sama sekali: kabel pita terpasang bergeser satu pin, atau pin baris dan kolomnya berbeda dengan yang ada di kode.
  • Beberapa tombol tidak pernah berfungsi: kabel baris atau kolom kontaknya buruk; kalau semua tombol di satu baris atau kolom gagal, itulah tandanya.
  • Memakai pin 0 dan 1: pin ini untuk komunikasi serial USB; upload kode dengan keypad tersambung bisa gagal.
  • Beberapa kolom selalu tampak ditekan di ESP32: yang dipakai GPIO 34–39, yang tidak punya pull-up; pindah ke pin lain.
  • Mengharapkan pengulangan ketika tombol ditahan lama: getKey() melaporkan setiap tekanan sekali; pakai status HOLD dari library untuk mendeteksi tombol yang ditahan.

Keypad sebenarnya hanyalah tombol-tombol yang disusun dalam matriks; logika tombol bisa kamu temukan di Cara Menghubungkan Push Button ke Arduino. Di aplikasi BlueGrays ada dasar-dasar keypad 3x4 dan 4x4, aplikasi password dengan LCD, brankas elektronik pintar, kalkulator I2C, dan kontrol LED RGB dengan keypad, lengkap dengan skema rangkaian dan kode.

Pertanyaan umum

Berapa pin yang dipakai keypad 4x4?

Keypad 4x4 memakai 8 pin: 4 baris dan 4 kolom. Keypad 3x4 memakai 7 pin dan keypad 1x4 memakai 5. Kalau pinmu kurang, kamu bisa menguranginya menjadi 2 kabel dengan adaptor keypad I2C, atau satu pin analog dengan keypad analog.

Apakah keypad butuh resistor?

Tidak. Library Keypad mengaktifkan resistor pull-up internal Arduino di pin kolom, jadi kamu tidak perlu menambahkan resistor apa pun. Keypad bisa dihubungkan langsung ke pin digital.

Ke pin mana keypad sebaiknya dihubungkan?

Bisa ke 8 pin digital mana saja; pin analog juga bisa dipakai sebagai digital. Di Uno, hindari pin 0 dan 1, yang dipakai untuk komunikasi serial USB. Di ESP32, jangan pakai GPIO 34–39, yang tidak bisa menjadi output dan tidak punya resistor pull-up.

Bisakah dua tombol yang ditekan bersamaan dideteksi?

Bisa, fungsi getKeys() di library Keypad mendeteksi sampai 10 tombol yang ditekan sekaligus. Namun pada keypad membran tanpa dioda, beberapa kombinasi tiga tombol bisa membuat sebuah tombol tampak ditekan padahal tidak (ghosting).

Kalau password diganti, apakah akan hilang setelah listrik padam?

Password yang disimpan di variabel kembali ke nilai bawaan di kode ketika Arduino restart. Kalau ingin password baru tetap tersimpan, simpan ke EEPROM dan baca kembali dari EEPROM ketika mulai.

Seberapa awet keypad membran?

Keypad membran biasanya bertahan sekitar 1 juta tekanan per tombol, dan karena tipis dan ringan, mudah ditempel di kotak atau tutup. Keypad ini tidak sepenuhnya terlindung dari air dan debu; di luar ruangan, keypad dengan tombol logam atau silikon lebih dipilih.

Lihat semua proyek
Menggunakan Keypad 3x4
#61Pemula

Menggunakan Keypad 3x4

Arduino langsung tahu tombol mana yang kamu tekan di keypad 12 tombol yang mirip tombol telepon, lalu menuliskannya di layar komputermu. Angka-angka serta tombol bintang dan pagar tersusun dalam kisi

4.5(24)
31
Kendali LED dengan Keypad 3x4
#62Menengah
Premium

Kendali LED dengan Keypad 3x4

Dengan keypad seperti di telepon, kamu mengendalikan tiga lampu terpisah. Tombol 1, 2, dan 3 menyalakan LED hijau, biru, dan kuning, tombol 4, 5, dan 6 mematikan lampu yang sama, tombol bintang menyal

4.6(29)
38
Menggunakan Keypad 4x4
#63Pemula
Premium

Menggunakan Keypad 4x4

Di keypad 4x4, yang mirip sekali dengan tombol telepon, Arduino langsung tahu tombol mana yang kamu tekan dan menuliskannya ke layar komputermu. Selain angka, keypad ini juga mengenali huruf A, B, C,

4.5(27)
35
Kunci Sandi dengan Keypad 4x4 dan LCD
#64Mahir
Premium

Kunci Sandi dengan Keypad 4x4 dan LCD

Kunci pintu elektronik kecil yang menahan siapa pun yang tidak tahu kodenya. Kamu menekan tombol pagar lalu mengetik kodenya di keypad; jika benar, layar menulis akses diberikan, LED hijau menyala, da

4.8(59)
75
Keyboard Developer Arduino
#65Menengah
Premium

Keyboard Developer Arduino

Kalau kamu lelah mengetik baris yang sama berulang-ulang ketika ngoding, keypad kecil ini menjadi keyboard pintasanmu. Ketika dicolokkan ke komputer, Arduino Leonardo memperkenalkan dirinya sebagai ke

4.7(40)
52
Brankas Elektronik Pintar
#92Mahir
Premium

Brankas Elektronik Pintar

Brankas kecil untuk barang berhargamu yang terbuka dengan kode. Kamu mengetik kode empat digitmu di keypad; jika benar, motor servo membuka kunci, lampu hijau menyala, dan layar menampilkan keadaan br

4.7(42)
63
Kalkulator I2C Arduino
#94Menengah
Premium

Kalkulator I2C Arduino

Proyek kalkulator berbasis Arduino yang melakukan penjumlahan, pengurangan, perkalian, dan pembagian memakai keypad membran 4x4 dan layar LCD I2C 16x2. Berkat I2C, sambungan layar hanya butuh 2 kabel, sehingga kabel tidak semrawut dan lebih banyak pin tetap bebas dipakai. Kalkulator ini juga mendukung input bilangan desimal dan bilangan negatif.

5.0(31)
43