Arduino'ya Birden Çok Kablosuz Sensör

Kablosuz olarak bir Arduino'ya 12 sensörün nasıl bağlanacağı hakkında fikirler arıyorum. Sensörler Arduino'dan yaklaşık 10 fit uzakta olacak. Arduino'ya her 100ms-250ms'de bir bayt veriyi düzenli bir şekilde göndermeleri gerekiyor.

  • MQTT ve pubsubclient’i araştırdım, ancak bir Arduino’yu Broker yapmanın bir yolunu bulamadım ve başvurum için çok verimsiz olduğu söylendi.
  • NRF24L01’e baktım, ancak verileri düzenli bir şekilde almak için yalnızca 6 boru ile sınırlı görünüyor.
  • Xbee'yi araştırdım, ancak veri hızına ayak uyduramadığı söylendi.

Diğer önerileri takdir edilmektedir ... Teşekkürler.

1
Bir NRF24L01 ile sadece tek bir boru kullanarak yapabilirsiniz. En basit olasılıkla, her bir düğümü sorgu paketine bir düğüm numarası ekleyerek veriler için aktif olarak sorgulamak olacaktır, ancak ayrıca kendilerini bir düğüm numarası ile tanımlamalarına, biraz değişik veya rastgele aralıklarla iletmelerine ve belki de her birine bir okuma numarası koymalarına yardımcı olabilirsiniz. Çok fazla paket, böylece her iki okumayı bir defadan fazla iletebilirler, genellikle ikiden iletilen iletimlerin çakıştığı durumlarda herhangi bir çarpışmayı barındırırlar.
katma yazar rossp, kaynak
Chris, bunu yapmak için herhangi bir Arduino koduna ya da hem istemciyi hem de sunucu tarafını gösteren bir referansa işaret eden var mı? Bu, en basit çözüm gibi gözüküyor ... Orijinal yazımda, her bir sensörün doğrudan bir arduino'ya bağlandığını özellikle belirtmedim. Teşekkür ederim!
katma yazar Ant's, kaynak
İşleri hallettin mi? Arıyorum - 512 Hz veri hızına sahip dört sensörden kablosuz veri nasıl alınır (her sensör için ve aynı anda)? teşekkür ederim.
katma yazar tarastar42, kaynak

3 cevap

NRF24L01 tavsiye ederim.

Her düğüm için bir boruya ihtiyacınız yoktur - sadece bir boru

Her bir boru, bir düğümün cevap verdiği bir adresdir - çoklu borulara sahip olmak, bir düğümde birden fazla adrese sahip olabileceğiniz anlamına gelir (takma adlar gibi) - ama elbette, düğüm başına sadece bir adrese ve dolayısıyla düğüm başına bir boruya ihtiyacınız olacaktır.

Menzil yeterli değil (anten versiyonunda yüzlerce metre sorun çıkarmayı başarabildim) ve fiyat ihmal edilebilir düzeyde.

2
katma

WiFi üzerinden bir UDP paketi göndermek en kolay yol olabilir. Bu "bağlantısız" protokol için fazladan ek yük yoktur: AÇIK, ACK/NAK, KAPALI vb. Yok bayt, verimi çok fazla etkilemez.

Baytları "gruplandırabilirseniz", bu daha iyi olurdu. Örneğin, her 800ms-2000ms'de bir düğüm için 8 bayt gönderebilir misiniz? Olmazsa, WiFi hızları tek baytlık UDP paketinin fazla gecikmeden geçmesine izin vermelidir. Alıcının hangi gecikme süresini karşılayabileceğini biliyor musunuz? Ağ erişim zamanına bağlı olarak, toplu paketlerde ortalama gecikmeyi azaltabilirsiniz (yani, havaya atlamanın ne kadar sürdüğü).

Kendi yaklaşımınız, VirtualWire gibi bir ürünle ham bir RF vericisi/alıcısı kullanmak olacaktır. "Master" dan doğru senkronizasyonla, bağımlıların her birinin kendi zaman dilimi olabilir, bu da çarpışmaları önler (ağ erişim süresini düşük tutar)

1
katma
WIFI, bunu yapmadan önce bir çok erişim noktası ile birlikte kayıt tipi kurulum ayarını ekleyecek. Muhtemelen göz önünde bulundurmanın nedeni, herhangi bir doğal avantaja (alternatiflere kıyasla oldukça dezavantajlı) olmayacaktır, ancak posterin Arduino tarzı bellenimi çalıştırabileceği sensör düğümleri olarak ESP8266 panellerinin hazır ve ucuz bir şekilde bulunabilirliğidir. Ayrıca, mevcut Arduino ile işbirliği yaparak veya potansiyel olarak değiştirerek, sensör göbeği ve gerekirse AP'ye de işlev görebilir.
katma yazar rossp, kaynak

NRF24L01 kullanın. Çarpışmaları önlemek için sensörleri sorgulayabilirsiniz (Chris'in yorumunda önerildiği gibi). Kurulum şöyle olurdu: Her sensörün kendine özgü bir adresi olacaktı. Merkez ünite isteği iletir ve sensör düğümü buna cevap verirdi. Merkezi ünite farklı adrese sahip olacak ve tüm sensörler bu adrese iletilecektir. Yanıtı paketlemek için verileri ack içinde de kullanabilirsiniz.

  • Central node (Addr0) -> Sensor 1 (Addr1): Request
  • Sensor 1 (Addr1) -> Central node (Addr0): Response, sensor data
  • Central node (Addr0) -> Sensor 2 (Addr2): Request
  • Sensor 2 (Addr2) -> Central node (Addr0): Response, sensor data
  • Central node (Addr0) -> Sensor 3 (Addr3): Request
  • Sensor 3 (Addr3) -> Central node (Addr0): Response, sensor data
  • ...
1
katma
Esasen burada olan biten birebir iletişimdir, sadece merkez sırayla her bir düğümle böyle bir bağlantıya sahiptir. Yine de düşünmeniz gereken bir şey, bir sonraki düğümü denemeye devam etmeden önce bir cevap için ne kadar beklemeniz gerektiğidir.
katma yazar rossp, kaynak
Bolca zaman olacak, bu onu kullanmak için en iyi stratejinin ne olduğuna dair bir soru.
katma yazar rossp, kaynak
Hepinize tekrar teşekkürler. Arduino'yu programlamakta sadece rahat oluyorum. Bunu yapmak için bir bağlantı veya örnek Arduino kodu var mı? Bulduğum tüm örnekler sadece bire bir iletişim gösteriyor.
katma yazar Ant's, kaynak
Ahh ... anladım. Ne tür bir gecikme/bekleme süresi normaldir? 250ms veri hızımı bile karşılayabilecek miyim? Yani, 250ms içinde 12 sensörün hepsinden bir okuma almam gerekecek ...
katma yazar Ant's, kaynak
Peki sensör nasıl bağlanır? doğrudan I2C üzerinden nRF24L01 alıcı-vericisine, mikrodenetleyici ucunda başka bir alıcı-vericiye mi? Her iki uçta da bir mikrodenetleyiciye ihtiyacınız olmaz mı?
katma yazar brianlmerritt, kaynak