6. PROYEK KEYPAD DENGAN MICROCONTROLLER ARDUINO
Keypad merupakan salah satu jenis perangkat input-an berupa angka atau huruf. Terdapat beberapa jenis keypad yang bisa diimplementasikan pada Arduino, antara lain: keypad membrane, keypad plastik dan capacitive touch. Khusus keypad membrane dan plastik memiliki cara kerja yang sama, sehingga pemrogramannya pun sama.
6.1 Keamanan Pintu Menggunakan
Password (Door Lock Solenoid, Keypad Membrane & LCD)
Proyek ini bertujuan untuk membuat keamanan pintu (door lock) dengan memanfaatkan solenoid yaitu slot grendel yang diaktifkan oleh magnet listrik Solenoid di-drive oleh transistor darlington TIPI 20 berjenis NPN sebagai penguatan. Jika Anda sulit mendapatkan transistor TIP120 maka Anda dapat menggantinya dengan transistor darlington TIP142 atau yang sejenisnya.
Solenoid secara default bernilai LOW, berarti ujung slot grendel pada kondisi maju atau kondisi mengunci. Ketika solenoid menerima nilai HIGH maka ujung slot grendel akan tertarik ke dalam atau dalam kondisi terbuka.
Skenario proyek adalah bagaimana membuka dan mengunci slot grendel solenoid dengan cara menuliskan password melalui keypad membrane dan input keypad ditampilkan ke layar LCD 12C. Jika password yang dituliskan benar maka ujung solenoid akan ditarik ke dalam atau terbuka, sebaliknya jika password salah maka pesan kesalahan akan ditampilkan pada layar LCD, sekaligus membunyikan speaker (Buzzer) dan slot solenoid tetap dalam kondisi terkunci atau ujungnya maju ke depan. Perhatikan flowchart pada Gambar 6.8.
Gambar 6.8 Flowchart Keamanan Pintu Solenoid
Kebutuhan Bahan
Bahan | Jumlah | Nilai | Keterangan | |||
Jack Socket DC | 1 pcs | ![]() ![]() |
||||
Power supply DC | 1 pcs | 12 Volt | ![]() ![]() |
|||
Solenoid 12 Volt | 1 pcs | ![]() ![]() |
||||
Diode | 1 pcs | 1 N4002 | ![]() ![]() |
|||
Resistor | 1 pcs | 1K Ohm | ||||
Transistor Darlington NPN | 1 pcs | TIPI 20 / TIPI 42 | ![]() ![]() |
|||
Buzzer Piezo 5 Volt | 1 pcs | ![]() ![]() |
||||
Keypad Membrane | 1 pcs | 4X4 | ![]() ![]() |
|||
LCD 1602 Module
LCM1602 Module |
1 pcs | ![]() ![]() |
Proyek ini membutuhkan library Keypad.h yang dapat di downoad di https;LZ github.com/Nullkraft/Keypad dan library LiquidCrystal_12C.h (sudah terinstall pada proyek sebelumnya). Kemudian instal library tersebut dari menu Sketch Include Library Add .ZIP Library seperti cara sebelumnya.
Kode Program
#include <Wire.h>
#include <LiquidCrystal_I2C.h> #include <Keypad.h> #defne lebarPassword 7 // Inisialisasi library // Atur alamat LC pada Bx27 untuk tampilan LCD 16 karakter 2 baris LiquidCrystal_I2C lcd(0x27, 16, 2); char Data[lebarpassword];// 6 is the number of chars it can hold + the null char=7 char Master[lebarPassword] = “123456”; // Password (bisa diganti dengan yang lain) byte data_count = 0, master_count =0; bool Password_Benar; int pinSolenoid = 11; // Solenioid dihubungkan dengan pin 11 Arduino int pinBuzzer = 13; // Buzzer dihubungkan dengan pin 13 Arduino const byte ROWS=4; const byte COLS=4; // Keypad ukuran 4X4 char hexaKeys[ROWS][COLS]={ {‘1’, ‘2’, ‘3’, ‘A’}, {‘4′,’5’, ‘6’, ‘B’}, {,’,6,’,8,'<L,} {*’,’@’,“#’,’D’} }; // Menghubugkan dengan Pin Arduino byte rowPins[ROWS]={9, 8,7,6}; byte colpins[COLS] ={5,4,3,2}; // Inisialisasi keypad keypad custonkeypad = Keypad(makeKeymap(hexaKeys),rowPins,colPins, ROWS, COLS); void setup(){ pinMode(pinSolenoid, OUTPUT); digitalwrite(pinSolenoid, LOw);// solenoid normal mengunci pinMode(pinBuzzer, OUTPUT) ; lcd.init(); // Inisialisasi LCD { lcd.backlight(); // Menghidupkan backlight void loop() { lcd.setCursor(0,0); lcd.print(“Password :”);// tampilkan di LCD char customKey = customKeypad.getKey(); // mendapatkan nilai tombol keypad if (customKey) // Memastikan jika tombol keypad ditekan {Data[data_count]= customKey;// Menyimpan karakter ke array lcd.setCursor(data_count, 1); // Menggerakkan kursor untuk menunjukkan penambahan karakter baru lcd.print(Data[data_count]); // Mencetak karakter data_count++; // Penambahan data array dengan 1 // Jika index array sama dengan jumlah karakter yang diharapkan maka banding-kan dengan master if (data_count ==lebarPassword-1) { lcd.clear(); lcd.setCursor(0, 0); lcd.print(“Password : “); // Bandingkan nilai keypad dengan password (6 digit =”123456”) if (strcmp(Data, Master)) { // Jika password salah digitalwrite(pinSolenoid, LOW); // Solenoid normal mengunci lcd.setCursor(0,1); lcd.print(“Password Salah”); // Pesan password salah ke LCD // Bunyikan buzzer jika salah tone(pinBuzzer, 1000); // Kirim siganal suara 1KHz delay(1000); noTone(pinBuzzer); delay(1000); } else{ // Jika password salah digitalwrite(pinSolenoid, HIGH); // Solenoid membuka (menarik ujung sole-noid ke dalam) lcd.setCursor(0, 1); lcd.print(“Password Benar”); // Pesan password benar ke LCD } delay(3000); lcd.clear(); clearData(); } } void clearData() { while (data_count !=0){ Data[data_count–] = 0; // Bersihkan array untuk password baru } return; { |
6.2 Capacitive Touch TTP229 16 Channel
Keypad sentuh kapasitif 16 tombol ini didasarkan pada sensor dengan penginderaan akurat hingga 16 titik. Keypad solid state yang ya tahan terhadap lingkungan berdebu, cocok untuk kebutuhan teknis lapangan yang ekstrem.
Proyek keypad capacitive touch ini membutuhkan library TTP229.h yang dapat i-download di https://github.com/Arduin012/ttp229-Arduino dan library LiquidCrystal_12C.h (sudah terinstall pada proyek sebelumnya). Kemudian nstal library tersebut dari menu Sketch -> Include Library Add .ZIP Library Arduino seperti cara sebelumnya.
Gambar 6.10 Instlasi library TTP229
Bahan | Jumlah | Nilai | Keterangan |
Capacitive Touch Keypad | 1 pcs | TTP229 | ![]() ![]() |
LCD 16×2 Module +LCM1602 I2C | 1 pcs | ![]() ![]() |
Pin SCL dan pin SDO sensor touch dihubungkan ke Pin D2 dan pin D3 Arduino. Pin VCC dan GND sensor touch dihubungkan ke tegangan 5V dan GND Arduino. Jumper atau hubungkan singkat pada PI (pin 3 dan pin 4) dan P2 (pin 5) seperti tampak pada diagram sketch di atas.
Kode Program
#include <Wire.h>
#include <LiquidCrystal_I2C.h> #include <TTP229.h> #define pinSCL 2// Hubungkan pin SCL TTP229 ke pin 2 Arduino #define pinSDo 3 // Hubungkan pin SDO TTP229 ke pin 3 Arduino LiquidCrystal_I2C lcd(0x27,16,2); TTP229 sensorTouch(pinSCL,pinSDO); // Instansiasi objek sensor int old =0; void setup() { Serial.begin(9600); pinMode(pinSCL, OUTPUT); pinMode(pinSDO, INPUT); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print(“Angka :”); } void loop(){ int Key = getkey(); if(Key!=0&Key!= old) { Serial.print(“TEKAN —>“); Serial.print1n(Key); lcd.clear(); lcd.setCursor(0,1); lcd.print(“Tombol Angka: “ + String(Key)); } old=Key; } byte getkey(void) { byte cnt; byte num=0; for(cnt=1;cnt<17; cnt++) { digitalwrite(pinSCL, LOW); if (digitalRead(pinSDO) ==0) num=cnt; digitalwrite(pinSCL,HIGH); } return num; } |
Jika program tersebut dijalankan maka akan dihasilkan dua output ketika capasitive touch disentuh, yaitu menampilkan angka ke serial monitor dan ke LCD, seperti tampak pada Gambar 6.8.
Gambar 6.11 Menampilkan Angka Sesuai Penekanan Tombol Capacitive. Angka yang muncul sesuai dengan tombol yang disentuh
6.3 Capacitive Touch Sensor Catalex TTP223
Sensor sentuh catalex TTP223 adalah contoh lain dari capacitive touch, bentuknya sederhana karena hanya membutuhkan satu tombol untuk menggunakannya. Sensor catalex TTP223 terdiri dari 3 pin, antara lain SIG (signal output), VCC (dihubungkan dengan tegangan positive Arduino) dan GND (dihubungkan dengan GND Arduino) seperti tampak pada Gambar 6.12
Aktif atau tidaknya sensor ditentukan oleh nilai HIGH dan Low pin Proyek kali ini cukup sederhana yaitu menghidupkan dan mernatikan sekaligus menampilkan tulisan “LED Hidup” dan “LED Mati” pada saat sensor disentuh. Prinsip kerjanya sama dengan penggunaan saklar push botton pada proyek sebelumnya
Bahan | Jumlah | Nilai | Keterangan |
Modul Sensor Capacitive Touch Catalex | 1 pcs | ![]() ![]() |
|
Modul OLED (0.96″) | 1 pcs | ![]() ![]() |
Diagram Sketch
Kode Program
#include <SPI.h>
#include <Wire.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #include <Adafruit_TFTLCD.h> #define pinLED 2 #define pinTouch 3 #define OLED_RESET 4 Adafruit_SSD1306 display(OLED_RESET); void setup() { pinMode(pinLED, OUTPUT); pinMode(pinTouch, INPUT); digitalwrite(pinLED, LOW); display.begin(SSD1306_SWITCHCAPVCC, øxЗC); // inisialisasi OLED 128×64 atau 0.96” display.clearDisplay(); // Bersihkan layar OLED display.setTextColor(BLACK, WHITE); // Background teks inverse display.setCursor(26, 14); // Posisi koordinat tulisan (x,y) display.println(“SENTUH AKU!”); // Cetak tulisan display.display(); // buffer setting delay(3000); // tunda 3 detik } void loop(){ int val = digitalRead(pinTouch); if(val == HIGH){ digitalwrite(pinLED, HIGH); display.clearDisplay(); display.setTextColor(WHITE); display.setCursor(26, 5); display.println(“SENTUH AKU!”); display.setCursor(20,15); display.println(“— LED HIDUP —”); display.display(); } else { digitalwrite(pinLED, LOW); display.clearDisplay(); display.setTextColor(WHITE); display.setCursor(26, 5); display.println(“SENTUH AKU!”); display.setCursor(26, 15); display.println(“LED MATI”); dísplay.display(); } } |
Hasil akhir proyek tampak pada Gambar 6.13 dan Gamar 6.14