Inhoudsopgave:

Goedkoop draadloos sensornetwerk op 433MHz-band - Ajarnpa
Goedkoop draadloos sensornetwerk op 433MHz-band - Ajarnpa

Video: Goedkoop draadloos sensornetwerk op 433MHz-band - Ajarnpa

Video: Goedkoop draadloos sensornetwerk op 433MHz-band - Ajarnpa
Video: Inside Look: Manufacturing Process of the SONOFF SNZB-02 Wireless Sensor 2024, November
Anonim
Goedkoop draadloos sensornetwerk op 433MHz-band
Goedkoop draadloos sensornetwerk op 433MHz-band

Veel dank aan Teresa Rajba voor haar vriendelijke toestemming om gegevens uit hun publicaties in dit artikel te gebruiken

* In de bovenstaande afbeelding - de vijf sensor-zendereenheden die ik heb gebruikt voor het testen

Wat zijn draadloze sensornetwerken?

Een eenvoudige definitie zou zijn: de draadloze sensornetwerken verwijzen naar een groep elektronische apparaten die op een bepaald gebied worden verspreid voor het bewaken en registreren van omgevingsgegevens, die draadloos worden verzonden naar een centrale locatie om te worden verwerkt en opgeslagen.

Tegenwoordig kunnen draadloze sensornetwerken op verschillende manieren worden gebruikt, hieronder zijn slechts enkele voorbeelden:

  • Gebieden van ecologisch toezicht op bossen, rivieren, meren, zeeën en oceanen;
  • Mogelijkheid om te alarmeren in geval van terroristische, chemische, biologische, epidemische aanvallen;
  • Monitoringsystemen voor kinderen, ouderen, patiënten of mensen met speciale behoeften;
  • Bewakingssystemen in landbouw en kassen;
  • Weersvoorspelling monitoringsysteem;
  • Toezicht op stadsverkeer, scholen, parkeergarages;

En vele, vele andere toepassingen.

In dit artikel wil ik de resultaten laten zien van een experiment met draadloze sensornetwerken die zijn gebruikt voor het monitoren van temperatuur- en vochtigheidsgegevens, met een langzame en relatief voorspelbare variatie. Voor dit experiment heb ik ervoor gekozen om sensor-zenders te gebruiken die ik zelf heb gebouwd met behulp van betaalbare modules. De ontvanger is ook zelfgemaakt, de communicatie is unidirectioneel (op de 433 MHz-radioband), wat betekent dat de sensoren alleen de gegevens verzenden en de centrale locatie alleen ontvangt. Er is geen communicatie tussen sensoren en van ontvanger naar sensoren.

Maar waarom kiezen voor het gebruik van meerdere zenders en slechts één ontvanger? Het is duidelijk dat de eerste reden "het eenvoudig maken" zou zijn. Hoe eenvoudiger de montage is, hoe kleiner de kans op mislukking en het is zeker veel gemakkelijker om de afzonderlijke componenten te repareren en te vervangen in geval van storingen. Het stroomverbruik is ook lager, de batterijen gaan langer mee (sensoren verbruiken alleen tijdens het monitoren en ontvangen, de rest van de tijd staat het apparaat in de diepe slaapmodus). Het feit dat het eenvoudig is, maakt het toestel ook nog eens goedkoop. Een ander aspect om in gedachten te houden is het dekkingsgebied. Waarom? Het is veel gemakkelijker om een gevoelige ontvanger te bouwen en te gebruiken dan om een gevoelige ontvanger en een krachtige zender te hebben bij zowel de sensoren als de centrale module (dit is nodig voor een goede bidirectionele communicatie). Met een gevoelige en kwalitatief goede ontvanger is het mogelijk om op grote afstand data te ontvangen, maar het uitzenden van data over dezelfde afstand vereist een hoog zendvermogen en dit gaat gepaard met hoge kosten, elektriciteitsverbruik en (laten we niet vergeten) de mogelijkheid om de wettelijk maximaal zendvermogen op de 433 MHz-band. Door een ontvanger van gemiddelde kwaliteit te gebruiken, goedkoop maar met een hoogwaardige antenne (zelfs doe-het-zelf) en goedkope zenders met een antenne van goede kwaliteit, kunnen we uitstekende resultaten behalen tegen een fractie van de kosten van bestaande draadloze sensornetwerken.

Stap 1: Theoretische overwegingen

Het idee om een draadloos sensornetwerk te bouwen voor het monitoren van temperatuur en vochtigheid van lucht en bodem in verschillende delen van een kas kwam lang geleden in mijn gedachten, bijna 10 jaar. Ik wilde een 1-draads netwerk bouwen en 1-draads temperatuur- en vochtigheidssensoren gebruiken. Helaas waren vochtigheidssensoren 10 jaar geleden zeldzaam en duur (hoewel temperatuursensoren wijdverbreid waren) en omdat het verspreiden van draden door de hele kas geen optie leek, gaf ik het idee vrij snel op.

Nu is de situatie echter radicaal veranderd. We kunnen goedkope en kwalitatief goede sensoren vinden (temperatuur en vochtigheid), en we hebben ook toegang tot goedkope zenders en ontvangers op de 433 MHz-band. Er is alleen één probleem: als we meer sensoren hebben (laten we zeggen 20), hoe lossen we de botsingen op (houd er rekening mee dat dit eenrichtingscommunicatie is), wat betekent dat de emissie van 2 of meer sensoren overlapt? Tijdens het zoeken naar een mogelijke oplossing kwam ik deze zeer interessante papers tegen:

Draadloze sensorconvergentie gegoten op basis van willekeurige bewerkingen - door RAJBA, T. en RAJBA, S.

en

De kans op botsingen in Wireless Sensor Network met willekeurige verzending - door RAJBA S. en RAJBA. t

Kortom, de auteurs laten ons zien dat de kans op botsingen in een draadloos sensornetwerk kan worden berekend als de pakketten op bepaalde tijdstippen worden uitgezonden volgens een poissoniaanse (exponentiële) verdeling.

Een uittreksel uit het bovenstaande artikel somt de kenmerken van het bestudeerde netwerk op.

  • een vrij groot aantal sensor-zender-eenheden N;
  • sensor-zender units blijven volledig onafhankelijk en het in- of uitschakelen heeft geen invloed op de netwerkwerking;
  • alle sensor-zendereenheden (of een deel ervan) mogen mobiel zijn, mits ze zich binnen het radiobereik van het ontvangststation bevinden;
  • de langzaam veranderende fysieke parameters worden onderworpen aan metingen, waardoor het niet nodig is om de gegevens zeer vaak te verzenden (bijvoorbeeld om de paar minuten of enkele tientallen minuten);
  • de transmissie is van het eenrichtingstype, d.w.z. van de sensor-zendereenheid naar het ontvangstpunt met T-gemiddelde tijdsintervallen. Informatie wordt verzonden in het protocol op tP tijdsduur;
  • elke geselecteerde sensor begint willekeurig te zenden op Poisson-tijden. PASTA (Poisson Arrivals See Time Averages) zal worden gebruikt om het verzenden van sondes in Poisson-tijdperken te rechtvaardigen;
  • alle sensor-zender-eenheden blijven willekeurig onafhankelijk en ze zullen de informatie op een willekeurig gekozen tijdstip van t verzendenP duur en van T gemiddelde herhalingstijd;
  • als een of meer sensoren beginnen te zenden terwijl het protocol van tP duur wordt uitgezonden door een andere sensor, wordt een dergelijke situatie de botsing genoemd. Door een botsing kan het centrale basisstation de informatie niet op de juiste manier ontvangen.

Het past bijna perfect bij het sensornetwerk dat ik wil testen…

Bijna.

Ik zeg niet dat ik de wiskunde in de paper volledig heb begrepen, maar op basis van de gepresenteerde gegevens en de conclusies heb ik een beetje kunnen begrijpen waar het over gaat. Het enige is dat ik me een beetje zorgen maakte over een waarde die in de krant werd gebruikt:). Het is de variabele tP - duur van de datatransmissie die wordt verondersteld 3,2x10. te zijn-5 s. Dus de overdrachtstijd van de verzamelde gegevens zou 3,2 ons zijn! Dit kan niet op de 433 MHz-band. Ik wil de rcswitch of de radiohead gebruiken om de zendersensoren te programmeren. Toen ik de codes van de twee bibliotheken bestudeerde, kwam ik tot de conclusie dat de kleinste transmissietijd 20 ms zou zijn, ruim boven de waarde van 3,2 us. Met de 2,4 GHz zenders is het mogelijk omP tijd zo klein… maar dat is een ander verhaal.

Als we de formule toepassen die door de auteurs van dit artikel is voorgesteld, zal het resultaat zijn:

Initiële gegevens (een voorbeeld):

  • Aantal sensoren N=20;
  • Duur datatransmissie tP=20x10-3 s (0.020s)
  • Gemiddeld transmissie-interval T=180s

De Formule:

Kans op botsing op T-interval is

Afbeelding
Afbeelding

als we rekening houden met de initiële gegevens, is de kans op een botsing op het T-interval 0,043519

Deze waarde, die de kans op 4,35 botsingen per 100 metingen aangeeft, is naar mijn mening redelijk goed. De waarschijnlijkheid zou kunnen verbeteren als we de gemiddelde zendtijd verhogen, dus bij een waarde van 300s zouden we een kans hebben van 0,026332, ofwel 2,6 botsingen per 100 metingen. Als we bedenken dat we toch verlies van pakketgegevens kunnen verwachten tijdens de werking van het systeem (afhankelijk van bijvoorbeeld de weersomstandigheden), dan is dit aantal echt uitstekend.

Ik wilde een simulatie van dit type netwerk doen, maar ook een soort ontwerpassistent, dus ik heb een klein programma gemaakt in C, je kunt de broncode vinden op github (ook een gecompileerd binair bestand dat wordt uitgevoerd in de Windows-opdrachtregel - uitgave).

Invoergegevens:

  • sensor_number - het aantal sensoren op het netwerk;
  • metingen_nummer - aantal te simuleren metingen;
  • gemiddelde_transmissie_interval -gemiddelde tijd tussen opeenvolgende datatransmissies;
  • transmissie_tijd - de effectieve duur van de gegevensoverdracht.

Uitgang:

  • de berekende maximale meettijd;
  • de lijst met botsingen tussen twee sensoren;
  • aantal botsingen;
  • theoretische kans op botsingen.

De resultaten zijn best interessant:)

Genoeg met de theorie, ik zou niet meer willen aandringen op het theoretische gedeelte, de artikelen en de broncode zijn behoorlijk welsprekend, dus ik kan maar beter naar de praktische, effectieve implementatie van het draadloze sensornetwerk en naar de testresultaten gaan.

Stap 2: Praktische implementatie - de hardware

Voor zender-sensoren hebben we de volgende componenten nodig:

  • ATtiny85-microcontroller 1.11 $;
  • Geïntegreerde schakeling socket 8DIP 0,046 $;
  • Temperatuur-/vochtigheidssensor DHT11 0,74 $;
  • 433MHz H34A zendermodule 0,73 $;
  • 4xAA batterijhouder met schakelaar 1$;

Totaal 3.63 $;

De ontvanger die voor de tests wordt gebruikt, is een Arduino UNO (alleen voor testen) en een H3V4F-ontvangstmodule (0,66$) met een goedkope boogantenne (0,32$).

Schema's sensor-zender

Afbeelding
Afbeelding

De zender-sensor units worden gevoed met 3xAA, 1.5v batterijen (in het vierde compartiment van de batterijhouder bevindt zich de elektronische assemblage). Zoals u kunt zien, zijn de voeding van de zender en de temperatuur-vochtigheidssensor aangesloten op de PB0-pin van de microcontroller (de zender en de sensor worden gevoed wanneer de pin is ingesteld op HOOG). Dus wanneer de microcontroller in de diepe slaapmodus staat, kan hij een stroomverbruik van 4,7uA bereiken. Aangezien de wektijd van de zender-sensor ongeveer 3s zou zijn (meting, transmissie enz.) en de gemiddelde tijd tussen transmissies van 180s (zoals het voorbeeld in het vorige hoofdstuk), zouden de batterijen behoorlijk wat weerstand moeten bieden. Met sommige alkalinebatterijen van goede kwaliteit (bijv. 2000 mAh) kan de autonomie meer dan 10 maanden bedragen, zoals berekend op omnicalculator.com (waar het totale stroomverbruik is: sensor - 1,5 mA, zendermodule - 3,5 mA en ATtiny85 microcontroller - 5 mA, totaal 10 mA).

Op de onderstaande foto ziet u de bijna voltooide sensor-zenderassemblage.

Afbeelding
Afbeelding

Hieronder ziet u de foto van de testontvanger.

Afbeelding
Afbeelding

Stap 3: Praktische implementatie - Software

De software die wordt geüpload naar de attiny85-microcontroller, het belangrijkste onderdeel van de sensor-zendereenheden, heeft tot doel de gegevens die door de sensor worden verstrekt, te converteren om via de radio te worden verzonden en deze binnen Poisson-tijdframes (exponentiële distributie of PASTA - Poisson-aankomsten Zie tijdgemiddelden). Door een eenvoudige functie te gebruiken, bewaakt het ook de status van de batterijen en geeft het een waarschuwing als de vereiste spanning voor de sensor niet meer wordt geleverd. Broncode is beschikbaar op github. De code voor de testontvanger is heel eenvoudig, ik plaats hem hieronder.

//gewijzigde rcswitch-bibliotheek van https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// de code is een aangepaste versie van voorbeelden van de originele rcswitch-bibliotheek #include RCSwitch mySwitch = RCSwitch(); niet-ondertekende lange gegevens = 0; void setup() { Serial.begin(9600); mySwitch.enableReceive(0); // Ontvanger op interrupt 0 => dat is pin #2} void loop () {if (mySwitch.available ()) { unsigned long data = mySwitch.getReceivedValue (); //output(mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(), mySwitch.getReceivedProtocol()); int vochtigheid = bitExtracted(data, 7, 1); // minder significante 7 bits vanaf positie 1 - meest rechtse eerste bit int temperatuur = bitExtracted (data, 7, 8); // volgende 7 bits van positie 8 naar rechts enzovoort int v_min = bitExtracted (data, 1, 15); int packet_id = bitExtracted(data, 3, 16); //3bits - 8 pakket-ID's van 0 tot 7 int sensor_id = bitExtracted (data, 6, 19); //6bit voor 64 sensor-ID's - totaal 24 bits Serial.print(sensor_id);Serial.print(", ");Serial.print(packet_id);Serial.print(", ");Serial.print(temperatuur); Serial.print(", ");Serial.print(vochtigheid); Serieel.println(); mySwitch.resetAvailable(); } } //code van https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted(unsigned long number, int k, int p) { return (((1 (p - 1))); }

Ik heb geprobeerd om zoveel mogelijk opmerkingen op te nemen om het begrijpelijk te maken.

Voor het debuggen gebruikte ik de softwareserial library en het attiny85 development board met de USBasp programmer (zie ook mijn instructable hierover). De seriële koppeling is gemaakt met een Serieel naar TTL-converter (met een PL2303-chip) die is aangesloten op de gebogen pinnen (3 en 4) van het ontwikkelbord (zie onderstaande afbeelding). Dit alles is van onschatbare waarde geweest om de code te voltooien.

Afbeelding
Afbeelding

Stap 4: Testresultaten

Test resultaten
Test resultaten
Test resultaten
Test resultaten

Ik heb 5 sensor-zendereenheden gemaakt die waarden verzamelen en verzenden die zijn gemeten door de DHT11-sensoren. Met behulp van de testontvanger en een terminalemulatieprogramma (foxterm) heb ik gedurende drie dagen metingen opgenomen en opgeslagen. Ik koos voor een studieperiode van 48 uur. Ik was niet per se geïnteresseerd in de gemeten waarden (sensor 2 geeft me bijvoorbeeld verkeerde waarden aan) maar in het aantal botsingen. Bovendien werden de sensoren door de ontvanger zeer dichtbij (op 4-5 m) geplaatst om andere oorzaken van pakketverlies te elimineren. De testresultaten zijn opgeslagen in een cvs-bestand en geüpload (zie onderstaand bestand). Ik heb ook een Excel-bestand geüpload op basis van dit csv-bestand. Ik heb wat screenshots gemaakt om je te laten zien hoe een botsing eruit ziet (in mijn tests natuurlijk), ik heb ook opmerkingen toegevoegd aan elke screenshot.

Je vraagt je misschien af waarom ik geen dataloader-service heb gebruikt, bijvoorbeeld ThingSpeak. Feit is dat ik veel records heb, veel sensoren en gegevens die vaak met onregelmatige tussenpozen binnenkomen, en online IoT-services laten alleen gegevens toe bij een bepaald aantal sensoren en alleen met vrij grote tussenpozen. Ik denk erover om in de toekomst mijn eigen IoT-server te installeren en configureren.

Uiteindelijk resulteerden 4598 metingen aan 5 sensor-zender units (ca. 920/sensor) in in totaal 5 botsingen gedurende een periode van 48 uur (0,5435 botsingen/100 metingen). Door wat rekenwerk te doen (met behulp van het wsn_test-programma met initiële gegevens: 5 sensoren, gemiddelde tijd 180s, transmissietijd 110 ms) zou de kans op een botsing 0,015185 zijn (1,52 botsingen/100 metingen). De praktische resultaten zijn nog beter dan de theoretische resultaten, niet?:)

Afbeelding
Afbeelding

Hoe dan ook, er zijn in deze periode ook 18 pakketten verloren gegaan, dus de botsingen doen er in dit opzicht niet zoveel toe. Natuurlijk moet de test over een langere periode plaatsvinden om de meest overtuigende resultaten te krijgen, maar naar mijn mening is het zelfs onder deze omstandigheden een succes en bevestigt het volledig de theoretische aannames.

Stap 5: Laatste gedachten

Onmiddellijke toepassing

In een grote kas worden meerdere gewassen verbouwd. Als de irrigatie handmatig wordt uitgevoerd zonder klimaatmonitoring, zonder enige automatisering, zonder gegevensregistratie is er een risico op over- of onderirrigatie en is ook het waterverbruik hoog, is er geen bewijs voor optimalisatie van het waterverbruik, is er een risico voor gewassen in algemeen. Om dit te voorkomen, kunnen we een draadloos sensornetwerk gebruiken:)

Temperatuursensoren, luchtvochtigheidssensoren, bodemvochtsensoren kunnen rondom in de kas worden geplaatst en met behulp van verzonden gegevens kunnen verschillende acties worden ondernomen: start-stop elektrische kleppen om het water te laten stromen waar nodig, start-stop elektrische ventilatoren om de temperatuur in verschillende gebieden te verlagen, start-stop-verwarmers indien nodig en alle gegevens kunnen worden gearchiveerd voor toekomstige analyse. Ook kan het systeem voorzien in een webinterface die overal toegankelijk is en e-mail- of sms-alarmen in geval van abnormale omstandigheden.

Wat is het volgende?

  • Testen met een groter aantal sensoren;
  • Realtime testen met sensoren op afstand in het dekkingsgebied;
  • Installeren en configureren van een lokale IoT-server (bijvoorbeeld op een Raspberry Pi);
  • Test ook met zender(transceiver)-sensoren op 2,4 Ghz.

dus… wordt vervolgd…:)

DISCLAIMER: Het gebruik van de 433MHz-frequentieband in uw regio kan onderhevig zijn aan radiofrequentievoorschriften. Controleer uw legaliteit voordat u dit project probeert

Sensoren wedstrijd
Sensoren wedstrijd
Sensoren wedstrijd
Sensoren wedstrijd

Tweede plaats in de sensorwedstrijd

Aanbevolen: