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-zwembad

Componenten en benodigdheden

DS18B20 waterdichte digitale temperatuursensor
(Rode draad wordt aangesloten op 3-5V, blauw/zwart wordt aangesloten op aarde en geel/wit is data )
× 2
IoT-vermogensrelais
× 1
Weerstand 4.75k ohm
1/4W, 5%
× 2
Raspberry Pi 2 Model B
× 1
Arduino UNO
Arduino Uno R3
× 1

Apps en online services

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 besturen en bewaken van een zwembad met behulp van temperatuursensoren, relais en Microsoft Azure.

De inspiratie voor dit project is de noodzaak om ons kinderzwembad op afstand te bedienen en te bewaken, een Intex 15' x 48" rond zwembad. Het zwembad heeft een inhoud van ongeveer 5000 gallons water. Het is aangesloten op een zandfilter/pomp, een 11KW-verwarmer en een zoutwatersysteem. Het doel was om de temperatuur van het zwembadwater en de luchttemperatuur te bewaken en de pomp, de verwarming en het zoutwatersysteem te regelen om ervoor te zorgen dat het zwembad warm genoeg was voor de kinderen, zonder het te veel te laten lopen.

Deze video van 5 minuten laat zien hoe het zwembad, sensoren, printplaten en relais zijn aangesloten.

Het volgende architecturale diagram toont alle belangrijke componenten in de oplossing.

De Raspberry Pi, Arduino, IoT Power Relay en breadboard zijn met een ritssluiting in een plastic opslagcontainer vastgemaakt om water/vocht weg te houden. Er zijn gaten geboord voor de kabels en ventilatie.

Sensoren

Bewaking van de zwembadwatertemperatuur en luchttemperatuur wordt bereikt met behulp van een paar DS18B20 waterdichte temperatuursensoren, aangesloten op een Arduino Uno R3 met behulp van de Dallas Controls Library en OneWire Library. De temperatuurgegevens (in Celsius) worden elke 1 seconde via I2C naar een Raspberry Pi gestuurd. De twee temperatuurwaarden worden gescheiden door een "|".

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

De waterdichte temperatuursensoren DS18B20 zijn als volgt voorbedraad:

  • Rood maakt verbinding met 3v/5v
  • Blauw/Zwart maakt verbinding met aarde
  • Geel/Wit zijn gegevens

Ik heb een goedkope 20 gauge beldraad (deurbeldraad) gebruikt om het bereik van de DS18B20 die de watertemperatuur afleest te vergroten. Deze DS18B20 ligt ondergedompeld in het zwembad.

De tweede DS18B20-sensor die de luchttemperatuur meet, is aan de buitenkant van de plastic opslagcontainer geplakt.

Relais

De Raspberry Pi bestuurt een IoT Power Relay-stroombalk waarop de pomp en het zoutwatersysteem zijn aangesloten met behulp van 110v. Dit wordt gedaan met behulp van de 3v-pin op de Pi. Door de 3v-pin te schakelen, worden een paar 110v-uitgangen op het IoT-stroomrelais in-/uitgeschakeld (de paar uitgangen zijn standaard uitgeschakeld). Raadpleeg het diagram later voor een schema.

Het was niet nodig om een ​​relais aan te sluiten op de verwarming, aangezien deze een ingebouwde stromingssensor heeft en de verwarming zal stoppen/starten op basis van de aan- of afwezigheid van waterstroming. Bovendien kon ik niet gemakkelijk een relais vinden om een ​​220v / 60amp-circuit te regelen dat nodig is voor de verwarming met behulp van 3v of 5v.

In de toekomst zal ik sensoren aansluiten om het elektrische gebruik van de 110v en 220v circuits te meten. Als iemand wat kan aanbevelen, zou ik dankbaar zijn.

Raspberry Pi

De Raspberry Pi draait Windows IoT Core Build 10.0.110586.0 en voert het volgende uit:

  • Voert de IoTPoolRaspiBackgroundApp achtergrond applicatie;
  • Fungeert als een IoT-veldgateway (ondoorzichtig);
  • Voorziet de Arduino Uno van stroom via USB (5v);
  • Ontvangt zwembad- en luchttemperatuur (in C) van de Arduino Uno via I2C;
  • Bedient het IoT-stroomrelais met behulp van een 3v-pin; en
  • Stuurt elke minuut de poolnaam, pooltemperatuur, luchttemperatuur, IoT Power Relay aan/uit-status en een tijdstempel (in UTC) naar de Azure IoT Hub.

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

De IoTPoolRaspiBackgroundApp verzendt elke minuut de volgende JSON-payload naar de Azure IoT Hub met behulp van AMQP (dit kan in de broncode worden gewijzigd in HTTPS of MQTT).

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

De Raspberry Pi wordt als apparaat geregistreerd in de Azure IoT Hub. De eenvoudigste manier om een ​​apparaat te registreren in Azure IoT Hub is met behulp van Device Explorer. Deze tool is ook een geweldige manier om de verbindingsreeks van het apparaat te verkrijgen, D2C-berichten (Device to Cloud) te controleren en het verzenden van C2D-berichten (Cloud to Device) te testen.

Bewerk het volgende in StartupTask.cs om IoTPoolRaspiBackgroundApp te verbinden met uw IoT Hub:

statische tekenreeks iotPoolConnString ="HostName=.azure-devices.net;DeviceId=iotpool;SharedAccessKey=";statische tekenreeks deviceName ="iotpool";  

Arduino Uno

De Arduino Uno R3 is verbonden met twee DS18B20-temperatuursensoren met behulp van de Dallas Controls Library en OneWire Library. Het wordt aangedreven door de Raspberry Pi via USB (5v) en stuurt het paar temperatuurmetingen naar de Raspberry Pi via I2C met behulp van de SDA- en SLC-pinnen. Raadpleeg het Fritzing-diagram voor een schema.

Gebruik de Two-DS18B20-I2C.ino-code om de Arduino uit te voeren.

Azuurblauw

Alle Azure-componenten zijn gemaakt in dezelfde Azure-regio (VS-west) om de kosten voor uitgaand verkeer te minimaliseren.

Azure IoT Hub

In dit project is gebruik gemaakt van de gratis editie van de Azure IoT Hub. Het is beperkt tot 8.000 berichten per dag van elk 500 bytes. De IoTPoolRaspiBackgroundApp verzendt D2C-berichten met 1 per minuut, of 1440/dag, met elk 158 bytes. Dit laat voldoende ruimte over voor C2D-berichten.

U moet eerst een apparaat registreren bij Azure IoT Hub. De eenvoudigste methode is met behulp van Device Explorer. Eenmaal geregistreerd, kunt u de verbindingsreeks van het apparaat verkrijgen met Device Explorer.

Azure Streaming Analytics

De Azure Streaming Analytics (ASA)-taak verbindt de IoT Hub-invoer met de Azure SQL Database-uitvoer met behulp van de volgende eenvoudige ASA-query.

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

Deze query schrijft elk Device to Cloud (D2C) JSON-bericht (1 per minuut) naar een tabel met de naam Pools in een Azure SQL-database.

Toekomstige verbeteringen aan deze zoekopdracht kunnen enkele aggregatiefuncties bevatten voor waarschuwingsdoeleinden (bijv. Gemiddelde PoolWaterTempC> 35 geeft aan dat het zwembad te warm wordt).

Azure SQL Database

Om de kosten te minimaliseren en omdat de prestatie-eisen van de database minimaal waren, is de database een S0 Standard (10 DTU's).

Er is een enkele database met een enkele tabel gemaakt om alle D2C-berichten op te slaan.

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] PRIMAIRE SLEUTEL GECLUSTERD ([Id] ASC)); 

Azure API-app

De API is een REST-API die is gebouwd met behulp van ASP.NET Web API.

API-clients moeten zich verifiëren met een API-sleutel die is opgegeven in de HTTP-header.

api-key :{uw API-sleutel} 

De API-sleutel is gedefinieerd in de IoTPoolAPI\Controllers\PoolControllers.cs . De mobiele app en de web-app moeten deze API-sleutel gebruiken om met de API te communiceren.

De REST API ondersteunt de volgende methoden:

Toekomstige verbeteringen aan de API kunnen zijn:deze achter Azure API Management plaatsen en andere authenticatie-opties toevoegen aan de API, zoals Azure Active Directory.

Azure-webapp

De IoTPoolWebApp bevat een ASP.NET-toepassing voor webformulieren om te communiceren met de API.

Er is ook een mobielvriendelijke versie van de webapp.

Bewerk de default.aspx.cs en wijzig het volgende:

private statische tekenreeks 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"); 

De web-app is geïntegreerd met Azure Active Directory (AAD) voor verificatie. De web-app vereist dat alle gebruikers zich moeten verifiëren met AAD.

U moet eerst uw web-app registreren bij uw AAD-tenant (bijvoorbeeld tenant_name.onmicrosoft.com). U kunt dit doen via de Azure Portal of via Visual Studio. Kopieer na registratie de client-ID uit de Azure Portal.

Wijzig vervolgens het AAD-domein in de web-app door de in de web.config.

aan te passen.
 

Mobiele app

De mobiele app is geschreven met Xamarin Forms. Ik heb het alleen gecompileerd om op Windows Phone en Windows 10 te draaien, maar zou moeten worden gecompileerd op iOS en Android.

Bewerk Core.cs en wijzig het volgende:

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

Bewerk DataService.cs en wijzig het volgende:

privé statische tekenreeks apiKey =""; 

Bewerk PoolPage.xaml.cs en wijzig het volgende:

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

Power BI

Power BI (gratis editie) werd gebruikt om een ​​realtime dashboard te maken en te publiceren met IoT Pool-gegevens.

Het proces omvatte het downloaden van Power BI Desktop, het verbinden met de Azure SQL DB (met behulp van DirectQuery), het maken van enkele rapporten met visuals en het publiceren van de .pbix naar PowerBI.com. Ik heb het rapport vervolgens vastgezet op een dashboard.

In de toekomst kan ik Power BI embedded gebruiken om het dashboard rechtstreeks in de web-app in te sluiten.

Voorlopig kan ik het dashboard bekijken via Powerbi.com of via de gratis Power BI mobiele app.

Referenties

Hier is een lijst met bronnen die ik heb gebruikt bij het bouwen van deze oplossing:

  • 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

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

Code

  • JSON Message Payload Format voor Device to Cloud (D2C)-berichten
  • SQL-database "Pools"-tabelschema
JSON Message Payload Format voor Device to Cloud (D2C)-berichtenJSON
Opmerking:"IsPoolPowerOn" - 0 geeft aan dat de stroom is uitgeschakeld; 1 geeft power on
{ "PoolName" :"IoTPool", "PoolWaterTempC" :30, "OutsideAirTempC" :27, "IsPoolPowerOn" :false, "SampleDateTime" :"2016-07-05T23:35:58.0882185Z" aan }
SQL-database "Pools"-tabelschemaSQL
CREATE TABLE [dbo].[Pools] ( [Id] INT IDENTITY (1, 1) NOT NULL, [PoolName] NVARCHAR (MAX) NULL, [PoolWaterTempC] FLOAT (53) NOT NULL, [OutsideAirTempC] FLOAT ( 53) NIET NULL, [IsPoolPowerOn] INT NIET NULL, [SampleDateTime] DATETIME NOT NULL, CONSTRAINT [PK_dbo.Pools] PRIMAIRE SLEUTEL GECLUSTERD ([Id] ASC));
IoT Pool Git Hub Repo
Alle broncodehttps://github.com/khilscher/iotpool

Schema's

Raspberry Pi naar Arduino via I2C die 2 DS18B20-sensoren verbindt RaspiArduinoTwoDS18B20.fzzAlgemeen architectonisch diagram

Productieproces

  1. Zwembad
  2. Arduino-bord richt zich op industrieel IoT
  3. Dev kits ondersteunen Azure RTOS
  4. IoT in the Cloud:Azure vs AWS
  5. GPS-datalogger, ruimtelijke analyse en Azure IoT Hub.
  6. Het waterleven redden en watervervuiling bestrijden met IoT en AI
  7. Hartslagmeter met IoT
  8. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  9. IOT - Smart Jar met ESP8266, Arduino en ultrasone sensor
  10. Internet of things (IoT)-gebaseerde zonne-tracker
  11. IoT-meter met Arduino, Yaler en IFTTT