Daftar Isi:

NexArdu: Kontrol Cerdas Iluminasi: 5 Langkah
NexArdu: Kontrol Cerdas Iluminasi: 5 Langkah

Video: NexArdu: Kontrol Cerdas Iluminasi: 5 Langkah

Video: NexArdu: Kontrol Cerdas Iluminasi: 5 Langkah
Video: i-box Сумерки | Руководство по установке 2024, Juli
Anonim
NexArdu: Kontrol Cerdas Iluminasi
NexArdu: Kontrol Cerdas Iluminasi

Memperbarui

Jika telah mengembangkan fungsi yang sama menggunakan Home Assistant. Asisten Rumah menawarkan berbagai kemungkinan yang sangat besar. Anda dapat menemukan perkembangannya di sini.

Sketsa untuk mengontrol penerangan rumah dengan cara yang cerdas melalui perangkat seperti X10 nirkabel 433.92MHz (alias 433MHz), mis. Nexa.

Latar belakang

Dalam hal pencahayaan dekoratif, entah bagaimana melelahkan bagi saya bahwa setiap minggu kedua atau ketiga saya harus menyesuaikan kembali pengatur waktu yang menyalakan lampu karena pergeseran jam matahari sehubungan dengan CET. Pada saat yang sama, beberapa malam kami tidur lebih awal dari yang lain. Karena itu, terkadang lampu padam "terlambat" atau "terlalu dini". Hal di atas menantang saya untuk berpikir: Saya ingin iluminasi dekoratif menyala selalu pada tingkat cahaya sekitar yang sama dan kemudian mati pada waktu tertentu tergantung pada apakah kita bangun atau tidak.

Objektif

Instruksi ini memanfaatkan kemungkinan perangkat yang dikendalikan nirkabel seperti System Nexa yang beroperasi pada frekuensi 433.92MHz. Di sini kami akan menampilkan:

  1. Kontrol iluminasi otomatis
  2. Kontrol web

Kontrol web. Server Web Internal vs Eksternal

Server Internal memanfaatkan kemungkinan perisai Arduino Ethernet untuk menyediakan server web. Server web akan menghadiri panggilan klien web untuk memeriksa dan berinteraksi dengan Arduino. Ini adalah solusi langsung dengan fungsionalitas terbatas; kemungkinan meningkatkan kode server web dibatasi oleh memori Arduino. Server Eksternal memerlukan pengaturan server web PHP eksternal. Pengaturan ini lebih rumit dan tidak didukung oleh tutorial ini, namun kode/halaman PHP untuk memeriksa dan mengarahkan Arduino dilengkapi dengan fungsionalitas dasar. Kemungkinan untuk meningkatkan server web, dalam hal ini, dibatasi oleh server web eksternal.

Bill of material

Untuk memanfaatkan sepenuhnya kemungkinan yang diberikan sketsa ini, Anda perlu:

  1. Arduino Uno (diuji pada R3)
  2. Perisai Ethernet Arduino
  3. Perangkat Nexa atau sejenisnya yang beroperasi pada 433.92MHz
  4. Sensor PIR (Passive InfraRed) yang beroperasi pada 433.92MHz
  5. Resistor 10KOhm
  6. LDR
  7. A RTC DS3231 (hanya versi server eksternal)
  8. Pemancar 433.92MHz: XY-FST
  9. Penerima 433.92MHz: MX-JS-05V

Minimal yang direkomendasikan adalah:

  1. Arduino Uno (diuji pada R3)
  2. Satu set Nexa atau operasi serupa pada 433.92MHz
  3. Resistor 10KOhm
  4. LDR
  5. Pemancar 433.92MHz: XY-FST

(Penghilangan pelindung Ethernet memerlukan modifikasi sketsa yang tidak disediakan dalam instruksi ini)

Logika Nexa. Deskripsi singkat

Penerima Nexa mempelajari ID remote control dan ID tombol. Dengan kata lain, setiap remote memiliki nomor pengirimnya dan setiap pasang tombol on/off memiliki ID tombolnya. Penerima harus mempelajari kode-kode itu. Beberapa dokumen Nexa menyatakan bahwa penerima dapat dipasangkan dengan hingga enam remote. Parameter Nexa:

  • SenderID: ID remote control
  • ButtonID: nomor pasangan tombol (hidup/mati). Dimulai dengan angka 0
  • Grup: ya/tidak (alias tombol "Semua mati/hidup")
  • Perintah: hidup/mati

Langkah-langkah yang Dapat Diinstruksikan. Catatan

Langkah-langkah berbeda yang dijelaskan di sini adalah untuk menawarkan dua rasa berbeda tentang cara mencapai tujuan. Jangan ragu untuk memilih salah satu pada kenyamanan Anda. Berikut indeksnya:

Langkah #1: Sirkuit

Langkah #2: Nexardu dengan Server Web Internal (menampilkan NTP)

Langkah #3: Nexardu dengan Server Eksternal

Langkah #4: Informasi Berharga

Langkah 1: Sirkuit…

Sirkuit…
Sirkuit…

Kawat komponen yang beragam seperti yang ditunjukkan pada gambar.

Pin Arduino#8 ke Pin data pada modul RX (penerima) Pin Arduino #2 ke Pin data pada modul RX (penerima) Pin Arduino#7 ke Pin data pada modul TX (pengirim) Pin Arduino A0 ke LDR

konfigurasi RTC. Hanya diperlukan pada konfigurasi Server Eksternal. Pin Arduino A4 ke pin SDA pada modul RTC Pin Arduino A5 ke pin SCL pada modul RTC

Langkah 2: Nexardu Dengan Server Web Internal (menampilkan NTP)

Perpustakaan

Kode ini menggunakan banyak perpustakaan. Kebanyakan dari mereka dapat ditemukan melalui "Library Manager" dari Arduino IDE. Tidakkah Anda menemukan perpustakaan yang terdaftar, silakan google.

Wire.hSPI.h - Diperlukan oleh perisai EthernetNexaCtrl.h - Pengontrol perangkat Nexa Ethernet.h - Untuk mengaktifkan dan menampilkan perisai EthernetRCSwitch.h - Diperlukan untuk PIRTime.h - Diperlukan untuk RTCTimeAlarms.h - Manajemen alarm waktuEthernetUdp.h - Diperlukan untuk klien NTP

Sketsa

Kode di bawah ini memanfaatkan kemungkinan penggunaan papan Arduino UNO tidak hanya sebagai sarana untuk mengontrol perangkat Nexa tetapi juga memiliki fitur server Web Internal. Catatan untuk ditambahkan adalah bahwa modul RTC (Real Time Clock) secara otomatis disesuaikan melalui NTP (Network Time Protocol).

Sebelum Anda mengunggah kode ke Arduino, Anda mungkin perlu mengonfigurasi hal berikut:

  • SenderId: Anda perlu mengendus SenderId terlebih dahulu, lihat di bawah
  • PIR_id: Anda perlu mengendus SenderId terlebih dahulu, lihat di bawah
  • Alamat IP LAN: atur IP LAN Anda ke perisai Ethernet Arduino Anda. Nilai default: 192.168.1.99
  • Server NTP: Tidak sepenuhnya diperlukan tetapi mungkin bagus untuk mencari server NTP di Google di sekitar Anda. Nilai default: 79.136.86.176
  • Kode disesuaikan untuk zona waktu CET. Sesuaikan nilai ini -jika perlu, ke zona waktu Anda untuk menampilkan waktu yang benar (NTP)

Mengendus kode Nexa

Untuk ini, Anda perlu menghubungkan -setidaknya, komponen RX ke Arduino seperti yang ditunjukkan pada rangkaian.

Temukan di bawah sketsa Nexa_OK_3_RX.ino yang, pada saat penulisan ini, kompatibel dengan perangkat Nexa NEYCT-705 dan PET-910.

Langkah-langkah yang harus diikuti adalah:

  1. Pasangkan penerima Nexa dengan remote control.
  2. Muat Nexa_OK_3_RX.ino ke Arduino dan buka "Serial Monitor".
  3. Tekan tombol remote control yang mengontrol penerima Nexa.
  4. Perhatikan "RemoteID" dan "ButtonID".
  5. Atur angka-angka ini di bawah SenderID dan ButtonID pada deklarasi variabel sketsa sebelumnya.

Untuk membaca Id PIR, cukup gunakan sketsa yang sama ini (Nexa_OK_3_RX.ino) dan baca nilainya di "Serial Monitor" saat PIR mendeteksi gerakan.

Langkah 3: Nexardu Dengan Server Eksternal

Perpustakaan

Kode ini menggunakan banyak perpustakaan. Sebagian besar dapat ditemukan melalui "Library Manager" dari Arduino IDE. Jika Anda tidak menemukan perpustakaan yang terdaftar, silakan google.

Wire.hRTClib.h - ini adalah perpustakaan dari https://github.com/MrAlvin/RTClibSPI.h - Diperlukan oleh Ethernet shieldNexaCtrl.h - Nexa device controllerEthernet.h - Untuk mengaktifkan dan menampilkan Ethernet shieldRCSwitch.h - Diperlukan untuk PIRTime.h - Diperlukan untuk RTCTimeAlarms.h - Manajemen alarm waktuaREST.h - untuk layanan RESTful API yang dieksploitasi oleh serverair/wdt.h eksternal - Penanganan pengatur waktu pengawas

Sketsa

Sketsa di bawah ini menampilkan cita rasa lain dari hal yang sama, kali ini memberdayakan kemungkinan yang dapat diberikan oleh server web eksternal. Seperti yang telah disebutkan dalam pendahuluan, Server Eksternal memerlukan penyiapan server web PHP eksternal. Pengaturan ini lebih rumit dan tidak didukung oleh tutorial ini, namun kode/halaman PHP untuk memeriksa dan mengarahkan Arduino dilengkapi dengan fungsionalitas dasar.

Sebelum Anda mengunggah kode ke Arduino, Anda mungkin perlu mengonfigurasi hal berikut:

  • SenderId: Anda perlu mengendus SenderId terlebih dahulu, lihat Mengendus kode Nexa pada langkah sebelumnya
  • PIR_id: Anda perlu mengendus SenderId terlebih dahulu, lihat Mengendus kode Nexa pada langkah sebelumnya
  • Alamat IP LAN: atur IP LAN Anda ke perisai Ethernet Arduino Anda. Nilai default: 192.168.1.99

Untuk prosedur sniffing kode Nexa, silakan lihat Langkah #1.

Berkas pelengkap

Unggah file nexardu4.txt terlampir ke server PHP eksternal Anda dan ganti namanya menjadi nexardu4.php

Pengaturan waktu RTC

Untuk mengatur waktu/tanggal pada RTC saya menggunakan sketsa SetTime yang dilengkapi library DS1307RTC.

Langkah 4: Informasi Berharga

Informasi Berharga
Informasi Berharga
Informasi Berharga
Informasi Berharga

Perilaku yang baik untuk diketahui

  1. Ketika Arduino berada di bawah "Kontrol Otomatis Ringan", Arduino dapat melewati empat status berbeda sehubungan dengan pencahayaan sekitar dan waktu:

    1. Bangun: Arduino menunggu malam tiba.
    2. Aktif: Malam telah tiba dan Arduino telah menyalakan lampu.
    3. Somnolent: Lampu menyala tetapi waktu untuk mematikannya akan datang. Dimulai pada "time_to_turn_off - PIR_time" yaitu jika time_to_turn_off diatur ke 22:30 dan PIR_time diatur ke 20 menit, maka Arduino akan masuk ke keadaan somnolent pada 22:10.
    4. Tidak aktif: Malam berlalu, Arduino telah mematikan lampu dan Arduino menunggu fajar untuk bangun.
  2. Arduino selalu mendengarkan sinyal yang dikirim oleh remote control. Fitur ini memungkinkan untuk menampilkan status lampu (hidup/mati) di web saat remote control digunakan.
  3. Saat Arduino dalam keadaan terjaga, ia mencoba untuk mematikan lampu setiap saat, oleh karena itu, sinyal ON yang dikirim oleh remote control untuk menyalakan lampu mungkin ditangkap oleh Arduino. Jika ini terjadi, Arduino akan mencoba mematikan lampu lagi.
  4. Saat Arduino aktif, ia mencoba menyalakan lampu setiap saat, oleh karena itu, sinyal MATI yang dikirim oleh remote control untuk mematikan lampu mungkin ditangkap oleh Arduino. Jika ini terjadi, Arduino akan mencoba menyalakan lampu lagi.
  5. Dalam keadaan mengantuk, lampu dapat dinyalakan/dimatikan dengan remote control. Arduino tidak akan melawan.
  6. Dalam keadaan mengantuk, hitungan mundur PIR akan mulai diatur ulang dari "time_to_turn_off - PIR_time" dan waktu_to_turn_off diperpanjang 20 menit setiap kali PIR mendeteksi gerakan. Sebuah "Sinyal PIR Terdeteksi!" pesan akan ditampilkan di browser web ketika ini terjadi.
  7. Sedangkan Arduino dalam keadaan dormant lampu dapat dinyalakan dan dimatikan melalui remote control. Arduino tidak akan melawan.
  8. Reset atau siklus daya Arduino akan membawanya ke mode aktif. Artinya jika Arduino telah direset setelah time_turn_off maka Arduino akan menyalakan lampu. Untuk menghindari hal ini Arduino perlu dibawa ke mode manual (centang "Light Automatic Control") dan tunggu sampai pagi untuk mengembalikannya ke "Light Automatic Control".
  9. Seperti yang disebutkan di atas, Arduino menunggu fajar untuk aktif kembali. Karena itu, sistem dapat tertipu dengan mengarahkan cahaya yang cukup kuat ke sensor cahaya yang melampaui ambang batas "luminositas minimum". Jika ini terjadi, maka Arduino harus berubah ke status aktif.
  10. Nilai Toleransi sangat penting untuk menghindari sistem bergoyang-goyang di sekitar nilai ambang batas Minimum Luminosity. Lampu Led, karena kedipan dan daya tanggapnya yang tinggi, dapat menjadi sumber perilaku mengepak. Tingkatkan nilai toleransi jika Anda mengalami masalah ini. Saya menggunakan nilai 7.

Baik untuk mengetahui tentang kode

  1. Seperti yang Anda lihat, kodenya sangat besar dan menggunakan banyak perpustakaan. Ini membahayakan jumlah memori bebas yang diperlukan untuk heap. Saya telah memperhatikan perilaku tidak stabil di masa lalu yang membuat sistem dihentikan, khususnya setelah panggilan web. Oleh karena itu, tantangan terbesar yang saya hadapi adalah membatasi ukurannya dan penggunaan variabel yang beragam untuk membuat sistem stabil.
  2. Kode yang mengeksploitasi server internal -digunakan oleh saya di rumah, telah berjalan sekarang sejak Februari 2016 bebas masalah.
  3. Saya telah berusaha keras untuk memperkaya kode dengan penjelasan. Manfaatkan ini untuk bermain dengan beragam parameter seperti jumlah pengiriman kode Nexa per burst, waktu sinkronisasi NTP, dll.
  4. Kode tidak menampilkan waktu musim panas. Ini perlu disesuaikan melalui browser web saat berlaku.

Beberapa poin untuk dipertimbangkan

  1. Tambahkan antena ke modul frekuensi radio (RF) TX dan RX. Ini akan menghemat waktu Anda mengeluh tentang dua poin utama: ketahanan dan jangkauan sinyal RF. Saya menggunakan kawat 50Ohm dengan panjang 17,28cm (6,80in).
  2. Intructable ini dapat bekerja dengan sistem otomasi rumah lainnya juga seperti Proove, misalnya. Salah satu dari sekian banyak syarat yang harus dipenuhi adalah mengoperasikannya pada frekuensi 433,92MHz.
  3. Sakit kepala besar dengan Arduino adalah berurusan dengan perpustakaan yang mungkin diperbarui dari waktu ke waktu dan tiba-tiba tidak kompatibel dengan sketsa "lama" Anda; masalah yang sama mungkin muncul saat memutakhirkan Arduino IDE Anda. Hati-hati bahwa ini bisa menjadi kasus kami di sini - ya, masalah saya juga.
  4. Beberapa klien web bersamaan dengan mode cahaya berbeda menciptakan status "berkedip".

Tangkapan layar

Pada gambar carousel di atas, Anda menemukan screenshot halaman web yang ditampilkan saat Anda memanggil Arduino melalui browser web Anda. Mengingat konfigurasi IP default kode, URL akan menjadi

Salah satu aspek yang mungkin perlu diperbaiki adalah penempatan tombol "kirim" karena tombol ini berpengaruh pada semua kotak input dan tidak hanya pada "Kontrol Otomatis Ringan" seperti yang mungkin dipikirkan orang. Dengan kata lain, jika Anda ingin mengubah salah satu nilai yang mungkin, Anda harus selalu menekan tombol "kirim".

Dokumentasi terperinci/Lanjutan

Saya telah melampirkan file-file berikut sehingga mereka dapat membantu Anda memahami seluruh solusi, khususnya untuk pemecahan masalah dan peningkatan.

Arduino_NexaControl_IS.pdf menyediakan dokumentasi tentang solusi Server Internal.

Arduino_NexaControl_ES.pdf menyediakan dokumentasi tentang solusi Server Eksternal.

Referensi eksternal

Sistem Nexa (Swedia)

Langkah 5: Selesai

Selesai!
Selesai!

Di sana Anda memiliki semuanya selesai dan beraksi!

Kasing Arduino Uno dapat ditemukan di Thingiverse sebagai "Arduino Uno Rev3 dengan kasing Ethernet Shield XL".

Direkomendasikan: