Modul 4 Smart Electronic Safe Box dengan Sistem Keamanan Multi-Level
1. Pendahuluan[Kembali]
2. Tujuan[Kembali] - Merancang dan mengembangkan brankas elektronik pintar dengan sistem keamanan multi-level berbasis Raspberry Pi Pico.
- Mengintegrasikan autientikasi berlapis menggunakan password, sensor sentuh, sensor IR, dan sensor getaran untuk meningkatkan keamanan.
- Membangun sistem alarm otomatis dan komunikasi UART antar modul untuk merespons ancaman secara cepat dan terintegrasi.
- Merancang dan mengembangkan brankas elektronik pintar dengan sistem keamanan multi-level berbasis Raspberry Pi Pico.
- Mengintegrasikan autientikasi berlapis menggunakan password, sensor sentuh, sensor IR, dan sensor getaran untuk meningkatkan keamanan.
- Membangun sistem alarm otomatis dan komunikasi UART antar modul untuk merespons ancaman secara cepat dan terintegrasi.
3. Alat dan Bahan[Kembali]
4. Dasar Teori[Kembali]
- Duty Cycle = tON / ttotal
- tON = Waktu ON atau Waktu dimana tegangan keluaran berada pada posisi tinggi (high atau 1)
- tOFF = Waktu OFF atau Waktu dimana tegangan keluaran berada pada posisi rendah (low atau 0)
- ttotal = Waktu satu siklus atau penjumlahan antara tON dengan tOFF atau disebut juga dengan “periode satu gelombang”
2. ADC (Analog Digital Converter)
3. UART ( Universal Asynchronous Receiver Trasmitter)
Pada Proyek:
- TX Pico 1 → RX Pico 2 untuk mengirim perintah "UNLOCK", "LOCK", "ALARM", dan "ALARM10".
- TX Pico 2 → RX Pico 1 disiapkan untuk komunikasi dua arah (meskipun belum digunakan dalam program ini, bisa dikembangkan untuk feedback status).
- Kondisi start dimana saat pada SDA beralih dari logika high ke low sebelum SCL.
- Kondisi stop dimana saat pada SDA beralih dari logika low ke high sebelum SCL.
Raspberry Pi Pico adalah sebuah mikrokontroler berbasis chip RP2040 yang dikembangkan oleh Raspberry Pi Foundation. Berbeda dengan Raspberry Pi yang merupakan komputer mini (single-board computer), Pico lebih difokuskan sebagai platform embedded system untuk kendali perangkat keras, automasi, dan pemrosesan input/output (I/O) dalam proyek elektronika dan IoT.
Raspberry Pi Pico dirancang untuk menjadi murah, efisien daya, dan fleksibel, sangat cocok untuk pendidikan, hobi, maupun aplikasi industri ringan.
Raspberry Pi Pico adalah papan rangkaian elektronik yang di dalamnya terdapat komponen utama chip mikrokontroler RP2040, yang dirancang dan diproduksi oleh Raspberry Pi Foundatio. Tidak seperti komputer mini raspberry Pi lainnya yang menjalankan sistem operasi seperti Linux, Pico dirancang untuk tugas-tugas yang lebih sederhana dan langsung (embedded system), seperti membaca sensor, mengontrol perangkat, atau melakukan pengolahan data pada tingkat hardware. Adapun spesifikasi dari Raspberry Pi Pico adalah sebagai berikut:
Spesifikasi:
Raspberry Pi Pico bekerja dengan prinsip mikrokontroler, yaitu mengeksekusi program yang telah dimasukkan ke dalam flash memory-nya. Berikut alur kerjanya:
- Pemrograman: Kode ditulis (dalam MicroPython atau C/C++) di komputer dan diunggah ke Pico via USB.
- Eksekusi: Pico membaca instruksi dari flash memory dan menjalankannya secara berurutan melalui CPU.
- Pengendalian Perangkat: Pico dapat mengontrol berbagai komponen (sensor, aktuator) melalui pin GPIO.
- Interaksi: Melalui komunikasi UART/I2C/SPI, Pico dapat bertukar data dengan perangkat lain, termasuk sesama mikrokontroler.
- Nilai 1 berarti sensor mendeteksi sentuhan dari pengguna, yang diperlukan untuk verifikasi akses setelah password dimasukkan.
- Nilai 0 berarti tidak ada sentuhan terdeteksi.
- Dalam programmu, pengguna diberi waktu hingga 30 detik untuk menyentuh sensor; jika tidak, akses ditolak dan alarm dipicu.
- Garis oranye bernilai 1 menunjukkan periode saat gerakan terdeteksi (misalnya orang berada di depan brankas).
- Saat bernilai 0, berarti tidak ada aktivitas di sekitar sensor.
- Dalam sistemmu, jika gerakan terdeteksi terus-menerus selama lebih dari 180 detik, maka sistem akan memicu alarm.
- Grafik ini membantu menggambarkan cara kerja monitoring gerakan secara real-time menggunakan sensor PIR.
Sensor ini tidak hanya digunakan sebagai transduser tekanan, tetapi juga sangat sensitif terhadap getaran, benturan, atau sentuhan, sehingga banyak diaplikasikan dalam:
- Alarm keamanan
- Mikrofon
- Pendeteksi getaran
- Trigger sensor sentuh
Sensor piezo menghasilkan tegangan AC kecil saat materialnya mengalami tekanan atau getaran mekanis. Besarnya tegangan sebanding dengan intensitas gaya yang diberikan.
Tahapan kerja:
Ketika sensor dalam kondisi diam, tidak ada output (tegangan = 0 atau sangat kecil).
Saat diketuk, ditekan, atau digetarkan, material piezo menghasilkan tegangan listrik sesaat.
Tegangan tersebut dapat diukur dengan pin ADC (Analog to Digital Converter) atau diproses dengan rangkaian penguat.
- Garis biru menunjukkan nilai ADC yang dibaca dari sensor piezo secara terus-menerus.
- Garis merah putus-putus menunjukkan ambang batas deteksi alarm (20000).
- Ketika nilai ADC melampaui ambang ini (seperti pada detik ke-3 dan ke-7), sistem akan memicu alarm.
- Grafik ini menggambarkan bagaimana sensor mendeteksi getaran besar sebagai lonjakan sinyal, yang menjadi dasar pemicu alarm.

OLED (Organic Light Emitting Diode) adalah teknologi layar yang menggunakan bahan organik untuk menghasilkan cahaya saat dialiri arus listrik. Berbeda dengan LCD yang membutuhkan backlight, OLED memancarkan cahaya sendiri, sehingga:
Lebih hemat daya
Kontras lebih tinggi (karena warna hitam benar-benar gelap)
Sudut pandang lebih luas
Modul OLED 0.96” dengan resolusi 128x64 piksel merupakan layar kecil monokrom yang banyak digunakan pada proyek mikrokontroler (seperti Arduino, ESP32, Raspberry Pi Pico) karena ringan, hemat energi, dan mudah diprogram.
Modul OLED ini biasanya menggunakan protokol komunikasi I2C (dua kabel: SDA dan SCL). Data yang dikirim oleh mikrokontroler akan dikonversi oleh driver IC SSD1306 menjadi piksel yang menyala di layar.
Langkah kerjanya:
Mikrokontroler mengirimkan data karakter/grafik ke driver OLED (SSD1306).
Driver mengatur tegangan ke piksel OLED berdasarkan data tersebut.
Piksel akan menyala/mati untuk membentuk tampilan.
- Male to Male (M-M): Ujung kedua kabel berupa pin (jarum logam), digunakan untuk menghubungkan dua header female, seperti dari breadboard ke breadboard.
- Female to Male (F-M): Satu ujung berupa lubang (female), satu lagi berupa pin (male), digunakan untuk menghubungkan komponen berpin seperti sensor (male) ke breadboard atau pin header.
Dalam proyek prototipe:
- Kabel M-M digunakan saat menghubungkan dua jalur breadboard atau dari header ke breadboard.
- Kabel F-M digunakan saat menyambungkan pin sensor/module ke breadboard atau mikrokontroler.
- Kabel F-F (jika diperlukan) digunakan untuk menghubungkan dua pin male, seperti antar header.
- USB Type-A (umum pada komputer/laptop)
- USB Type-B (umum pada printer atau perangkat besar)
- USB Mini dan Micro USB (pada perangkat kecil seperti HP lama, Arduino)
- USB Type-C (generasi terbaru, reversible)
- VCC (5V) – jalur suplai daya
- GND – ground
- D+ dan D− – jalur data diferensial (untuk transfer data)
- (opsional) ID – untuk menentukan mode koneksi pada USB OTG
- Saat kabel USB terhubung, terjadi proses enumerasi di mana host (seperti komputer) mengenali perangkat USB yang tersambung.
- Jika dikenali, host akan mengatur jalur komunikasi dan menyuplai daya ke perangkat.
- Transfer data atau pengisian daya pun dimulai melalui jalur data dan daya yang tersedia.
a. Prosedur[Kembali] Menyiapkan Komponen
- Langkah
pertama yang dilakukan adalah mengumpulkan seluruh komponen yang
diperlukan. Sistem ini pakai dua buah Raspberry Pi Pico, di mana satu
sebagai pengolah input (Pico 1) dan satu lagi sebagai pengontrol output (Pico
2).
- Komponen
yang digunakan antara lain:
- Keypad
4x3 untuk memasukkan password
- Sensor
sentuh sebagai verifikasi pengguna
- Sensor
PIR untuk mendeteksi gerakan
- Sensor
piezoelektrik untuk deteksi getaran
- OLED
display sebagai layar tampilan
- Buzzer
untuk alarm
- Servo
motor sebagai pengunci/pembuka brankas
2. Menyambungkan Komponen ke Pico 1
- OLED
display disambungkan lewat komunikasi I2C, dengan pin GP16 sebagai SDA dan
GP17 sebagai SCL.
- Keypad
4x3 disambungkan ke:
- Baris:
GP0, GP1, GP2, dan GP3
- Kolom:
GP9, GP10, dan GP11
- Sensor
sentuh dihubungkan ke pin GP6 (input digital).
- Sensor
PIR terhubung ke pin GP7 (input digital).
- Sensor
piezoelektrik yang butuh pembacaan analog, disambungkan ke pin GP26 (ADC
input).
- Untuk
komunikasi antar-Pico, digunakan pin GP4 sebagai TX dan GP5 sebagai RX.
3. Menghubungkan Komponen ke Pico 2
- Motor
servo dikendalikan lewat pin GP3, dengan sinyal PWM (frekuensi 50 Hz).
- Buzzer
dihubungkan ke pin GP2, dikontrol secara digital (nyala/mati).
- Untuk
komunikasi dari Pico 1, Pico 2 menerima data melalui pin GP9 (RX). Kalau
butuh dua arah, GP8 bisa dipakai sebagai TX.
- Semua
ground (GND) dari kedua Pico dan seluruh komponen wajib disatukan supaya
sistem stabil dan UART bisa jalan lancar.
4. Mengunggah Program ke Masing-Masing
Pico
- Di
Pico 1, diunggah file:
- main.py
(program utama)
- ssd1306.py
(library OLED)
- keypadlib.py
(library keypad)
- Di
Pico 2, cukup diunggah file main.py untuk kontrol servo dan buzzer sesuai
perintah dari UART.
- Pengunggahan
dilakukan pakai Thonny IDE.
5. Cara Kerja Sistem
- Setelah
nyala, OLED akan menampilkan instruksi kepada pengguna.
- Pengguna
disuruh masukin sandi lewat keypad.
- Setelah
itu sistem akan cek apakah ada sentuhan di sensor sentuh.
- Kalau
password benar dan sentuhan terdeteksi, servo akan membuka kunci brankas.
- Kalau
password salah atau tidak ada sentuhan, sistem akan diam atau bisa
mengaktifkan alarm.
- Sensor
PIR dan piezo akan aktif secara paralel, untuk mendeteksi gerakan atau
upaya membuka secara paksa.
Menyiapkan Komponen
- Langkah
pertama yang dilakukan adalah mengumpulkan seluruh komponen yang
diperlukan. Sistem ini pakai dua buah Raspberry Pi Pico, di mana satu
sebagai pengolah input (Pico 1) dan satu lagi sebagai pengontrol output (Pico
2).
- Komponen
yang digunakan antara lain:
- Keypad
4x3 untuk memasukkan password
- Sensor
sentuh sebagai verifikasi pengguna
- Sensor
PIR untuk mendeteksi gerakan
- Sensor
piezoelektrik untuk deteksi getaran
- OLED
display sebagai layar tampilan
- Buzzer
untuk alarm
- Servo motor sebagai pengunci/pembuka brankas
2. Menyambungkan Komponen ke Pico 1
- OLED
display disambungkan lewat komunikasi I2C, dengan pin GP16 sebagai SDA dan
GP17 sebagai SCL.
- Keypad
4x3 disambungkan ke:
- Baris:
GP0, GP1, GP2, dan GP3
- Kolom:
GP9, GP10, dan GP11
- Sensor
sentuh dihubungkan ke pin GP6 (input digital).
- Sensor
PIR terhubung ke pin GP7 (input digital).
- Sensor
piezoelektrik yang butuh pembacaan analog, disambungkan ke pin GP26 (ADC
input).
- Untuk
komunikasi antar-Pico, digunakan pin GP4 sebagai TX dan GP5 sebagai RX.
3. Menghubungkan Komponen ke Pico 2
- Motor
servo dikendalikan lewat pin GP3, dengan sinyal PWM (frekuensi 50 Hz).
- Buzzer
dihubungkan ke pin GP2, dikontrol secara digital (nyala/mati).
- Untuk
komunikasi dari Pico 1, Pico 2 menerima data melalui pin GP9 (RX). Kalau
butuh dua arah, GP8 bisa dipakai sebagai TX.
- Semua
ground (GND) dari kedua Pico dan seluruh komponen wajib disatukan supaya
sistem stabil dan UART bisa jalan lancar.
4. Mengunggah Program ke Masing-Masing Pico
- Di
Pico 1, diunggah file:
- main.py
(program utama)
- ssd1306.py
(library OLED)
- keypadlib.py
(library keypad)
- Di
Pico 2, cukup diunggah file main.py untuk kontrol servo dan buzzer sesuai
perintah dari UART.
- Pengunggahan
dilakukan pakai Thonny IDE.
5. Cara Kerja Sistem
- Setelah
nyala, OLED akan menampilkan instruksi kepada pengguna.
- Pengguna
disuruh masukin sandi lewat keypad.
- Setelah
itu sistem akan cek apakah ada sentuhan di sensor sentuh.
- Kalau
password benar dan sentuhan terdeteksi, servo akan membuka kunci brankas.
- Kalau
password salah atau tidak ada sentuhan, sistem akan diam atau bisa
mengaktifkan alarm.
- Sensor
PIR dan piezo akan aktif secara paralel, untuk mendeteksi gerakan atau
upaya membuka secara paksa.
- Langkah
pertama yang dilakukan adalah mengumpulkan seluruh komponen yang
diperlukan. Sistem ini pakai dua buah Raspberry Pi Pico, di mana satu
sebagai pengolah input (Pico 1) dan satu lagi sebagai pengontrol output (Pico
2).
b. Hardware[Kembali]
c. Rangkaian Simulasi dan Prinsip Kerja[Kembali]
Prinsip Kerja Rangkaian:
Pada dasarnya, sistem ini bekerja dengan menginisialisasi beberapa komponen penting seperti komunikasi UART antar Pico, OLED dengan protokol I2C, serta sensor PIR, sensor sentuh, sensor piezoelektrik, dan keypad sebagai input utama. Setelah semua terhubung, sensor PIR akan aktif secara terus-menerus untuk memantau gerakan di sekitar brankas. Kalau terdeteksi adanya gerakan yang terjadi selama lebih dari 180 detik secara terus-menerus, maka Pico 1 akan langsung mengirimkan sinyal peringatan berupa perintah ALARM ke Pico 2 melalui UART. Di sisi lain, sensor piezoelektrik dipantau lewat thread terpisah agar tetap responsif tanpa mengganggu proses utama. Ketika sensor ini mendeteksi getaran yang nilainya melebihi ambang batas (ADC > 20000), buzzer akan aktif selama 10 detik sebagai alarm, dan layar OLED akan menampilkan pesan bahwa ada getaran terdeteksi.
Selama tidak dalam kondisi alarm atau masa penundaan, layar OLED akan menampilkan instruksi untuk memasukkan sandi melalui keypad. Pengguna bisa mengetikkan angka, lalu menekan tombol # untuk mengonfirmasi, atau * untuk menghapus jika salah input. Kalau sandi yang dimasukkan salah, sistem akan mencatat jumlah kesalahannya. Jika salah 1–2 kali, akses ditunda selama 15 detik. Tapi kalau salah sampai 3 kali berturut-turut, maka sistem akan mengirimkan perintah ALARM, mengaktifkan penalti berupa penundaan selama 180 detik, dan mengatur ulang percobaan input. Kalau sandi yang dimasukkan benar, sistem akan meminta verifikasi sentuhan melalui sensor sentuh. Jika verifikasi berhasil, brankas akan terbuka secara otomatis melalui servo motor.
Selain itu, sistem juga dilengkapi fitur kunci manual, yaitu dengan menekan tombol angka “1” pada keypad. Saat tombol ini ditekan, servo akan langsung bergerak untuk mengunci brankas, dan OLED akan menampilkan status bahwa brankas berhasil dikunci. Mekanisme ini memungkinkan pengguna untuk mengamankan brankas secara manual tanpa harus menunggu sistem berjalan otomatis.
d. Flowchart[Kembali]
PICO 1 Program:
from machine import Pin, UART, I2C, ADCfrom time import sleep, timeimport _threadimport keypadlib # Pastikan file ini tersediaimport ssd1306
# === UART ke Pico 2 ===uart = UART(1, baudrate=9600, tx=Pin(4), rx=Pin(5))
# === I2C OLED ===i2c = I2C(0, scl=Pin(17), sda=Pin(16)) # Sesuaikan jika perluoled = ssd1306.SSD1306_I2C(128, 64, i2c)
# === Sensor ===touch = Pin(6, Pin.IN)ir = Pin(7, Pin.IN)piezo_adc = ADC(Pin(26)) # ADC0 untuk piezo analog
# === Keypad ===keypad = keypadlib.Keypad(rows=[0, 1, 2, 3], cols=[9, 10, 11], keys=[ ['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9'], ['*', '0', '#']])
# === Konfigurasi ===PASSWORD = "1234"attempts = 0last_attempt_time = 0piezo_alert = False # Flag untuk deteksi piezo
# === Fungsi Tampilan OLED ===def display(text, line=0): oled.fill(0) oled.text(text, 0, line) oled.show()
# === Fungsi Ambil Sandi dari Keypad ===def get_password(): entered = "" display("Masukkan Sandi", 0)
while True: key = keypad.get_key() if key: if key == '#': break elif key == '*': entered = "" else: entered += key display("*" * len(entered), 20) sleep(0.1) return entered
# === Verifikasi Sentuhan ===def verify_touch(): display("Verifikasi Sentuh", 0) start = time() while time() - start < 30: if touch.value() == 1: display("Selesai", 20) return True sleep(2) display("Gagal Sentuh", 20) return False
# === Monitor PIR (IR Motion) ===def monitor_ir(): if ir.value() == 1: start = time() while ir.value() == 1: if time() - start > 180: uart.write("ALARM\n") display("Alarm PIR Aktif", 0) break sleep(1)
# === Monitor Piezo di Thread Terpisah ===def monitor_vibration(): global piezo_alert while True: val = piezo_adc.read_u16() if val > 20000: # Threshold getaran print("Getaran besar:", val) uart.write("ALARM10\n") piezo_alert = True sleep(1) sleep(0.1)
# === Fungsi Utama ===def main(): global attempts, piezo_alert password_mode = True alarm_timeout = 0 delay_until = 0
while True: now = time()
# Sensor selalu aktif monitor_ir()
# Tampilkan status piezo jika terdeteksi if piezo_alert: display("Getaran Terdeteksi", 0) piezo_alert = False
# Jika sedang dalam jeda (penundaan) if now < delay_until: continue
# Jika sedang dalam penalti alarm if now < alarm_timeout: continue
# Mode input password if password_mode: pwd = get_password()
if pwd == "1": uart.write("LOCK\n") attempts = 0 display("Brankas Terkunci", 0) continue
if pwd == PASSWORD: if verify_touch(): uart.write("UNLOCK\n") attempts = 0 display("Akses Diberikan", 0) else: uart.write("ALARM10\n") display("Touch Gagal!", 0) else: attempts += 1 if attempts == 1: display("Salah1x-Tunda15s", 0) delay_until = now + 15 elif attempts == 2: display("Salah2x-Tunda15s", 0) delay_until = now + 15 elif attempts >= 3: display("Salah3x - Alarm!", 0) uart.write("ALARM\n") alarm_timeout = now + 180 attempts = 0
# === Jalankan Thread Piezo dan Program Utama ===_thread.start_new_thread(monitor_vibration, ())main()
PICO 2 Program:
from machine import Pin, UART, PWMfrom time import sleep
# UART dari Pico 1uart = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))
# Buzzer dan Servobuzzer = Pin(2, Pin.OUT)servo = PWM(Pin(3))servo.freq(50)
def servo_open(): servo.duty_u16(6000) # Sudut 90 derajat (terbuka)
def servo_close(): servo.duty_u16(2000) # Sudut 0 derajat (terkunci)
def alarm_sound(duration=60): for _ in range(duration * 2): # 0.5 + 0.5 = 1 detik per loop buzzer.value(1) sleep(0.5) buzzer.value(0) sleep(0.5)
def main(): while True: if uart.any(): cmd = uart.readline().decode().strip() if cmd == "UNLOCK": servo_open() elif cmd == "LOCK": servo_close() elif cmd == "ALARM": alarm_sound(duration=60) elif cmd == "ALARM10": alarm_sound(duration=10) # Tambahan untuk alarm 10 detik dari piezo
sleep(0.1)
main()
e. Video Demo[Kembali]
f. Download File[Kembali] Download HTML [klik disini]
Download rangkaian [klik disini]
Download video [klik disini]
Download listing program [klik disini]
Download library keypad [klik disini]
Download library ssd1306 [klik disini]
Download datasheet sensor touch [klik disini]
Download datasheet sensor ir [klik disini]
Download datasheet sensor piezo [klik disini]
Download datasheet buzzer [klik disini]
Download datasheet oled [klik disini]
Download datasheet motor servo [klik disini]
Download datasheet jumper [klik disini]
Download datasheet keypad [klik disini]
Download HTML [klik disini]
Download rangkaian [klik disini]
Download video [klik disini]
Download listing program [klik disini]
Download library keypad [klik disini]
Download library ssd1306 [klik disini]
Download datasheet sensor touch [klik disini]
Download datasheet sensor ir [klik disini]
Download datasheet sensor piezo [klik disini]
Download datasheet buzzer [klik disini]
Download datasheet oled [klik disini]
Download datasheet motor servo [klik disini]
Download datasheet jumper [klik disini]
Tidak ada komentar:
Posting Komentar