prototipe sistem penerangan otomatis yang diimplementasikan pada miniatur tangga biosko
SISTEM LAMPU TANGGA OTOMATIS BERBASIS RASPBERRY PI PICO DENGAN SENSOR INFRAMERAH DAN SHIFT REGISTER 74HC595
Kelompok RE-3D/6 —
Dhesta Athaya S., Khoirudin, Rachmadhani Aji K., Theofilus Ogawa G.
ABSTRAK
Lampu tangga yang menyala terus-menerus atau dikendalikan saklar manual menyebabkan pemborosan daya pada bangunan bertingkat dengan lalu lintas pejalan kaki yang jarang. Artikel ini membahas rancangan sistem lampu tangga otomatis yang menyalakan LED anak tangga secara berurutan mengikuti arah pergerakan orang, menggunakan Raspberry Pi Pico sebagai pengendali, dua IC 74HC595 sebagai penggerak 20 LED (10 kanal), dan empat sensor inframerah FC-51 sebagai pendeteksi arah. Pengendalian animasi menyala dan padam disusun sebagai mesin keadaan (state machine) dengan empat kondisi, yaitu MATI, NYALA, HIDUP, dan PADAM, yang diperbarui menggunakan time.ticks_ms() dan time.ticks_diff(), bukan time.sleep(), sehingga kedua arah tangga (naik dan turun) dapat diproses bergantian dalam satu putaran program tanpa saling menunggu. Jeda antar anak tangga diatur melalui konstanta JEDA_MS = 120 ms. Analisis kode menunjukkan bahwa pendekatan non-blocking ini menghindari keterlambatan yang lazim terjadi pada implementasi berbasis time.sleep() bertingkat. Analisis juga menemukan satu kesalahan penulisan pada nama metode konstruktor kelas Tangga yang menyebabkan objek tidak dapat dibuat sebelum diperbaiki.
Kata kunci: lampu tangga otomatis, Raspberry Pi Pico, 74HC595, sensor inframerah, mesin keadaan, non-blocking
I. PENDAHULUAN
A. Latar Belakang
Tangga pada bangunan bertingkat umumnya diterangi dengan lampu yang menyala sepanjang waktu atau dikendalikan saklar manual di setiap lantai. Kondisi ini menimbulkan dua persoalan praktis: lampu tetap menyala saat tidak ada orang yang melintas, dan pengguna harus meraba saklar dalam kondisi gelap sebelum menaiki atau menuruni tangga. Sensor gerak pasif seperti PIR memang sudah lazim dipasang untuk menyalakan lampu tangga secara otomatis, tetapi kebanyakan implementasinya menyalakan seluruh anak tangga sekaligus, tanpa efek berjalan yang mengikuti posisi orang.
Efek berjalan (chasing light) pada LED anak tangga biasanya diprogram dengan fungsi tunda time.sleep() di antara penyalaan tiap anak tangga. Pendekatan ini menghentikan seluruh eksekusi program selama jeda berlangsung, sehingga pembacaan sensor pada arah yang berlawanan tidak dapat dilakukan bersamaan. Akibatnya, apabila ada dua orang berjalan berlawanan arah pada waktu yang berdekatan, salah satu gerakan berpotensi tidak terdeteksi selama animasi arah yang lain sedang berjalan.
B. Rumusan Masalah
Berdasarkan uraian di atas, rumusan masalah pada rancangan ini adalah bagaimana menyusun program pengendali animasi LED anak tangga yang berjalan mengikuti arah pergerakan orang tanpa memblokir pembacaan sensor pada arah yang berlawanan, serta bagaimana mengendalikan 10 kanal keluaran LED hanya dengan memanfaatkan 3 pin GPIO pada mikrokontroler.
C. Tujuan
Rancangan ini bertujuan untuk: (1) menyusun mesin keadaan non-blocking yang mengendalikan animasi menyala dan padam pada dua objek tangga (arah naik dan arah turun) secara bergantian dalam satu putaran program; (2) mengurangi jumlah pin GPIO yang digunakan melalui penambahan dua IC shift register 74HC595 yang disusun bertingkat (cascade); (3) menganalisis kebenaran logika program pada tingkat kode, termasuk memeriksa potensi kesalahan penulisan yang dapat menghentikan eksekusi.
II. METODOLOGI
Perancangan dilakukan melalui empat tahap. Pertama, pemilihan komponen berdasarkan kebutuhan sistem, yaitu mikrokontroler dengan dukungan MicroPython, IC penggerak LED yang hemat pin, dan sensor inframerah dengan keluaran digital. Kedua, penyusunan diagram blok untuk menggambarkan aliran data dari sensor menuju indikator LED. Ketiga, perancangan algoritma pengendali dalam bentuk mesin keadaan per objek tangga, dituangkan ke diagram alir sebelum dituliskan sebagai kelas Tangga pada program MicroPython. Keempat, analisis kode (code review) terhadap program yang telah ditulis, mencakup pemeriksaan jalur eksekusi tiap keadaan, perhitungan waktu animasi dari konstanta JEDA_MS, serta pemeriksaan sintaks Python pada bagian yang berpotensi menimbulkan galat saat program dijalankan.
Perlu dicatat bahwa artikel ini menyajikan hasil analisis desain dan kode, bukan hasil pengujian pada rangkaian fisik yang sudah dirakit. Pengukuran waktu tanggap sensor pada perangkat keras sebenarnya perlu dilakukan pada tahap lanjutan untuk memverifikasi angka yang diperoleh dari perhitungan pada Bagian IV.
III. KAJIAN PUSTAKA
A. Komponen
Sistem ini disusun dari komponen berikut:
1. Raspberry Pi Pico
Raspberry Pi Pico merupakan papan mikrokontroler yang menggunakan chip RP2040 sebagai pusat pengendali sistem. Mikrokontroler ini diprogram menggunakan bahasa MicroPython untuk menjalankan seluruh logika pengendalian. Pada sistem ini, Raspberry Pi Pico berfungsi sebagai pengolah data dari sensor inframerah sekaligus pengendali IC shift register 74HC595. Komunikasi dengan shift register dilakukan melalui tiga jalur utama, yaitu Data (SER), Clock (SRCLK), dan Latch (RCLK). Selain itu, beberapa pin GPIO digunakan sebagai masukan (input) untuk membaca kondisi empat sensor inframerah yang dipasang pada kedua ujung tangga.
2. IC 74HC595 (2 buah)
IC 74HC595 merupakan register geser (Shift Register) tipe Serial-In Parallel-Out (SIPO) 8-bit yang berfungsi untuk memperbanyak jumlah keluaran digital dari mikrokontroler. Pada sistem ini digunakan dua buah IC 74HC595 yang disusun secara bertingkat (cascade), sehingga mampu menghasilkan hingga 16 kanal keluaran digital. Meskipun tersedia 16 keluaran, hanya 10 kanal yang dimanfaatkan untuk mengendalikan lampu tangga. Data dikirim secara serial dari Raspberry Pi Pico, kemudian diubah menjadi keluaran paralel melalui proses pergeseran data menggunakan sinyal clock dan latch. Dengan penggunaan shift register, kebutuhan pin GPIO pada mikrokontroler dapat dikurangi secara signifikan.
3. Sensor inframerah FC-51 (4 buah)
Sensor inframerah FC-51 digunakan sebagai pendeteksi keberadaan pengguna pada area tangga. Sensor bekerja berdasarkan prinsip pemancaran sinar inframerah yang dipantulkan oleh objek di depannya. Ketika objek terdeteksi pada jarak tertentu, keluaran sensor akan berubah menjadi kondisi aktif-LOW (logika 0). Empat sensor dipasang pada sistem, yaitu IR1 dan IR2 ditempatkan di bagian bawah dan bagian atas jalur tangga naik, sedangkan IR3 dan IR4 dipasang di bagian atas dan bagian bawah jalur tangga turun. Susunan ini memungkinkan sistem mengenali arah pergerakan pengguna sehingga urutan penyalaan LED dapat disesuaikan dengan arah naik maupun turun.
4. LED indikator anak tangga (20 buah)
LED digunakan sebagai indikator visual yang merepresentasikan pencahayaan pada setiap anak tangga. Total terdapat 20 LED yang dibagi menjadi 10 kelompok logis, di mana setiap kelompok terdiri dari dua LED yang dipasang secara paralel sehingga menyala secara bersamaan. Setiap kelompok LED dikendalikan oleh satu kanal keluaran dari IC 74HC595. Untuk membatasi arus yang mengalir dan melindungi LED dari kerusakan, setiap kelompok LED dilengkapi dengan resistor seri sebesar 330 Ω. Dengan konfigurasi ini, sistem mampu menghasilkan efek penyalaan lampu secara berurutan sesuai arah pergerakan pengguna.
5. Catu daya 5V
Catu daya 5 Volt berfungsi sebagai sumber energi bagi seluruh rangkaian. Tegangan 5 Volt digunakan untuk menyuplai Raspberry Pi Pico melalui pin VBUS atau VSYS, sekaligus memberikan catu daya pada kedua IC 74HC595. Penggunaan sumber tegangan yang stabil sangat penting agar mikrokontroler, sensor, dan shift register dapat bekerja secara optimal tanpa mengalami gangguan akibat penurunan atau fluktuasi tegangan selama sistem beroperasi.
B. Diagram Blok
Diagram blok pada Gambar 1 menunjukkan aliran sinyal dari sensor inframerah menuju mikrokontroler, diteruskan ke shift register, kemudian ke indikator LED. Catu daya menyuplai baik mikrokontroler maupun rangkaian keluaran.
C. Diagram Alir
Diagram pada Gambar 2 menggambarkan transisi keadaan pada objek Tangga sebagaimana didefinisikan pada kelas Tangga di dalam program. Setiap objek tangga (tangga_naik dan tangga_turun) menjalankan diagram yang identik, dan keduanya diperbarui pada tiap putaran loop utama tanpa saling menunggu.
Keadaan MATI berpindah ke NYALA saat fungsi deteksi() pada sensor masuk bernilai benar; anak tangga ke-0 langsung dinyalakan tanpa jeda. Selama keadaan NYALA, tiap kali selisih waktu sekarang dengan waktu tercatat (self.t) mencapai JEDA_MS, indeks idx bertambah satu dan anak tangga berikutnya dinyalakan, hingga seluruh anak tangga menyala dan keadaan berpindah ke HIDUP. Keadaan HIDUP bertahan sampai sensor keluar mendeteksi objek, lalu berpindah ke PADAM dan anak tangga dimatikan berurutan dari ujung terakhir menuju ujung pertama dengan pola jeda yang sama, sebelum kembali ke MATI.
D. Rangkaian Skematik
Gambar 3 menampilkan hubungan pin pengendali antara Raspberry Pi Pico dan dua IC 74HC595. Pin GP18 dihubungkan ke pin 14 (DS) IC1 sebagai jalur data, GP19 ke pin 12 (STCP) sebagai jalur latch, dan GP20 ke pin 11 (SHCP) sebagai jalur clock. Pin 9 (Q7') pada IC1, yaitu keluaran serial yang diteruskan ke IC berikutnya, dihubungkan ke pin 14 (DS) IC2, sedangkan jalur STCP dan SHCP pada kedua IC disatukan sehingga kedua register bergeser dan mengunci data secara bersamaan.
Setiap keluaran Q0 hingga Q7 pada kedua IC diberi resistor seri sebelum dihubungkan ke dua LED yang dipasang paralel. Susunan ini memungkinkan 10 kanal logis pada program (channel 0-9 di dalam fungsi refresh()) memetakan langsung ke 10 pasang LED fisik.
E. Diagram Pengawatan
Gambar 4 menunjukkan pengawatan empat sensor inframerah ke pin masukan Pico. IR1 terhubung ke GP10, IR2 ke GP11, IR3 ke GP12, dan IR4 ke GP13. Keempat sensor mendapat suplai 3V3 dan GND dari Pico, sedangkan pin keluaran (OUT) masing-masing sensor dibaca sebagai masukan digital.
Polaritas keluaran sensor diatur melalui konstanta AKTIF_LOW pada program. Ketika bernilai True, fungsi deteksi() menganggap sensor mendeteksi objek saat nilai pin bernilai 0, sesuai karakteristik modul FC-51 yang digunakan pada rancangan ini.
IV. HASIL DAN PEMBAHASAN
Pembahasan berikut disusun berdasarkan pembacaan langsung terhadap program yang telah ditulis, tanpa data pengujian perangkat keras.
A. Fungsi kirim() dan Waktu Pengiriman Data
Fungsi kirim(byte_ic2, byte_ic1) menurunkan pin STCP sebelum menggeser bit agar perubahan pada register geser tidak langsung tampak di keluaran, kemudian menggeser 16 bit satu per satu dari bit paling signifikan (MSB) memakai pasangan turun-naik pada SHCP, dan menaikkan STCP di akhir untuk mengunci seluruh data ke keluaran secara serentak. Karena byte_ic2 dikirim lebih dahulu, data tersebut akan bergeser melewati IC1 menuju IC2 pada pengiriman byte kedua, sesuai dengan susunan cascade pada Gambar 3. Program tidak menyisipkan jeda eksplisit pada setiap toggle pin, sehingga durasi pengiriman 16 bit bergantung pada kecepatan eksekusi Python pada RP2040, yang pada praktiknya berorde puluhan mikrodetik dan jauh lebih singkat dibanding JEDA_MS = 120 ms yang dipakai untuk animasi.
B. Mesin Keadaan dan Perhitungan Waktu Animasi
Objek Tangga menyimpan lima nilai boolean pada self.steps, dan animasi menyala dimulai dengan menyalakan anak tangga indeks ke-0 secara langsung saat sensor masuk terdeteksi, tanpa menunggu JEDA_MS. Empat anak tangga berikutnya masing-masing menyala setelah selisih waktu mencapai JEDA_MS, sehingga total waktu dari deteksi awal hingga seluruh lima anak tangga menyala adalah (n-1) × JEDA_MS, atau 4 × 120 ms = 480 ms untuk kelima anak tangga pada satu arah. Perhitungan yang sama berlaku untuk animasi padam, yang berjalan mundur dari indeks terakhir menuju indeks pertama.
Loop utama memanggil update() pada kedua objek tangga di setiap putaran dan hanya menjeda 5 ms melalui time.sleep_ms(5). Nilai ini jauh lebih kecil dibanding JEDA_MS sehingga galat waktu penyalaan tiap anak tangga tidak lebih dari 5 ms, nilai yang tidak signifikan secara visual pada animasi LED. Pendekatan berbasis time.ticks_diff() ini yang membuat kedua arah tangga dapat diperbarui pada putaran loop yang sama tanpa satu arah menunggu animasi arah lain selesai, berbeda dari pendekatan time.sleep() bertingkat yang disebutkan pada Bagian I.
C. Fungsi refresh() dan Pemetaan Kanal
Fungsi refresh() menggabungkan lima elemen steps milik tangga_naik dan lima elemen steps milik tangga_turun menjadi satu daftar sepuluh kanal (indeks 0-4 untuk tangga naik, indeks 5-9 untuk tangga turun). Kanal indeks 0 hingga 7 dipetakan ke byte b1 (IC1) dan kanal indeks 8 hingga 9 dipetakan ke byte b2 (IC2) melalui operasi bitwise. Pemetaan ini konsisten dengan urutan pengiriman pada fungsi kirim(), yaitu byte_ic2 dikirim sebelum byte_ic1.
D. Temuan: Kesalahan Penulisan Konstruktor Kelas
Kelas Tangga menuliskan metode inisialisasi sebagai def _init_(self, ...) dengan garis bawah tunggal pada awal dan akhir nama metode. Python hanya mengenali metode konstruktor apabila ditulis dengan garis bawah ganda, yaitu __init__. Selama nama metode ditulis dengan garis bawah tunggal, Python akan memperlakukannya sebagai metode biasa, bukan konstruktor, sehingga baris tangga_naik = Tangga(ir1, ir2) akan menimbulkan TypeError karena konstruktor bawaan object tidak menerima argumen posisi. Perbaikan yang diperlukan adalah mengubah _init_ menjadi __init__ pada definisi kelas Tangga agar program dapat dijalankan sebagaimana mestinya.
E. Keterbatasan
Analisis pada bagian ini terbatas pada pembacaan kode dan perhitungan berdasarkan konstanta yang tertulis di dalamnya. Program belum diuji pada rangkaian fisik, sehingga waktu tanggap sensor FC-51 yang sebenarnya, termasuk kemungkinan pantulan sinyal (debounce) akibat gerakan tangan atau benda lain yang melintas di depan sensor, belum dapat dipastikan. Program pada versi ini juga tidak menyertakan mekanisme debounce maupun penundaan minimum antar-deteksi pada sensor yang sama.
V. PROGRAM
VI. KESIMPULAN
Rancangan mesin keadaan dengan empat kondisi (MATI, NYALA, HIDUP, PADAM) yang diperbarui memakai time.ticks_diff() berhasil menghindari pemblokiran eksekusi yang biasa terjadi pada penggunaan time.sleep() bertingkat, sehingga kedua arah tangga dapat diproses dalam satu putaran loop yang sama. Penggunaan dua IC 74HC595 yang disusun cascade mengurangi kebutuhan pin GPIO dari 10 pin keluaran langsung menjadi 3 pin (DS, STCP, SHCP), dengan total waktu animasi dari anak tangga pertama hingga anak tangga kelima sebesar 480 ms sesuai konstanta JEDA_MS = 120 ms. Analisis kode juga menemukan kesalahan penulisan pada metode konstruktor kelas Tangga (_init_ alih-alih __init__) yang perlu diperbaiki agar program dapat dijalankan. Pengujian pada rangkaian fisik, termasuk pengukuran waktu tanggap sensor dan penambahan mekanisme debounce, disarankan sebagai tahap lanjutan sebelum sistem ini dipasang pada tangga sebenarnya.
VII. LAMPIRAN
link YT : https://youtu.be/Q-2GJtSEedw
link PPT :https://canva.link/lsg1sf0m7pk2js9
Komentar
Posting Komentar