Projektpräsentation — Internet der Dinge
MiceWheel as Internet of Things
Danny Ziesche 1. Februar 2017
Hochschule RheinMain
Gliederung
Motivation Problemstellung Analyse
Architektur Umsetzung Evaluation Persönliches Fazit DEMO
Motivation
Motivation
Überwachung des Laufverhaltens von Nagetieren in ihren
Laufrädern
Problemstellung
Problemstellung
• Messvorrichtung um Laufradumdrehungszahl zu ermitteln
• Software für Internet der Dinge Knoten
• Persistierung der Messdaten
• Darstellung der Messdaten auf einer Weboberfläche
• keine Drittanbieterdienste (Datenschutz, Persönlichkeitsrechte)
Analyse
Messmöglichkeiten
Bewegungsmelder Reedschalter Hall-Sensor
Aktivitätserkennung + ++ +++
Rundenerkennung -- + ++
Hardware (Laufrad)
• Ausreichend groß (30cm ⌀)
• Leichtgängiges Kugellager
⇒ persönliche Empfehlung
Hardware (Mikrocontroller 1)
• NodeMCU
• ESP8266 Wi-Fi SoC (Xtensa)
• BLE Nano
• Nordic nRF51822 SoC (ARM)
• Bluetooth LE
• RTL8821
• ARM Cortex M3
• direkter ESP8266 Konkurrent
• keinADC
Hardware (Mikrocontroller 2)
Entscheidung fällt auf denNodeMCU.
Hardware (Sensor)
• Honeywell SS490
• Stromverbrauch typ. 7mA
• Spannung typ. 5V
• Lineares Ausgangssignal
M
Abbildung 2: Hall-Sensor symbolisches Bild
Mikrocontrollersoftware (1)
Systemsoftware
• Arduino Framework
• Freertos
⇒Für den Einsatzzweck einer periodischen Messung reicht das Arduino Framework
Mikrocontrollersoftware (2)
Protokoll (Publish)
• benutzerdefinierte Schnittstelle über TCP
• Message Queue Telemetry Transport (MQTT)
⇒Zum Einsatz kommt MQTT, da es fertige Bibliotheken gibt und einen Testdurchlauf bestand.
Serversoftware
• MQTT-Broker: Mosquitto
• MQTT-Subscriber: Eigenentwicklung
• Datenbank: RethinkDB
• Webanwendung: NodeJS (mit epoch.js, socket.io etc.)
Architektur
Grobdesign
Sensor Knoten
Server
WebApp Messcode
Messcode
MQTT Publisher MQTT Publisher
Datenvisualisierung Datenvisualisierung
Pub Topic
Websocket
Feindesign (Knoten)
WifiSetup
MQTTSetup ConnectionState
Messvorgang ver¨offentlicheMessung
Knoten: Server:
setup
loop
Abbildung 4: Sequenzdiagramm Knoten
Feindesign (Daten)
Mess-Push-Nachricht()
Datenaufbereitung() Datenpersistierung()
True
Broker: Subscriber: RethinkDB:
Umsetzung
Messung (1)
• Ausschlag durch Dauermagnet
• Ausschlag je nach Ausrichtung des
Magnetischen Feldes Abbildung 6: Hall-Sensor
Ausgangssignaleigenschaften bei 5V
Messung (2)
• Zwei Dauermagnete auf der Rückwand des Laufrades
• Dauermagneten diagonal gegenüberliegend
• Einmal mit der Nord- und einmal mit der Südseite
Schaltplan
Testaufbau
Rundenerkennung
Erkennung der Dauermagneten N Nordseite
S Südseite
U Unbestimmte Seite
0 1 2 3 4 5
U N U S U S
U S U N U S
Abbildung 9:Ringpufferanordnung
Rundenerkennung
Ringpuffer
• Erkennung von Zustandsänderungen
• Vermerken im Ringpuffer
0 1 2 3 4 5
U N U S U S
U S U N U S
Abbildung 9:Ringpufferanordnung
Rundenerkennung
Mustererkennung
• N-S-N
• S-N-S
0 1 2 3 4 5
U N U S U S
U S U N U S
Abbildung 9:Ringpufferanordnung
MQTT-Publisher
• sekündliches Intervall
• kostet fast nichts
• Zeitpunkt dadurch erst beim Subscriber erfassen
Evaluation
MQTT-Publisher Lib
• Verliert ab und an die Verbindung zum Broker
• Debugging lief ins Leere
• Korrelation wird bei der sehr häufen ADC-Messung vermutet.
Grund:
Beispielcode der PubSubLib verliert ebenso die Verbindung wenn ADC-Messungen dabei sind.
• Problemlösungsansatz: Weitere, andere MQTT-Libs ausprobieren.
Prellung
• Provozierung von Prellungen bei der Sensormessung
• Möglich durch sehr langsame Umdrehungen
• Problemlösung: Mehrere Samples nehmen, Werte müssen aufeinander steigen bzw. fallen.
RethinkDB
• Push-Feeds funktioniert einwandfrei
• Gute Datenbanktreiber (sogar für Haskell)
• Dokumentenbasierte Antworten gewöhnungsbedürftig insbesondere in stark typisierten Sprachen
• Einen Summentypen Datum für alle Antworten
• Dadurch etwas unbequem in der Handhabe
Epoch.js
• Eingeschränkter als anfänglich gedacht
• Keine Weiterentwicklung mehr
• Rückblickend: Direkt d3js einsetzen, auch wenn dieses eine wesentlich höhere Einarbeitungszeit voraussetzt
Persönliches Fazit
Persönliches Fazit
• Zielsetzung auf Cloud-Dienste zu verzichten wurde erreicht
• Projekt kann vollständig selbst »gehostet« werden
• Laufradumdrehungszahl kann ermittelt werden
• Datenpersistierung konnte umgesetzt werden
• Weboberfläche bedarf einer Überarbeitung (Epoch.js durch D3js ersetzen)