İçindekiler:

433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: 5 Adım (Resimlerle)
433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: 5 Adım (Resimlerle)

Video: 433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: 5 Adım (Resimlerle)

Video: 433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı: 5 Adım (Resimlerle)
Video: TİKTOK DİLENCİLERİ PART 1 DAHA NELER DEDİRTEN Video #tiktok #tiktokvideo #tiktokvideo 2024, Kasım
Anonim
433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı
433MHz Bandında Düşük Maliyetli Kablosuz Sensör Ağı

Teresa Rajba'ya, bu makaledeki yayınlarından elde edilen verileri kullanmama izin verdiği için çok teşekkür ederim

* Yukarıdaki resimde - test için kullandığım beş sensör-gönderici birimi

Kablosuz algılayıcı ağlar nelerdir?

Basit bir tanım şöyle olabilir: kablosuz sensör ağları, çevresel verileri izlemek ve kaydetmek için belirli bir alana dağıtılmış, işlenmek ve saklanmak üzere merkezi bir konuma kablosuz olarak iletilen bir grup elektronik cihazı ifade eder.

Günümüzde Kablosuz Algılayıcı Ağlar birkaç şekilde kullanılabilir, aşağıda sadece birkaç örnek verilmiştir:

  • Ormanların, nehirlerin, göllerin, denizlerin ve okyanusların ekolojik gözetim alanları;
  • Terörist, kimyasal, biyolojik, salgın saldırılar durumunda alarm verme imkanı;
  • Çocuklar, yaşlılar, hastalar veya özel ihtiyaçları olan kişiler için izleme sistemleri;
  • Tarım ve seralarda gözetim sistemleri;
  • Hava Tahmini izleme sistemi;
  • Şehir trafiğinin, okulların, otoparkların gözetimi;

Ve daha pek çok uygulama.

Bu yazıda, sıcaklık ve nem verilerini izlemek için kullanılan kablosuz sensör ağları ile yavaş ve nispeten tahmin edilebilir bir değişimle bir deneyin sonuçlarını göstermek istiyorum. Bu deney için uygun fiyatlı modüller kullanarak kendi yaptığım sensör-göndericileri kullanmayı seçtim. Alıcı da DIY'dir, iletişim tek yönlüdür (433 MHz radyo bandında), yani sensörler yalnızca verileri iletir ve merkezi konum yalnızca alır. Sensörler arasında ve alıcıdan sensörlere iletişim yoktur.

Ancak neden birden fazla verici ve yalnızca bir alıcı kullanmayı seçiyorsunuz? Açıkçası, ilk neden “basit hale getirmek” olacaktır. Montaj ne kadar basit olursa, arıza olasılığı o kadar az olur ve arıza durumunda tek bileşenleri onarmak ve değiştirmek kesinlikle çok daha kolaydır. Güç tüketimi de daha düşüktür, piller daha uzun süre dayanır (sensörler yalnızca izleme ve alma sırasında tüketir, geri kalan süre cihaz derin uyku modunda olur). Basit olması da cihazı ucuz kılıyor. Akılda tutulması gereken bir diğer husus, kapsama alanıdır. Niye ya? Hassas bir alıcı oluşturmak ve kullanmak, hem sensörlerde hem de merkezi modülde hassas bir alıcıya ve güçlü bir vericiye sahip olmaktan çok daha kolaydır (bu, iyi bir çift yönlü iletişim için gereklidir). Hassas ve kaliteli bir alıcı ile uzak mesafeden veri almak mümkündür ancak aynı mesafe için veri yayan veri yüksek emisyon gücü gerektirir ve bu da yüksek maliyetler, elektrik tüketimi ve (unutmayalım) limiti aşma olasılığını beraberinde getirir. 433 MHz bandında yasal maksimum verici gücü. Ucuz ama yüksek kaliteli antenli (hatta DIY) orta kalitede bir alıcı ve kaliteli antenli ucuz vericiler kullanarak, mevcut kablosuz sensör ağlarının maliyetinin çok altında mükemmel sonuçlar elde edebiliriz.

Adım 1: Teorik Hususlar

Bir seranın farklı alanlarındaki hava ve toprağın sıcaklık ve nemini izlemek için kablosuz bir sensör ağı kurma fikri uzun zaman önce, neredeyse 10 yıl önce aklıma geldi. 1 telli bir ağ kurmak ve 1 telli sıcaklık ve nem sensörleri kullanmak istedim. Ne yazık ki, 10 yıl önce nem sensörleri nadir ve pahalıydı (sıcaklık sensörleri yaygın olmasına rağmen) ve seranın her yerine kablo yaymak bir seçenek gibi görünmediğinden bu fikirden oldukça çabuk vazgeçtim.

Ancak, şimdi durum kökten değişti. Ucuz ve kaliteli sensörler (sıcaklık ve nem) bulabiliyoruz ve ayrıca 433 MHz bandında ucuz verici ve alıcılara erişimimiz var. Tek bir problem var: Daha fazla sensörümüz varsa (diyelim 20) çarpışmaları nasıl çözeceğiz (lütfen bunun tek yönlü bir iletişim olduğunu unutmayın), yani 2 veya daha fazla sensörün emisyonunu üst üste bindirmek? Olası bir çözüm ararken bu çok ilginç makalelere rastladım:

Rastgele işlem prosedürüne dayalı kablosuz sensör yakınsama dökümü - RAJBA, T. ve RAJBA, S.

ve

Rastgele gönderme ile Kablosuz Sensör Ağı'nda çarpışma olasılığı - RAJBA S. ve RAJBA tarafından. T

Temel olarak yazarlar, paketler bir poissonian (üssel) dağılıma göre belirli zaman noktalarında yayınlanırsa, kablosuz bir sensör ağındaki çarpışma olasılığının hesaplanabileceğini gösteriyor.

Yukarıdaki makaleden bir alıntı, incelenen ağın özelliklerini listeler.

  • oldukça fazla sayıda sensör-gönderici birimi N;
  • sensör-gönderen birimleri tamamen bağımsız kalır ve bunları açmanın veya kapatmanın ağ işletimi üzerinde hiçbir etkisi yoktur;
  • tüm algılayıcı-gönderici birimleri (veya bunların bir kısmı), alıcı istasyonun radyo menzili içinde yer almaları koşuluyla mobil olabilir;
  • yavaş değişen fiziksel parametreler ölçümlere tabi tutulur, bu da verilerin çok sık (örneğin birkaç dakikada bir veya birkaç düzine dakikada bir) iletilmesine gerek olmadığı anlamına gelir;
  • iletim tek yönlü tiptedir, yani sensör-gönderen ünitesinden alıcı noktasına kadar T ortalama zaman aralıklarında. Bilgi protokolde t'de iletilirP süre zaman;
  • seçilen herhangi bir sensör, Poisson zamanlarında rastgele iletime başlar. PASTA (Poisson Varışları Zaman Ortalamalarına Bakın) Poisson dönemlerinde sondaların gönderilmesini doğrulamak için kullanılacaktır;
  • tüm sensör-gönderen birimleri rastgele bağımsız kalır ve bilgileri rastgele seçilmiş bir t zaman anında iletirler.P süresi ve T ortalama tekrar süresi;
  • t protokolü sırasında bir veya daha fazla sensör iletime başlarsaP süre başka bir sensörden iletiliyorsa böyle bir duruma çarpışma denir. Çarpışma, merkezi baz istasyonunun bilgiyi doğru bir şekilde almasını imkansız hale getirir.

Test etmek istediğim sensör ağıyla neredeyse mükemmel uyum sağlıyor…

Hemen hemen.

