Cuprins:
- Pasul 1: Considerații teoretice
- Pasul 2: Implementare practică - Hardware-ul
- Pasul 3: Implementare practică - Software
- Pasul 4: Rezultatele testelor
- Pasul 5: Gânduri finale
Video: Rețea de senzori wireless cu cost redus pe banda de 433 MHz: 5 pași (cu imagini)
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
Multe mulțumiri Teresa Rajba pentru că mi-a acordat cu amabilitate acceptul de a folosi datele din publicațiile lor din acest articol
* În imaginea de mai sus - cele cinci unități senzor-expeditor pe care le-am folosit pentru testare
Ce sunt rețelele de senzori fără fir?
O definiție simplă ar fi: rețelele de senzori fără fir se referă la un grup de dispozitive electronice distribuite pe o anumită zonă pentru monitorizarea și înregistrarea datelor de mediu, care sunt transmise fără fir într-o locație centrală pentru a fi procesate și stocate.
În prezent, rețelele de senzori fără fir pot fi utilizate în mai multe moduri, mai jos sunt doar câteva exemple:
- Zone de supraveghere ecologică a pădurilor, râurilor, lacurilor, mărilor și oceanelor;
- Posibilitatea de a alerta în caz de atacuri teroriste, chimice, biologice, epidemice;
- Sisteme de monitorizare pentru copii, vârstnici, pacienți sau persoane cu nevoi speciale;
- Sisteme de supraveghere în agricultură și sere;
- Sistem de monitorizare a prognozei meteo;
- Supravegherea traficului orașului, a școlilor, a parcărilor;
Și multe, multe alte aplicații.
În această lucrare vreau să arăt rezultatele unui experiment cu rețele de senzori fără fir care au fost utilizate pentru monitorizarea datelor de temperatură și umiditate, cu o variație lentă și relativ previzibilă. Pentru acest experiment am ales să folosesc senzori-expeditori pe care i-am construit de la mine folosind module accesibile. Receptorul este și DIY, comunicația este unidirecțională (pe banda radio de 433 MHz), ceea ce înseamnă că senzorii transmit doar datele, iar locația centrală primește doar. Nu există comunicare între senzori și de la receptor la senzori.
Dar de ce să alegi să folosești mai multe transmițătoare și un singur receptor? Evident, primul motiv ar fi „simplificarea”. Cu cât este mai simplu de asamblat, cu atât este mai puțin probabil să se defecteze și cu siguranță este mult mai ușor să reparați și să înlocuiți componentele individuale în caz de defecțiuni. Consumul de energie este, de asemenea, mai mic, bateriile vor dura mai mult (senzorii vor consuma numai în timpul monitorizării și primirii, restul timpului dispozitivul va fi în modul de repaus profund). Faptul că este simplu face ca dispozitivul să fie și ieftin. Un alt aspect de reținut este zona de acoperire. De ce? Este mult mai ușor să construiți și să utilizați un receptor sensibil decât să aveți un receptor sensibil și un transmițător puternic atât la senzori cât și la modulul central (acest lucru este necesar pentru o bună comunicare bidirecțională). Cu un receptor sensibil și de bună calitate, este posibil să primiți date de la distanță mare, dar emiterea datelor pentru aceeași distanță necesită o putere de emisie ridicată și acest lucru vine cu costuri ridicate, consum de energie electrică și (să nu uităm) posibilitatea depășirii puterea maximă legală a transmițătorului pe banda de 433 MHz. Folosind un receptor de calitate medie, ieftin, dar cu o antenă de înaltă calitate (chiar DIY) și transmițătoare ieftine cu o antenă de bună calitate, putem obține rezultate excelente la o fracțiune din costul rețelelor de senzori fără fir existente.
Pasul 1: Considerații teoretice
Ideea de a construi o rețea de senzori fără fir pentru monitorizarea temperaturii și umidității aerului și a solului în diferite zone ale unei sere mi-a venit în minte cu mult timp în urmă, aproape 10 ani. Am vrut să construiesc o rețea cu 1 fir și să folosesc senzori de temperatură și umiditate cu 1 fir. Din păcate, în urmă cu 10 ani, senzorii de umiditate erau rare și costisitoare (deși senzorii de temperatură erau răspândiți) și, din moment ce răspândirea firelor în toată sera nu părea o opțiune, am renunțat la idee destul de repede.
Cu toate acestea, acum situația s-a schimbat radical. Suntem capabili să găsim senzori ieftini și de bună calitate (temperatură și umiditate) și avem, de asemenea, acces la emițătoare și receptoare ieftine pe banda de 433 MHz. Există o singură problemă: dacă avem mai mulți senzori (să zicem 20) cum rezolvăm coliziunile (vă rugăm să rețineți că aceasta este o comunicare unidirecțională), adică suprapunând emisia a 2 sau mai mulți senzori? În timp ce căutam o posibilă soluție, am dat peste aceste lucrări foarte interesante:
Senzorul wireless converge turnul pe baza procedurilor de operații aleatorii - de RAJBA, T. și RAJBA, S.
și
Probabilitatea coliziunilor în rețeaua de senzori fără fir cu trimiterea aleatorie - de RAJBA S. și RAJBA. T
Practic, autorii ne arată că probabilitatea coliziunilor într-o rețea de senzori fără fir poate fi calculată dacă pachetele sunt emise în anumite momente de timp în conformitate cu o distribuție poissoniană (exponențială).
Un extras din lucrarea de mai sus listează caracteristicile rețelei studiate.
- un număr destul de mare de unități senzor-expeditor N;
- unitățile senzor-expeditor rămân complet independente și pornirea sau oprirea acestora nu are nicio influență asupra funcționării rețelei;
- toate unitățile senzor-expeditor (sau o parte a acestora) pot fi mobile cu condiția să fie amplasate în raza radio a stației de recepție;
- parametrii fizici care se schimbă încet sunt supuși măsurătorilor, ceea ce înseamnă că nu este nevoie să transmiteți datele foarte frecvent (de exemplu, la fiecare câteva minute sau câteva zeci de minute);
- transmisia este de tip unidirecțional, adică de la unitatea senzor-expeditor până la punctul de recepție la intervale de timp medii T. Informațiile sunt transmise în protocol la tp durata timpului;
- orice senzor selectat începe să transmită aleatoriu la orele Poisson. PASTA (Poisson Arrivals See Time Averages) va fi folosit pentru a justifica trimiterea sondelor la epocile Poisson;
- toate unitățile senzor-emițător rămân aleatoriu independente și vor transmite informațiile la un moment aleatoriu selectat al tp durata și timpul mediu de repetare a T;
- dacă unul sau mai mulți senzori încep să transmită în timp ce protocolul tp durata este transmisă de la un alt senzor, o astfel de situație se numește coliziune. Coliziunea face imposibil ca stația centrală de bază să primească informațiile într-un mod corect.
Se potrivește aproape perfect cu rețeaua de senzori pe care vreau să o testez …
Aproape.
Nu spun că am înțeles complet matematica din lucrare, dar pe baza datelor prezentate și a concluziilor am reușit să înțeleg puțin despre ce este vorba. Singurul lucru este că o valoare folosită în ziar m-a făcut să mă îngrijorez puțin:). Este variabila tp - durata transmisiei de date care se presupune a fi de 3,2x10-5 s. Deci, timpul de transmitere a datelor colectate ar fi de 3,2 noi! Acest lucru nu se poate face pe banda de 433 MHz. Vreau să folosesc fie comutatorul rcs, fie capul radio pentru a programa senzorii emițătorului. Studiind codurile celor două biblioteci, am ajuns la concluzia că cel mai mic timp de transmisie ar fi de 20 ms, cu mult peste valoarea de 3,2 noi. Cu transmițătoarele de 2,4 GHz, este posibil săp timpul este atât de mic … dar asta este o altă poveste.
Dacă aplicăm formula propusă de autorii acestei lucrări, rezultatul va fi:
Date inițiale (un exemplu):
- Numărul de senzori N = 20;
- Durata transmisiei de date tp= 20x10-3 s (0,020s)
- Intervalul mediu de transmisie T = 180s
Formula:
Probabilitatea coliziunii pe intervalul T este
dacă luăm în considerare datele inițiale, probabilitatea coliziunii pe intervalul T va fi 0,043519
Această valoare, care indică probabilitatea de a avea 4,35 coliziuni la 100 de măsurători, este, în opinia mea, destul de bună. Probabilitatea s-ar putea îmbunătăți dacă creștem timpul mediu de transmisie, deci la o valoare de 300s am avea o probabilitate de 0,026332, adică 2,6 coliziuni la 100 de măsurători. Dacă considerăm că ne putem aștepta la pierderea datelor de pachete oricum în timpul funcționării sistemului (în funcție de condițiile meteorologice, de exemplu), atunci acest număr este cu adevărat excelent.
Am vrut să fac o simulare a acestui tip de rețea, dar și un fel de asistent de proiectare, așa că am făcut un mic program în C, puteți găsi codul sursă pe github (de asemenea, un binar compilat care rulează în linia de comandă Windows - eliberare).
Date de intrare:
- sensor_number - numărul de senzori din rețea;
- număr_măsurători - numărul de măsurători de simulat;
- average_transmission_interval-timp mediu între transmisiile succesive de date;
- transmission_time - durata efectivă a transmiterii datelor.
Ieșire:
- timpul maxim de măsurare calculat;
- lista coliziunilor dintre doi senzori;
- numărul de coliziuni;
- probabilitatea teoretică a coliziunilor.
Rezultatele sunt destul de interesante:)
Suficient cu teoria, nu aș vrea să insist mai mult asupra părții teoretice, articolele și codul sursă sunt destul de elocvente, așa că mai bine merg la implementarea practică și eficientă a rețelei de senzori fără fir și la rezultatele testelor.
Pasul 2: Implementare practică - Hardware-ul
Pentru emițător-senzori vom avea nevoie de următoarele componente:
- Microcontroler ATtiny85 1,11 $;
- Soclu circuit integrat 8DIP 0,046 $;
- Senzor de temperatură / umiditate DHT11 0.74 $;
- 433MHz H34A modul transmițător 0,73 $;
- Suport baterie 4xAA cu comutator 1 $;
Total 3,63 $;
Receptorul utilizat pentru teste este un Arduino UNO (numai pentru testare) și un modul de recepție H3V4F (0,66 $) cu o antenă cu arc ieftină (0,32 $).
Scheme senzor-expeditor
Unitățile emițător-senzor sunt alimentate cu baterii de 3xAA, 1,5v (în al patrulea compartiment al suportului bateriei se află ansamblul electronic). După cum puteți vedea, sursa de alimentare a emițătorului și senzorul de temperatură-umiditate sunt conectate la pinul PB0 al microcontrolerului (emițătorul și senzorul sunt alimentați când pinul este setat la HIGH). Deci, atunci când microcontrolerul este în modul de repaus profund, poate atinge un consum de curent de 4,7 uA. Având în vedere că timpul de trezire al emițătorului-senzor ar fi de aproximativ 3s (măsurare, transmisie etc.) și timpul mediu între transmisii de 180s (ca exemplu în capitolul anterior), bateriile ar trebui să reziste destul de mult. Cu unele baterii alcaline de bună calitate (adică 2000 mAh), autonomia ar putea fi de peste 10 luni după cum se calculează pe omnicalculator.com (unde consumul total de curent este: senzor - 1,5 mA, modul transmițător - 3,5 mA și microcontroler ATtiny85 - 5 mA, total 10 mA).
În fotografia de mai jos puteți vedea ansamblul senzor-expeditor aproape terminat.
Mai jos este fotografia unității receptoare de testare.
Pasul 3: Implementare practică - Software
Software-ul încărcat care rulează pe microcontrolerul attiny85, componenta principală a unităților senzor-expeditor, are scopul de a citi datele furnizate de senzor, de a le converti pentru a fi transmise prin radio și de a le transmite în intervalele de timp Poisson (distribuție exponențială sau PASTA - Sosiri Poisson Vezi Medii de timp). De asemenea, prin utilizarea unei funcții simple, monitorizează starea bateriilor și dă un avertisment dacă nu mai este furnizată tensiunea necesară pentru senzor. Codul sursă este disponibil pe github. Codul pentru receptorul de testare este foarte simplu, îl postez mai jos.
// biblioteca rcswitch modificată de la https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// codul este o versiune modificată din exemplele bibliotecii rcswitch originale #include RCSwitch mySwitch = RCSwitch (); date lungi nesemnate = 0; void setup () {Serial.begin (9600); mySwitch.enableReceive (0); // Receiver on interrupt 0 => that is pin # 2} void loop () {if (mySwitch.available ()) {unsigned long data = mySwitch.getReceivedValue (); // output (mySwitch.getReceivedValue (), mySwitch.getReceivedBitlength (), mySwitch.getReceivedDelay (), mySwitch.getReceivedRawdata (), mySwitch.getReceivedProtocol ()); umiditate int = bitExtracted (date, 7, 1); // 7 biți mai puțin semnificativi din poziția 1 - primul bit cel mai la dreapta int temperature = bitExtracted (date, 7, 8); // următorii 7 biți din poziția 8 spre dreapta și așa mai departe int v_min = bitExtracted (date, 1, 15); int pachet_id = bitExtracted (date, 3, 16); // 3bits - 8 id-uri de pachet de la 0 la 7 int sensor_id = bitExtracted (date, 6, 19); // 6 biți pentru 64 ID-uri ale senzorilor - total 24 biți Serial.print (sensor_id); Serial.print (","); Serial.print (packet_id); Serial.print (","); Serial.print (temperatura); Serial.print (","); Serial.print (umiditate); Serial.println (); mySwitch.resetAvailable (); }} // cod de la https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted (număr lung nesemnat, int k, int p) {return (((1 (p - 1)));}
Am încercat să includ cât mai multe comentarii posibil pentru a face lucrurile mai ușor de înțeles.
Pentru depanare, am folosit biblioteca de software și placa de dezvoltare attiny85 cu programatorul USBasp (vezi și instructivul meu despre acest lucru). Legătura serială a fost realizată cu convertorul Serial la TTL (cu un cip PL2303) conectat la pinii îndoiți (3 și 4) ai plăcii de dezvoltare (vezi imaginea de mai jos). Toate acestea au fost de un ajutor neprețuit pentru completarea codului.
Pasul 4: Rezultatele testelor
Am creat 5 unități senzor-expeditor care colectează și trimit valori măsurate de senzorii DHT11. Am înregistrat și am salvat măsurători, cu ajutorul receptorului de testare și a unui program de emulare terminal (foxterm), pe parcursul a trei zile. Am ales un interval de 48 de ore pentru studiu. Nu m-a interesat neapărat valorile măsurate (senzorul 2, de exemplu, îmi arată valori greșite), ci numărul de coliziuni. În plus, senzorii au fost amplasați foarte aproape (la 4-5 m) de către receptor pentru a elimina alte cauze ale pierderii pachetelor. Rezultatele testului au fost salvate într-un fișier cvs și încărcate (uitați-vă la fișierul de mai jos). De asemenea, am încărcat un fișier Excel bazat pe acest fișier CSV. Am făcut câteva capturi de ecran pentru a vă arăta cum arată o coliziune (în testele mele, desigur), am adăugat și comentarii la fiecare captură de ecran.
S-ar putea să vă întrebați de ce nu am folosit un serviciu de încărcare a datelor, de exemplu ThingSpeak. Faptul este că am multe înregistrări, mulți senzori și date care vin adesea la intervale neregulate, iar serviciile IoT online permit date doar la un anumit număr de senzori și numai la intervale destul de mari. Mă gândesc în viitor să instalez și să configurez propriul meu server IoT.
În cele din urmă, 4598 măsurători pe 5 unități senzor-expeditor (aprox. 920 / senzor) au dus la un total de 5 coliziuni pentru o perioadă de 48 de ore (0,5435 coliziuni / 100 măsurători). Efectuarea unor calcule (folosind programul wsn_test cu date inițiale: 5 senzori, timp mediu 180s, timp de transmisie 110 ms) probabilitatea de coliziune ar fi 0,015185 (1,52 coliziuni / 100 măsurători). Rezultatele practice sunt chiar mai bune decât rezultatele teoretice, nu-i așa?:)
Oricum, sunt și 18 pachete pierdute în această perioadă, deci coliziunile nu prea contează prea mult în acest sens. Desigur, testul ar trebui să aibă loc pe o perioadă mai lungă de timp pentru a obține cele mai concludente rezultate, dar în opinia mea este un succes chiar și în aceste condiții și confirmă pe deplin ipotezele teoretice.
Pasul 5: Gânduri finale
Aplicare imediata
Într-o seră mare se cultivă mai multe culturi. Dacă irigarea este realizată manual fără monitorizare a climei, fără nicio automatizare, fără înregistrări de date există riscul supra sau sub irigații și, de asemenea, consumul de apă este ridicat, nu există dovezi pentru optimizarea consumului de apă, există risc pentru culturi în general. Pentru a evita acest lucru, putem folosi o rețea de senzori fără fir:)
Senzorii de temperatură, senzorii de umiditate a aerului, senzorii de umiditate a solului pot fi amplasați în jur în seră și cu ajutorul datelor transmise pot fi efectuate mai multe acțiuni: supape electrice start-stop pentru a lăsa apa să curgă acolo unde este nevoie, ventilatoare electrice start-stop pentru a reduce temperatura în diferite zone, încălzitoarele start-stop după cum este necesar și toate datele pot fi arhivate pentru analize viitoare. De asemenea, sistemul poate oferi o interfață web accesibilă peste tot și alarme prin e-mail sau SMS în caz de stare anormală.
Ce urmeaza?
- Testarea cu un număr mai mare de senzori;
- Testare în timp real cu senzori la distanță în zona de acoperire;
- Instalarea și configurarea unui server IoT local (de exemplu, pe un Raspberry Pi);
- Testează și cu senzori transmițător (transceiver) pe 2.4Ghz.
deci … să fie continuat …:)
DISCLAIMER: Utilizarea benzii de frecvență de 433 MHz în regiunea dvs. poate fi supusă reglementărilor privind frecvența radio. Vă rugăm să verificați legalitatea înainte de a încerca acest proiect
Locul doi în concursul de senzori
Recomandat:
Masă DIY pentru hochei cu cost redus: 27 de pași (cu imagini)
Masă DIY pentru hochei cu aer scăzut: o configurație profesională pentru hochei cu aer este disponibilă de obicei numai în arcade datorită sistemelor sofisticate care sunt necesare pentru ao opera. Scopul nostru a fost să construim o masă DIY de hochei cu aer, aducând această experiență de joc acasă. Prin utilizarea în mod obișnuit disponibilă
Sistem de control al cortinei Alexa - imprimabil 3D și cost redus: 19 pași (cu imagini)
Alexa Curtain Control System - Imprimare 3D și cost redus: Bună ziua, am încercat mult timp să automatizăm cât mai mult din casa noastră. Pe măsură ce iarna ajunge aici în Marea Britanie, am decis să îndepărtez corvoada închiderii tuturor perdelelor seara și apoi să le deschid din nou dimineața. Aceasta înseamnă să alerg
Contor digital versatil și cu cost redus: 5 pași (cu imagini)
Contor digital versatil și cu cost redus: acest hack va transforma un calculator ieftin ușor de obținut într-o mașină de numărare versatilă. Poate fi folosit ca o metodă ieftină de măsurare a distanței folosind o roată, un comutator reed și un magnet (gândiți contorul de biciclete). Deci, ce altceva mai poți întreba? Ei bine, ho
UDuino: Placă de dezvoltare compatibilă Arduino cu cost foarte redus: 7 pași (cu imagini)
UDuino: Placă de dezvoltare compatibilă Arduino cu un cost foarte mic: Plăcile Arduino sunt excelente pentru prototipare. Cu toate acestea, acestea devin destul de scumpe atunci când aveți mai multe proiecte simultane sau aveți nevoie de o mulțime de plăci de control pentru un proiect mai mare. Există câteva alternative mai bune și mai ieftine (Boarduino, Freeduino), dar
Senzor de debit de apă cu cost redus și afișaj ambiental: 8 pași (cu imagini)
Senzor de curgere a apei cu cost redus și afișaj ambiental: apa este o resursă prețioasă. Milioane de oameni nu au acces la apă potabilă curată și până la 4000 de copii mor în fiecare zi din cauza bolilor contaminate cu apă. Cu toate acestea, continuăm să fim risipitori cu resursele noastre. Scopul general al