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).

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.
| Jenis | Tombol | Pin | Pemakaian umum |
|---|---|---|---|
| Membran 4x4 | 16 (0–9, A–D, *, #) | 8 | Password, menu, kalkulator |
| Membran 3x4 | 12 (0–9, *, #) | 7 | Input angka seperti keypad telepon |
| Membran 1x4 | 4 | 5 | Menu 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 keypad | Fungsi | Arduino Uno |
|---|---|---|
| 1 | R1 (1, 2, 3, A) | D9 |
| 2 | R2 (4, 5, 6, B) | D8 |
| 3 | R3 (7, 8, 9, C) | D7 |
| 4 | R4 (*, 0, #, D) | D6 |
| 5 | C1 (1, 4, 7, *) | D5 |
| 6 | C2 (2, 5, 8, 0) | D4 |
| 7 | C3 (3, 6, 9, #) | D3 |
| 8 | C4 (A, B, C, D) | D2 |
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:
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?
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}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:
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.
Proyek untuk dibuat setelah membaca ini
Lihat semua proyek
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

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

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,

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

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

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

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.
Artikel lainnya
Aplikasi BlueGrays
Rakit rangkaian ini langkah demi langkah di ponselmu
Skema pengkabelan, kode, dan daftar komponen dalam satu layar. 200+ proyek Arduino, ESP32, dan Pico siap dibuat.
Pindai dengan ponselmu
Arahkan kamera ke kode ini dan toko aplikasi di ponselmu akan terbuka.
atau buka toko aplikasi

