Minggu, 27 September 2026

IMPLEMENTASI SISTEM KEAMANAN BERBASIS PIN 4-DIGIT MENGGUNAKAN ESP32-S3 DAN MOTOR SERVO

 

LAPORAN PRAKTIKUM INTERNET OF THINGS

IMPLEMENTASI SISTEM KEAMANAN BERBASIS PIN 4-DIGIT MENGGUNAKAN ESP32-S3 DAN MOTOR SERVO

 


Disusun oleh:

Ramdani Mulyadi                   24051204137

Naufal Alif Prasetya               24051204126

Syauqi Ihsan Ramadhan        24051204110

Luthfi Fadli Zainuddin            24051204200

 

 

BAB I
PENDAHULUAN

1.1 Latar Belakang

Kunci konvensional pada lemari penyimpanan atau brankas kecil bergantung pada mekanisme mekanis yang dapat digandakan atau dibongkar paksa tanpa meninggalkan jejak digital. Sistem kendali akses berbasis mikrokontroler menawarkan alternatif yang lebih fleksibel karena kode akses dapat diubah kapan saja oleh pengguna tanpa mengganti komponen kunci secara fisik.

Pada praktikum ini, ESP32-S3 dipakai sebagai pengendali sebuah sistem keamanan berbasis PIN 4-digit. Pengguna memasukkan PIN melalui keypad matriks 4×4, sementara layar LCD 16×2 berbasis I2C menampilkan status masukan dan status sistem. Mekanisme penguncian fisik diwakili oleh motor servo yang digerakkan melalui sinyal PWM, bergerak di antara posisi terbuka (0°) dan posisi terkunci (180°).

Sistem bekerja dalam dua keadaan, yaitu keadaan terbuka saat pengguna dapat menetapkan PIN baru, dan keadaan terkunci saat pengguna harus memasukkan kembali PIN yang tersimpan agar servo bergerak membuka kunci. Rangkaian dirancang dan diuji pada simulator Wokwi sehingga sambungan pin, respon keypad, tampilan LCD, dan pergerakan servo dapat diperiksa sebelum diterapkan pada perangkat fisik.

1.2 Rumusan Masalah

1. Bagaimana ESP32-S3 membaca 16 tombol keypad matriks 4×4 menggunakan delapan pin GPIO, serta bagaimana perangkat lunak memetakan baris dan kolom menjadi karakter tombol yang ditekan?

2. Bagaimana sistem menyimpan, membandingkan, dan mengganti PIN 4-digit yang dimasukkan pengguna, termasuk penanganan kondisi ketika jumlah digit tidak sesuai atau PIN yang dimasukkan tidak cocok dengan PIN tersimpan?

3. Bagaimana ESP32-S3 mengendalikan motor servo melalui sinyal PWM 50 Hz untuk menggerakkan mekanisme kunci secara bertahap antara posisi terbuka dan posisi terkunci, serta bagaimana LCD I2C menampilkan status PIN BARU, Input PIN, Mengunci, Terkunci, Membuka, Terbuka, dan PIN SALAH pada setiap tahap?

1.3 Tujuan Praktikum

1. Memahami penggunaan pin digital ESP32-S3 sebagai masukan untuk keypad matriks 4×4 dan sebagai keluaran PWM untuk motor servo.

2. Memahami komunikasi I2C antara ESP32-S3 dan LCD 16×2 untuk menampilkan status PIN dan status kunci.

3. Membuat program sistem keamanan yang dapat menetapkan PIN baru, mengunci sistem secara otomatis setelah PIN dibuat, dan membuka kunci hanya ketika PIN yang dimasukkan sesuai dengan PIN tersimpan.

4. Menguji kesesuaian sambungan rangkaian dan perilaku program pada simulator Wokwi untuk beberapa skenario, yaitu pembuatan PIN, penguncian, pembukaan dengan PIN benar, dan penolakan PIN yang salah.

1.4 Batasan Sistem

1. PIN yang digunakan berjumlah tepat empat digit numerik. Tombol A, B, C, D, dan * pada keypad tidak diproses oleh program yang digunakan.

2. PIN tersimpan hanya di memori RAM (variabel String pada program) sehingga akan hilang apabila ESP32-S3 mengalami reset atau kehilangan daya, dan rancangan ini belum menggunakan penyimpanan non-volatile seperti EEPROM atau Flash.

3. Program tidak membatasi jumlah percobaan PIN yang salah dan tidak menyediakan mekanisme alarm atau penguncian sementara (lockout) setelah beberapa kali kegagalan.

4. Pergerakan servo dan sebagian pesan LCD menggunakan delay yang bersifat blocking, sehingga pembacaan keypad tidak diproses selama proses tersebut berlangsung.

5. Alamat I2C LCD tetap pada 0x27 sesuai konfigurasi perangkat lunak; modul LCD dengan alamat berbeda memerlukan penyesuaian kode.

BAB II
DASAR TEORI

2.1 Keypad Matriks 4x4

Keypad matriks 4×4 menyediakan enam belas tombol yang disusun dalam empat baris dan empat kolom, namun hanya memerlukan delapan jalur sinyal (empat baris dan empat kolom) untuk mendeteksi enam belas kemungkinan tombol. Mikrokontroler memindai keypad dengan memberi sinyal pada satu jalur baris kemudian membaca keadaan setiap jalur kolom secara bergantian; posisi baris dan kolom yang aktif bersamaan menunjukkan tombol yang sedang ditekan.

Pada sistem ini, pemetaan tombol diprogram sebagai angka 1–9 dan 0 pada posisi numerik, huruf A–D pada kolom keempat, serta simbol * dan # pada baris terakhir. Perangkat lunak yang digunakan hanya memproses tombol angka untuk memasukkan digit PIN dan tombol # untuk mengonfirmasi PIN yang telah dimasukkan.

2.2 ESP32-S3

ESP32-S3 adalah mikrokontroler dengan banyak pin GPIO yang dapat dikonfigurasi sebagai masukan digital, keluaran digital, jalur I2C, maupun keluaran PWM. Pada rancangan ini, ESP32-S3 berperan sebagai pengendali tunggal yang memindai keypad, mengelola status PIN dan status kunci, mengirim data ke LCD melalui I2C, dan membangkitkan sinyal PWM untuk servo.

Pin 3V3 pada ESP32-S3 digunakan untuk memasok tegangan LCD, sedangkan pin 5V dipakai untuk memasok motor servo. Seluruh ground pada ESP32-S3, LCD, dan servo dihubungkan menjadi satu titik ground bersama agar referensi tegangan sinyal PWM dan I2C tetap konsisten.

2.3 LCD 16x2 I2C

LCD 16×2 menampilkan dua baris teks dengan enam belas karakter per baris. Modul LCD yang dilengkapi backpack I2C hanya memerlukan dua jalur sinyal, yaitu SDA untuk data dan SCL untuk clock, sehingga jumlah pin yang dipakai pada mikrokontroler jauh lebih sedikit dibandingkan antarmuka paralel biasa. Setiap modul I2C memiliki alamat perangkat sendiri, dan pada rancangan ini alamat yang digunakan adalah 0x27.

LCD pada sistem ini menampilkan prompt dan status seperti PIN BARU, Input PIN, Mengunci, Terkunci, Membuka, Terbuka, dan PIN SALAH, sehingga pengguna dapat mengikuti tahapan proses tanpa perlu membuka kode program.

2.4 Motor Servo

Motor servo hobi dikendalikan menggunakan sinyal PWM dengan frekuensi 50 Hz, di mana lebar pulsa menentukan posisi sudut poros servo. Pada rancangan ini, lebar pulsa yang digunakan berkisar antara 500 hingga 2500 mikrodetik, dengan posisi 0° mewakili keadaan terbuka dan posisi 180° mewakili keadaan terkunci.

Agar pergerakan mekanis tidak terjadi secara mendadak, servo digerakkan secara bertahap satu derajat setiap langkah dengan jeda singkat di antara setiap langkah, sehingga transisi dari satu posisi ke posisi lainnya berlangsung secara halus.

 

BAB III
PERANCANGAN DAN IMPLEMENTASI

3.1 Gambaran Sistem

Saat sistem pertama kali menyala, servo berada pada posisi 0° (terbuka), status isLocked ditetapkan false, dan LCD menampilkan prompt PIN BARU: sebagai tanda bahwa sistem menunggu pengguna menetapkan PIN baru. Pengguna memasukkan empat digit angka melalui keypad, dan setiap digit yang dimasukkan ditampilkan sebagai tanda bintang pada baris kedua LCD sehingga PIN yang sebenarnya tidak terlihat pada layar.

Setelah pengguna menekan #, program memeriksa jumlah digit yang telah dimasukkan. Jika tepat empat digit, digit tersebut disalin menjadi PIN tersimpan dan sistem langsung menjalankan urutan penguncian, yaitu memindahkan servo secara bertahap dari 0° menuju 180° sambil menampilkan pesan Mengunci... kemudian Terkunci. Ketika sistem berada pada keadaan terkunci, pengguna harus memasukkan PIN yang sama untuk membuka kunci; PIN yang cocok akan menjalankan urutan pembukaan (servo bergerak dari 180° menuju 0°, LCD menampilkan Membuka... kemudian Terbuka), sedangkan PIN yang tidak cocok akan menampilkan PIN SALAH dan sistem tetap terkunci.

Gambar 1. Rangkaian sistem keamanan PIN pada Wokwi, LCD menampilkan prompt PIN BARU: pada kondisi awal

3.2 Komponen yang Digunakan

No.

Komponen

Jumlah

Fungsi

1

ESP32-S3

1

Mengendalikan keypad, LCD, dan servo; menyimpan status kunci dan PIN.

2

Keypad matriks 4×4

1

Menerima masukan digit PIN dari pengguna.

3

LCD 16×2 I2C

1

Menampilkan prompt PIN dan status sistem.

4

Motor servo hobi

1

Menggerakkan mekanisme kunci fisik antara posisi terbuka dan terkunci.

Tabel 1. Komponen sistem keamanan PIN

3.3 Konfigurasi Pin

Komponen

Pin ESP32-S3

Keterangan

Keypad R1 / R2 / R3 / R4

GPIO 16 / 17 / 18 / 8

Baris keypad

Keypad C1 / C2 / C3 / C4

GPIO 5 / 6 / 7 / 4

Kolom keypad

LCD SDA

GPIO 21

Jalur data I2C

LCD SCL

GPIO 20

Jalur clock I2C

LCD VCC

3V3

Suplai daya LCD

Servo PWM

GPIO 15

Sinyal kendali servo

Servo VCC

5V

Suplai daya servo

Ground bersama

GND

Referensi ground LCD, keypad, dan servo

Tabel 2. Pemetaan pin ESP32-S3 pada sistem keamanan PIN

Rincian sambungan tiap komponen dan berkas konfigurasi lengkap disertakan pada bagian Lampiran.

3.4 Alur Kerja Program

Pada fungsi setup, program menginisialisasi jalur I2C pada GPIO 21 (SDA) dan GPIO 20 (SCL), menyalakan LCD beserta lampu latarnya, mengatur servo pada frekuensi 50 Hz dengan rentang pulsa 500–2500 mikrodetik, dan menempatkan servo pada posisi 0°. LCD kemudian menampilkan prompt awal PIN BARU:.

Di dalam fungsi loop, program membaca satu tombol keypad pada satu waktu menggunakan keypad.getKey(). Ketika tombol angka ditekan dan jumlah digit yang tersimpan pada enteredCode belum mencapai empat, digit tersebut ditambahkan ke enteredCode dan sebuah tanda bintang ditampilkan pada baris kedua LCD. Tombol angka tambahan diabaikan setelah empat digit terpenuhi, sampai entri dikonfirmasi dengan #.

Ketika tombol # ditekan, program memeriksa status isLocked. Jika sistem sedang terbuka dan tepat empat digit telah dimasukkan, enteredCode disalin ke storedCode dan fungsi lockSafe() dipanggil; jika jumlah digit tidak tepat empat, LCD menampilkan Buat PIN 4 Digit. Jika sistem sedang terkunci, enteredCode dibandingkan dengan storedCode; PIN yang cocok memanggil fungsi unlockSafe(), sedangkan PIN yang tidak cocok menampilkan PIN SALAH tanpa mengubah status kunci. Pada kedua kasus, enteredCode dikosongkan dan baris kedua LCD dihapus setelah proses konfirmasi selesai.

Fungsi lockSafe() mengatur isLocked menjadi true, menampilkan Mengunci..., menggerakkan servo bertahap dari 0° ke 180°, menampilkan Terkunci selama dua detik, lalu kembali menampilkan Input PIN. Fungsi unlockSafe() mengatur isLocked menjadi false, menampilkan Membuka..., menggerakkan servo bertahap dari 180° ke 0°, menampilkan Terbuka selama dua detik, lalu kembali ke prompt PIN BARU:.

3.5 Implementasi Program

Kode berikut disusun dari potongan program yang digunakan pada firmware ESP32-S3. Bagian pertama memuat pustaka yang diperlukan serta konfigurasi pin.

#include <Wire.h>

#include <LiquidCrystal_I2C.h>

#include <Keypad.h>

#include <ESP32Servo.h>

 

#define I2C_SDA 21

#define I2C_SCL 20

 

byte rowPins[ROWS] = {16, 17, 18, 8};

byte colPins[COLS] = {5, 6, 7, 4};

const int servoPin = 15;

Kode 1. Pustaka dan konfigurasi pin

Bagian berikutnya berisi konfigurasi LCD, peta tombol keypad, dan variabel status sistem.

LiquidCrystal_I2C lcd(0x27, 16, 2);

 

char keys[ROWS][COLS] = {

  {'1', '2', '3', 'A'},

  {'4', '5', '6', 'B'},

  {'7', '8', '9', 'C'},

  {'*', '0', '#', 'D'}

};

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

 

String enteredCode = "";

String storedCode  = "";

bool isLocked = false;

Kode 2. Konfigurasi LCD, peta keypad, dan variabel status

Inisialisasi servo dan pembacaan tombol dilakukan sebagai berikut.

lockServo.setPeriodHertz(50);

lockServo.attach(servoPin, 500, 2500);

lockServo.write(0);

 

char key = keypad.getKey();

if (enteredCode.length() < 4) {

  enteredCode += key;

  lcd.setCursor(enteredCode.length() - 1, 1);

  lcd.print('*');

}

Kode 3. Inisialisasi servo dan tampilan entri PIN sebagai tanda bintang

Pergerakan servo saat mengunci dan membuka dilakukan secara bertahap satu derajat per langkah.

// Mengunci: 0 derajat menuju 180 derajat

for (int pos = 0; pos <= 180; pos += 1) {

  lockServo.write(pos);

  delay(15);

}

 

// Membuka: 180 derajat menuju 0 derajat

for (int pos = 180; pos >= 0; pos -= 1) {

  lockServo.write(pos);

  delay(15);

}

 

Kode 4. Pergerakan bertahap servo pada proses penguncian dan pembukaan

Dengan 181 posisi dan jeda 15 ms pada setiap posisi, satu kali pergerakan penuh dari 0° ke 180° (atau sebaliknya) memerlukan waktu sekitar 2,7 detik. Karena lcd.print dan pergerakan servo menggunakan delay yang bersifat blocking, pembacaan keypad tidak diproses selama rentang waktu tersebut.




BAB IV
HASIL DAN ANALISIS

4.1 Hasil Simulasi

Pengujian dilakukan pada simulator Wokwi dengan menjalankan seluruh alur sistem: pembuatan PIN baru, proses penguncian otomatis, permintaan PIN saat sistem terkunci, penolakan PIN yang salah, dan proses pembukaan ketika PIN yang benar dimasukkan. Setiap tahap ditampilkan pada LCD dan diperiksa kesesuaiannya dengan perilaku yang dideskripsikan pada program.

Pada tahap pertama, pengguna memasukkan empat digit PIN baru. Setiap digit yang ditekan tampil sebagai tanda bintang pada baris kedua LCD, sehingga nilai PIN yang sebenarnya tidak terlihat.

Gambar 2. LCD menampilkan PIN BARU dengan empat tanda bintang saat pengguna membuat PIN baru

Setelah tombol # ditekan dan tepat empat digit terdeteksi, sistem langsung menjalankan proses penguncian. LCD menampilkan Mengunci... selama servo bergerak bertahap menuju posisi 180°.

Gambar 3. LCD menampilkan Mengunci.. saat servo bergerak menuju posisi terkunci

Ketika sistem berada pada keadaan terkunci, LCD menampilkan prompt Input PIN dan menunggu pengguna memasukkan kembali empat digit PIN untuk membuka kunci.

Gambar 4. LCD menampilkan Input PIN saat sistem meminta PIN untuk membuka kunci

Pengujian dengan PIN yang tidak sesuai dengan PIN tersimpan menampilkan pesan PIN SALAH, dan sistem tetap berada pada keadaan terkunci tanpa menggerakkan servo.

Gambar 5. LCD menampilkan PIN SALAH ketika PIN yang dimasukkan tidak sesuai

Ketika PIN yang dimasukkan sesuai dengan PIN tersimpan, sistem menjalankan proses pembukaan. LCD menampilkan Membuka... selama servo bergerak bertahap kembali menuju posisi 0°, sebelum akhirnya menampilkan Terbuka dan kembali ke prompt PIN BARU:.

Gambar 6. LCD menampilkan Membuka... saat servo bergerak menuju posisi terbuka setelah PIN benar dimasukkan

Secara keseluruhan, urutan pesan pada LCD (PIN BARU → Mengunci → Terkunci/Input PIN → PIN SALAH atau Membuka → Terbuka) sesuai dengan logika yang dituliskan pada fungsi lockSafe() dan unlockSafe(), sehingga pemindaian keypad, pembandingan PIN, dan pergerakan servo berjalan pada urutan yang diharapkan

4.2 Analisis Logika Counter

Kondisi

Status sebelum

Status sesudah

Respons sistem

Sistem baru aktif

-

Terbuka (isLocked = false)

Servo pada 0°; LCD menampilkan PIN BARU:.

Empat digit PIN baru dikonfirmasi (#)

Terbuka

Terkunci (isLocked = true)

storedCode diperbarui; servo bergerak 0°→180°; LCD: Mengunci... lalu Terkunci.

Jumlah digit bukan empat saat terbuka

Terbuka

Terbuka

LCD menampilkan Buat PIN 4 Digit; enteredCode dikosongkan.

PIN yang dimasukkan sesuai storedCode

Terkunci

Terbuka (isLocked = false)

Servo bergerak 180°→0°; LCD: Membuka... lalu Terbuka.

PIN yang dimasukkan tidak sesuai storedCode

Terkunci

Terkunci

LCD menampilkan PIN SALAH; servo tidak bergerak.

Tabel 3. Logika respons sistem berdasarkan status isLocked dan hasil pembandingan PIN

Variabel isLocked menjadi penentu utama cabang logika pada penekanan #: nilai false mengarahkan program ke jalur pembuatan PIN baru, sedangkan nilai true mengarahkan program ke jalur pembandingan PIN untuk membuka kunci. Variabel enteredCode selalu dikosongkan setelah proses konfirmasi, baik PIN diterima, ditolak, maupun jumlah digitnya tidak sesuai, sehingga entri berikutnya selalu dimulai dari kondisi kosong.

4.3 Keterbatasan Rancangan

•  PIN tersimpan bersifat volatile karena hanya disimpan pada variabel String di RAM, sehingga PIN akan hilang setelah ESP32-S3 mengalami reset atau kehilangan daya.

•  Program tidak membatasi jumlah percobaan PIN yang salah dan tidak menyediakan mekanisme alarm atau penguncian sementara, sehingga percobaan PIN dapat diulang tanpa batas.

•  Pergerakan servo dan sebagian pesan LCD menggunakan delay yang bersifat blocking, sehingga keypad tidak dapat dibaca selama proses tersebut berlangsung.

•  Alamat I2C LCD tetap pada 0x27; modul LCD dengan alamat berbeda memerlukan penyesuaian kode agar dapat terdeteksi.

•  Arah pergerakan servo (0° sebagai terbuka dan 180° sebagai terkunci) mungkin perlu dibalik tergantung pada pemasangan mekanis servo terhadap mekanisme kunci yang sesungguhnya.

•  Suplai daya servo yang diambil langsung dari pin 5V papan ESP32-S3 berisiko menimbulkan penurunan tegangan atau reset tak terduga apabila servo menghadapi beban mekanis yang signifikan; suplai 5V eksternal dengan kapasitas arus memadai dapat menjadi solusi.

 

BAB V
PENUTUP

5.1 Kesimpulan

Simulasi pada Wokwi menunjukkan bahwa sistem keamanan berbasis PIN 4-digit menggunakan ESP32-S3 dapat menjalankan fungsi dasar yang direncanakan. Keypad matriks 4×4 berhasil dibaca sebagai masukan digit PIN, LCD I2C menampilkan prompt dan status pada setiap tahap, serta motor servo bergerak sesuai dengan status kunci yang dikelola oleh program.

Alur kerja sistem, yaitu pembuatan PIN pada keadaan terbuka, penguncian otomatis setelah PIN dikonfirmasi, serta pembandingan PIN untuk membuka kunci, berjalan sesuai dengan logika pada fungsi lockSafe() dan unlockSafe(). Pengujian dengan PIN yang benar maupun salah menunjukkan bahwa servo hanya bergerak membuka kunci ketika PIN yang dimasukkan sesuai dengan PIN tersimpan, sedangkan PIN yang salah hanya menampilkan pesan kesalahan tanpa mengubah status kunci.

5.2 Saran

  • PIN sebaiknya disimpan pada memori non-volatile seperti EEPROM atau Flash internal ESP32-S3 agar tidak hilang setelah perangkat kehilangan daya atau di-reset.
  • Mekanisme pembatasan percobaan PIN yang salah, disertai jeda waktu atau alarm setelah beberapa kali kegagalan, perlu ditambahkan untuk meningkatkan keamanan sistem.
  • Penggunaan millis() sebagai pengganti delay() pada pergerakan servo dan tampilan LCD dapat memungkinkan ESP32-S3 tetap membaca keypad selama proses berlangsung.
  • Suplai daya servo sebaiknya menggunakan sumber 5V eksternal yang terpisah dari pin 5V ESP32-S3 apabila servo dipakai untuk menggerakkan mekanisme kunci dengan beban mekanis yang nyata.

 

DAFTAR PUSTAKA

Espressif Systems. (n.d.). ESP32-S3 series. https://www.espressif.com/en/products/socs/esp32-s3

Arduino. (n.d.). Keypad library. https://www.arduino.cc/reference/en/libraries/keypad/

Arduino Libraries. (n.d.). LiquidCrystal I2C library. https://www.arduinolibraries.info/libraries/liquid-crystal-i2-c

Madhephaestus. (n.d.). ESP32Servo library. GitHub. https://github.com/madhephaestus/ESP32Servo

Wokwi. (n.d.). ESP32 simulation guide. https://docs.wokwi.com/guides/esp32

 

LAMPIRAN

6.1 Konfigurasi Wokwi

Pin ESP32-S3

Terhubung ke

Fungsi

GPIO 16

Keypad R1

Baris 1 keypad

GPIO 17

Keypad R2

Baris 2 keypad

GPIO 18

Keypad R3

Baris 3 keypad

GPIO 8

Keypad R4

Baris 4 keypad

GPIO 5

Keypad C1

Kolom 1 keypad

GPIO 6

Keypad C2

Kolom 2 keypad

GPIO 7

Keypad C3

Kolom 3 keypad

GPIO 4

Keypad C4

Kolom 4 keypad

GPIO 21

LCD SDA

Data I2C

GPIO 20

LCD SCL

Clock I2C

3V3

LCD VCC

Suplai daya LCD

GPIO 15

Servo PWM

Sinyal kendali servo

5V

Servo VCC

Suplai daya servo

GND

LCD GND, Keypad, Servo GND

Ground bersama seluruh komponen

Tabel 4. Konfigurasi pin lengkap ESP32-S3 pada sistem keamanan PIN

Firmware yang digunakan mengandalkan empat pustaka utama, yaitu Wire.h untuk komunikasi I2C, LiquidCrystal_I2C.h untuk mengendalikan LCD, Keypad.h untuk memindai keypad matriks, dan ESP32Servo.h untuk membangkitkan sinyal PWM servo pada ESP32-S3.

 

Tidak ada komentar:

Posting Komentar