Makaledeki matematiği tam olarak anladığımı söylemiyorum, ancak sunulan verilere ve sonuçlara dayanarak ne hakkında olduğunu biraz anlayabildim. Yalnız kağıtta kullanılan bir değer beni biraz endişelendirdi:). t değişkenidirP - 3,2x10 olduğu varsayılan veri iletiminin süresi-5 s. Yani toplanan verilerin iletim süresi 3,2 bize olurdu! Bu 433 MHz bandında yapılamaz. Verici sensörlerini programlamak için ya rc anahtarını ya da radyo kafasını kullanmak istiyorum. İki kütüphanenin kodlarını inceleyerek, en küçük iletim süresinin 20ms olacağı ve 3.2 us değerinin çok üzerinde olacağı sonucuna vardım. 2,4 GHz vericiler ile mümkünP zaman çok küçük… ama bu başka bir hikaye.

Bu makalenin yazarları tarafından önerilen formülü uygularsak sonuç şöyle olacaktır:

İlk veriler(bir örnek):

  • Sensör sayısı N=20;
  • Veri iletim süresi tP=20x10-3 sn (0.020 sn)
  • Ortalama iletim aralığı T=180s

Formül:

T aralığında çarpışma olasılığı

resim
resim

ilk verileri hesaba katarsak, T aralığında çarpışma olasılığı 0.043519 olacaktır.

100 ölçümde 4,35 çarpışma olma olasılığını gösteren bu değer bence oldukça iyi. Ortalama iletim süresini arttırırsak olasılık artabilir, bu nedenle 300s değerinde 0.026332, yani 100 ölçüm başına 2,6 çarpışma olasılığına sahip oluruz. Sistemin çalışması sırasında (örneğin hava şartlarına bağlı olarak) her halükarda paket veri kaybı bekleyebileceğimizi düşünürsek, bu sayı gerçekten mükemmel.

Bu tür bir ağın simülasyonunu yapmak istedim ama aynı zamanda bir tür tasarım asistanı yapmak istedim, bu yüzden C'de küçük bir program yaptım, kaynak kodunu github'da bulabilirsiniz (ayrıca windows komut satırında çalışan derlenmiş bir ikili dosya - serbest bırakmak).

Giriş verileri:

  • sensor_number - ağdaki sensör sayısı;
  • Measurement_number - simüle edilecek ölçüm sayısı;
  • ortalama_transmission_interval -ardışık veri iletimleri arasındaki ortalama süre;
  • iletim_zamanı - veri iletiminin etkin süresi.

Çıktı:

  • hesaplanan maksimum ölçüm süresi;
  • iki sensör arasındaki çarpışmaların listesi;
  • çarpışma sayısı;
  • çarpışmaların teorik olasılığı.

Sonuçlar oldukça ilginç:)

Teori ile bu kadar, teorik kısımda daha fazla ısrar etmek istemem, makaleler ve kaynak kodu oldukça anlamlı, bu yüzden kablosuz sensör ağının pratik, etkili uygulamasına ve test sonuçlarına gitsem iyi olur.

Adım 2: Pratik Uygulama - Donanım

Verici sensörler için aşağıdaki bileşenlere ihtiyacımız olacak:

  • ATtiny85 mikrodenetleyici 1.11 $;
  • Entegre devre soketi 8DIP 0.046 $;
  • Sıcaklık/Nem sensörü DHT11 0,74 $;
  • 433MHz H34A verici modülü 0,73 $;
  • 1$ anahtarlı 4xAA pil tutucu;

Toplam 3,63 $;

Testler için kullanılan alıcı Arduino UNO (sadece test amaçlı) ve ucuz ark antenli (0.32$) bir H3V4F alıcı modülüdür (0.66$).

Sensör-gönderen şemaları

resim
resim

Verici-sensör üniteleri 3xAA, 1.5v pillerle çalışır (pil tutucunun dördüncü bölmesinde elektronik aksam bulunur). Gördüğünüz gibi vericinin güç kaynağı ve sıcaklık-nem sensörü mikrodenetleyicinin PB0 pinine takılır (pin HIGH olarak ayarlandığında verici ve sensöre güç verilir). Böylece mikrodenetleyici derin uyku modundayken 4.7uA akım tüketimine ulaşabilir. Verici-sensörün uyanma süresinin yaklaşık 3sn (ölçüm, iletim vb.) ve iletimler arasındaki ortalama sürenin 180sn (önceki bölümdeki örnekte olduğu gibi) olacağı düşünüldüğünde, pillerin oldukça fazla dayanması gerekir. Bazı kaliteli alkalin pillerle (yani 2000 mAh), omnicalculator.com'da hesaplandığı gibi özerklik 10 aydan fazla olabilir (burada toplam akım tüketimi: sensör - 1.5mA, verici modülü - 3.5mA ve ATtiny85 mikrodenetleyici - 5mA, toplam 10mA).

Aşağıdaki fotoğrafta neredeyse bitmiş sensör-gönderici montajını görebilirsiniz.

resim
resim

Aşağıda test alıcı ünitesinin fotoğrafı bulunmaktadır.

resim
resim

Adım 3: Pratik Uygulama - Yazılım

Algılayıcı-gönderici birimlerinin ana bileşeni olan attiny85 mikrodenetleyicisine çalışan yüklenen yazılım, algılayıcı tarafından sağlanan verileri okumak, radyo ile iletilecek şekilde dönüştürmek ve Poisson zaman dilimleri (üssel dağılım veya MAKARNA - Poisson Varışları Zaman Ortalamalarına Bakın). Ayrıca basit bir fonksiyon kullanarak pillerin durumunu izler ve sensör için gerekli voltajın artık sağlanamaması durumunda uyarı verir. Kaynak kodu github'da mevcuttur. Test alıcısının kodu çok basit, aşağıya gönderiyorum.

//https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// adresinden değiştirilmiş rcswitch kitaplığı/ kod, orijinal rcswitch kitaplığının örneklerinden değiştirilmiş bir sürümdür #include RCSwitch mySwitch = RCSwitch(); imzasız uzun veri = 0; geçersiz kurulum() { Serial.begin(9600); mySwitch.enableReceive(0); // Kesintideki alıcı 0 => pin #2 } void loop() { if (mySwitch.available()) { unsigned long data = mySwitch.getReceivedValue(); //output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(), mySwitch.getReceivedProtocol()); int nem = bitExtracted(veri, 7, 1); //konum 1'den daha az anlamlı 7bit - en sağdaki ilk bit int sıcaklık = bitExtracted(veri, 7, 8); // 8 konumundan sağa sonraki 7 bit vb. int v_min = bitExtracted(veri, 1, 15); int package_id = bitExtracted(veri, 3, 16); //3bits - 0'dan 7'ye 8 paket kimliği int sensor_id = bitExtracted(veri, 6, 19); //6bit 64 sensör kimliği için - toplam 24 bit Serial.print(sensor_id);Serial.print(", ");Serial.print(packet_id);Serial.print(", ");Serial.print(sıcaklık); Seri.print(", ");Serial.print(nem); Seri.println(); mySwitch.resetAvailable(); } } // https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ adresinden kod int bitExtracted(işaretsiz uzun sayı, int k, int p) { return (((1 (p - 1))); }

Konunun anlaşılmasını kolaylaştırmak için mümkün olduğunca çok yorum eklemeye çalıştım.

Hata ayıklama için, yazılım seri kitaplığını ve attiny85 geliştirme kartını USBasp programcısı ile kullandım (ayrıca bu konudaki talimatlarıma bakın). Seri bağlantı, geliştirme kartının bükülmüş pinlerine (3 ve 4) bağlı Seri'den TTL'ye dönüştürücü (PL2303 çipli) ile yapılmıştır (aşağıdaki resme bakın). Bütün bunlar, kodu tamamlamak için paha biçilmez bir yardım oldu.

resim
resim

Adım 4: Test Sonuçları

Test sonuçları
Test sonuçları
Test sonuçları
Test sonuçları

DHT11 sensörleri tarafından ölçülen değerleri toplayan ve gönderen 5 sensör-gönderici birimi oluşturdum. Üç gün boyunca test alıcısı ve bir terminal öykünme programı (foxterm) yardımıyla ölçümleri kaydettim ve kaydettim. Çalışmak için 48 saatlik bir aralık seçtim. Ölçülen değerlerle ilgilenmiyordum (örneğin sensör 2, bana yanlış değerler gösteriyor) ama çarpışma sayısıyla ilgileniyordum. Ayrıca, paket kaybının diğer nedenlerini ortadan kaldırmak için sensörler alıcı tarafından çok yakına (4-5 m'de) yerleştirildi. Test sonuçları bir cvs dosyasına kaydedildi ve yüklendi (aşağıdaki dosyaya bakın). Ayrıca bu csv dosyasına dayalı bir excel dosyası yükledim. Size bir çarpışmanın nasıl göründüğünü göstermek için bazı ekran görüntüleri aldım (elbette testlerimde), her ekran görüntüsüne yorumlar da ekledim.

Neden bir veri yükleyici hizmeti kullanmadığımı merak edebilirsiniz, örneğin ThingSpeak. Gerçek şu ki, birçok kaydım, birçok sensörüm ve genellikle düzensiz aralıklarla gelen verilerim var ve çevrimiçi IoT hizmetleri, yalnızca belirli sayıda sensörde ve yalnızca oldukça büyük aralıklarla verilere izin veriyor. Gelecekte kendi IoT sunucumu kurmayı ve yapılandırmayı düşünüyorum.

Sonunda, 5 sensör-gönderici biriminde (yaklaşık 920/sensör) 4598 ölçüm, 48 saatlik bir süre boyunca toplam 5 çarpışmayla sonuçlandı (0,5435 çarpışma/100 ölçüm). Biraz matematik yapmak (başlangıç verileriyle wsn_test programını kullanarak: 5 sensör, ortalama süre 180 sn, iletim süresi 110 ms) çarpışma olasılığı 0,015185 (1,52 çarpışma/100 ölçüm) olacaktır. Pratik sonuçlar teorik sonuçlardan daha iyi değil mi?:)

resim
resim

Her neyse, bu süre içinde 18 paket de kayboluyor, bu yüzden çarpışmalar bu konuda çok da önemli değil. Elbette, en kesin sonuçları elde etmek için testin daha uzun bir süre içinde gerçekleştirilmesi gerekir, ancak bence bu koşullarda bile bir başarıdır ve teorik varsayımları tam olarak doğrular.

Adım 5: Son Düşünceler

Hemen başvuru

Büyük bir serada birkaç ürün yetiştirilir. Sulama manuel olarak iklim izlemesiz, otomasyonsuz yapılıyorsa, veri kayıtları olmadan fazla veya eksik sulama riski vardır ve ayrıca su tüketimi yüksek ise su tüketimi optimizasyonu için kanıt yoktur, mahsuller için risk vardır. Genel. Bunu önlemek için kablosuz sensör ağı kullanabiliriz:)

Sıcaklık sensörleri, hava nem sensörleri, toprak nem sensörleri seranın her yerine yerleştirilebilir ve iletilen veriler yardımıyla birkaç işlem yapılabilir: suyun gerektiği yerde akışını sağlamak için start-stop elektrikli vanalar, start-stop elektrikli fanlar farklı alanlarda sıcaklığı azaltmak için, gerektiğinde başlat-durdur ısıtıcıları ve tüm veriler gelecekteki analizler için arşivlenebilir. Ayrıca sistem, her yerden erişilebilen bir web arayüzü ve anormal bir durumda e-posta veya SMS alarmları sağlayabilir.

Sıradaki ne?

  • Daha fazla sayıda sensörle test etme;
  • Kapsama alanındaki uzak sensörlerle gerçek zamanlı test;
  • Yerel bir IoT sunucusunun kurulması ve yapılandırılması (örneğin bir Raspberry Pi'de);
  • 2.4Ghz'de verici(alıcı-verici)-sensörleri ile de test eder.

yani… devam edecek…:)

YASAL UYARI: Bölgenizde 433MHz frekans bandının kullanılması radyo frekansı düzenlemelerine tabi olabilir. Lütfen bu projeyi denemeden önce yasallığınızı kontrol edin

Sensörler Yarışması
Sensörler Yarışması
Sensörler Yarışması
Sensörler Yarışması

Sensörler Yarışmasında İkincilik

Önerilen: