Obsah:

Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz: 5 kroků (s obrázky)
Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz: 5 kroků (s obrázky)

Video: Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz: 5 kroků (s obrázky)

Video: Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz: 5 kroků (s obrázky)
Video: Kukátko - dveřní kukátko INSTALACE - SLEVA 10% na panoramatické kukátko 2024, Červenec
Anonim
Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz
Nízkonákladová bezdrátová senzorová síť v pásmu 433 MHz

Mnohokrát děkuji Terese Rajba za laskavé poskytnutí souhlasu s používáním údajů z jejich publikací v tomto článku

* Na obrázku výše - pět jednotek snímače a vysílače, které jsem použil k testování

Co jsou bezdrátové senzorové sítě?

Jednoduchá definice by byla: bezdrátové senzorové sítě se týkají skupiny elektronických zařízení distribuovaných v určité oblasti pro monitorování a zaznamenávání environmentálních dat, která jsou bezdrátově přenášena do centrálního místa, kde mají být zpracována a uložena.

V současné době lze bezdrátové senzorové sítě použít několika způsoby, níže je jen několik příkladů:

  • Oblasti ekologického sledování lesů, řek, jezer, moří a oceánů;
  • Možnost výstrahy v případě teroristických, chemických, biologických, epidemických útoků;
  • Monitorovací systémy pro děti, starší lidi, pacienty nebo osoby se speciálními potřebami;
  • Kontrolní systémy v zemědělství a sklenících;
  • Monitorovací systém předpovědi počasí;
  • Dohled nad městským provozem, školami, parkovišti;

A mnoho, mnoho dalších aplikací.

V tomto příspěvku chci ukázat výsledky experimentu s bezdrátovými senzorovými sítěmi, které byly použity pro sledování údajů o teplotě a vlhkosti, s pomalými a relativně předvídatelnými odchylkami. Pro tento experiment jsem zvolil použití senzorových vysílačů, které jsem postavil sám pomocí cenově dostupných modulů. Přijímač je také DIY, komunikace je jednosměrná (v rádiovém pásmu 433 MHz), což znamená, že senzory pouze přenášejí data a centrální poloha pouze přijímá. Neexistuje žádná komunikace mezi senzory a od přijímače k senzorům.

Proč se ale rozhodnout používat více vysílačů a pouze jeden přijímač? Prvním důvodem by bylo zjevně „zjednodušení“. Čím jednodušší je sestavení, tím menší je pravděpodobnost selhání a rozhodně je mnohem snazší opravit a vyměnit jednotlivé součásti v případě poruchy. Nižší je také spotřeba energie, baterie vydrží déle (senzory budou spotřebovávat pouze při monitorování a příjmu, po zbytek času bude zařízení v režimu hlubokého spánku). Díky tomu, že je to jednoduché, je zařízení také levné. Dalším aspektem, který je třeba mít na paměti, je oblast pokrytí. Proč? Je mnohem snazší postavit a používat citlivý přijímač než mít citlivý přijímač a výkonný vysílač jak na senzorech, tak na centrálním modulu (to je nezbytné pro dobrou obousměrnou komunikaci). S citlivým a kvalitním přijímačem je možné přijímat data z velké vzdálenosti, ale vysílání dat na stejnou vzdálenost vyžaduje vysoký emisní výkon, což s sebou nese vysoké náklady, spotřebu elektřiny a (nezapomínejme) na možnost překročení zákonný maximální výkon vysílače v pásmu 433 MHz. Použitím středně kvalitního přijímače, levného, ale s vysoce kvalitní anténou (dokonce i DIY) a levných vysílačů s kvalitní anténou, můžeme dosáhnout vynikajících výsledků za zlomek ceny stávajících bezdrátových senzorových sítí.

Krok 1: Teoretické úvahy

Myšlenka vybudovat bezdrátovou senzorovou síť pro monitorování teploty a vlhkosti vzduchu a půdy v různých oblastech skleníku mě napadla už dávno, téměř před 10 lety. Chtěl jsem vybudovat 1vodičovou síť a použít 1vodičové snímače teploty a vlhkosti. Bohužel před 10 lety byly senzory vlhkosti vzácné a drahé (i když teplotní senzory byly rozšířené), a protože se šíření drátů po celém skleníku nezdálo jako možnost, této myšlenky jsem se docela rychle vzdal.

Nyní se však situace radikálně změnila. Jsme schopni najít levné a kvalitní snímače (teploty a vlhkosti) a máme také přístup k levným vysílačům a přijímačům v pásmu 433 MHz. Existuje pouze jeden problém: pokud máme více senzorů (řekněme 20), jak vyřešíme kolize (mějte prosím na paměti, že se jedná o jednosměrnou komunikaci), tj. Překrývající se emise 2 nebo více senzorů? Při hledání možného řešení jsem narazil na tyto velmi zajímavé papíry:

Bezdrátový senzor konverguje obsazení na základě postupu náhodných operací - RAJBA, T. a RAJBA, S.

a

Pravděpodobnost kolizí v bezdrátové senzorové síti s náhodným odesíláním - RAJBA S. a RAJBA. T

V zásadě nám autoři ukazují, že pravděpodobnost kolizí v bezdrátové senzorové síti lze vypočítat, pokud jsou pakety vysílány v určitých časových bodech podle poissonovské (exponenciální) distribuce.

Výtah z výše uvedeného příspěvku uvádí charakteristiky studované sítě.

  • poměrně velký počet jednotek N-snímačů;
  • jednotky snímače a vysílače zůstávají zcela nezávislé a jejich zapnutí nebo vypnutí nemá žádný vliv na provoz sítě;
  • všechny jednotky vysílače senzoru (nebo jejich část) mohou být mobilní za předpokladu, že jsou umístěny v rádiovém dosahu přijímací stanice;
  • pomalu se měnící fyzikální parametry jsou podrobeny měření, což znamená, že není nutné přenášet data velmi často (např. každých několik minut nebo několik desítek minut);
  • přenos je jednosměrný, tj. z jednotky snímače a vysílače až do přijímacího bodu v T průměrných časových intervalech. Informace jsou přenášeny v protokolu na tp čas trvání;
  • jakýkoli vybraný senzor začne vysílat náhodně v Poissonových časech. PASTA (Poissonovy přílety viz časové průměry) budou použity k ospravedlnění zasílání sond v Poissonových epochách;
  • všechny jednotky snímače a vysílače zůstávají náhodně nezávislé a budou přenášet informace v náhodně zvoleném časovém okamžiku tp trvání a T průměrný čas opakování;
  • pokud jeden nebo více senzorů začne vysílat, zatímco protokol tp doba trvání se přenáší z jiného senzoru, takové situaci se říká kolize. Kolize znemožňuje centrální základnové stanici přijímat informace správným způsobem.

Téměř dokonale zapadá do senzorové sítě, kterou chci otestovat…

Téměř.

Neříkám, že jsem úplně porozuměl matematice v příspěvku, ale na základě předložených údajů a závěrů jsem mohl trochu porozumět, o co jde. Jediná věc je, že hodnota použitá v novinách mě trochu znepokojila:). Je to proměnná tp - doba přenosu dat se předpokládá 3,2x10-5 s. Doba přenosu shromážděných dat by tedy byla 3,2 us! To nelze provést v pásmu 433 MHz. Chci použít buď rcswitch nebo radiohead k programování snímačů vysílače. Při studiu kódů těchto dvou knihoven jsem dospěl k závěru, že nejmenší doba přenosu bude 20 ms, což je výrazně nad hodnotou 3,2 nás. S vysílači 2,4 GHz je možné tp tak malý čas … ale to je jiný příběh.

Pokud použijeme vzorec navržený autory tohoto článku, výsledkem bude:

Počáteční data (příklad):

  • Počet senzorů N = 20;
  • Doba přenosu dat tp= 20x10-3 s (0,020 s)
  • Průměrný přenosový interval T = 180 s

Vzorec:

Pravděpodobnost kolize na T intervalu je

obraz
obraz

vezmeme -li v úvahu počáteční data, pravděpodobnost kolize v T intervalu bude 0,043519

Tato hodnota, která naznačuje pravděpodobnost 4,35 kolize na 100 měření, je podle mého názoru docela dobrá. Pravděpodobnost by se mohla zlepšit, kdybychom zvýšili průměrný čas přenosu, takže při hodnotě 300 s bychom měli pravděpodobnost 0,026332, tj. 2,6 kolize na 100 měření. Pokud vezmeme v úvahu, že během provozu systému můžeme očekávat ztrátu paketových dat (například v závislosti na povětrnostních podmínkách), pak je toto číslo opravdu vynikající.

Chtěl jsem udělat simulaci tohoto typu sítě, ale také jakousi asistenta designu, a tak jsem vytvořil malý program v jazyce C, zdrojový kód najdete na github (také kompilovaný binární soubor, který běží v příkazovém řádku systému Windows - uvolnění).

Vstupní data:

  • sensor_number - počet senzorů v síti;
  • měření_číslo - počet měření k simulaci;
  • average_transmission_interval -průměrná doba mezi postupnými datovými přenosy;
  • transmission_time - efektivní doba přenosu dat.

Výstup:

  • vypočtený maximální čas měření;
  • seznam kolizí mezi dvěma senzory;
  • počet kolizí;
  • teoretická pravděpodobnost srážek.

Výsledky jsou docela zajímavé:)

Dost na teorii, nechtěl bych více trvat na teoretické části, články a zdrojový kód jsou dost výmluvné, takže raději přejdu k praktické a efektivní implementaci bezdrátové senzorové sítě a k výsledkům testů.

Krok 2: Praktická implementace - hardware

Pro snímače snímačů budeme potřebovat následující komponenty:

  • Mikrokontrolér ATtiny85 1,11 $;
  • Zásuvka integrovaného obvodu 8DIP 0,046 $;
  • Snímač teploty/vlhkosti DHT11 0,74 $;
  • Vysílací modul 433 MHz H34A 0,73 $;
  • 4xAA držák baterie s vypínačem 1 $;

Celkem 3,63 $;

Přijímačem použitým pro testy je Arduino UNO (pouze pro testování) a přijímací modul H3V4F (0,66 $) s levnou obloukovou anténou (0,32 $).

Schémata snímače a odesílatele

obraz
obraz

Jednotky snímače a vysílače jsou napájeny bateriemi 3xAA, 1,5 V (ve čtvrtém oddílu držáku baterií je elektronická sestava). Jak vidíte, napájení vysílače a snímač teploty a vlhkosti je připojen ke kolíku PB0 mikrokontroléru (vysílač a snímač jsou napájeny, když je kolík nastaven na HIGH). Když je mikrokontrolér v režimu hlubokého spánku, může dosáhnout spotřeby proudu 4,7uA. Vzhledem k tomu, že doba probuzení snímače vysílače by byla asi 3 s (měření, přenos atd.) A průměrná doba mezi přenosy 180 s (jako příklad v předchozí kapitole), měly by baterie poměrně hodně odolávat. S některými kvalitními alkalickými bateriemi (tj. 2 000 mAh) by autonomie mohla být více než 10 měsíců, jak se vypočítává na omnicalculator.com (kde je celková spotřeba proudu: snímač - 1,5 mA, modul vysílače - 3,5 mA a mikrokontrolér ATtiny85 - 5 mA, celkem 10 mA).

Na fotografii níže vidíte téměř hotovou sestavu snímače a vysílače.

obraz
obraz

Níže je fotografie testovací přijímací jednotky.

obraz
obraz

Krok 3: Praktická implementace - software

Nahraný software běžící na mikrokontroléru attiny85, hlavní součásti jednotek vysílače senzorů, má za účel číst data poskytovaná snímačem, převádět je na přenos rádiem a přenášet je v časových rámcích Poisson (exponenciální distribuce nebo PASTA - Poissonovy přílety viz časové průměry). Pomocí jednoduché funkce také monitoruje stav baterií a varuje, pokud již není k dispozici požadované napětí pro snímač. Zdrojový kód je k dispozici na github. Kód pro testovací přijímač je velmi jednoduchý, zveřejňuji jej níže.

// upravená knihovna rcswitch z https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// kód je upravenou verzí z příkladů původní knihovny rcswitch #include RCSwitch mySwitch = RCSwitch (); nepodepsaná dlouhá data = 0; neplatné nastavení () {Serial.begin (9600); mySwitch.enableReceive (0); // Přijímač při přerušení 0 => to je pin #2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // výstup (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int vlhkost = bitExtracted (data, 7, 1); // méně významný 7 bitů od pozice 1 - první bit úplně vpravo int teplota = bitExtracted (data, 7, 8); // dalších 7 bitů z pozice 8 doprava a tak dále int v_min = bitExtracted (data, 1, 15); int packet_id = bitExtracted (data, 3, 16); // 3bits - 8 id paketů od 0 do 7 int sensor_id = bitExtracted (data, 6, 19); // 6bit pro 64 ID snímače - celkem 24 bitů Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (teplota); Serial.print (","); Serial.print (vlhkost); Serial.println (); mySwitch.resetAvailable (); }} // kód z https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (unsigned long number, int k, int p) {return (((1 (p- 1)));}

Snažil jsem se vložit co nejvíce komentářů, aby byla věc srozumitelnější.

Pro ladění jsem použil softwarovou knihovnu a vývojovou desku attiny85 s programátorem USBasp (viz také můj návod k tomuto). Sériové propojení bylo provedeno pomocí převodníku Serial to TTL (s čipem PL2303) připojeného k ohnutým pinům (3 a 4) vývojové desky (viz obrázek níže). To vše bylo neocenitelnou pomocí při dokončení kódu.

obraz
obraz

Krok 4: Výsledky testu

Výsledky testů
Výsledky testů
Výsledky testů
Výsledky testů

Vytvořil jsem 5 jednotek snímače a vysílače, které shromažďují a odesílají hodnoty naměřené senzory DHT11. Během tří dnů jsem zaznamenával a ukládal měření pomocí testovacího přijímače a programu emulace terminálu (foxterm). Pro studium jsem zvolil 48hodinový interval. Nezajímaly mě nutně naměřené hodnoty (například snímač 2 mi ukazuje špatné hodnoty), ale počet kolizí. Kromě toho byly senzory umístěny velmi blízko (na 4-5 m) přijímačem, aby se odstranily další příčiny ztráty paketů. Výsledky testu byly uloženy do souboru cvs a nahrány (podívejte se na soubor níže). Na základě tohoto souboru CSV jsem také nahrál soubor aplikace Excel. Vzal jsem několik snímků obrazovky, abych vám ukázal, jak vypadá kolize (v mých testech samozřejmě), ke každému snímku obrazovky jsem také přidal komentáře.

Možná se divíte, proč jsem nevyužil službu načítání dat, například ThingSpeak. Faktem je, že mám mnoho záznamů, mnoho senzorů a dat přicházejících často v nepravidelných intervalech a online služby IoT umožňují data pouze u určitého počtu senzorů a pouze v poměrně velkých intervalech. Uvažuji v budoucnu o instalaci a konfiguraci vlastního serveru IoT.

Nakonec 4598 měření na 5 jednotkách senzor-vysílač (přibližně 920/senzor) mělo za následek celkem 5 kolizí po dobu 48 hodin (0,5435 kolizí/100 měření). Provedení nějaké matematiky (pomocí programu wsn_test s počátečním údajem: 5 senzorů, průměrný čas 180 s, přenosový čas 110 ms) pravděpodobnost kolize by byla 0,015185 (1,52 kolize/100 měření). Praktické výsledky jsou ještě lepší než teoretické, že?:)

obraz
obraz

V tomto období je také ztraceno 18 paketů, takže na kolizích v tomto ohledu vlastně příliš nezáleží. Test by měl samozřejmě probíhat delší dobu, aby získal co nejpřesvědčivější výsledky, ale podle mého názoru je i za těchto podmínek úspěšný a plně potvrzuje teoretické předpoklady.

Krok 5: Závěrečné myšlenky

Okamžitá aplikace

Ve velkém skleníku se pěstuje několik plodin. Pokud je zavlažování prováděno ručně bez monitorování klimatu, bez jakékoli automatizace, bez datových záznamů, existuje riziko nadměrného nebo nedostatečného zavlažování a také je vysoká spotřeba vody, neexistuje žádný důkaz pro optimalizaci spotřeby vody, existuje riziko pro plodiny v Všeobecné. Abychom tomu zabránili, můžeme použít bezdrátovou senzorovou síť:)

Teplotní čidla, čidla vlhkosti vzduchu, čidla vlhkosti půdy lze umístit všude ve skleníku a pomocí přenesených dat lze provést několik akcí: elektrické ventily start-stop pro umožnění toku vody tam, kde je potřeba, elektrické ventilátory start-stop ke snížení teploty v různých oblastech spouštějte ohřívače podle potřeby a všechna data lze archivovat pro budoucí analýzu. Systém také může poskytovat webové rozhraní, které je přístupné všude, a alarmy e -mailem nebo SMS v případě abnormálního stavu.

Co bude dál?

  • Testování s větším počtem senzorů;
  • Testování v reálném čase se vzdálenými senzory v oblasti pokrytí;
  • Instalace a konfigurace místního serveru IoT (například na Raspberry Pi);
  • Testuje také pomocí snímačů vysílače (transceiveru) na 2,4 GHz.

takže … pokračování …:)

UPOZORNĚNÍ: Použití frekvenčního pásma 433 MHz ve vaší oblasti může podléhat předpisům o rádiových frekvencích. Před vyzkoušením tohoto projektu zkontrolujte svou zákonnost

Soutěž senzorů
Soutěž senzorů
Soutěž senzorů
Soutěž senzorů

Druhé místo v soutěži Senzory

Doporučuje: