Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Komponenten und Materialien

DS18B20 wasserdichter digitaler Temperatursensor × 2
IoT Power Relay × 1
Widerstand 4,75 kOhm (1/4W, 5%) × 2
Raspberry Pi 2 Model B × 1
Arduino UNO R3 × 1

Apps und Online-Dienste

Projektübersicht

Ziel dieses Projekts ist die Steuerung und Überwachung eines Schwimmbeckens mittels Temperatursensoren, Relais und Microsoft Azure. Auslöser war die Notwendigkeit, den Kinderpool (Intex 15' × 48", ca. 19.000 Liter) fernzusteuern. Das Becken ist mit Sandfilter/Pumpe, 11-kW-Heizung und Salzwasseranlage ausgestattet. Ziel: Wassertemperatur, Außentemperatur überwachen und Pumpe, Heizung sowie Salzanlage so steuern, dass das Wasser warm genug für die Kinder ist, ohne unnötig Energie zu verschwenden.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Raspberry Pi, Arduino, IoT Power Relay und Breadboard sind in einem wasserdichten Kunststoffbehälter mit Kabeldurchführungen und Belüftung untergebracht.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Sensoren

Zwei wasserdichte DS18B20-Sensoren (Poolwasser und Außenluft) sind an einen Arduino Uno R3 über die Dallas Controls Library und OneWire Library angeschlossen. Die Temperaturdaten (in °C) werden jede Sekunde über I2C an den Raspberry Pi gesendet, wobei die beiden Werte durch ein "|" getrennt sind.

temperatureData = padRight(String(poolSensor.getTempCByIndex(0)) + "|" + String(outsideSensor.getTempCByIndex(0)), I2C_BUFFER_LEN);

Anschluss der DS18B20-Sensoren:

Für den Wassersensor wurde günstige 20-adrige Klingeldraht zur Verlängerung verwendet; der Sensor wird direkt ins Wasser getaucht. Der zweite Sensor für die Außentemperatur ist außen am Gehäuse befestigt.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Relais

Der Raspberry Pi steuert über den 3,3V-Pin einen IoT Power Relay, an dem Pumpe und Salzwasseranlage (110V) angeschlossen sind. Das Relais schaltet ein Paar 110V-Steckdosen (standardmäßig aus).

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Die Heizung (220V/60A) benötigt kein separates Relais, da sie über einen eingebauten Durchflusssensor verfügt und nur bei Wasserfluss heizt. Ein passendes Relais für 220V/60A bei 3,3V/5V Steuerspannung war nicht verfügbar. Zukünftig sollen Stromverbrauchssensoren für 110V- und 220V-Kreise hinzugefügt werden.

Raspberry Pi

Der Raspberry Pi läuft unter Windows IoT Core (Build 10.0.10586.0) und führt folgende Aufgaben aus:

Die IoTPoolRaspiBackgroundApp ist eine kopflose C#-Anwendung, erstellt mit dem Visual Studio 2015 Template "Background Application (IoT)".

JSON-Payload an Azure IoT Hub (alle 1 Minute via AMQP):

{ "PoolName": "iotpool", "PoolWaterTempC": 30, "OutsideAirTempC": 27, "IsPoolPowerOn": false, "SampleDateTime": "2016-07-05T23:35:58.0882185Z" }

Der Raspberry Pi wird als Gerät im Azure IoT Hub registriert (am einfachsten mit Device Explorer). Dieses Tool eignet sich auch zum Überwachen von D2C-Nachrichten und Testen von C2D-Nachrichten.

In StartupTask.cs müssen folgende Werte angepasst werden:

static string iotPoolConnString = "HostName=<iothubname>.azure-devices.net;DeviceId=iotpool;SharedAccessKey=<key>";
static string deviceName = "iotpool";

Arduino Uno

Der Arduino Uno R3 liest zwei DS18B20-Sensoren (Dallas Controls Library, OneWire Library), wird vom Raspberry Pi über USB (5V) versorgt und sendet die Temperaturwerte über I2C (SDA/SCL) an den Pi. Das Fritzing-Diagramm zeigt den Schaltplan.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Verwendeter Code: Two-DS18B20-I2C.ino

Azure-Komponenten

Alle Azure-Ressourcen wurden in der Region "West US" erstellt, um Egress-Kosten zu minimieren.

Azure IoT Hub

Verwendete Free-Edition: 8.000 Nachrichten/Tag à 500 Bytes. Die App sendet 1.440 D2C-Nachrichten/Tag à 158 Bytes – ausreichend Spielraum für C2D-Nachrichten. Geräteregistrierung und Connection String über Device Explorer.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Azure Stream Analytics

ASA-Job verbindet IoT Hub Input mit Azure SQL Database Output:

SELECT PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTime INTO sql FROM iothub

Jede D2C-Nachricht (1/Minute) wird in die Tabelle "Pools" geschrieben. Zukünftig könnten Aggregationen für Alerts ergänzt werden (z. B. Durchschnittstemperatur > 35°C).

Azure SQL Database

S0 Standard (10 DTUs) für minimalen Kostenbedarf. Einzeltabelle "Pools" für alle D2C-Nachrichten.

CREATE TABLE [dbo].[Pools] (
  [Id] INT IDENTITY (1, 1) NOT NULL,
  [PoolName] NVARCHAR (MAX) NULL,
  [PoolWaterTempC] FLOAT (53) NOT NULL,
  [OutsideAirTempC] FLOAT (53) NOT NULL,
  [IsPoolPowerOn] INT NOT NULL,
  [SampleDateTime] DATETIME NOT NULL,
  CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC)
);

Azure API App

RESTful API (ASP.NET Web API) mit API-Key-Authentifizierung im HTTP-Header:

api-key: {your API key}

API-Key wird in IoTPoolAPI\Controllers\PoolControllers.cs definiert. Mobile App und Web App nutzen diesen Key.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Zukünftig: Azure API Management, Azure Active Directory Authentifizierung.

Azure Web App

ASP.NET Web Forms Anwendung (IoTPoolWebApp) zur Interaktion mit der API.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Auch mobilfreundliche Version vorhanden. In default.aspx.cs müssen API-Key und Endpunkte angepasst werden. Integration mit Azure Active Directory (AAD) für Benutzerauthentifizierung. Registrierung der Web App im AAD-Tenant erforderlich, Client ID in web.config eintragen.

Mobile App

Xamarin Forms, kompiliert für Windows Phone und Windows 10 (kreuzkompilierbar für iOS/Android).

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

In Core.cs, DataService.cs und PoolPage.xaml.cs müssen API-Endpunkte und API-Key eingetragen werden.

Power BI

Kostenlose Power BI Desktop Version für Echtzeit-Dashboard. Verbindung zu Azure SQL DB (DirectQuery), Berichte erstellen, als .pbix auf PowerBI.com veröffentlichen, an Dashboard pinnen. Zukünftig: Power BI Embedded für direkte Einbindung in Web App. Aktuell über PowerBI.com oder mobile Power BI App abrufbar.

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Referenzen

Besonderer Dank an Miles Burton (Dallas Library) und Mike Mackes (Arduino/I2C/DS18B20 Code & Inspiration).

Code

JSON Payload Format (D2C)

{ "PoolName": "IoTPool", "PoolWaterTempC": 30, "OutsideAirTempC": 27, "IsPoolPowerOn": false, "SampleDateTime": "2016-07-05T23:35:58.0882185Z" }

Hinweis: "IsPoolPowerOn" – 0 = aus, 1 = ein

SQL Tabellenschema "Pools"

CREATE TABLE [dbo].[Pools] (
  [Id] INT IDENTITY (1, 1) NOT NULL,
  [PoolName] NVARCHAR (MAX) NULL,
  [PoolWaterTempC] FLOAT (53) NOT NULL,
  [OutsideAirTempC] FLOAT (53) NOT NULL,
  [IsPoolPowerOn] INT NOT NULL,
  [SampleDateTime] DATETIME NOT NULL,
  CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC)
);

GitHub Repository

Gesamter Quellcode: https://github.com/khilscher/iotpool

Schaltpläne

Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung
Azure IoT Schwimmbadsteuerung: Smarte Sensoren & Fernüberwachung

Herstellungsprozess

  1. Umfassender Leitfaden: Design und Bau von Einbau- und Aufstellpools
  2. Arduino launcht Portenta H7: Industrial-Grade IoT Board Debutiert auf CES
  3. Azure RTOS erweitert Support über führende Embedded-Plattformen mit neuen Development Kits
  4. Azure vs. AWS: Welche Cloud-Plattform gewinnt für IoT?
  5. GPS-Datenlogger mit räumlicher Analyse auf Azure IoT Hub
  6. IoT- & KI-gestützte Wasserqualitätsüberwachung schützt Wasserleben
  7. Echtzeit-IoT-Herzfrequenzmonitor mit Arduino & MAX30100
  8. Fernsteuerung eines Roboterarms per IoT: Eigenbau mit Arduino MKR1000
  9. Smart IoT-Glas bauen: Füllstand überwachen mit ESP8266, Arduino & Ultraschall
  10. IoT-Solartracker: Intelligentes Energiemanagement mit Arduino Mega