Daftar Isi:

Lampu Ramadhan - Otomasi Rumah IOT: 6 Langkah
Lampu Ramadhan - Otomasi Rumah IOT: 6 Langkah

Video: Lampu Ramadhan - Otomasi Rumah IOT: 6 Langkah

Video: Lampu Ramadhan - Otomasi Rumah IOT: 6 Langkah
Video: Project IoT Sederhana Menyalakan Lampu - PCBWAY.COM 2024, November
Anonim
Lampu Ramadhan | Otomasi Rumah IOT
Lampu Ramadhan | Otomasi Rumah IOT

Saat Ramadhan mengetuk pintu, kota-kota di seluruh dunia menyala dan bersiap untuk bulan puasa. Lampu digantung di alun-alun dan di jalan-jalan kota serta di dinding luar rumah yang dinyalakan pada malam hari sampai matahari terbit di pagi hari.

Dalam proyek ini, saya ingin membagikan kontribusi saya, di mana saya mengotomatiskan pencahayaan dekorasi ini berdasarkan waktu Adzan dan menambahkannya ke sistem rumah pintar saya.

Langkah 1: Teori

Pada dasarnya, lebih mudah dan lebih dapat diterapkan untuk mengotomatisasi pencahayaan berdasarkan intensitas sinar matahari, misalnya. Namun, saya ingin ini memiliki semangat bulan suci yaitu, lampu akan menyala selama orang diperbolehkan makan selama bulan puasa. Secara khusus, lampu menyala mulai dari Adzan Maghrib hingga Adzan Subuh setiap hari tanpa ada interaksi manusia.

Langkah 2: Desain

Di bawah ini saya akan mencantumkan persyaratan/kemampuan proyek ini:

  • Sistem harus dapat memproses secara otomatis saat boot.
  • Sistem harus dapat mengeksekusi algoritma keputusan (ON/OFF) secara berkala.
  • Sistem harus dapat memanggil API setiap hari.
  • Sistem harus dapat memulihkan dari restart yang tidak direncanakan.
  • Sistem harus menjalankan algoritma keputusan (ON/OFF) setelah menerima data secara instan.
  • Sistem harus menyediakan sakelar untuk menyalakan mode autopilot (mode Otomatis).
  • Sistem harus menyediakan sakelar untuk menyalakan/mematikan lampu secara manual.
  • Memicu sakelar manual harus mengatur mode manual ke OFF.
  • Ketika mode Otomatis ON, hasil dari algoritma keputusan harus tercermin pada saklar manual ON/OFF.

Langkah 3: Detail Teknis: API

Detail Teknis: API
Detail Teknis: API

Agar teori tersebut dapat diterapkan, maka perlu diketahui waktu Adzan setiap hari sejak variabelnya dan bertindak atasnya untuk menyalakan/mematikan lampu/dekorasi.

Untuk tujuan ini, saya memutuskan untuk menggunakan API berbasis lokasi untuk melayani data (waktu Adzan)

muslimsalat.com/api/#location

  • API ini menyediakan berbagai opsi dan parameter konfigurasi yang dijelaskan dalam tautan dokumentasi di atas.
  • Disarankan untuk menggunakan API_key Anda sendiri yang gratis saat pendaftaran.
  • Dalam desain saya, saya tertarik dengan timeline harian.
  • Waktu yang dikembalikan dalam format 12 jam (AM/PM).
  • Dari segi lokasi, saya berharap jika API ini dapat memberikan opsi yang lebih akurat untuk lokasi seperti sistem koordinat geografis koordinat (Lintang dan Bujur). Untuk cara ini, API ini dapat diberikan dengan nama kota misalnya dan ini cukup dalam banyak kasus. Sayangnya, hasil dari kota tertentu saya cukup bias dalam beberapa tes dan ada beberapa menit perbedaan ketika membandingkan waktu Adzan antara hasil API dan waktu sebenarnya dari Adzan di kota saya. Di sisi lain, hasilnya sangat cocok ketika saya memberikan kota yang dekat ke utara dan saya berpegang teguh pada itu!
  • URL API yang saya gunakan adalah:

Langkah 4: Detail Teknis: Perangkat Keras

Detail Teknis: Perangkat Keras
Detail Teknis: Perangkat Keras

Untuk kesederhanaan, saya membiarkan perangkat keras keluar dari proses sinkronisasi dengan API dan perhitungan waktu dengan mendelegasikan operasi ini ke Sistem Otomasi Rumah milik saya. Ini akan memberi saya lebih banyak kontrol jika saya ingin mengubah sumber API dan algoritme penghitungan.

Karena itu, saya menggunakan ESP8266 (NodeMCU) untuk terhubung ke jaringan lokal melalui WIFI dan modul relai sebagai aktuator. NodeMCU akan menggunakan protokol MQTT dan mendengarkan topik tertentu untuk mendapatkan perintah untuk menghidupkan/mematikan relai. Sesimpel itu!

Langkah 5: Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah

Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah
Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah
Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah
Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah
Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah
Detail Teknis: Menghubungkan Titik | Otomatisasi Rumah

RaspberryPi saya memiliki instance nodered yang mampu menangani semua yang saya butuhkan untuk proyek ini. Ini juga memiliki server MQTT yang diinstal untuk mempublikasikan pesan kami.

Pada awalnya, saya berpikir bahwa saya dapat mengambil data API setiap hari pada jam 9 pagi dan mengekstrak waktu Adzan Subuh dan Mahgrib dan terus membandingkan waktu saat ini dengan variabel-variabel ini yaitu:

setiap 30 detik:

jika: Mahgrib < SEKARANG < Subuh benar | nyalakan lampu | mempublikasikan pesan AKTIF ke topik MQTT yang ditentukan lain: matikan

Untuk membandingkan waktu, saya mengonversi jam yang disediakan oleh API dari jj:mm(AM/PM) ke format tanggal penuh dengan menyetel bagian tanggal ke tanggal yang dapat diabaikan dalam riwayat, misalnya (1/1/1970) karena kami membandingkan waktu hanya untuk waktu saat ini (bagian tanggal juga dikonversi).

Sayangnya, ini hanya akan berfungsi dalam kasus langsung. Misalkan kasus ketika daya listrik mati atau sistem restart karena alasan yang tidak direncanakan. Jika kasus ini terjadi sebelum jam 12 pagi maka kita masih aman, tetapi setelah jam 12 pagi ini akan menggagalkan algoritma sederhana kita.

Sebagai contoh, mari kita adzan Magrib pada pukul 19:30 dan Subuh pada pukul 04:10. Saat sistem boot, sistem akan mengirim permintaan baru untuk mengambil data yang disebutkan sebelumnya. Jika waktu sekarang adalah 1:45 pagi, kami berharap algoritme kami kembali benar, tetapi kenyataannya tidak karena 1:45 kurang dari Fajar (4:10) tetapi tidak lebih besar dari Magrib (7:30). Ini karena kami menyatukan tanggal di antara semua variabel. Di bawah ini adalah versi final dari algoritma (sejauh ini):

setiap 30 detik:

if ((magrib.getHours() >=12 && fajr.getHours() <=12) || subuh < maghrib) { fajr.setDate(fajr.getDate()+1); // menangani rentang hari endTime if (now.getHours() <=12) { now.setDate(now.getDate()+1); // handle spanning days currentTime } } // di bawah ini adalah blok kode sebelumnya jika: Mahgrib < NOW < Fajr true | nyalakan lampu | mempublikasikan pesan AKTIF ke topik MQTT yang ditentukan else: false | matikan

Alur proses lengkap dijelaskan pada gambar di atas.

Dalam hal UI, saya menambahkan 2 sakelar ke UI/antarmuka:

  1. Saklar untuk mengubah proses ini Otomatis atau Manual.
  2. Saklar untuk menghidupkan/mematikan lampu secara manual.

Langkah 6: Mengakhiri

Waktu berlalu tidak pernah untuk diingat. Melakukan proyek 1 hari yang sederhana memungkinkan Anda untuk menarik napas di jalur cepat ini dan membantu Anda menghidupkan kembali soft skill Anda dari waktu ke waktu.

Saya mencoba sebanyak mungkin dalam proyek ini untuk membuatnya tetap sederhana dan dapat digunakan kembali di seluruh dunia.

Silakan Pilih instruksi ini jika menurut Anda proyek ini layak.

Selamat ramadhan!

Direkomendasikan: