Satura rādītājs:

Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā: 5 soļi (ar attēliem)
Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā: 5 soļi (ar attēliem)

Video: Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā: 5 soļi (ar attēliem)

Video: Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā: 5 soļi (ar attēliem)
Video: Автоматический диспенесер жидкого мыла для ванной – бюджетный Вариант 2024, Jūlijs
Anonim
Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā
Zemu izmaksu bezvadu sensoru tīkls 433 MHz joslā

Liels paldies Terēzei Rajbai, kas laipni deva man piekrišanu izmantot datus no viņu publikācijām šajā rakstā

* Augšējā attēlā - piecas sensoru sūtītāja vienības, kuras izmantoju testēšanai

Kas ir bezvadu sensoru tīkli?

Vienkārša definīcija būtu šāda: bezvadu sensoru tīkli attiecas uz elektronisko ierīču grupu, kas tiek izplatīta noteiktā apgabalā, lai uzraudzītu un ierakstītu vides datus, kas bezvadu režīmā tiek pārsūtīti uz centrālo atrašanās vietu, lai tos apstrādātu un uzglabātu.

Mūsdienās bezvadu sensoru tīklus var izmantot vairākos veidos, zemāk ir tikai daži piemēri:

  • Mežu, upju, ezeru, jūru un okeānu ekoloģiskās uzraudzības zonas;
  • Iespēja brīdināt, ja notiek teroristu, ķīmiski, bioloģiski, epidēmiski uzbrukumi;
  • Uzraudzības sistēmas bērniem, vecāka gadagājuma cilvēkiem, pacientiem vai cilvēkiem ar īpašām vajadzībām;
  • Uzraudzības sistēmas lauksaimniecībā un siltumnīcās;
  • Laika prognožu uzraudzības sistēma;
  • Pilsētas satiksmes, skolu, autostāvvietu uzraudzība;

Un daudzas, daudzas citas lietojumprogrammas.

Šajā rakstā es vēlos parādīt eksperimenta rezultātus ar bezvadu sensoru tīkliem, kas izmantoti temperatūras un mitruma datu uzraudzībai, ar lēnu un samērā paredzamu variāciju. Šim eksperimentam es izvēlējos izmantot sensoru sūtītājus, kurus es izveidoju pats, izmantojot pieejamus moduļus. Uztvērējs ir arī DIY, komunikācija ir vienvirziena (433 MHz radio joslā), kas nozīmē, ka sensori pārraida tikai datus un centrālā atrašanās vieta tikai saņem. Nav sakaru starp sensoriem un no uztvērēja līdz sensoriem.

Bet kāpēc izvēlēties izmantot vairākus raidītājus un tikai vienu uztvērēju? Acīmredzot pirmais iemesls būtu “padarīt to vienkāršu”. Jo vienkāršāka ir salikšana, jo mazāka iespēja, ka tā neizdosies, un noteikti ir daudz vieglāk salabot un nomainīt atsevišķas sastāvdaļas darbības traucējumu gadījumā. Arī enerģijas patēriņš ir mazāks, baterijas kalpos ilgāk (sensori patērēs tikai uzraudzības un saņemšanas laikā, pārējā laikā ierīce atradīsies dziļā miega režīmā). Tas, ka tas ir vienkāršs, padara ierīci arī lētu. Vēl viens aspekts, kas jāpatur prātā, ir pārklājuma zona. Kāpēc? Ir daudz vieglāk izveidot un izmantot jutīgu uztvērēju, nekā būt jutīgam uztvērējam un jaudīgam raidītājam gan pie sensoriem, gan pie centrālā moduļa (tas ir nepieciešams labai divvirzienu komunikācijai). Izmantojot jutīgu un kvalitatīvu uztvērēju, ir iespējams saņemt datus no liela attāluma, bet, lai emitētu datus par to pašu attālumu, nepieciešama liela emisijas jauda, un tas ir saistīts ar augstām izmaksām, elektroenerģijas patēriņu un (neaizmirsīsim) iespēju pārsniegt likumīgā maksimālā raidītāja jauda 433 MHz joslā. Izmantojot vidējas kvalitātes uztvērēju, lētu, bet ar augstas kvalitātes antenu (pat DIY) un lētus raidītājus ar labas kvalitātes antenu, mēs varam sasniegt izcilus rezultātus par daļu no esošo bezvadu sensoru tīklu izmaksām.

1. darbība: teorētiskie apsvērumi

Ideja izveidot bezvadu sensoru tīklu gaisa un augsnes temperatūras un mitruma kontrolei dažādās siltumnīcas zonās man ienāca prātā jau sen, gandrīz 10 gadus. Es gribēju izveidot 1 vadu tīklu un izmantot 1 vadu temperatūras un mitruma sensorus. Diemžēl pirms 10 gadiem mitruma sensori bija reti un dārgi (lai gan temperatūras sensori bija plaši izplatīti), un, tā kā vadu izkliedēšana pa visu siltumnīcu nešķita risinājums, es diezgan ātri atteicos no šīs idejas.

Tomēr tagad situācija ir radikāli mainījusies. Mēs varam atrast lētus un kvalitatīvus sensorus (temperatūra un mitrums), kā arī mums ir pieejami lēti raidītāji un uztvērēji 433 MHz joslā. Ir tikai viena problēma: ja mums ir vairāk sensoru (teiksim, 20), kā mēs varam atrisināt sadursmes (lūdzu, paturiet prātā, ka šī ir vienvirziena komunikācija), kas nozīmē, ka pārklāšanās ir 2 vai vairāk sensoru? Meklējot iespējamo risinājumu, es saskāros ar šo ļoti interesanto rakstu:

Bezvadu sensoru saplūšana, pamatojoties uz nejaušu darbību procedūru - RAJBA, T. un RAJBA, S.

un

Sadursmju iespējamība bezvadu sensoru tīklā ar nejaušu nosūtīšanu - RAJBA S. un RAJBA. T

Būtībā autori mums parāda, ka sadursmju varbūtību bezvadu sensoru tīklā var aprēķināt, ja paketes tiek emitētas noteiktos laika punktos saskaņā ar poisonisko (eksponenciālo) sadalījumu.

Izrakstā no iepriekš minētā darba ir uzskaitītas pētītā tīkla īpašības.

  • diezgan liels skaits sensoru-sūtītāju vienību N;
  • sensoru sūtītāja vienības paliek pilnīgi neatkarīgas, un to ieslēgšana vai izslēgšana neietekmē tīkla darbību;
  • visas sensoru sūtītāja vienības (vai to daļa) var būt mobilas, ja vien tās atrodas uztverošās stacijas radio diapazonā;
  • lēnām mainīgie fiziskie parametri tiek mērīti, kas nozīmē, ka dati nav jānosūta ļoti bieži (piemēram, ik pēc vairākām minūtēm vai desmitiem minūšu);
  • pārraide ir vienvirziena tipa, t.i., no sensoru sūtītāja vienības līdz uztveršanas punktam T vidējos laika intervālos. Informācija tiek pārsūtīta protokolā tlpp ilguma laiks;
  • jebkurš izvēlētais sensors sāk pārraidīt nejauši Puasona laikos. PASTA (Poisson Arrivals See Time Average) tiks izmantota, lai pamatotu zondu nosūtīšanu Puasona laikmetos;
  • visas sensoru sūtītāja vienības paliek nejauši neatkarīgas, un tās pārsūtīs informāciju nejauši izvēlētā laika momentā tlpp ilgums un T vidējais atkārtošanās laiks;
  • ja viens vai vairāki sensori sāk pārraidīt, kamēr protokols tlpp ilgums tiek pārraidīts no cita sensora, šādu situāciju sauc par sadursmi. Sadursme neļauj centrālajai bāzes stacijai saņemt informāciju pareizi.

Tas gandrīz ideāli sader ar sensoru tīklu, kuru vēlos pārbaudīt …

Gandrīz.

Es nesaku, ka es pilnībā sapratu matemātiku rakstā, bet, pamatojoties uz iesniegtajiem datiem un secinājumiem, esmu varējis mazliet saprast, par ko tas ir. Vienīgais, ka papīrā izmantota vērtība mani nedaudz satrauca:). Tas ir mainīgais tlpp - datu pārraides ilgums, kas tiek pieņemts kā 3,2x10-5 s. Tātad savākto datu pārraides laiks būtu 3,2 mūs! To nevar izdarīt 433 MHz joslā. Es gribu izmantot vai nu rcswitch, vai radiohead raidītāja sensoru programmēšanai. Pētot abu bibliotēku kodus, es nonācu pie secinājuma, ka mazākais pārraides laiks būtu 20 ms, kas ir krietni virs vērtības 3,2 mums. Ar 2,4 GHz raidītājiem ir iespējams tlpp laiks tik mazs … bet tas ir cits stāsts.

Ja mēs izmantosim šī darba autoru piedāvāto formulu, rezultāts būs šāds:

Sākotnējie dati (piemērs):

  • Sensoru skaits N = 20;
  • Datu pārraides ilgums tlpp= 20x10-3 s (0,020 s)
  • Vidējais pārraides intervāls T = 180s

Formula:

Sadursmes varbūtība T intervālā ir

Attēls
Attēls

ja ņemam vērā sākotnējos datus, sadursmes varbūtība T intervālā būs 0,043519

Šī vērtība, kas norāda uz 4,35 sadursmju iespējamību uz 100 mērījumiem, manuprāt, ir diezgan laba. Varbūtība varētu uzlaboties, ja mēs palielinātu vidējo pārraides laiku, tātad pie 300s vērtības mums būtu 0,026332 varbūtība, ti, 2,6 sadursmes uz 100 mērījumiem. Ja uzskatām, ka sistēmas darbības laikā mēs varam sagaidīt pakešdatu zudumu (piemēram, atkarībā no laika apstākļiem), tad šis skaitlis ir patiešām lielisks.

Es gribēju veikt šāda veida tīkla simulāciju, bet arī sava veida dizaina palīgu, tāpēc izveidoju nelielu programmu C, avota kodu varat atrast vietnē github (arī kompilēts binārs, kas darbojas Windows komandrindā - atbrīvošana).

Ievades dati:

  • sensor_number - sensoru skaits tīklā;
  • mērījumu_numurs - simulējamo mērījumu skaits;
  • vidējais_transmission_interval -vidējais laiks starp secīgām datu pārraidi;
  • transfer_time - faktiskais datu pārraides ilgums.

Izeja:

  • aprēķinātais maksimālais mērīšanas laiks;
  • divu sensoru sadursmju saraksts;
  • sadursmju skaits;
  • sadursmju teorētiskā varbūtība.

Rezultāti ir diezgan interesanti:)

Pietiek ar teoriju, es negribētu vairāk uzstāt uz teorētisko daļu, raksti un avota kods ir diezgan daiļrunīgi, tāpēc labāk dodos uz praktisko, efektīvo bezvadu sensoru tīkla ieviešanu un testa rezultātiem.

2. darbība. Praktiskā ieviešana - aparatūra

Raidītāju sensoriem mums būs nepieciešami šādi komponenti:

  • Mikrokontrolleris ATtiny85 1,11 $;
  • Integrētās shēmas ligzda 8DIP 0.046 $;
  • Temperatūras/mitruma sensors DHT11 0,74 $;
  • 433MHz H34A raidītāja modulis 0,73 $;
  • 4xAA bateriju turētājs ar slēdzi 1 $;

Kopā 3,63 $;

Pārbaudēs izmantotais uztvērējs ir Arduino UNO (tikai testēšanai) un uztveršanas modulis H3V4F (0,66 USD) ar lētu loka antenu (0,32 USD).

Sensora-sūtītāja shēmas

Attēls
Attēls

Raidītāja-sensora bloki tiek darbināti ar 3xAA, 1.5v baterijām (bateriju turētāja ceturtajā nodalījumā atrodas elektroniskais komplekts). Kā redzat, raidītāja barošanas avots un temperatūras un mitruma sensors ir pievienots mikrokontrollera PB0 tapai (raidītājs un sensors tiek baroti, kad tapa ir iestatīta uz HIGH). Tātad, ja mikrokontrolleris ir dziļā miega režīmā, tas var sasniegt 4,7uA strāvas patēriņu. Ņemot vērā, ka raidītāja-sensora pamošanās laiks būtu aptuveni 3 s (mērīšana, pārraide utt.) Un vidējais laiks starp pārraidi 180 s (kā piemērs iepriekšējā nodaļā), baterijām vajadzētu pretoties diezgan daudz. Izmantojot dažas labas kvalitātes sārma baterijas (ti, 2000 mAh), autonomija varētu pārsniegt 10 mēnešus, kā aprēķināts vietnē omnicalculator.com (kur kopējais strāvas patēriņš ir: sensors - 1,5 mA, raidītāja modulis - 3,5 mA un ATtiny85 mikrokontrolleris - 5 mA, kopā 10 mA).

Zemāk esošajā fotoattēlā var redzēt gandrīz pabeigto sensora-sūtītāja montāžu.

Attēls
Attēls

Zemāk ir testa uztvērēja bloka fotoattēls.

Attēls
Attēls

3. darbība: praktiskā ieviešana - programmatūra

Augšupielādētās programmatūras, kas darbojas ar mikrokontrolleri attiny85, kas ir sensoru sūtītāja vienību galvenā sastāvdaļa, mērķis ir nolasīt sensora sniegtos datus, pārvērst tos par pārraidāmiem pa radio un pārraidīt Puasona laika ietvaros (eksponenciāls sadalījums vai PASTA - Puasona ierašanās skatīt laika vidējos rādītājus). Turklāt, izmantojot vienkāršu funkciju, tā uzrauga bateriju stāvokli un brīdina, ja sensoram nepieciešamais spriegums vairs netiek nodrošināts. Avota kods ir pieejams vietnē github. Testa uztvērēja kods ir ļoti vienkāršs, es to ievietoju zemāk.

// modificēta rcswitch bibliotēka no https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// kods ir modificēta versija no oriģinālās rcswitch bibliotēkas piemēriem #include RCSwitch mySwitch = RCSwitch (); neparakstīti garie dati = 0; void setup () {Serial.begin (9600); mySwitch.enableRecept (0); // Uztvērējs pārtraukumā 0 => kas ir pin #2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // output (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); int mitrums = bitExtracted (dati, 7, 1); // mazāk nozīmīgi 7biti no 1. pozīcijas - labais pirmais bits int temperatūra = bitExtracted (dati, 7, 8); // nākamie 7 biti no 8. pozīcijas pa labi un tā tālāk int v_min = bitExtracted (dati, 1, 15); int packet_id = bitExtracted (dati, 3, 16); // 3biti - 8 pakešu ID no 0 līdz 7 int sensor_id = bitExtracted (dati, 6, 19); // 6 bitu 64 sensoru ID - kopā 24 biti Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatūra); Sērijas nospiedums (","); Sērijas nospiedums (mitrums); Sērijas.println (); mySwitch.resetAvailable (); }} // kods no https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (neparakstīts garš skaitlis, int k, int p) {return ((((1 (p- 1)));}

Esmu mēģinājis iekļaut pēc iespējas vairāk komentāru, lai būtu vieglāk saprast.

Atkļūdošanai es izmantoju programmatūras bibliotēku un attiny85 izstrādes paneli ar USBasp programmētāju (skatiet arī manu pamācību par to). Sērijas saite ir izveidota, izmantojot pārveidotāju no Serial to TTL (ar PL2303 mikroshēmu), kas pievienots izstrādes plates saliektajām tapām (3 un 4) (skat. Attēlu zemāk). Tas viss ir nenovērtējami palīdzējis pabeigt kodu.

Attēls
Attēls

4. darbība. Testa rezultāti

Testa rezultāti
Testa rezultāti
Testa rezultāti
Testa rezultāti

Esmu izveidojis 5 sensoru sūtītāja vienības, kas apkopo un nosūta DHT11 sensoru izmērītās vērtības. Es reģistrēju un saglabāju mērījumus, izmantojot testa uztvērēju un termināļa emulācijas programmu (foxterm), trīs dienu laikā. Studijām izvēlējos 48 stundu intervālu. Mani ne vienmēr interesēja izmērītās vērtības (piemēram, 2. sensors, tas man rāda nepareizas vērtības), bet gan sadursmju skaits. Turklāt uztvērējs sensorus novietoja ļoti tuvu (4-5 m attālumā), lai novērstu citus pakešu zuduma cēloņus. Testa rezultāti ir saglabāti cvs failā un augšupielādēti (skatiet zemāk esošo failu). Es arī augšupielādēju Excel failu, pamatojoties uz šo csv failu. Es uzņēmu dažus ekrānuzņēmumus, lai parādītu, kā izskatās sadursme (protams, manos testos), un es pievienoju komentārus arī katram ekrānuzņēmumam.

Jums var rasties jautājums, kāpēc es neizmantoju datu ielādētāja pakalpojumu, piemēram, ThingSpeak. Fakts ir tāds, ka man ir daudz ierakstu, daudzi sensori un dati bieži tiek saņemti neregulāros intervālos, un tiešsaistes IoT pakalpojumi atļauj datus tikai ar noteiktu sensoru skaitu un tikai diezgan lielos intervālos. Nākotnē domāju instalēt un konfigurēt savu IoT serveri.

Visbeidzot, 4598 mērījumi 5 sensoru sūtītāju vienībās (aptuveni 920/sensors) kopumā izraisīja 5 sadursmes 48 stundu laikā (0,5435 sadursmes/100 mērījumi). Dažas matemātikas (izmantojot programmu wsn_test ar sākotnējiem datiem: 5 sensori, vidējais laiks 180 s, pārraides laiks 110 ms) sadursmes varbūtība būtu 0,015185 (1,52 sadursmes/100 mērījumi). Praktiskie rezultāti ir vēl labāki par teorētiskajiem, vai ne?:)

Attēls
Attēls

Jebkurā gadījumā šajā periodā ir zaudētas arī 18 pakas, tāpēc sadursmēm šajā ziņā nav pārāk lielas nozīmes. Protams, pārbaudei būtu jānotiek ilgākā laika periodā, lai iegūtu pārliecinošākos rezultātus, taču, manuprāt, tā ir veiksmīga pat šajos apstākļos un pilnībā apstiprina teorētiskos pieņēmumus.

5. solis: pēdējās domas

Tūlītēja pieteikšanās

Lielā siltumnīcā tiek audzētas vairākas kultūras. Ja apūdeņošana tiek veikta manuāli bez klimata uzraudzības, bez jebkādas automatizācijas, bez datu ierakstiem, pastāv pārmērīgas vai nepietiekamas apūdeņošanas risks, kā arī liels ūdens patēriņš, nav pierādījumu par ūdens patēriņa optimizāciju, pastāv risks kultūraugiem. ģenerālis. Lai no tā izvairītos, mēs varam izmantot bezvadu sensoru tīklu:)

Temperatūras sensorus, gaisa mitruma sensorus, augsnes mitruma sensorus var novietot siltumnīcā visapkārt, un ar pārsūtīto datu palīdzību var veikt vairākas darbības: start-stop elektriskie vārsti, kas ļauj ūdenim plūst, kur nepieciešams, start-stop elektriskie ventilatori lai samazinātu temperatūru dažādās vietās, pēc vajadzības ieslēdziet un apturiet sildītājus un visus datus var arhivēt turpmākai analīzei. Turklāt sistēma var nodrošināt tīmekļa saskarni, kas ir pieejama visur, un e -pasta vai SMS trauksmes signālus neparastu apstākļu gadījumā.

Ko tālāk?

  • Testēšana ar lielāku sensoru skaitu;
  • Reāllaika testēšana ar tālvadības sensoriem pārklājuma zonā;
  • Vietējā IoT servera instalēšana un konfigurēšana (piemēram, Raspberry Pi);
  • Pārbauda arī ar raidītāja (raiduztvērēja) sensoriem 2,4 GHz frekvencē.

tāpēc … turpinājums …:)

ATRUNA: Izmantojot 433 MHz frekvenču joslu jūsu reģionā, var tikt piemēroti radiofrekvenču noteikumi. Pirms izmēģināt šo projektu, lūdzu, pārbaudiet savu likumību

Sensoru konkurss
Sensoru konkurss
Sensoru konkurss
Sensoru konkurss

Otrā vieta sensoru konkursā

Ieteicams: