Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Onderdelen en benodigdheden

Onderdeel Aantal
DS18B20 Waterdichte Digitale Temperatuursensor 2
IoT Power Relay 1
Weerstand 4.75k ohm (1/4W, 5%) 2
Raspberry Pi 2 Model B 1
Arduino UNO R3 1

Apps en online diensten

  • Microsoft Azure
  • Microsoft Windows 10 IoT Core
  • Arduino IDE
  • Microsoft Visual Studio 2015
  • Azure IoT Hub Device Explorer
  • Fritzing
  • Power BI

Over dit project

Overzicht

Het doel van dit project is het beheren en monitoren van een zwembad met temperatuursensoren, relais en Microsoft Azure. De inspiratie kwam uit de behoefte om het zwembad van onze kinderen (Intex 15' x 48", ~5000 gallon) op afstand te bedienen. Het zwembad is aangesloten op een zandfilter/pomp, een 11kW verwarmingsketel en een zoutwatersysteem. Doel: water- en luchttemperatuur monitoren, pomp, verwarming en zoutwatersysteem besturen om het water warm genoeg te houden zonder overmatig gebruik.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

De Raspberry Pi, Arduino, IoT Power Relay en breadboard zijn met kabelbinders in een kunststof opslagbox gemonteerd, afgedicht tegen vocht. Gaten zijn geboord voor kabels en ventilatie.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Sensoren

Monitoring van zwembadwatertemperatuur en luchttemperatuur gebeurt met twee DS18B20 waterdichte temperatuursensors, aangesloten op een Arduino Uno R3 via de Dallas Controls Library en OneWire Library. De temperatuurdata (in Celsius) wordt elke seconde via I2C naar de Raspberry Pi gestuurd. De twee waarden worden gescheiden door een "|".

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

Aansluiting DS18B20:

  • Rood: 3V/5V
  • Blauw/Zwart: Ground
  • Geel/Wit: Data

Voor de watersensor werd goedkope 20-gauge beldraad gebruikt om de bereik uit te breiden. Deze sensor is ondergedompeld in het zwembad.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

De tweede sensor voor luchttemperatuur is aan de buitenkant van de behuizing geplakt.

Relais

De Raspberry Pi stuurt een IoT Power Relay stekkerblok aan waarmee de pomp en het zoutwatersysteem op 110V zijn aangesloten. Dit gebeurt via de 3V-pin op de Pi. Het wisselen van de 3V-pin schakelt een paar 110V stopcontacten op de IoT Power Relay in/uit (standaard uit). Zie schema later.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Geen relais voor de verwarming nodig: deze heeft een ingebouwde flowsensor en stopt/start op basis van waterstroom. Daarnaast was geen relais te vinden voor 220V/60A via 3V/5V. Toekomst: sensoren voor elektriciteitsverbruik 110V en 220V circuits.

Raspberry Pi

De Raspberry Pi draait Windows IoT Core Build 10.0.10586.0 en voert uit:

  • Draait de IoTPoolRaspiBackgroundApp achtergrondapplicatie
  • Funziona als IoT field gateway (opaque)
  • Voedt Arduino Uno via USB (5V)
  • Ontvangt zwembad- en luchttemperatuur (in °C) van Arduino via I2C
  • Bestuurt IoT Power Relay via 3V-pin
  • Verstuurt elke minuut: zwembadnaam, watertemperatuur, luchttemperatuur, relaisstatus, timestamp (UTC) naar Azure IoT Hub

De IoTPoolRaspiBackgroundApp is een headless C# applicatie, gebouwd met de Background Application (IoT) sjabloon in Visual Studio 2015 Update 3.

Elke minuut wordt volgende JSON-payload via AMQP naar Azure IoT Hub gestuurd (kan gewijzigd worden naar HTTPS of MQTT):

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

De Raspberry Pi is geregistreerd als apparaat in Azure IoT Hub. Registratie en connection string verkrijgen via Device Explorer. Dit hulpmiddel is ook handig voor monitoring D2C-berichten en testen C2D-berichten.

Wijzig in StartupTask.cs om verbinding te maken met uw IoT Hub:

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

Arduino Uno

De Arduino Uno R3 is verbonden met twee DS18B20 sensoren via Dallas Controls Library en OneWire Library. Hij wordt gevoed door de Raspberry Pi via USB (5V) en stuurt de temperatuurwaarden via I2C (SDA/SCL pinnen) naar de Pi. Zie Fritzing-schema.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Gebruik de code Two-DS18B20-I2C.ino voor de Arduino.

Azure

Alle Azure-componenten zijn in dezelfde regio (West US) aangemaakt om egress-kosten te minimaliseren.

Azure IoT Hub

Gratis editie gebruikt: 8.000 berichten/dag van 500 bytes. De app stuurt 1.440 berichten/dag van 158 bytes. Voldoende marge voor C2D-berichten.

Registreer apparaat met Device Explorer. Haal connection string op via Device Explorer.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Azure Streaming Analytics

ASA-job verbindt IoT Hub input met Azure SQL Database output via query:

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

Elk D2C JSON-bericht (1 per minuut) wordt geschreven naar tabel Pools in Azure SQL Database. Toekomstige verbetering: aggregatiefuncties voor alerting (bijv. gemiddelde watertemp > 35°C).

Azure SQL Database

Kostenminimalisatie: S0 Standard (10 DTUs). Eén database met één tabel voor alle D2C-berichten.

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 gebouwd met ASP.NET Web API. Authenticatie via API-key in HTTP-header:

api-key : {uw API key}

API-key gedefinieerd in IoTPoolAPI\Controllers\PoolControllers.cs. Mobiele app en webapp gebruiken deze key.

Ondersteunde REST-methoden:

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Toekomst: achter Azure API Management plaatsen, Azure AD authenticatie toevoegen.

Azure Web App

IoTPoolWebApp bevat ASP.NET Web Forms applicatie om met API te communiceren.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Ook mobiele versie beschikbaar. Wijzig in default.aspx.cs:

private static string apiKey = "";
HttpRequestMessage requestMessage = ...."https://<yourwebsite>.azurewebsites.net/api/pool/poweroff");
HttpRequestMessage requestMessage = ...."https://<yourwebsite>.azurewebsites.net/api/pool/poweron");
HttpRequestMessage requestMessage = ...."https://<yourwebsite>.azurewebsites.net/api/pool/getlatest");

Web app geïntegreerd met Azure Active Directory (AAD) voor authenticatie. Alle gebruikers moeten via AAD inloggen.

Registreer web app bij uw AAD-tenant (bijv. tenant_name.onmicrosoft.com) via Azure Portal of Visual Studio. Kopieer Client ID uit Azure Portal. Wijzig AAD-domein in web.config:

<appSettings>
  <add key="ida:ClientId" value="<AAD client ID>" />
  <add key="ida:AADInstance" value="https://login.microsoftonline.com/" />
</appSettings>

Mobiele App

Geschreven in Xamarin Forms. Gecompileerd voor Windows Phone en Windows 10, zou cross-compileren naar iOS en Android.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Wijzig in Core.cs:

string queryString = "https://<yourwebsite>azurewebsites.net/api/pool/getlatest"

Wijzig in DataService.cs:

private static string apiKey = "";

Wijzig in PoolPage.xaml.cs:

private static string apiKey = "";
HttpRequestMessage requestMessage = ...."https://<yourwebsite>.azurewebsites.net/api/pool/poweroff");
HttpRequestMessage requestMessage = ...."https://<yourwebsite>.azurewebsites.net/api/pool/poweron");

Power BI

Power BI (gratis) gebruikt voor realtime dashboard met IoT zwembadgegevens.

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Proces: Power BI Desktop downloaden, verbinden met Azure SQL DB (DirectQuery), rapporten maken met visuals, .pbix publiceren naar PowerBI.com, rapport pinnen aan dashboard. Toekomst: Power BI Embedded voor integratie in webapp. Nu bekijkbaar via PowerBI.com of gratis Power BI mobiele app.

Referenties

Speciale dank aan Miles Burton voor Dallas Controls Library en Mike Mackes voor Arduino/I2C/DS18B20 voorbeeldcode en inspiratie.

Code

JSON Message Payload Formaat (D2C)

Let op: "IsPoolPowerOn" - 0 = uit, 1 = aan

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

SQL Database "Pools" Tabel 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)
);

IoT Pool GitHub Repository

Alle broncode: https://github.com/khilscher/iotpool

Schema's

Raspberry Pi naar Arduino via I2C met 2 DS18B20 sensoren: RaspiArduinoTwoDS18B20.fzz

Algemeen architectuurdiagram:

Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring
Azure IoT Zwembadbeheersysteem: Slimme Sensoren & Remote Monitoring

Productieproces

  1. Uitgebreide Gids voor In-grond en Bovengrond Zwembad Ontwerp & Constructie
  2. Bouw een GPS-datalogger met ruimtelijke analyse op Azure IoT Hub
  3. IoT & AI-gestuurde Waterkwaliteitsmonitoring Beschermt Aquatisch Leven
  4. Real-time IoT hartslagmonitor met Arduino en MAX30100
  5. Externe IoT-besturing van een zelfgebouwde robotarm
  6. Bouw een Slimme IoT Pot met ESP8266, Arduino & Ultrasonische Sensor – Real-time Monitoring
  7. IoT-zonnesturing: Slimme energiemanagement met Arduino
  8. Web-IoT Meter Bouwen met Arduino, Yaler en IFTTT
  9. Arduino lanceert Portenta H7: Industriële IoT-board debuteert op CES
  10. Azure RTOS breidt uit over grote embedded platforms met nieuwe ontwikkelkits
  11. Azure vs AWS: Welk cloudplatform wint voor IoT?