Inhaltsverzeichnis:
- Schritt 1: Theoretische Überlegungen
- Schritt 2: Praktische Umsetzung - die Hardware
- Schritt 3: Praktische Umsetzung - Software
- Schritt 4: Testergebnisse
- Schritt 5: Abschließende Gedanken
Video: Kostengünstiges drahtloses Sensornetzwerk im 433-MHz-Band - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:18
Vielen Dank an Teresa Rajba, die mir freundlicherweise zugestimmt hat, Daten aus ihren Veröffentlichungen in diesem Artikel zu verwenden
* Im Bild oben - die fünf Sensor-Sender-Einheiten, die ich zum Testen verwendet habe
Was sind drahtlose Sensornetzwerke?
Eine einfache Definition wäre: Die drahtlosen Sensornetzwerke beziehen sich auf eine Gruppe von elektronischen Geräten, die auf einem bestimmten Gebiet zur Überwachung und Aufzeichnung von Umgebungsdaten verteilt sind, die drahtlos an einen zentralen Ort übertragen und dort verarbeitet und gespeichert werden.
Heutzutage können drahtlose Sensornetzwerke auf verschiedene Weise verwendet werden, im Folgenden sind nur einige Beispiele aufgeführt:
- Gebiete der ökologischen Überwachung von Wäldern, Flüssen, Seen, Meeren und Ozeanen;
- Möglichkeit zur Alarmierung im Falle o terroristischer, chemischer, biologischer, epidemischer Angriffe;
- Überwachungssysteme für Kinder, ältere Menschen, Patienten oder Menschen mit besonderen Bedürfnissen;
- Überwachungssysteme in der Landwirtschaft und in Gewächshäusern;
- Wettervorhersage-Überwachungssystem;
- Überwachung von Stadtverkehr, Schulen, Parkplätzen;
Und viele, viele andere Anwendungen.
In diesem Artikel möchte ich die Ergebnisse eines Experiments mit drahtlosen Sensornetzwerken zeigen, die zur Überwachung von Temperatur- und Feuchtigkeitsdaten verwendet wurden, mit einer langsamen und relativ vorhersehbaren Variation. Für dieses Experiment habe ich mich für Sensor-Sender entschieden, die ich selbst mit erschwinglichen Modulen gebaut habe. Der Empfänger ist ebenfalls DIY, die Kommunikation ist unidirektional (auf dem 433 MHz Funkband), dh die Sensoren senden nur die Daten und die Zentrale empfängt nur. Es gibt keine Kommunikation zwischen Sensoren und vom Empfänger zu den Sensoren.
Aber warum sollten Sie mehrere Sender und nur einen Empfänger verwenden? Der erste Grund wäre natürlich „es einfach machen“. Je einfacher der Zusammenbau ist, desto geringer ist die Ausfallwahrscheinlichkeit und es ist definitiv viel einfacher, die einzelnen Komponenten bei Störungen zu reparieren und auszutauschen. Der Stromverbrauch ist auch geringer, die Batterien halten länger (Sensoren verbrauchen nur während der Überwachung und des Empfangs, die restliche Zeit befindet sich das Gerät im Tiefschlafmodus). Die Einfachheit macht das Gerät auch günstig. Ein weiterer Aspekt, den Sie beachten sollten, ist der Abdeckungsbereich. Wieso den? Es ist viel einfacher, einen empfindlichen Empfänger aufzubauen und zu verwenden, als einen empfindlichen Empfänger und einen leistungsstarken Sender sowohl an den Sensoren als auch am Zentralmodul zu haben (dies ist für eine gute bidirektionale Kommunikation erforderlich). Mit einem empfindlichen und qualitativ hochwertigen Empfänger ist es möglich, Daten aus großer Entfernung zu empfangen, aber das Senden von Daten für die gleiche Entfernung erfordert eine hohe Sendeleistung und dies ist mit hohen Kosten, Stromverbrauch und (nicht zu vergessen) der Möglichkeit der Überschreitung der Sendeleistung verbunden gesetzliche maximale Sendeleistung im 433 MHz-Band. Durch die Verwendung eines mittelwertigen Empfängers, billig aber mit einer hochwertigen Antenne (auch DIY) und billiger Sender mit einer guten Antenne, können wir hervorragende Ergebnisse zu einem Bruchteil der Kosten bestehender drahtloser Sensornetzwerke erzielen.
Schritt 1: Theoretische Überlegungen
Die Idee, ein drahtloses Sensornetzwerk zur Überwachung von Temperatur und Luftfeuchtigkeit von Luft und Boden in verschiedenen Bereichen eines Gewächshauses aufzubauen, kam mir vor langer Zeit, fast 10 Jahren, in den Sinn. Ich wollte ein 1-Draht-Netzwerk aufbauen und 1-Draht-Temperatur- und Feuchtigkeitssensoren verwenden. Leider waren Feuchtigkeitssensoren vor 10 Jahren selten und teuer (obwohl Temperatursensoren weit verbreitet waren) und da das Verteilen von Drähten im ganzen Gewächshaus keine Option schien, gab ich die Idee ziemlich schnell auf.
Doch jetzt hat sich die Situation radikal geändert. Wir finden günstige und qualitativ hochwertige Sensoren (Temperatur und Luftfeuchtigkeit) und haben auch Zugang zu günstigen Sendern und Empfängern im 433 MHz Band. Es gibt nur ein Problem: Wenn wir mehr Sensoren haben (sagen wir 20), wie lösen wir die Kollisionen (bitte bedenken Sie, dass dies eine Einwegkommunikation ist), d. h. die Emission von 2 oder mehr Sensoren überlappen? Auf der Suche nach einer möglichen Lösung bin ich auf diese sehr interessanten Papiere gestoßen:
Drahtlose Sensorkonvergenz basierend auf Zufallsoperationen - von RAJBA, T. und RAJBA, S.
und
Die Wahrscheinlichkeit von Kollisionen im drahtlosen Sensornetzwerk mit zufälligem Senden - von RAJBA S. und RAJBA. T
Grundsätzlich zeigen uns die Autoren, dass die Wahrscheinlichkeit von Kollisionen in einem drahtlosen Sensornetzwerk berechnet werden kann, wenn die Pakete zu bestimmten Zeitpunkten nach einer poissonschen (exponentiellen) Verteilung ausgesendet werden.
Ein Auszug aus obigem Papier listet die Eigenschaften des untersuchten Netzwerks auf.
- ziemlich viele Sensor-Sender-Einheiten N;
- Sensor-Sender-Einheiten bleiben völlig unabhängig und das Ein- oder Ausschalten hat keinen Einfluss auf den Netzbetrieb;
- alle Sensor-Sender-Einheiten (oder ein Teil davon) können mobil sein, vorausgesetzt, sie befinden sich in Funkreichweite der Empfangsstation;
- die sich langsam ändernden physikalischen Parameter werden gemessen, so dass die Daten nicht sehr häufig (z. B. alle paar Minuten oder mehrere Dutzend Minuten) übertragen werden müssen;
- die Übertragung erfolgt in eine Richtung, d. h. von der Sensor-Sender-Einheit bis zum Empfangspunkt in T durchschnittlichen Zeitintervallen. Informationen werden im Protokoll bei t. übertragenP Dauer;
- jeder ausgewählte Sensor beginnt zufällig zu Poisson-Zeiten zu senden. PASTA (Poisson Arrivals See Time Averages) wird verwendet, um das Senden von Sonden in Poisson-Epochen zu rechtfertigen;
- alle Sensor-Sender-Einheiten bleiben zufällig unabhängig und senden die Informationen zu einem zufällig ausgewählten Zeitpunkt von tP Dauer und von T durchschnittliche Wiederholungszeit;
- wenn ein oder mehrere Sensoren mit der Übertragung beginnen, während das Protokoll von tP Dauer von einem anderen Sensor übertragen wird, wird eine solche Situation als Kollision bezeichnet. Eine Kollision macht es der zentralen Basisstation unmöglich, die Informationen korrekt zu empfangen.
Es passt fast perfekt zu dem Sensornetzwerk, das ich testen möchte …
Schon fast.
Ich sage nicht, dass ich die Mathematik in der Arbeit vollständig verstanden habe, aber auf der Grundlage der präsentierten Daten und der Schlussfolgerungen konnte ich ein wenig verstehen, worum es geht. Das einzige ist, dass ein im Papier verwendeter Wert mich ein wenig beunruhigt hat:). Es ist die Variable tP - Dauer der Datenübertragung, die mit 3,2x10. angenommen wird-5 S. Die Übertragungszeit der gesammelten Daten würde also 3,2 uns betragen! Dies ist im 433-MHz-Band nicht möglich. Ich möchte entweder den RCswitch oder den Radiohead verwenden, um die Sendersensoren zu programmieren. Beim Studium der Codes der beiden Bibliotheken kam ich zu dem Schluss, dass die kleinste Übertragungszeit 20 ms betragen würde, deutlich über dem Wert von 3,2 us. Mit den 2,4 GHz-Sendern ist es möglich,P Zeit so klein… aber das ist eine andere Geschichte.
Wenn wir die von den Autoren dieses Papiers vorgeschlagene Formel anwenden, lautet das Ergebnis:
Ausgangsdaten (ein Beispiel):
- Anzahl Sensoren N=20;
- Datenübertragungsdauer tP=20x10-3 s (0,020s)
- Durchschnittliches Sendeintervall T=180s
Die Formel:
Die Kollisionswahrscheinlichkeit im T-Intervall ist
Wenn wir die Anfangsdaten berücksichtigen, beträgt die Kollisionswahrscheinlichkeit im T-Intervall 0,043519
Dieser Wert, der die Wahrscheinlichkeit von 4,35 Kollisionen pro 100 Messungen angibt, ist meiner Meinung nach recht gut. Die Wahrscheinlichkeit könnte sich verbessern, wenn wir die durchschnittliche Übertragungszeit erhöhen, so dass wir bei einem Wert von 300s eine Wahrscheinlichkeit von 0,026332 haben, dh 2,6 Kollisionen pro 100 Messungen. Wenn wir bedenken, dass wir während des Betriebs des Systems ohnehin mit Paketdatenverlusten rechnen müssen (z. B. abhängig von den Wetterbedingungen), dann ist diese Zahl wirklich ausgezeichnet.
Ich wollte eine Simulation dieser Art von Netzwerk machen, aber auch eine Art Design-Assistent, also habe ich ein kleines Programm in C erstellt, den Quellcode finden Sie auf github (auch eine kompilierte Binärdatei, die in der Windows-Befehlszeile ausgeführt wird - Veröffentlichung).
Eingabedaten:
- sensor_number - die Anzahl der Sensoren im Netzwerk;
- Messungen_Nummer - Anzahl der zu simulierenden Messungen;
- mean_transmission_interval – durchschnittliche Zeit zwischen aufeinanderfolgenden Datenübertragungen;
- Transmission_time - die effektive Dauer der Datenübertragung.
Ausgabe:
- die berechnete maximale Messzeit;
- die Liste der Kollisionen zwischen zwei Sensoren;
- Anzahl der Kollisionen;
- theoretische Wahrscheinlichkeit der Kollisionen.
Die Ergebnisse sind sehr interessant:)
Genug der Theorie, ich möchte nicht mehr auf den theoretischen Teil bestehen, die Artikel und der Quellcode sind recht eloquent, daher gehe ich besser auf die praktische, effektive Umsetzung des drahtlosen Sensornetzwerks und auf die Testergebnisse ein.
Schritt 2: Praktische Umsetzung - die Hardware
Für Transmitter-Sensoren benötigen wir folgende Komponenten:
- ATtiny85-Mikrocontroller 1,11 $;
- Buchse für integrierte Schaltung 8DIP 0,046 $;
- Temperatur-/Feuchtesensor DHT11 0,74 $;
- 433MHz H34A Sendermodul 0,73 $;
- 4xAA Batteriehalter mit Schalter 1$;
Gesamt 3,63 $;
Der für die Tests verwendete Empfänger ist ein Arduino UNO (nur zum Testen) und ein H3V4F-Empfangsmodul (0,66 $) mit einer billigen Bogenantenne (0,32 $).
Sensor-Sender-Schaltpläne
Die Sender-Sensor-Einheiten werden mit 3xAA, 1,5V-Batterien betrieben (im vierten Fach des Batteriehalters befindet sich die elektronische Baugruppe). Wie Sie sehen, ist die Stromversorgung des Senders und der Temperatur-Feuchtigkeitssensor mit dem PB0-Pin des Mikrocontrollers verbunden (der Sender und der Sensor werden mit Strom versorgt, wenn der Pin auf HIGH steht). Wenn sich der Mikrocontroller im Deep-Sleep-Modus befindet, kann er also einen Stromverbrauch von 4,7 uA erreichen. Wenn man bedenkt, dass die Aufwachzeit des Sender-Sensors ca. 3s (Messen, Senden etc.) und die durchschnittliche Zeit zwischen den Übertragungen von 180s (wie das Beispiel im vorherigen Kapitel) betragen würde, sollten die Batterien ziemlich viel aushalten. Mit einigen Alkalibatterien guter Qualität (z. B. 2000 mAh) kann die Autonomie über 10 Monate betragen, wie auf omnicalculator.com berechnet (wobei der Gesamtstromverbrauch beträgt: Sensor - 1,5 mA, Sendermodul - 3,5 mA und ATtiny85-Mikrocontroller - 5 mA, insgesamt 10 mA).
Auf dem Foto unten sehen Sie die fast fertige Sensor-Sender-Baugruppe.
Unten ist das Foto der Testempfängereinheit.
Schritt 3: Praktische Umsetzung - Software
Die hochgeladene Software auf dem attiny85-Mikrocontroller, der Hauptkomponente der Sensor-Sender-Einheiten, hat den Zweck, die vom Sensor gelieferten Daten auszulesen, für die Funkübertragung umzuwandeln und innerhalb von Poisson-Zeitfenstern (Exponentialverteilung oder PASTA - Poisson Arrivals siehe Zeitdurchschnitt). Außerdem überwacht er mit einer einfachen Funktion den Zustand der Batterien und warnt, wenn die erforderliche Spannung für den Sensor nicht mehr zur Verfügung steht. Quellcode ist auf github verfügbar. Der Code für den Testempfänger ist sehr einfach, ich poste ihn unten.
//modifizierte rcswitch-Bibliothek von https://github.com/Martin-Laclaustra/rc-switch/tree/protocollessreceiver// der Code ist eine modifizierte Version von Beispielen der ursprünglichen rcswitch-Bibliothek #include RCSwitch mySwitch = RCSwitch(); lange Daten ohne Vorzeichen = 0; Void setup () { Serial.begin (9600); mySwitch.enableReceive(0); // Empfänger bei Interrupt 0 => das ist Pin #2 aufrechtzuerhalten. Void loop () { if (mySwitch.available ()) { unsigned long data = mySwitch.getReceivedValue (); //Ausgabe (mySwitch.getReceivedValue(), mySwitch.getReceivedBitlength(), mySwitch.getReceivedDelay(), mySwitch.getReceivedRawdata(), mySwitch.getReceivedProtocol()); int Luftfeuchtigkeit = bitExtracted(data, 7, 1); // weniger signifikante 7 Bits von Position 1 - ganz rechts erstes Bit int temperature = bitExtracted (data, 7, 8); // nächste 7bits von Position 8 nach rechts und so weiter int v_min = bitExtracted(data, 1, 15); int packet_id = bitExtracted(data, 3, 16); ///3bits – 8 Paket-IDs von 0 bis 7 int sensor_id = bitExtracted(data, 6, 19); ///6bit für 64 Sensor-IDs - insgesamt 24 Bit Serial.print (sensor_id); Serial.print (", "); Serial.print (packet_id); Serial.print (", "); Serial.print (temperature); Serial.print (", "); Serial.print (Luftfeuchtigkeit); Serial.println(); mySwitch.resetAvailable(); } } //Code von https://www.geeksforgeeks.org/extract-k-bits-given-position-number/ int bitExtracted(unsigned long number, int k, int p) { return (((1 (p - 1))); }
Ich habe versucht, so viele Kommentare wie möglich einzufügen, um die Sache verständlicher zu machen.
Zum Debuggen habe ich die Softwareserial-Bibliothek und das attiny85-Entwicklungsboard mit dem USBasp-Programmierer verwendet (siehe auch meine Anleitung dazu). Die serielle Verbindung wurde mit einem Seriell-zu-TTL-Konverter (mit einem PL2303-Chip) hergestellt, der mit den gebogenen Pins (3 und 4) der Entwicklungsplatine verbunden ist (siehe Bild unten). All dies war eine unschätzbare Hilfe bei der Vervollständigung des Codes.
Schritt 4: Testergebnisse
Ich habe 5 Sensor-Sender-Einheiten erstellt, die von den DHT11-Sensoren gemessene Werte sammeln und senden. Mit Hilfe des Testempfängers und eines Terminalemulationsprogramms (foxterm) habe ich drei Tage lang Messungen aufgezeichnet und gespeichert. Ich habe ein 48-Stunden-Intervall zum Lernen gewählt. Mich interessierten nicht unbedingt die Messwerte (Sensor 2 zB zeigt mir falsche Werte an), sondern die Anzahl der Kollisionen. Darüber hinaus wurden die Sensoren sehr nahe (in 4-5 m) vom Empfänger platziert, um andere Ursachen für Paketverluste auszuschließen. Die Testergebnisse wurden in einer CVS-Datei gespeichert und hochgeladen (siehe Datei unten). Ich habe auch eine Excel-Datei basierend auf dieser CSV-Datei hochgeladen. Ich habe einige Screenshots gemacht, um euch zu zeigen, wie eine Kollision aussieht (in meinen Tests natürlich), ich habe auch Kommentare zu jedem Screenshot hinzugefügt.
Sie werden sich vielleicht fragen, warum ich keinen Dataloader-Dienst zum Beispiel ThingSpeak verwendet habe. Tatsache ist, dass ich viele Datensätze, viele Sensoren und Daten habe, die oft in unregelmäßigen Abständen ankommen, und Online-IoT-Dienste nur Daten an einer bestimmten Anzahl von Sensoren und nur in größeren Abständen zulassen. Ich überlege, in Zukunft einen eigenen IoT-Server zu installieren und zu konfigurieren.
Am Ende ergaben 4598 Messungen an 5 Sensor-Sender-Einheiten (ca. 920/Sensor) insgesamt 5 Kollisionen über einen Zeitraum von 48 Stunden (0,5435 Kollisionen/100 Messungen). Nach Berechnungen (unter Verwendung des Programms wsn_test mit Anfangsdaten: 5 Sensoren, Durchschnittszeit 180 s, Übertragungszeit 110 ms) würde die Kollisionswahrscheinlichkeit 0,015185 (1,52 Kollisionen/100 Messungen) betragen. Die praktischen Ergebnisse sind noch besser als die theoretischen Ergebnisse, oder?:)
Jedenfalls gehen in diesem Zeitraum auch 18 Pakete verloren, so dass die Kollisionen in dieser Hinsicht nicht so wichtig sind. Natürlich sollte der Test über einen längeren Zeitraum erfolgen, um möglichst aussagekräftige Ergebnisse zu erhalten, ist aber meiner Meinung nach auch unter diesen Bedingungen ein Erfolg und bestätigt die theoretischen Annahmen vollumfänglich.
Schritt 5: Abschließende Gedanken
Sofortige Bewerbung
In einem großen Gewächshaus werden mehrere Pflanzen angebaut. Bei manueller Bewässerung ohne Klimaüberwachung, ohne Automatisierung, ohne Datensätze besteht die Gefahr einer Über- oder Unterbewässerung und auch der Wasserverbrauch ist hoch, es gibt keine Hinweise auf eine Optimierung des Wasserverbrauchs, es besteht ein Risiko für Pflanzen in Allgemeines. Um dies zu vermeiden, können wir ein drahtloses Sensornetzwerk verwenden:)
Temperatursensoren, Luftfeuchtigkeitssensoren, Bodenfeuchtigkeitssensoren können überall im Gewächshaus platziert werden und mit Hilfe der übertragenen Daten können verschiedene Aktionen durchgeführt werden: Start-Stopp-Elektroventile, um das Wasser dort fließen zu lassen, wo es benötigt wird, Start-Stopp-Elektrolüfter um die Temperatur in verschiedenen Bereichen zu senken, Start-Stopp-Heizungen nach Bedarf und alle Daten können für zukünftige Analysen archiviert werden. Außerdem kann das System eine Webschnittstelle bereitstellen, die überall zugänglich ist und E-Mail- oder SMS-Alarme im Falle eines anormalen Zustands bietet.
Was kommt als nächstes?
- Testen mit einer größeren Anzahl von Sensoren;
- Echtzeitprüfung mit entfernten Sensoren im Abdeckungsbereich;
- Installation und Konfiguration eines lokalen IoT-Servers (zum Beispiel auf einem Raspberry Pi);
- Tests auch mit Transmitter(Transceiver)-Sensoren auf 2.4Ghz.
also… Fortsetzung folgt…:)
HAFTUNGSAUSSCHLUSS: Die Verwendung des 433MHz-Frequenzbandes in Ihrer Region kann Funkfrequenzbestimmungen unterliegen. Bitte überprüfen Sie Ihre Legalität, bevor Sie dieses Projekt ausprobieren
Zweiter im Sensors Contest
Empfohlen:
So bauen Sie ein kostengünstiges EKG-Gerät – wikiHow
So bauen Sie ein kostengünstiges EKG-Gerät: Hallo zusammen! Mein Name ist Mariano und ich bin biomedizinischer Ingenieur. Ich verbrachte einige Wochenenden damit, einen Prototyp eines kostengünstigen EKG-Geräts basierend auf einem Arduino-Board zu entwerfen und zu realisieren, das über Bluetooth mit einem Android-Gerät (Smartphone oder Tablet) verbunden ist. Ich würde