Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Piscine Azure IoT

Composants et fournitures

Capteur de température numérique étanche DS18B20
(Le fil rouge se connecte à 3-5V, le bleu/noir se connecte à la terre et le jaune/blanc correspond aux données )
× 2
Relais de puissance IoT
× 1
Résistance 4.75k ohm
1/4W, 5%
× 2
Raspberry Pi 2 Modèle B
× 1
Arduino UNO
Arduino Uno R3
× 1

Applications et services en ligne

Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015
Explorateur de périphériques Azure IoT Hub
Fritzing
Power BI

À propos de ce projet

Présentation

Le but de ce projet est de contrôler et surveiller une piscine à l'aide de capteurs de température, de relais et de Microsoft Azure.

L'inspiration pour ce projet est la nécessité d'exploiter et de surveiller à distance notre piscine pour enfants, qui est une piscine ronde Intex 15' x 48". La piscine contient environ 5000 gallons d'eau. Elle est connectée à un filtre à sable/pompe, un chauffe-eau de 11 kW et un système d'eau salée. L'objectif était de surveiller la température de l'eau de la piscine, la température de l'air et de contrôler la pompe, le chauffe-eau et le système d'eau salée pour s'assurer que la piscine était suffisamment chaude pour les enfants, sans la faire déborder. /P>

Cette vidéo de 5 minutes montre comment la piscine, les capteurs, les circuits imprimés et les relais sont connectés.

Le schéma architectural suivant montre tous les principaux composants de la solution.

Le Raspberry Pi, l'Arduino, le relais d'alimentation IoT et la planche à pain sont attachés par fermeture éclair dans un récipient de stockage en plastique pour éloigner l'eau/l'humidité. Des trous ont été percés pour les câbles et la ventilation.

Capteurs

La surveillance de la température de l'eau de la piscine et de la température de l'air est effectuée à l'aide d'une paire de capteurs de température étanches DS18B20, connectés à un Arduino Uno R3 à l'aide de la bibliothèque de contrôles Dallas et de la bibliothèque OneWire. Les données de température (en degrés Celsius) sont envoyées à un Raspberry Pi toutes les 1 seconde sur I2C. Les deux valeurs de température sont délimitées par un "|".

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

Les capteurs de température étanches DS18B20 sont pré-câblés comme suit :

  • Le rouge se connecte à 3v/5v
  • Bleu/noir se connecte à la terre
  • Le jaune/blanc correspond aux données

J'ai utilisé un fil de sonnette bon marché de calibre 20 (fil de sonnette de porte) pour étendre la portée du DS18B20 qui lit la température de l'eau. Ce DS18B20 est immergé dans la piscine.

Le deuxième capteur DS18B20 qui mesure la température de l'air est scotché à l'extérieur du conteneur de stockage en plastique.

Relais

Le Raspberry Pi contrôle une barre d'alimentation IoT Power Relay à laquelle la pompe et le système d'eau salée sont connectés en utilisant 110v. Cela se fait à l'aide de la broche 3v sur le Pi. Basculer la broche 3v active/désactive une paire de prises 110v sur le relais d'alimentation IoT (la paire de prises est éteinte par défaut). Référez-vous au diagramme plus tard pour un schéma.

Il n'était pas nécessaire de connecter un relais au réchauffeur car il possède un capteur de débit intégré et arrête/démarre le chauffage en fonction de l'absence ou de la présence de débit d'eau. De plus, je ne pouvais pas facilement trouver un relais pour contrôler un circuit 220v/60amp requis par le radiateur en utilisant 3v ou 5v.

À l'avenir, j'attacherai des capteurs pour mesurer l'utilisation électrique des circuits 110v et 220v. Si quelqu'un peut en recommander, je lui en serais reconnaissant.

Framboise Pi

Le Raspberry Pi exécute Windows IoT Core Build 10.0.10586.0 et effectue les opérations suivantes :

  • Exécute IoTPoolRaspiBackgroundApp application en arrière-plan ;
  • Agit comme une passerelle de champ IoT (opaque) ;
  • Fournit l'alimentation à l'Arduino Uno via USB (5v) ;
  • Reçoit la température de la piscine et de l'air (en C) de l'Arduino Uno sur I2C ;
  • Contrôle le relais d'alimentation IoT à l'aide d'une broche 3 v ; et
  • Envoie le nom de la piscine, la température de la piscine, la température de l'air, l'état d'activation/désactivation du relais d'alimentation IoT et un horodatage (en UTC) toutes les minutes à Azure IoT Hub.

L'IoTPoolRaspiBackgroundApp est une application C# sans tête, construite à l'aide de l'Application d'arrière-plan (IoT) modèle de projet dans Visual Studio 2015, mise à jour 3.

L'IoTPoolRaspiBackgroundApp envoie la charge utile JSON suivante à Azure IoT Hub toutes les minutes à l'aide d'AMQP (cela peut être modifié dans le code source en HTTPS ou MQTT).

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

Le Raspberry Pi est enregistré en tant qu'appareil dans Azure IoT Hub. Le moyen le plus simple d'inscrire un appareil dans Azure IoT Hub consiste à utiliser l'Explorateur d'appareils. Cet outil est également un excellent moyen d'obtenir la chaîne de connexion de l'appareil, de surveiller les messages D2C (Device to Cloud) et de tester l'envoi de messages C2D (Cloud to Device).

Modifiez les éléments suivants dans StartupTask.cs pour connecter IoTPoolRaspiBackgroundApp à votre IoT Hub :

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

Arduino Uno

L'Arduino Uno R3 est connecté à deux capteurs de température DS18B20 à l'aide de la bibliothèque Dallas Controls et de la bibliothèque OneWire. Il est alimenté par le Raspberry Pi via USB (5v) et envoie la paire de lectures de température au Raspberry Pi via I2C à l'aide des broches SDA et SLC. Reportez-vous au diagramme de Fritzing pour un schéma.

Utilisez le code Two-DS18B20-I2C.ino pour exécuter l'Arduino.

Azur

Tous les composants Azure ont été créés dans la même région Azure (ouest des États-Unis) pour minimiser les coûts associés au trafic de sortie.

Azure IoT Hub

L'édition gratuite d'Azure IoT Hub a été utilisée dans ce projet. Il est limité à 8 000 messages/jour à 500 octets chacun. L'IoTPoolRaspiBackgroundApp envoie des messages D2C à 1 par minute, ou 1 440/jour, à 158 octets chacun. Cela laisse une marge de manœuvre suffisante pour tous les messages C2D.

Vous devez d'abord enregistrer un appareil auprès d'Azure IoT Hub. La méthode la plus simple consiste à utiliser l'explorateur de périphériques. Une fois enregistré, vous pouvez obtenir la chaîne de connexion de l'appareil à l'aide de l'Explorateur de périphériques.

Azure Streaming Analytics

Le travail Azure Streaming Analytics (ASA) connecte l'entrée IoT Hub à la sortie Azure SQL Database à l'aide de la requête ASA simple suivante.

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

Cette requête écrit chaque message JSON Device to Cloud (D2C) (1 par minute) dans une table nommée Pools dans une base de données Azure SQL.

Les améliorations futures de cette requête peuvent inclure des fonctions d'agrégation à des fins d'alerte (par exemple, Average PoolWaterTempC> 35 indique que la piscine devient trop chaude).

Base de données SQL Azure

Pour minimiser les coûts, et parce que les exigences de performances de la base de données étaient minimales, la base de données est une norme S0 (10 DTU).

Une seule base de données avec une seule table a été créée pour stocker tous les messages D2C.

Schéma :

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)); 

Application API Azure

L'API est une API RESTful construite à l'aide de l'API Web ASP.NET.

Les clients API doivent s'authentifier à l'aide d'une clé API spécifiée dans l'en-tête HTTP.

api-key :{votre clé API} 

La clé API est définie dans IoTPoolAPI\Controllers\PoolControllers.cs . L'application mobile et l'application Web doivent utiliser cette clé API pour communiquer avec l'API.

L'API REST prend en charge les méthodes suivantes :

Les améliorations futures de l'API peuvent inclure son placement derrière Azure API Management et l'ajout d'autres options d'authentification dans l'API, telles qu'Azure Active Directory.

Application Web Azure

L'IoTPoolWebApp contient une application de formulaires Web ASP.NET pour interagir avec l'API.

Il existe également une version mobile de l'application Web.

Modifiez le fichier default.aspx.cs et modifiez les éléments suivants :

chaîne statique privée 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"); 

L'application Web est intégrée à Azure Active Directory (AAD) pour l'authentification. L'application Web exige que tous les utilisateurs s'authentifient à l'aide d'AAD.

Vous devez d'abord enregistrer votre application Web auprès de votre locataire AAD (par exemple, tenant_name.onmicrosoft.com). Vous pouvez le faire via le portail Azure ou via Visual Studio. Une fois inscrit, copiez l'ID client à partir du portail Azure.

Ensuite, modifiez le domaine AAD dans l'application Web en modifiant l' dans le fichier web.config.

 

Application mobile

L'application mobile est écrite à l'aide de Xamarin Forms. Je ne l'ai compilé que pour fonctionner sur Windows Phone et Windows 10, mais je devrais effectuer une compilation croisée sur iOS et Android.

Modifiez Core.cs et modifiez les éléments suivants :

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

Modifiez DataService.cs et modifiez les éléments suivants :

chaîne statique privée apiKey =""; 

Modifiez PoolPage.xaml.cs et modifiez les éléments suivants :

chaîne statique privée apiKey ="";...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweroff");...HttpRequestMessage requestMessage =...."http://.azurewebsites.net/api/pool/poweron"); 

Power BI

Power BI (édition gratuite) a été utilisé pour créer et publier un tableau de bord en temps réel affichant les données du pool IoT.

Le processus impliquait de télécharger Power BI Desktop, de se connecter à la base de données Azure SQL (à l'aide de DirectQuery), de créer des rapports avec des visuels et de publier le .pbix sur PowerBI.com. J'ai ensuite épinglé le rapport sur un tableau de bord.

À l'avenir, je pourrais utiliser Power BI intégré pour intégrer directement le tableau de bord dans l'application Web.

Pour l'instant, je peux afficher le tableau de bord via Powerbi.com ou via l'application mobile gratuite Power BI.

Références

Voici une liste des ressources que j'ai utilisées pour créer cette solution :

  • 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

Un merci spécial à Miles Burton pour la bibliothèque de contrôles Dallas et à Mike Mackes pour l'exemple de code Arduino / I2C / DS18B20 et l'inspiration globale pour ce projet.

Code

  • Format de charge utile de message JSON pour les messages Device to Cloud (D2C)
  • Schéma de table "Pools" de la base de données SQL
Format de charge utile de message JSON pour les messages Device to Cloud (D2C)JSON
Remarque : « IsPoolPowerOn » - 0 indique la mise hors tension ; 1 indique la mise sous tension
{ "PoolName" :"IoTPool", "PoolWaterTempC" :30, "OutsideAirTempC" :27, "IsPoolPowerOn" :false, "SampleDateTime" :"2016-07-05T23:35:58.0882185Z" }
Schéma de table "Pools" de la base de données SQLSQL
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));
Repo Git Hub du pool IoT
Tout le code sourcehttps://github.com/khilscher/iotpool

Schémas

Raspberry Pi à Arduino via I2C connectant 2 capteurs DS18B20 RaspiArduinoTwoDS18B20.fzzSchéma architectural global

Processus de fabrication

  1. Piscine
  2. La carte Arduino cible l'IoT industriel
  3. Les kits de développement prennent en charge Azure RTOS
  4. IoT dans le cloud :Azure vs AWS
  5. Enregistreur de données GPS, analyse spatiale et Azure IoT Hub.
  6. Sauver la vie aquatique et lutter contre la pollution de l'eau avec l'IoT et l'IA
  7. Moniteur de fréquence cardiaque utilisant l'IoT
  8. Utiliser l'IoT pour contrôler à distance un bras robotique
  9. IOT - Smart Jar utilisant ESP8266, Arduino et capteur à ultrasons