Wie verbinde ich RFduino mit dem Internet?

7

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.


quelle

Antworten:

2

Es macht irgendwie Sinn.

Es ist kein großes Problem , das Uno rund um die Uhr in Betrieb zu halten (es verbraucht nicht viel Energie). Anstatt es an eine Batterie anzuschließen, besorgen Sie sich eine gute Wandwarze dafür. Auf diese Weise müssen Sie sich auch nicht um die Synchronisierung der RFduinos kümmern. Lassen Sie es einfach geduldig warten, bis ein RFduino eine Verbindung hergestellt hat. Allerdings, wenn Sie tun wollen , dass sie synchron zu halten, dann nur die Verwendung Zeitbibliothek, irgendwie drehen sie alle zur gleichen Zeit (einfach , wenn Sie den Reset - Pin verwenden), und beten , dass ihre Stromversorgung ist unterbrochen.

Über die RFduinos: Sie können sie wahrscheinlich auch in einer Schleife halten, die alle 10 Minuten unterbrochen wird, um Bluetooth einzuschalten und Daten zu senden. Verwenden Sie noch besser eine Bibliothek wie diese, die Ihnen einen energieeffizienten Schlafmodus bietet, mit dem Sie arbeiten können.

Wenn Sie die RFduinos jedoch nicht eingeschaltet lassen möchten, sollte eine einfache Schaltung mit einem 555-Timer und einem Relais ausreichen, um sie alle paar Minuten einzuschalten (sie kann sich über den RESET-Pin des 555 selbst ausschalten). Solange der Uno rund um die Uhr eingeschaltet ist, müssen Sie keine spezielle Synchronisierung verwenden und die RFduinos können Werte in gestaffelten Intervallen senden.

Hier ist ein Schema:

Geben Sie hier die Bildbeschreibung ein

Verbinden Sie den Teil mit der Aufschrift "To Pin" mit einem Pin am RFduino. Senden Sie eine konstante HIGH-Ausgabe darauf. Wenn Sie herunterfahren möchten, senden Sie ein LOW-Signal.

Die Teile "To Vin" und "To GND" gehen an die entsprechenden Pins des RFduino.

Wenn Sie keinen 866K-Widerstand finden können, sollte etwas in der Nähe funktionieren. Grundsätzlich sollte ln (2) * R2 * C2 600 Sekunden betragen.

Beachten Sie, dass 555s ein unterschiedliches RESET-Verhalten aufweisen. Wir wollen den, der beim Zurücksetzen auf den NIEDRIGEN Zyklus geht.

Manishearth
quelle
Benötige ich wirklich zusätzliche Hardware? Ich habe diesen interessanten Artikel gestern gefunden. Wie man einen Arduino wochen- oder monatelang mit einer 9-V-Batterie betreibt . Haben Sie jemals mit einer reinen Softwarelösung gearbeitet?
@zeMirco: Ich habe bereits die Softwarelösung erwähnt: Lassen Sie sie eingeschaltet, in einer Schleife, die alle 10 Minuten ausbricht, um Bluetooth einzuschalten (ich werde diese Bibliothek auf Wunsch etwas bearbeiten). Ich habe Ihnen die Hardwarelösung gegeben, weil Sie erwähnt haben, dass sie in der Frage deaktiviert sein sollen.
Manishearth
Ja, Sie haben eine Softwarelösung im Allgemeinen erwähnt, aber keine Details angegeben. Wenn Sie weitere Einblicke haben, wäre das wunderbar. Zum Beispiel: Wie kann ich sicherstellen, dass die Timer auf meiner Hauptstation und den RFduinos synchronisiert sind?
@zeMirco: Ein bisschen in einer Bearbeitung hinzugefügt. IMO: Wenn Sie Uno aktiviert lassen, müssen Sie sich keine Gedanken über die Synchronisierung machen. In der Zeitbibliothek können Sie sie jedoch synchron halten. Ich habe jedoch keine Erfahrung damit und bin mir nicht sicher, wie genau diese Bibliothek ist.
Manishearth
Die Zeitbibliothek ist etwas ungenauer als die Genauigkeit der Taktquelle: Im Fall des Arduino, der keinen temperaturkompensierten Kristalloszillator (TCXO) verwendet, ist dies überhaupt nicht sehr genau. Auch etwas ungenauer, da einige Interrupts in der Praxis übersehen werden, was zu Ungenauigkeiten führt.
Anindo Ghosh
1

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.

John
quelle
Ein interessanter Ansatz, aber wie Sie sagten, bedeutet dies, dass ich beide ständig eingeschaltet lassen muss, was die Batteriezeit extrem verkürzt.
Stimmt, aber wie Manishearth erwähnte, könnte man genauso gut eine gute Wandwarze für die Macht bekommen. Vor allem, wenn Sie die Sensoren an "versteckten" oder nicht normal zugänglichen Orten platzieren möchten.
John
0

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.

Tim
quelle