Ich habe das RFduino-Projekt auf Kickstarter unterstützt, um es in meinem nächsten Projekt zu verwenden. Es handelt sich im Grunde genommen um ein winziges Arduino-kompatibles Board mit integriertem Bluetooth LE , das zusätzliche Abschirmungen unterstützt.
Ich habe auch ein normales Arduino Uno mit einem Ethernet Shield .
Was ich bauen möchte
Ich denke an ein Sensornetzwerk (Feuchte und Temperatur) für den Innenbereich mehr RFduinos Verwendung mit dem Münze Batterieschild das Haus herum liegen. Das Arduino Uno mit dem Ethernet-Schutzschild und einem an einen Router angeschlossenen Bluetooth-Schutzschild sendet die Daten an meinen Server, sodass ich die Statistiken fernüberwachen kann.
Frage
Ich möchte alle 10 Minuten Daten übertragen, um den Energieverbrauch niedrig zu halten. Wie kann ich die Sensoren und meine Hauptstation (die Uno) gleichzeitig aktivieren, Daten übertragen (von Sensoren zur Hauptstation und von der Hauptstation zu meinem Server) und sie wieder in den Ruhezustand versetzen? Besteht das Risiko eines Datenverlusts, da einer der Sensoren möglicherweise wach ist, während die Hauptstation noch schläft? Kann die Uno Bluetooth-Abschirmung die Ethernet-Abschirmung stören?
Ich frage nicht nach Code, aber macht die Idee Sinn? Links zu verwandten Projekten würden sehr helfen. Ich habe auch darüber nachgedacht, xbee für die Datenkommunikation zu verwenden, aber ich fand es ziemlich kompliziert und jetzt, da Bluetooth LE weniger Energie benötigt, kann ich keine Vorteile von xbee gegenüber Bluetooth LE erkennen.
Alternativ können Sie Ihr Programm so entwickeln, dass es auf Verbindungsanfragen wartet und Daten von den Sensoren als Rückgabewert sammelt und sendet. Dies würde die Notwendigkeit einer Zeitgeberschaltung oder -schleife vermeiden, obwohl es notwendig wäre, sowohl das Uno als auch das RFduino ständig eingeschaltet zu lassen. Angesichts des Stromverbrauchs kann die Möglichkeit, die Abtastrate leicht zu ändern, ein hervorragender Gewinn für Sie sein. Sie würden einfach ändern, wie oft Ihr Computer das Uno abgefragt hat, nichts am Uno oder die Sensoren würden sich ändern.
quelle
Einige Beobachtungen.
1) Wird Ihr Uno so platziert, dass es alle Sensoren über Bluetooth erreichen kann?
2) Warum nicht einfach Bluetooth zu Ihrem zentralen Server hinzufügen und das Aufwecken der Zeitsynchronisierung insgesamt vermeiden, da der zentrale Server ständig eingeschaltet ist?
3) Dead Reckoning mit dem Timer wird schließlich driften. Sie möchten, dass Ihr Peer-to-Peer-Netzwerk bei jedem Weckzyklus synchronisiert und beim nächsten Schlaf koordiniert wird.
Die Details zum Arduino-Schlaf sind hier (aber ich bin nicht sicher, ob das RFDUino auf die gleiche Weise funktioniert):
http://playground.arduino.cc/Learning/arduinoSleepCode
Sie würden wahrscheinlich versuchen, mit einem Watchdog-Timer aufzuwachen, da es keine bestimmten Ereignisse außer der Zeit gibt, die Ihre Messwerte auslöst.
Guter Überblick darüber hier: http://donalmorrissey.blogspot.com/2010/04/sleeping-arduino-part-5-wake-up-via.html
Ich denke, Sie können das Uno aus Ihrer Architektur entfernen und die Batterielebensdauer durch Herunterfahren der Hardware verlängern. Stellen Sie sicher, dass Ihr zentraler Server über Bluetooth verfügt und mindestens eines der Geräte sehen kann. Ich würde Peer-to-Peer-Lösung verwenden, damit alle Sensoren die Informationen der anderen zusammenfassen. Auf diese Weise können alle RFDuinos, solange sie mindestens ein anderes RFDuino sehen können, ihre Informationen weitergeben.
In diesem Entwurf würde ein RFDuino aufwachen und seinen Messwert an jeden Nachbarn senden, den er sieht, und dann jeden Nachbarn auf die Werte lesen, die der Nachbar gesammelt hat, bis alle erwarteten Messwerte vorhanden sind (Sie müssten vorkonfigurieren das Netzwerk, damit Sie wissen, wie viele Peers zu erwarten sind). Sobald jeder Sensor alle Informationen von allen anderen gesammelt hat, können Sie ein Synchronisationssignal senden und herunterfahren. Dadurch wird vermieden, dass Sensoren heruntergefahren werden, wenn sie nicht alle Messwerte von allen anderen haben, und die Synchronisierung stellt sicher, dass hoffentlich nicht alle Sensoren zu lange eingeschaltet bleiben. Wenn ein Sensor also früh aufwacht, wartet er, bis alle anderen ihre Daten an das Netzwerk gesendet haben, bevor er heruntergefahren wird. Wenn es spät aufwacht, warten alle anderen Sensoren darauf.
Wenn in diesem Design einer Ihrer Sensoren aufgrund von Batterielebensdauer / -ausfall verschwindet, bleiben alle anderen Sensoren wach und warten darauf. Sie benötigen also einen Notfallcode, der aktiviert wird, nachdem ein Sensor länger als zwei normale Intervalle auf fehlende Sensordaten gewartet hat. Entfernen Sie dann diesen Peer von der Warteliste und setzen Sie den Vorgang fort.
Klingt nach einem lustigen Projekt, lassen Sie uns wissen, wie es ausgeht.
quelle