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

Azure IoT Swimming Pool

Komponenten und Verbrauchsmaterialien

DS18B20 wasserdichter digitaler Temperatursensor
(Roter Draht wird an 3-5V angeschlossen, Blau/Schwarz wird an Masse angeschlossen und Gelb/Weiß ist Daten )
× 2
IoT Power Relay
× 1
Widerstand 4,75 kOhm
1/4W, 5%
× 2
Raspberry Pi 2 Model B
× 1
Arduino UNO
Arduino Uno R3
× 1

Apps und Onlinedienste

Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino-IDE
Microsoft Visual Studio 2015
Azure IoT Hub-Geräte-Explorer
Fritzing
Power BI

Über dieses Projekt

Übersicht

Der Zweck dieses Projekts ist die Steuerung und Überwachung eines Schwimmbads mit Temperatursensoren, Relais und Microsoft Azure.

Die Inspiration für dieses Projekt ist die Notwendigkeit, unseren Kinderpool, einen Intex 15' x 48" Rundpool aus der Ferne zu bedienen und zu überwachen. Der Pool fasst ca. 5000 Gallonen Wasser. Er ist an einen Sandfilter / eine Sandpumpe angeschlossen. eine 11-kW-Heizung und ein Salzwassersystem.Das Ziel war es, die Wassertemperatur des Pools, die Lufttemperatur zu überwachen und die Pumpe, die Heizung und das Salzwassersystem zu steuern, um sicherzustellen, dass der Pool für die Kinder warm genug war, ohne ihn zu überlaufen.

Dieses 5-minütige Video zeigt, wie Pool, Sensoren, Platinen und Relais angeschlossen werden.

Das folgende Architekturdiagramm zeigt alle wichtigen Komponenten der Lösung.

Der Raspberry Pi, Arduino, das IoT Power Relay und das Steckbrett sind mit einem Reißverschluss in einem Kunststoffbehälter verbunden, um Wasser / Feuchtigkeit fernzuhalten. Für die Kabel und die Belüftung wurden Löcher gebohrt.

Sensoren

Die Überwachung der Poolwassertemperatur und Lufttemperatur erfolgt mit einem Paar wasserdichter Temperatursensoren DS18B20, die mit einem Arduino Uno R3 über die Dallas Controls Library und OneWire Library verbunden sind. Die Temperaturdaten (in Celsius) werden alle 1 Sekunde über I2C an einen Raspberry Pi gesendet. Die beiden Temperaturwerte werden mit einem "|" abgegrenzt.

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

Die wasserdichten Temperatursensoren DS18B20 sind wie folgt vorverdrahtet:

  • Rot verbindet sich mit 3V/5V
  • Blau/Schwarz ist mit Masse verbunden
  • Gelb/Weiß sind Daten

Ich habe einen billigen 20-Gauge-Klingeldraht (Türklingeldraht) verwendet, um die Reichweite des DS18B20 zu erweitern, der die Wassertemperatur misst. Dieser DS18B20 ist in den Pool eingetaucht.

Der zweite DS18B20-Sensor, der die Lufttemperatur misst, ist an der Außenseite des Kunststoffbehälters befestigt.

Relais

Der Raspberry Pi steuert eine IoT-Power-Relais-Leistungsleiste, an die die Pumpe und das Salzwassersystem mit 110 V angeschlossen sind. Dies geschieht mit dem 3V-Pin auf dem Pi. Das Umschalten des 3-V-Pins aktiviert/deaktiviert ein Paar von 110-V-Ausgängen am IoT-Leistungsrelais (das Paar von Ausgängen ist standardmäßig ausgeschaltet). Siehe das Diagramm später für einen Schaltplan.

Es war nicht erforderlich, ein Relais an die Heizung anzuschließen, da sie über einen eingebauten Durchflusssensor verfügt und die Heizung bei fehlendem oder vorhandenem Wasserfluss stoppt/startet. Außerdem konnte ich nicht ohne weiteres ein Relais finden, um einen 220 V / 60 A-Stromkreis zu steuern, der von der Heizung mit 3 V oder 5 V benötigt wird.

In Zukunft werde ich Sensoren anbringen, um die elektrische Nutzung der 110-V- und 220-V-Stromkreise zu messen. Wenn jemand welche empfehlen kann, wäre ich dankbar.

Raspberry Pi

Der Raspberry Pi führt Windows IoT Core Build 10.0.10586.0 aus und führt Folgendes aus:

  • Führt die IoTPoolRaspiBackgroundApp . aus Hintergrundanwendung;
  • Fungiert als IoT-Feld-Gateway (undurchsichtig);
  • Versorgt das Arduino Uno über USB (5V);
  • Empfängt die Pool- und Lufttemperatur (in C) vom Arduino Uno über I2C;
  • Steuert das IoT-Leistungsrelais mit einem 3V-Pin; und
  • Sendet alle 1 Minute den Poolnamen, die Pooltemperatur, die Lufttemperatur, den Ein-/Aus-Status des IoT Power Relay und einen Zeitstempel (in UTC) an den Azure IoT Hub.

Die IoTPoolRaspiBackgroundApp ist eine Headless-C#-Anwendung, die mit der Background Application (IoT) erstellt wurde Projektvorlage in Visual Studio 2015, Update 3.

Die IoTPoolRaspiBackgroundApp sendet alle 1 Minute die folgende JSON-Nutzlast an den Azure IoT Hub mit AMQP (dies kann im Quellcode auf HTTPS oder MQTT geändert werden).

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

Der Raspberry Pi ist als Gerät im Azure IoT Hub registriert. Die einfachste Möglichkeit zum Registrieren eines Geräts in Azure IoT Hub ist die Verwendung des Geräte-Explorers. Dieses Tool ist auch eine großartige Möglichkeit, die Verbindungszeichenfolge des Geräts abzurufen, D2C-Nachrichten (Device to Cloud) zu überwachen und das Senden von C2D-Nachrichten (Cloud to Device) zu testen.

Bearbeiten Sie Folgendes in StartupTask.cs, um IoTPoolRaspiBackgroundApp mit Ihrem IoT Hub zu verbinden:

statischer String iotPoolConnString ="HostName=.azure-devices.net;DeviceId=iotpool;SharedAccessKey=";statischer String deviceName ="iotpool";  

Arduino Uno

Der Arduino Uno R3 ist über die Dallas Controls Library und OneWire Library mit zwei DS18B20-Temperatursensoren verbunden. Es wird vom Raspberry Pi über USB (5 V) mit Strom versorgt und sendet das Paar von Temperaturmesswerten über I2C an den Raspberry Pi unter Verwendung der SDA- und SLC-Pins. Siehe das Fritzing-Diagramm für einen Schaltplan.

Verwenden Sie den Two-DS18B20-I2C.ino-Code, um das Arduino auszuführen.

Azur

Alle Azure-Komponenten wurden in derselben Azure-Region (USA, Westen) erstellt, um die mit dem ausgehenden Datenverkehr verbundenen Kosten zu minimieren.

Azure IoT Hub

In diesem Projekt wurde die kostenlose Edition des Azure IoT Hub verwendet. Es ist auf 8.000 Nachrichten/Tag mit jeweils 500 Byte begrenzt. Die IoTPoolRaspiBackgroundApp sendet D2C-Nachrichten mit 1 pro Minute oder 1.440/Tag mit jeweils 158 Byte. Dies lässt genügend Spielraum für alle C2D-Nachrichten.

Sie müssen zuerst ein Gerät bei Azure IoT Hub registrieren. Die einfachste Methode ist die Verwendung des Geräte-Explorers. Nach der Registrierung können Sie die Geräteverbindungszeichenfolge mit dem Geräte-Explorer abrufen.

Azure Streaming Analytics

Der Azure Streaming Analytics (ASA)-Auftrag verbindet die IoT Hub-Eingabe mit der Azure SQL-Datenbankausgabe mithilfe der folgenden einfachen ASA-Abfrage.

SELECT PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTimeINTO sqlFROM iothub 

Diese Abfrage schreibt jede Device to Cloud (D2C) JSON-Nachricht (1 pro Minute) in eine Tabelle namens Pools in einer Azure SQL-Datenbank.

Zukünftige Verbesserungen dieser Abfrage können einige Aggregationsfunktionen für Warnzwecke beinhalten (z. B. Durchschnittlicher PoolWasserTempC> 35 zeigt an, dass der Pool zu warm wird).

Azure SQL-Datenbank

Um die Kosten zu minimieren und weil die Leistungsanforderungen der Datenbank minimal waren, ist die Datenbank ein S0-Standard (10 DTUs).

Eine einzige Datenbank mit einer einzigen Tabelle wurde erstellt, um alle D2C-Nachrichten zu speichern.

Schema:

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

Die API ist eine RESTful-API, die mit der ASP.NET-Web-API erstellt wurde.

API-Clients müssen sich mit einem API-Schlüssel authentifizieren, der im HTTP-Header angegeben ist.

API-Schlüssel:{Ihr API-Schlüssel} 

Der API-Schlüssel ist in der IoTPoolAPI\Controllers\PoolControllers.cs . definiert . Die Mobile App und die Web App müssen diesen API-Schlüssel verwenden, um mit der API zu kommunizieren.

Die REST-API unterstützt die folgenden Methoden:

Zukünftige Verbesserungen der API umfassen möglicherweise die Platzierung hinter Azure API Management und das Hinzufügen anderer Authentifizierungsoptionen zur API, wie z. B. Azure Active Directory.

Azure-Web-App

Die IoTPoolWebApp enthält eine ASP.NET-Webformularanwendung zur Interaktion mit der API.

Es gibt auch eine mobilfreundliche Version der Web-App.

Bearbeiten Sie die Datei default.aspx.cs und ändern Sie Folgendes:

private statische Zeichenfolge apiKey ="";...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweroff");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweron");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api /pool/getlatest"); 

Die Web-App ist zur Authentifizierung in Azure Active Directory (AAD) integriert. Für die Web-App müssen sich alle Benutzer mit AAD authentifizieren.

Sie müssen Ihre Web-App zuerst bei Ihrem AAD-Mandanten registrieren (z. B. mandantenname.onmicrosoft.com). Sie können dies über das Azure-Portal oder über Visual Studio tun. Kopieren Sie nach der Registrierung die Client-ID aus dem Azure-Portal.

Ändern Sie als Nächstes die AAD-Domäne in der Web-App, indem Sie die in der web.config ändern.

 

Mobile App

Die mobile App wird mit Xamarin Forms geschrieben. Ich habe es nur für die Ausführung auf Windows Phone und Windows 10 kompiliert, sollte aber auf iOS und Android kompiliert werden.

Bearbeiten Sie Core.cs und ändern Sie Folgendes:

string queryString ="http://azurewebsites.net/api/pool/getlatest 

Bearbeiten Sie DataService.cs und ändern Sie Folgendes:

private statische Zeichenfolge apiKey =""; 

Bearbeiten Sie PoolPage.xaml.cs und ändern Sie Folgendes:

private statische Zeichenfolge apiKey ="";...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweroff");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweron"); 

Power BI

Power BI (kostenlose Edition) wurde verwendet, um ein Echtzeit-Dashboard mit IoT-Pool-Daten zu erstellen und zu veröffentlichen.

Der Prozess umfasste das Herunterladen von Power BI Desktop, das Herstellen einer Verbindung mit der Azure SQL-Datenbank (mithilfe von DirectQuery), das Erstellen einiger Berichte mit Visuals und das Veröffentlichen der .pbix-Datei auf PowerBI.com. Anschließend habe ich den Bericht an ein Dashboard angeheftet.

In Zukunft kann ich Power BI Embedded verwenden, um das Dashboard direkt in die Web-App einzubetten.

Momentan kann ich das Dashboard über Powerbi.com oder über die kostenlose mobile Power BI-App anzeigen.

Referenzen

Hier ist eine Liste von Ressourcen, die ich beim Erstellen dieser Lösung verwendet habe:

  • https://developer.microsoft.com/en-us/windows/iot/win10/samples/blinky
  • https://create.arduino.cc/projecthub/mmackes/pool-controller-8dfa69?ref=tag&ref_id=relays&offset=0
  • https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-getstarted/
  • https://azure.microsoft.com/en-us/documentation/articles/iot-hub-csharp-csharp-c2d/
  • https://azure.microsoft.com/en-us/documentation/articles/web-sites-dotnet-rest-service-aspnet-api-sql-database/
  • https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-xamarin-forms-get-started/
  • https://msdn.microsoft.com/en-us/library/hh975357.aspx
  • https://www.arduino.cc/en/Guide/Windows
  • http://playground.arduino.cc/Learning/OneWire
  • http://milesburton.com/Dallas_Temperature_Control_Library
  • https://learn.sparkfun.com/tutorials/i2c

Besonderer Dank geht an Miles Burton für die Dallas Controls Library und Mike Mackes für den Arduino / I2C / DS18B20-Beispielcode und die allgemeine Inspiration für dieses Projekt.

Code

  • JSON-Nachrichtennutzlastformat für Device-to-Cloud-Nachrichten (D2C)
  • SQL-Datenbank "Pools"-Tabellenschema
JSON-Nachrichtennutzlastformat für Device-to-Cloud-Nachrichten (D2C)JSON
Hinweis:"IsPoolPowerOn" - 0 zeigt das Ausschalten an; 1 zeigt das Einschalten an
{ "PoolName" :"IoTPool", "PoolWaterTempC" :30, "OutsideAirTempC" :27, "IsPoolPowerOn" :false, "SampleDateTime" :"2016-07-05T23:35:58.0882185Z" }
SQL-Datenbank-"Pools"-TabellenschemaSQL
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));
IoT-Pool-Git-Hub-Repository
Alle Quellcodehttps://github.com/khilscher/iotpool

Schaltpläne

Raspberry Pi an Arduino über I2C zur Verbindung von 2 DS18B20-Sensoren RaspiArduinoTwoDS18B20.fzzGesamtarchitekturdiagramm

Herstellungsprozess

  1. Schwimmbad
  2. Arduino-Board zielt auf industrielles IoT ab
  3. Entwicklungskits unterstützen Azure RTOS
  4. IoT in der Cloud:Azure vs. AWS
  5. GPS-Datenlogger, räumliche Analyse und Azure IoT Hub.
  6. Rettung des Wasserlebens und Bekämpfung der Wasserverschmutzung mit IoT und KI
  7. Herzfrequenzmesser mit IoT
  8. Einsatz des IoT zur Fernsteuerung eines Roboterarms
  9. IOT - Smart Jar mit ESP8266, Arduino und Ultraschallsensor
  10. Internet der Dinge (IoT)-basierter Solartracker