M4-Projeck

 


Modul 4
Smart Electronic Safe Box dengan Sistem Keamanan Multi-Level


1. Pendahuluan[Kembali]

Di zaman sekarang, keamanan menjadi hal yang semakin penting, apalagi untuk melindungi barang-barang atau data pribadi yang sifatnya sensitif. Banyak orang masih mengandalkan sistem pengamanan konvensional seperti kunci fisik atau sandi tunggal, padahal cara seperti itu semakin mudah ditembus. Kunci bisa saja diduplikasi, dan password bisa ditebak atau dibobol dengan berbagai cara. Karena itu, dibutuhkan sistem keamanan yang lebih pintar dan berlapis agar risiko pembobolan bisa ditekan semaksimal mungkin.

Melihat kebutuhan tersebut, muncullah ide untuk membuat Smart Electronic Safe Box dengan Sistem Keamanan Multi-Level. Brankas ini dirancang dengan memanfaatkan Raspberry Pi Pico sebagai pusat kendali, serta menggabungkan berbagai sensor dan metode otentikasi. Mulai dari penggunaan keypad untuk memasukkan password, sensor sentuh untuk memastikan interaksi langsung dari pengguna, sensor gerak (PIR) untuk memantau aktivitas mencurigakan di sekitar, hingga sensor getaran (piezo) yang bisa mendeteksi upaya pembongkaran secara paksa. Selain itu, sistem juga dilengkapi dengan buzzer sebagai alarm dan servo motor yang berfungsi sebagai pengunci mekanis.

Semua komponen ini dihubungkan dan dikontrol menggunakan komunikasi UART, sehingga sistem bisa merespon secara cepat dan terkoordinasi. Dengan adanya sistem seperti ini, diharapkan bisa tercipta solusi keamanan yang lebih handal untuk kebutuhan rumah, kantor, atau laboratorium skala kecil.

2. Tujuan[Kembali]
  1. Merancang dan mengembangkan brankas elektronik pintar dengan sistem keamanan multi-level berbasis Raspberry Pi Pico.
  2. Mengintegrasikan autientikasi berlapis menggunakan password, sensor sentuh, sensor IR, dan sensor getaran untuk meningkatkan keamanan.
  3. Membangun sistem alarm otomatis dan komunikasi UART antar modul untuk merespons ancaman secara cepat dan terintegrasi.


3. Alat dan Bahan[Kembali]

ALAT:

1. Breadboard


2. Kabel jumper 



3. Kabel USB





BAHAN:

1. Raspberry Pi Pico


2. Sensor Touch



3. Sensor Infrared


4. Sensor Fiezo 



6. Motor Servo



7. Buzzer



8. Oled



9. Baterai


10. Keypad 4x4




4. Dasar Teori[Kembali]

1. PWM (Pulse Width Modulation)

PWM (Pulse Width Modulation) adalah salah satu teknik modulasi dengan mengubah lebar pulsa (duty cylce) dengan nilai amplitudo dan frekuensi yang tetap. Satu siklus pulsa merupakan kondisi high kemudian berada di zona transisi ke kondisi low. Lebar pulsa PWM berbanding lurus dengan amplitudo sinyal asli yang belum termodulasi. Duty Cycle adalah perbandingan antara waktu ON (lebar pulsa High) dengan perioda. Duty Cycle biasanya dinyatakan dalam bentuk persen (%).



  • 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”
Pada board Arduino Uno, pin yang bisa dimanfaatkan untuk PWM adalah pin yang diberi tanda tilde (~), yaitu pin 3, 5, 6, 9, 10, dan pin 11. Pin-pin tersebut merupakan pin yang bisa difungsikan untuk input analog atau output analog. Oleh sebab itu, jika akan menggunakan PWM pada pin ini, bisa dilakukan dengan perintah analogWrite();.

PWM pada arduino bekerja pada frekuensi 500Hz, artinya 500 siklus/ketukan dalam satu detik. Untuk setiap siklus, kita bisa memberi nilai dari 0 hingga 255. Ketika kita memberikan angka 0, berarti pada pin tersebut tidak akan pernah bernilai 5 volt (pin selalu bernilai 0 volt). Sedangkan jika kita memberikan nilai 255, maka sepanjang siklus akan bernilai 5 volt (tidak pernah 0 volt). Jika kita memberikan nilai 127 (kita anggap setengah dari 0 hingga 255, atau 50% dari 255), maka setengah siklus akan bernilai 5 volt, dan setengah siklus lagi akan bernilai 0 volt. Sedangkan jika jika memberikan 25% dari 255 (1/4 x 255 atau 64), maka 1/4 siklus akan bernilai 5 volt, dan 3/4 sisanya akan bernilai 0 volt, dan ini akan terjadi 500 kali dalam 1 detik.


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



4. I2C (Inter Integrated Circuit)

Inter Integrated Circuit atau sering disebut I2C adalah standar komunikasi serial dua arah menggunakan dua saluran yang didisain khusus untuk mengirim maupun menerima data. Sistem I2C terdiri dari saluran SCL (Serial Clock) dan SDA (Serial Data) yang membawa informasi data antara I2C dengan pengontrolnya.

Cara Kerja Komunikasi 12C:


Pada I2C, data ditransfer dalam bentuk message yang terdiri dari kondisi start, Address Frame, R/W bit, ACK/NACK bit, Data Frame 1, Data Frame 2, dan kondisi Stop.
  • 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.
R/W bit berfungsi untuk menentukan apakah master mengirim data ke slave atau meminta data dari slave. (logika 0 = mengirim data ke slave, logika 1 = meminta data dari slave)

ACK/NACK bit berfungsi sebagai pemberi kabar jika data frame ataupun address frame telah diterima receiver.



5. Raspberry Pi Pico

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.



6. Sensor Touch

Digital Touch Sensor merupakan sebuah modul sensor yang berfungsi seperti tombol/saklar, namun cara penggunaanya hanya perlu dengan menyentuhnya menggunakan jari kita. Pada saat disentuh oleh jari, sensor akan mendeteksi aliran arus listrik pada tubuh manusia karena tubuh manusia dapat mengalirkan listrik. Data akan berlogika 1 (HIGH) saat disentuh oleh jari dan akan berlogika 0 (LOW) saat tidak disentuh.


Spesifikasi:

Pin out:


Grafik respon dari sensor touch:



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



7.  Sensor Infrared


Infrared (IR) detektor atau sensor infra merah adalah komponen elektronika yang mengidentifikasi cahaya infra merah (infrared, IR). Saat ini, ada sensor infra merah yang dibuat khusus dalam satu modul dan disebut sebagai IR Detector Photomodules. IR Detector Photomodules merupakan chip detektor inframerah digital yang mengandung fotodiode dan penguat (amplifier). Sensor inframerah terdiri dari LED inframerah sebagai pemancar, sedangkan pada bagian penerima biasanya terdapat foto transistor, fotodioda, atau modul inframerah yang berfungsi untuk menerima sinar inframerah yang dikirimkan oleh pemancar.



Spesifikasi:

Pin out:

Grafik respon dari sensor infrared:



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




8.  Sensor Fiezo


Sensor piezoelektrik (sering disebut piezo sensor) adalah sensor yang bekerja berdasarkan efek piezoelektrik, yaitu kemampuan material tertentu (seperti kristal kuarsa atau keramik piezo) untuk menghasilkan tegangan listrik saat mengalami tekanan atau getaran.

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:

  1. Ketika sensor dalam kondisi diam, tidak ada output (tegangan = 0 atau sangat kecil).

  2. Saat diketuk, ditekan, atau digetarkan, material piezo menghasilkan tegangan listrik sesaat.

  3. Tegangan tersebut dapat diukur dengan pin ADC (Analog to Digital Converter) atau diproses dengan rangkaian penguat.

Spesifikasi:


Pin out:


Grafik respon sensor fiezo:



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



9. Motor Servo


Servo Motor adalah perangkat listrik yang digunakan pada mesin-mesin industri pintar yang berfungsi untuk mendorong atau memutar objek dengan kontrol yang dengan presisi tinggi dalam hal posisi sudut, akselerasi dan kecepatan, sebuah kemampuan yang tidak dimiliki oleh motor biasa. Jika Anda ingin memutar dan mengarahkan objek pada beberapa sudut atau jarak tertentu, maka Anda harus menggunakan Servo Motor. Hal ini dimungkinkan dengan kombinasi motor biasa dan tambahan sensor dalam hal ini berupa encoder untuk umpan balik posisi.


Prinsip kerja motor servo yaitu motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide Modulation / PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan waktu 1,5 ms (mili detik) akan memutar poros motor servo ke posisi sudut 90⁰. Bila pulsa lebih pendek dari 1,5 ms maka akan berputar ke arah posisi 0⁰ atau ke kiri (berlawanan dengan arah jarum jam), sedangkan bila pulsa yang diberikan lebih lama dari 1,5 ms maka poros motor servo akan berputar ke arah posisi 180⁰ atau ke kanan (searah jarum jam). Lebih jelasnya perhatikan gambar dibawah ini.

Pulse Width Modulation

Lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar ke posisi yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan pada posisi tersebut. Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi tersebut, maka motor servo akan mencoba menahan atau melawan dengan besarnya kekuatan torsi yang dimilikinya (rating torsi servo). Namun motor servo tidak akan mempertahankan posisinya untuk selamanya, sinyal lebar pulsa kendali harus diulang setiap 20 ms (mili detik) untuk menginstruksikan agar posisi poros motor servo tetap bertahan pada posisinya.

Berdasarkan jenis supply arus listriknya Motor servo terdiri dari dua jenis yaitu motor servo AC dan motor servo DC.
1. Motor servo DC diaplikasikan ke mesin yang ringan seperti mainan elektronik, printer dan beberapa perangkat elektronik rumah.
2. Motor servo AC sering digunakan untuk mesin-mesin di industri karena spesifikasinya yang bisa menerima arus tinggi maupun beban berat.
Pada project kali ini kami menggunakan jenis Motor Servo DC SG90s.

Spesifikasi:


Pin out:




10. Buzzer


Buzzer merupakan komponen elektronik yang mampu menghasilkan getaran suara dalam bentuk gelombang bunyi. Getaran suara diproduksi saat buzzer menerima tegangan listrik yang sesuai dengan spesifikasi dan karakteristiknya. Buzzer sering digunakan sebagai alarm karena cara penggunaannya yang sederhana: cukup berikan tegangan input untuk menghasilkan getaran suara yang dapat didengar.

Pada dasarnya prinsip kerja buzzer hampir sama dengan loud speaker, jadi buzzer juga terdiri dari kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan diafragma secara bolak-balik sehingga membuat udara bergetar yang akan menghasilkan suara.
 
Spesifikasi:


Pin out:




11. OLED


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:

  1. Mikrokontroler mengirimkan data karakter/grafik ke driver OLED (SSD1306).

  2. Driver mengatur tegangan ke piksel OLED berdasarkan data tersebut.

  3. Piksel akan menyala/mati untuk membentuk tampilan.

Spesifikasi:


Pin out:




12. Baterai


Baterai merupakan alat listrik-kimiawi yang menyimpan energi serta mengeluarkan tenaganya dalam bentuk listrik. Baterai ialah perangkat yang mampu menghasilkan tegangan DC, yaitu dengan cara mengubah energi kimia yang terkandung di dalamnya menjadi energi listrik melalui suatu reaksi elektrokimia, Redoks (Reduksi – Oksidasi). Baterai yang biasa dijual (disposable/sekali pakai) ini mempunyai tegangan listrik 1,5 volt. Baterai ada yang berbentuk tabung ataupun kotak.

Spesifikasi:




13. Keypad
Keypad adalah sekumpulan tombol atau sakelar yang disusun dalam kisi-kisi atau pola lainnya, biasanya ditemukan pada perangkat elektronik seperti telepon, kalkulator, dan sistem keamanan. Keypad memungkinkan pengguna untuk memasukkan data, perintah, atau informasi numerik ke dalam perangkat.

Spesifikasi:


Pin out:



13. Breadboard


Breadboard adalah papan tempat merakit rangkaian elektronik secara sementara tanpa perlu menyolder komponen. Breadboard memungkinkan pengguna untuk dengan mudah menyusun, menguji, dan memodifikasi rangkaian sebelum dibuat secara permanen di PCB (Printed Circuit Board). Karena sifatnya yang reusable dan fleksibel, breadboard sering digunakan dalam kegiatan pembelajaran, pengujian, dan pengembangan proyek elektronika.

Breadboard bekerja berdasarkan koneksi logam di dalam papan yang menghubungkan lubang-lubang tertentu. Ketika sebuah kaki komponen dimasukkan ke dalam lubang, maka kaki tersebut akan terhubung ke koneksi logam internal, dan secara otomatis terhubung dengan semua lubang lain dalam satu baris atau kolom (tergantung bagian breadboard).

Spesifikasi:



14. Kabel Jumper




Kabel jumper adalah kabel pendek yang digunakan untuk membuat koneksi listrik antara dua titik dalam rangkaian elektronik, terutama pada breadboard, modul, dan mikrokontroler seperti Arduino atau Raspberry Pi Pico.

Jenis kabel jumper yang umum digunakan:
  • 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.

Kabel jumper bekerja dengan menghantarkan arus listrik dari satu titik ke titik lain. Bagian konektor pada ujung kabel (male atau female) berfungsi sebagai media fisik untuk menghubungkan pin antar komponen elektronik.
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.
Spesifikasi:




15. Kabel USB




USB (Universal Serial Bus) adalah standar kabel dan konektor yang digunakan untuk komunikasi dan suplai daya antara komputer dan perangkat elektronik lainnya. Kabel USB berfungsi sebagai media penghubung untuk mentransfer data dan daya listrik dari satu perangkat ke perangkat lain, seperti antara komputer dan mikrokontroler (misalnya Raspberry Pi Pico, Arduino), ponsel, printer, flashdisk, dan lainnya.

Terdapat berbagai jenis konektor USB, seperti:
  • 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)
Kabel USB bekerja berdasarkan protokol komunikasi serial yang memungkinkan transfer data digital antara dua perangkat. Kabel ini memiliki empat hingga lima jalur utama di dalamnya:
  • 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

Proses kerjanya:
  • 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.
Spesifikasi:





5. Percobaan [Kembali]

a. Prosedur[Kembali]
  1.      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.


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, ADC
from time import sleep, time
import _thread
import keypadlib  # Pastikan file ini tersedia
import 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 perlu
oled = 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 = 0
last_attempt_time = 0
piezo_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, PWM
from time import sleep

# UART dari Pico 1
uart = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))

# Buzzer dan Servo
buzzer = 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]
    




 

Tidak ada komentar:

Posting Komentar

  BAHAN PRESENTASI UNTUK MATA KULIAH   ELEKTRONIKA    Oleh : Yuningsih Vebhy Selvania 2210953042 Elektronika (A)     Dosen Pengampu : Dr.  D...