İçindekiler:

NexArdu: Aydınlatma Akıllı Kontrol: 5 Adım
NexArdu: Aydınlatma Akıllı Kontrol: 5 Adım

Video: NexArdu: Aydınlatma Akıllı Kontrol: 5 Adım

Video: NexArdu: Aydınlatma Akıllı Kontrol: 5 Adım
Video: Séance ordinaire - 5 juillet 2021 2024, Temmuz
Anonim
NexArdu: Aydınlatma Akıllı Kontrolü
NexArdu: Aydınlatma Akıllı Kontrolü

Güncelleme

Home Assistant'ı kullanarak aynı işlevi geliştirdiyseniz. Ev Asistanı çok çeşitli olanaklar sunar. Gelişmeyi burada bulabilirsiniz.

433.92MHz (diğer adıyla 433MHz) kablosuz X10 benzeri cihazlar aracılığıyla ev aydınlatmasını akıllı bir şekilde kontrol etmek için bir taslak, ör. Nexa.

Arka plan

Dekoratif aydınlatma söz konusu olduğunda, güneş saatinin CET'ye göre değişmesi nedeniyle her iki veya üç haftada bir ışıkları açan zamanlayıcıları yeniden ayarlamak zorunda kalmam nedense beni yoruyor. bazı geceler diğerlerinden daha erken yatarız. Bu nedenle, bazen ışıklar "çok geç" veya "çok erken" kapanır. Yukarıdakiler beni düşünmeye zorladı: Dekoratif aydınlatmanın her zaman aynı ortam ışığı seviyesinde açılmasını ve uyanık olup olmamamıza bağlı olarak belirli bir zamanda kapanmasını istiyorum.

Amaç

Bu talimat, 433.92MHz frekansında çalışan System Nexa gibi kablosuz kontrollü cihazların olanaklarından yararlanır. Burada öne çıkaracağız:

  1. Otomatik aydınlatma kontrolü
  2. Web kontrolü

Web kontrolü. Dahili ve Harici Web sunucusu

Dahili Sunucu, bir web sunucusu sağlamak için Arduino Ethernet kalkanının olasılığını kullanır. Web sunucusu, Arduino'yu kontrol etmek ve etkileşim kurmak için web istemcisi çağrılarına katılacak. Bu, sınırlı işlevselliğe sahip doğrudan bir çözümdür; web sunucusu kodunu geliştirme olanakları Arduino'nun belleği ile sınırlıdır. Harici Sunucu, harici bir PHP web sunucusunun kurulmasını gerektirir. Bu kurulum daha karmaşıktır ve bu öğretici tarafından desteklenmez, ancak Arduino'yu kontrol etmek ve yönlendirmek için PHP kodu/sayfası temel işlevsellik ile sağlanır. Web sunucusunu geliştirme olanakları, bu durumda, harici web sunucusu ile sınırlıdır.

Malzeme listesi

Bu eskizin sağladığı olanaklardan tam olarak yararlanmak için şunlara ihtiyacınız vardır:

  1. Bir Arduino Uno (R3'te test edilmiştir)
  2. Arduino Ethernet kalkanı
  3. 433.92MHz'de çalışan bir Nexa seti veya benzeri
  4. 433.92MHz'de çalışan bir PIR (Pasif Kızılötesi) sensörü
  5. 10KOhms direnç
  6. bir LDR
  7. Bir RTC DS3231 (yalnızca harici sunucu sürümü)
  8. 433.92MHz verici: XY-FST
  9. 433.92MHz alıcı: MX-JS-05V

Önerilen minimum:

  1. Bir Arduino Uno (R3'te test edilmiştir)
  2. 433.92MHz'de çalışan bir Nexa seti veya benzeri
  3. 10KOhms direnç
  4. bir LDR
  5. 433.92MHz verici: XY-FST

(Ethernet kalkanının atlanması, bu talimatta verilmeyen taslakta değişiklik yapılmasını gerektirir)

Nexa Mantık. Kısa bir açıklama

Nexa alıcısı, uzaktan kumanda kimliğini ve düğme kimliğini öğrenir. Başka bir deyişle, her uzaktan kumandanın gönderici numarası ve her bir açma/kapama düğmesi çiftinin düğme kimliği vardır. Alıcının bu kodları öğrenmesi gerekir. Bazı Nexa belgeleri, bir alıcının altı adede kadar uzaktan kumandayla eşleştirilebileceğini belirtir. Nexa parametreleri:

  • SenderID: Uzaktan kumandanın kimliği
  • ButtonID: düğme çifti numarası (açık/kapalı). 0 numara ile başlar
  • Grup: evet/hayır ("Tümü kapalı/açık" düğmeleri olarak da bilinir)
  • Komut: açık/kapalı

Eğitilebilir Adımlar. Not

Burada açıklanan farklı Adımlar, amaca nasıl ulaşılacağına dair iki farklı tat sunmak içindir. Size uygun olanı seçmekten çekinmeyin. İşte indeks:

Adım 1: Devre

Adım #2: Dahili Web Sunuculu Nexardu (NTP özellikli)

Adım 3: Harici Sunuculu Nexardu

Adım #4: Değerli Bilgiler

Adım 1: Devre…

Devre…
Devre…

Çeşitli bileşenleri resimde gösterildiği gibi bağlayın.

Arduino pin#8'den RX (alıcı) modülündeki Data pinineArduino pin#2'den RX (alıcı) modülündeki Data pinineArduino pin#7'den TX (gönderici) modülündeki Data pinineArduino pini A0'dan LDR'ye

RTC yapılandırması. Sadece Harici Sunucu konfigürasyonunda gereklidir. RTC modülünde Arduino pini A4 - SDA piniArduino pini A5 - RTC modülü üzerindeki SCL pini

Adım 2: Dahili Web Sunuculu Nexardu (NTP özellikli)

Kütüphaneler

Bu kod, birçok kitaplıktan yararlanır. Bunların çoğu Arduino IDE'nin "Kütüphane Yöneticisi" aracılığıyla bulunabilir. Listelenen bir kitaplık bulamazsanız, lütfen google.

Wire.hSPI.h - Ethernet shieldNexaCtrl.h için gereklidir - Nexa cihaz denetleyicisi Ethernet.h - Ethernet shieldRCSwitch.h'yi etkinleştirmek ve öne çıkarmak için - PIRTime.h için gerekli - RTCTimeAlarms.h için gerekli - Zaman alarmı yönetimiEthernetUdp.h - Şunun için gerekli NTP istemcisi

Kroki

Aşağıdaki kod, Arduino UNO kartını yalnızca Nexa cihazlarını kontrol etme aracı olarak değil, aynı zamanda bir Dahili Web sunucusuna da sahip olma olasılığından yararlanır. Eklenecek bir açıklama, RTC (Gerçek Zamanlı Saat) modülünün NTP (Ağ Zaman Protokolü) aracılığıyla otomatik olarak ayarlanmasıdır.

Kodu Arduino'ya yüklemeden önce aşağıdakileri yapılandırmanız gerekebilir:

  • SenderId: önce SenderId'i koklamanız gerekir, aşağıya bakın
  • PIR_id: Önce SenderId'i koklamanız gerekir, aşağıya bakın
  • LAN IP Adresi: LAN'ınızın IP'sini Ethernet Arduino kalkanınıza ayarlayın. Varsayılan değer: 192.168.1.99
  • NTP Sunucusu: Kesinlikle gerekli değil, ancak yakınınızdaki NTP sunucularını google'da aramak iyi olabilir. Varsayılan değer: 79.136.86.176
  • Kod, CET saat dilimine göre ayarlanır. Doğru saati (NTP) görüntülemek için gerekirse bu değeri kendi saat diliminize göre ayarlayın.

Nexa kodlarını koklama

Bunun için en azından RX bileşenini devrede gösterildiği gibi Arduino'ya bağlamanız gerekir.

Nexa_OK_3_RX.ino taslağını aşağıda, yazıldığı sırada Nexa cihazları NEYCT-705 ve PET-910 ile uyumlu olduğunu bulun.

İzlenecek adımlar şunlardır:

  1. Nexa alıcıyı uzaktan kumandayla eşleştirin.
  2. Nexa_OK_3_RX.ino'yu Arduino'ya yükleyin ve "Seri Monitör" ü açın.
  3. Nexa alıcısını kontrol eden uzaktan kumanda düğmesine basın.
  4. "RemoteID" ve "ButtonID" bilgilerini not alın.
  5. Bu sayıları, önceki çizimin değişken bildiriminde SenderID ve ButtonID altında ayarlayın.

PIR'nin kimliğini okumak için, aynı taslağı (Nexa_OK_3_RX.ino) kullanın ve PIR hareket algıladığında "Seri Monitör" üzerindeki değeri okuyun.

Adım 3: Harici Sunuculu Nexardu

Kütüphaneler

Bu kod, birçok kitaplıktan yararlanır. Çoğu, Arduino IDE'nin "Kütüphane Yöneticisi" aracılığıyla bulunabilir. Listelenen bir kitaplık bulamazsanız, lütfen google.

Wire.hRTClib.h - bu, https://github.com/MrAlvin/RTClibSPI.h adresindeki kitaplıktır - Ethernet shieldNexaCtrl.h için gereklidir - Nexa device controllerEthernet.h - Ethernet shieldRCSwitch.h'yi etkinleştirmek ve özellik sağlamak için - Şunun için gerekli PIRTime.h - RTCTimeAlarms.h için gerekli - Zaman alarmı yönetimiaREST.h - harici serverair/wdt.h tarafından yararlanılan RESTful API hizmetleri için - Watchdog zamanlayıcı yönetimi

Kroki

Aşağıdaki taslak, aynı şeyin başka bir tadına sahiptir, bu sefer harici bir web sunucusunun sağlayabileceği olasılıkları güçlendirir. Giriş bölümünde zaten belirtildiği gibi, Harici Sunucu, harici bir PHP web sunucusunun kurulmasını gerektirir. Bu kurulum daha karmaşıktır ve bu öğretici tarafından desteklenmez, ancak Arduino'yu kontrol etmek ve yönlendirmek için PHP kodu/sayfası temel işlevsellik ile sağlanır.

Kodu Arduino'ya yüklemeden önce aşağıdakileri yapılandırmanız gerekebilir:

  • SenderId: önce SenderId'i koklamanız gerekir, önceki adımda Nexa kodlarını koklama bölümüne bakın
  • PIR_id: önce SenderId'i koklamanız gerekir, önceki adımda Nexa kodlarını koklama bölümüne bakın
  • LAN IP Adresi: LAN'ınızın IP'sini Ethernet Arduino kalkanınıza ayarlayın. Varsayılan değer: 192.168.1.99

Nexa kod koklama prosedürü için lütfen Adım #1'e bakın.

tamamlayıcı dosya

Ekli nexardu4.txt dosyasını harici PHP sunucunuza yükleyin ve onu nexardu4.php olarak yeniden adlandırın

RTC zaman ayarı

RTC'de saati/tarihi ayarlamak için DS1307RTC kitaplığını bir araya getiren SetTime taslağını kullanıyorum.

Adım 4: Değerli Bilgiler

Degerli bilgi
Degerli bilgi
Degerli bilgi
Degerli bilgi

Davranışı bilmek güzel

  1. Arduino "Hafif Otomatik Kontrol" altındayken, ortam aydınlatması ve günün saatiyle ilgili olarak dört farklı durumdan geçebilir:

    1. Uyanık bir şekilde: Arduino gecenin gelmesini bekliyor.
    2. Aktif: Gece geldi ve Arduino ışıkları açtı.
    3. Somnolent: Işıklar AÇIK ama onları kapatma zamanı geliyor. "time_to_turn_off - PIR_time" da başlar, yani time_to_turn_off 22:30 ve PIR_time 20 dakika olarak ayarlanmışsa, Arduino 22:10'da uyku durumuna girecektir.
    4. Uykuda: Gece geçiyor, Arduino ışıkları kapattı ve Arduino şafağın uyanmasını bekliyor.
  2. Arduino her zaman uzaktan kumandalar tarafından gönderilen sinyalleri dinler. Bu, uzaktan kumanda kullanıldığında web üzerinde ışıkların durumunu (açık/kapalı) gösterme olanağı sunar.
  3. Arduino uyanıkken ışıkları her zaman KAPALI duruma getirmeye çalışır, bu nedenle uzaktan kumanda tarafından ışıkları açmak için gönderilen AÇIK sinyalleri Arduino tarafından yakalanabilir. Bu olursa, Arduino ışıkları tekrar kapatmaya çalışacaktır.
  4. Arduino aktifken ışıkları sürekli açmaya çalışır, bu nedenle uzaktan kumanda ile ışıkları kapatmak için gönderilen KAPALI sinyalleri Arduino tarafından yakalanabilir. Bu olursa, Arduino ışıkları tekrar açmaya çalışacaktır.
  5. Uyku durumunda, ışıklar uzaktan kumanda ile açılıp kapatılabilir. Arduino karşı koymayacak.
  6. Uyku durumunda, PIR geri sayımı "time_to_turn_off - PIR_time" dan sıfırlanmaya başlar ve böylece PIR her hareket algıladığında time_to_turn_off 20 dakika uzar. Bir "PIR Sinyali Algılandı!" mesajı bu olduğunda web tarayıcısında gösterilecektir.
  7. Arduino uykudayken ışıklar uzaktan kumanda ile açılıp kapatılabilir. Arduino karşı koymayacak.
  8. Arduino'nun sıfırlanması veya güç döngüsü onu aktif moda getirecektir. Bu, Arduino time_turn_off'tan sonra sıfırlanırsa, Arduino'nun ışıkları açacağı anlamına gelir. Bundan kaçınmak için Arduino'nun manuel moda getirilmesi ("Hafif Otomatik Kontrol" seçeneğini işaretleyin) ve "Hafif Otomatik Kontrol" e geri dönmesi için sabaha kadar beklemesi gerekir.
  9. Daha önce de belirtildiği gibi, Arduino şafağın tekrar aktif hale gelmesini bekler. Bu nedenle sistem, "minimum parlaklık" eşiğini aşacak şekilde ışık sensörüne yeterince güçlü bir ışık yönlendirerek aldanabilir. Bu olursa, Arduino aktif duruma geçecektir.
  10. Sistemin Minimum Parlaklık eşik değeri etrafında açılıp kapanmasını önlemek için Tolerans değeri çok önemlidir. Led ışıklar, titreşmeleri ve yüksek tepki vermeleri nedeniyle bir çırpma davranışı kaynağı olabilir. Bu sorunu yaşıyorsanız tolerans değerini artırın. 7 değerini kullanıyorum.

Kod hakkında bilmek güzel

  1. Fark edebileceğiniz gibi, kod çok büyüktür ve önemli miktarda kitaplık kullanır. Bu, yığın için gerekli olan boş bellek miktarını tehlikeye atar. Geçmişte, özellikle web aramalarından sonra sistemin durdurulmasına neden olan kararsız davranışlar fark ettim. Bu nedenle, karşılaştığım en büyük zorluk, sistemi kararlı hale getirmek için boyutunu ve çeşitli değişkenlerin kullanımını sınırlamak oldu.
  2. Evde kullandığım dahili sunucuyu kullanan kod, Şubat 2016'dan beri sorunsuz çalışıyor.
  3. Kodu açıklamalarla zenginleştirmek için çok çaba sarf ettim. Burst başına Nexa kodu gönderme sayısı, NTP senkronizasyon süresi vb. gibi çeşitli parametrelerle oynamak için bundan yararlanın.
  4. Kod gün ışığından yararlanma özelliğine sahip değildir. Uygulandığında bunun web tarayıcısı aracılığıyla ayarlanması gerekir.

Dikkate alınması gereken bazı noktalar

  1. Antenleri TX ve RX radyo frekansı (RF) modüllerine ekleyin. İki ana nokta hakkında şikayet ederek size zaman kazandıracak: RF sinyalinin esnekliği ve menzili. 17,28 cm (6,80 inç) uzunluğunda 50 Ohm'luk bir tel kullanıyorum.
  2. Bu inatçı, örneğin Proove gibi diğer ev otomasyon sistemleriyle de çalışabilir. Yerine getirilmesi gereken birçok koşuldan biri, bunların 433.92MHz frekansında çalışmasını sağlamaktır.
  3. Arduino ile büyük bir baş ağrısı, zamanla güncellenebilecek ve aniden "eski" çiziminizle uyumlu olmayan kütüphanelerle uğraşmaktır; Arduino IDE'nizi yükseltirken aynı sorun ortaya çıkabilir. Dikkat edin, bu bizim durumumuz olabilir -evet, benim de sorunum.
  4. Farklı ışık modlarına sahip birden fazla eşzamanlı web istemcisi "yanıp sönen" bir durum oluşturur.

Ekran görüntüsü

Yukarıdaki resimde, web tarayıcınız üzerinden Arduino'yu aradığınızda görüntülenen web sayfasının ekran görüntüsünü bulacaksınız. Kodun varsayılan IP yapılandırması göz önüne alındığında, URL https://192.168.1.99 olacaktır.

Geliştirmeye konu olabilecek bir husus, sanıldığı gibi sadece "Hafif Otomatik Kontrol"de değil, tüm giriş kutularında etkili olduğu için "gönder" düğmesinin konumlandırılmasıdır. Başka bir deyişle, olası değerlerden herhangi birini değiştirmek isterseniz, her zaman "gönder" düğmesine basmanız gerekir.

Ayrıntılı/Gelişmiş belgeler

Özellikle sorun giderme ve iyileştirme için tüm çözümü anlamanıza yardımcı olabilmeleri için aşağıdaki dosyaları ekledim.

Arduino_NexaControl_IS.pdf, Dahili Sunucu çözümü hakkında belgeler sağlar.

Arduino_NexaControl_ES.pdf, Harici Sunucu çözümü hakkında belgeler sağlar.

Dış referanslar

Nexa Sistemi (İsveççe)

Adım 5: Tamamlandı

Bitti!
Bitti!

İşte her şeyi bitirdiniz ve harekete geçirdiniz!

Arduino Uno kasası Thingiverse'de "Arduino Uno Rev3 with Ethernet Shield XL-case" olarak bulunabilir.

Önerilen: