Weltweiter kostenloser Versand ab 120 € Bestellwert – Zahlung mit PayPal und Stripe – Hergestellt in Finnland

Vibrationsüberwachung mit dem Bluetooth-Sensor RuuviTag – Teil 2

Grafik mit Beschleunigungsdaten

Vor einiger Zeit haben wir einen Blogbeitrag über die Überwachung des Motorbetriebs mit RuuviTags veröffentlicht. Die damals entwickelte Firmware hatte das Ziel, Rohdaten vom überwachten Objekt für weitere Analysen zu sammeln. Während die Firmware für die Datenerfassung gut funktioniert, verbraucht sie viel Strom und erfordert manuelle Arbeit bei der Datenverarbeitung.

In diesem Beitrag entwickeln wir das Konzept ein Stück weiter, verarbeiten die Daten direkt auf dem RuuviTag und senden den Spitze-Spitze-Wert, den Effektivwert (RMS) sowie die Standardabweichung der Daten.

Sammeln der Daten

Die Datenerfassung ist eine einfache Fortsetzung des vorherigen Teils: Wir sammeln Daten mit 400 Hz und warten, bis der First-In-First-Out-Interrupt (FIFO) vom Beschleunigungssensor LIS2DH12 kommt. Dann lesen wir die FIFO-Daten aus und berechnen den Spitze-Spitze-Wert (P2P), den Effektivwert (RMS) und die Standardabweichung (STDEV) der Daten.

Die berechneten Werte werden dann als UINT16_T in ein herstellerspezifisches Datenformat kodiert, das als Bluetooth Low-Energy (BLE) Advertisement gesendet wird. Jedes BLE-Gerät in der Nähe kann diese Sendungen empfangen und parsen. Wir beginnen das Paket mit einem Header-Byte 0xAC, einem Versions-Byte 0x00 und übertragen dann die X-Y-Z-Werte von P2P, RMS und STDEV. Schließlich fügen wir einen Sequenzzähler hinzu, mit dem fehlende Pakete erkannt werden können, sowie die Batteriespannung, um uns zu warnen, wenn es Zeit für einen Batteriewechsel ist.

Empfangen der Daten

Die Daten werden mit dem TypeScript / NodeJS Collector geparst, der für den Batterie-Ausdauertest erstellt wurde, und der Code läuft auf einem Raspberry Pi. Du findest die Quellen auf GitHub. Bitte beachte, dass die Noble-Bibliothek seit Januar 2019 Probleme mit NodeJS 10+ hat. Du kannst den Code mit NodeJS 8 unter NVM ausführen. Die geparsten Daten werden dann an InfluxDB gesendet und mit Grafana visualisiert.

Stromverbrauch

Wieder einmal müssen wir den Stromverbrauch des Tags berücksichtigen. Es reicht nicht aus, dass der Tag wie erwartet funktioniert; er muss auch lange durchhalten.

Grafik eines Leistungsprofils

Der Stromverbrauch ist momentan viel zu hoch; bei 300 µA können wir mit einer Batterielaufzeit von etwa 4 Monaten rechnen. Das ist offensichtlich nicht genug, also schauen wir mal, was wir dagegen tun können.

Optimierung der Firmware

Im Moment sendet der Sensor die Daten so schnell, wie es die BLE-Spezifikationen erlauben, unabhängig davon, ob es etwas Interessantes gibt. Der erste Optimierungsschritt besteht darin, das Aktivitätsniveau zu überwachen und in einen Standby-Modus zu wechseln, wenn nichts Relevantes passiert. Unser Standby-Modus hat ein Sendeintervall von 9.900 ms und eine Abtastrate des Beschleunigungssensors von 10 Hz.

Wenn während des Standbys ein Beschleunigungsereignis eintritt, das den vordefinierten Schwellenwert überschreitet, wird ein Interrupt ausgelöst und der Sensor schaltet zurück in den 400-Hz-Modus. Wir haben den Schwellenwert für den Interrupt auf 50 mg festgelegt, was aufgrund der Sensorgrenzen auf 64 mg aufgerundet wird.

Zusätzlich kombinieren wir 4 Sätze von FIFO-Ergebnissen in einer Berechnung, wodurch wir die Sende-Rate auf 400/128 Hz oder etwa 320 ms reduzieren können.

Jetzt sollte unsere Firmware für den langfristigen Einsatz bereit sein, aber wir werden das natürlich noch überprüfen.

Grafik zeigt, dass der aktive Stromverbrauch nun 200 µA beträgt
Der aktive Stromverbrauch liegt nun bei 200 µA
Grafik zeigt, dass der Standby-Verbrauch etwa 10 µA beträgt
Der Standby-Verbrauch liegt bei etwa 10 µA

Der Standby-Stromverbrauch deutet darauf hin, dass wir eine Standby-Zeit von zehn Jahren erreichen könnten – das ist definitiv genug. Allerdings würden die 200 µA Stromverbrauch im aktiven Zustand die Batterie in etwa sechs Monaten leeren. Das ist völlig okay für ein Haushaltsgerät, das nur gelegentlich eingeschaltet ist, wie zum Beispiel eine Waschmaschine. Ein Kühlschrank, bei dem der Kompressor ständig anspringt, erfordert möglicherweise mehr Feinabstimmung, zum Beispiel indem nur ein Probensatz für alle 10 Sekunden Aktivität genommen wird. Andererseits könnte ein anderes Gerät, wie eine CNC-Maschine (Computerized Numerical Control), von einer kontinuierlichen Überwachung profitieren. Die Anwendung kann für den jeweiligen Anwendungsfall weiter optimiert werden.

Ausprobieren

Wie zuvor nutzen wir eine Waschmaschine als zu überwachendes Haushaltsgerät. Ein doppelseitiges 3M VHB-Klebeband wird verwendet, um den Tag an der Seite der Waschmaschine zu befestigen.

Eine Waschmaschine mit einem RuuviTag an der Seite
Der RuuviTag fügt sich optisch gut in das Gehäuse der Waschmaschine ein.

Der Beschleunigungssensor ist intern so ausgerichtet, dass die X-Achse die axiale Beschleunigung und die Y-Achse die tangentiale Beschleunigung erfasst. Z ist „natürlicherweise“ die radiale Beschleunigung, da die Z-Achse zum Zentrum der Trommel hin ausgerichtet ist. Dann starten wir einen Waschgang und warten auf die Ergebnisse.

Zufälligerweise gab es bei unserem Durchlauf eine Anomalie. Ein Bügelbrett fiel gegen die Waschmaschine, während ich gerade ein Foto vom Aufbau machte.

Grafik zeigt den Aufprall des Bügelbretts
Der Aufprall des Bügelbretts ist in den Daten deutlich sichtbar

Die durch das Bügelbrett verursachte Beschleunigungsspitze ist leicht zu erkennen.

Fazit

Wir haben nun eine einfache Firmware zur Vibrationsüberwachung fertig für erste Praxistests. Wenn du sie ausprobieren möchtest, findest du die Quellen und die kompilierte Binärdatei auf GitHub. Wie bisher stellen wir kein fertiges DFU-Paket zur Verfügung, da die Firmware Nordic SDK15 und SoftDevice 6 verwendet, während RuuviTags SoftDevice 3 nutzen. RuuviTags können zwar „over-the-air“ aktualisiert werden, aber eine Rückkehr zur ursprünglichen Programmierung ist ohne kabelgebundene Verbindung nicht möglich.