Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Бассейн Azure IoT

Компоненты и расходные материалы

Водонепроницаемый цифровой датчик температуры DS18B20
(Красный провод подключается к 3-5 В, синий / черный подключается к земле, а желтый / белый - к данным )
× 2
IoT Power Relay
× 1
Резистор 4,75 кОм
1 / 4W, 5%
× 2
Raspberry Pi 2, модель B
× 1
Arduino UNO
Arduino Uno R3
× 1

Приложения и онлайн-сервисы

Microsoft Azure
Microsoft Windows 10 IoT Core
IDE Arduino
Microsoft Visual Studio 2015
Обозреватель устройств Центра Интернета вещей Azure
Фритзинг
Power BI

Об этом проекте

Обзор

Целью этого проекта является контроль и мониторинг плавательного бассейна с помощью датчиков температуры, реле и Microsoft Azure.

Вдохновением для этого проекта является необходимость удаленного управления и наблюдения за нашим детским бассейном, который представляет собой круглый бассейн Intex 15 x 48 дюймов. Бассейн вмещает около 5000 галлонов воды. Он подключен к песочному фильтру / насосу, нагреватель мощностью 11 кВт и система с соленой водой. Цель состояла в том, чтобы контролировать температуру воды в бассейне, температуру воздуха и управлять насосом, нагревателем и системой соленой воды, чтобы бассейн был достаточно теплым для детей, но не перегружал его.

В этом 5-минутном видео показано, как подключаются бассейн, датчики, печатные платы и реле.

На следующей архитектурной схеме показаны все основные компоненты решения.

Raspberry Pi, Arduino, IoT Power Relay и макетная плата прикреплены на молнии к пластиковому контейнеру для хранения, чтобы не допустить попадания воды / влаги. Просверлены отверстия для кабелей и вентиляции.

Датчики

Мониторинг температуры воды в бассейне и температуры воздуха осуществляется с помощью пары водонепроницаемых датчиков температуры DS18B20, подключенных к Arduino Uno R3 с помощью библиотеки Dallas Controls Library и OneWire Library. Данные о температуре (в градусах Цельсия) отправляются на Raspberry Pi каждые 1 секунду по I2C. Два значения температуры разделены знаком "|".

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

Водонепроницаемые датчики температуры DS18B20 поставляются со следующей разводкой:

  • Красный подключается к 3в / 5в.
  • Синий / черный соединяется с землей.
  • Желтый / белый - данные.

Я использовал дешевый провод звонка 20 калибра (провод дверного звонка), чтобы расширить зону действия DS18B20, который измеряет температуру воды. DS18B20 погружен в бассейн.

Второй датчик DS18B20, считывающий температуру воздуха, прикреплен к внешней стороне пластикового контейнера для хранения.

Реле

Raspberry Pi управляет панелью питания IoT Power Relay, к которой насос и система соленой воды подключены с помощью 110 В. Это делается с помощью вывода 3В на Pi. Переключение вывода 3 В включает / отключает пару розеток 110 В на реле питания IoT (пара розеток по умолчанию отключена). Обратитесь к диаграмме позже для схемы.

Не было необходимости подключать реле к нагревателю, поскольку он имеет встроенный датчик потока и будет останавливать / запускать нагрев в зависимости от отсутствия или наличия потока воды. Кроме того, я не мог легко найти реле для управления цепью 220 В / 60 А, необходимой для нагревателя с использованием 3 В или 5 В.

В будущем я буду прикреплять датчики, чтобы измерить электрическое использование цепей 110 В и 220 В. Если кто-то может порекомендовать, буду благодарен.

Raspberry Pi

Raspberry Pi работает под управлением Windows IoT Core Build 10.0.10586.0 и выполняет следующие функции:

  • Запускает IoTPoolRaspiBackgroundApp . фоновое приложение;
  • Действует как полевой шлюз IoT (непрозрачный);
  • Обеспечивает питание Arduino Uno через USB (5 В);
  • Получает температуру бассейна и воздуха (в C) от Arduino Uno по I2C;
  • Управляет реле питания Интернета вещей с помощью вывода 3 В; и
  • Каждую минуту отправляет в Azure IoT Hub имя пула, температуру бассейна, температуру воздуха, состояние включения / выключения IoT Power Relay и отметку времени (в формате UTC).

IoTPoolRaspiBackgroundApp - это автономное приложение C #, созданное с использованием фонового приложения (IoT) . шаблон проекта в Visual Studio 2015, обновление 3

IoTPoolRaspiBackgroundApp отправляет следующие полезные данные JSON в Azure IoT Hub каждые 1 минуту с помощью AMQP (это можно изменить в исходном коде на HTTPS или MQTT).

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

Raspberry Pi зарегистрирован как устройство в Azure IoT Hub. Самый простой способ зарегистрировать устройство в Центре Интернета вещей Azure - использовать обозреватель устройств. Этот инструмент также является отличным способом получить строку подключения устройства, отслеживать сообщения D2C (от устройства к облаку) и тестировать отправку сообщений C2D (от облака к устройству).

Измените следующее в StartupTask.cs, чтобы подключить IoTPoolRaspiBackgroundApp к вашему Центру Интернета вещей:

  статическая строка iotPoolConnString ="HostName = .azure-devices.net; DeviceId =iotpool; SharedAccessKey ="; статическая строка deviceName ="iotpool";  

Ардуино Уно

Arduino Uno R3 подключается к двум датчикам температуры DS18B20 с помощью библиотеки Dallas Controls Library и библиотеки OneWire. Он питается от Raspberry Pi через USB (5 В) и отправляет пару показаний температуры на Raspberry Pi через I2C с помощью контактов SDA и SLC. См. Схему на диаграмме Фритзинга.

Используйте код Two-DS18B20-I2C.ino для запуска Arduino.

Лазурный

Все компоненты Azure были созданы в одном регионе Azure (запад США), чтобы минимизировать затраты, связанные с исходящим трафиком.

Центр Интернета вещей Azure

В этом проекте использовалась бесплатная версия Azure IoT Hub. Он ограничен 8000 сообщений в день по 500 байтов каждое. IoTPoolRaspiBackgroundApp отправляет сообщения D2C со скоростью 1 в минуту или 1440 в день по 158 байт каждое. Это оставляет достаточно места для любых сообщений C2D.

Сначала необходимо зарегистрировать устройство в Центре Интернета вещей Azure. Самый простой способ - использовать Device Explorer. После регистрации вы можете получить строку подключения устройства с помощью обозревателя устройств.

Потоковая аналитика Azure

Задание Azure Streaming Analytics (ASA) соединяет входные данные Центра Интернета вещей с выходными данными Базы данных SQL Azure с помощью следующего простого запроса ASA.

  ВЫБРАТЬ PoolName, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTimeINTO sqlFROM iothub  

Этот запрос записывает каждое сообщение JSON с устройства в облако (D2C) (1 в минуту) в таблицу с именем Pools в базе данных SQL Azure.

Будущие улучшения этого запроса могут включать в себя некоторые функции агрегирования для целей оповещения (например, Среднее значение PoolWaterTempC> 35 указывает на то, что пул становится слишком теплым).

База данных SQL Azure

Чтобы свести к минимуму затраты и поскольку требования к производительности базы данных были минимальными, база данных соответствует стандарту S0 (10 DTU).

Была создана единая база данных с единственной таблицей для хранения всех сообщений D2C.

Схема:

  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, ОГРАНИЧЕНИЕ [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC));  

Приложение Azure API

API - это RESTful API, созданный с использованием веб-API ASP.NET.

Клиенты API должны проходить аутентификацию с использованием ключа API, указанного в заголовке HTTP.

  api-key:{ваш ключ API}  

Ключ API определяется в IoTPoolAPI \ Controllers \ PoolControllers.cs . . Мобильное приложение и веб-приложение должны использовать этот ключ API для связи с API.

REST API поддерживает следующие методы:

Будущие улучшения API могут включать его размещение за Azure API Management и добавление других параметров проверки подлинности в API, таких как Azure Active Directory.

Веб-приложение Azure

IoTPoolWebApp содержит приложение веб-форм ASP.NET для взаимодействия с API.

Существует также мобильная версия веб-приложения.

Отредактируйте default.aspx.cs и измените следующее:

  частная статическая строка 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 ");  

Веб-приложение интегрировано с Azure Active Directory (AAD) для проверки подлинности. Веб-приложение требует, чтобы все пользователи прошли аутентификацию с помощью AAD.

Вы должны сначала зарегистрировать свое веб-приложение у своего клиента AAD (например, tenant_name.onmicrosoft.com). Вы можете сделать это через портал Azure или Visual Studio. После регистрации скопируйте идентификатор клиента с портала Azure.

Затем измените домен AAD в веб-приложении, изменив <идентификатор клиента AAD> в web.config.

       

Мобильное приложение

Мобильное приложение написано с использованием Xamarin Forms. Я скомпилировал его только для работы на Windows Phone и Windows 10, но он должен быть кросс-компилирован на iOS и Android.

Отредактируйте Core.cs и измените следующее:

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

Отредактируйте DataService.cs и измените следующее:

  частная статическая строка apiKey ="";  

Отредактируйте PoolPage.xaml.cs и измените следующее:

  частная статическая строка apiKey =""; ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweroff"); ... HttpRequestMessage requestMessage =.... "http://  .azurewebsites.net / api / pool / poweron");  

Power BI

Power BI (бесплатная версия) использовался для создания и публикации панели мониторинга в реальном времени, отображающей данные пула Интернета вещей.

Процесс включал загрузку Power BI Desktop, подключение к базе данных Azure SQL (с помощью DirectQuery), создание некоторых отчетов с визуальными элементами и публикацию .pbix на PowerBI.com. Затем я закрепил отчет на панели управления.

В будущем я могу использовать встроенный Power BI, чтобы напрямую встроить панель мониторинга в веб-приложение.

На данный момент я могу просматривать панель мониторинга через Powerbi.com или через бесплатное мобильное приложение Power BI.

Вот список ресурсов, которые я использовал при создании этого решения:

  • 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

Особая благодарность Майлзу Бертону за Далласскую библиотеку элементов управления и Майку Макксу за образец кода Arduino / I2C / DS18B20 и общее вдохновение для этого проекта.

Код

  • Формат полезной нагрузки сообщения JSON для сообщений с устройства в облако (D2C)
  • Схема таблицы "Пулы" базы данных SQL
Формат полезной нагрузки сообщения JSON для сообщений с устройства в облако (D2C) JSON
Примечание:«IsPoolPowerOn» - 0 означает отключение питания; 1 означает, что питание включено
 {"PoolName":"IoTPool", "PoolWaterTempC":30, "OutsideAirTempC":27, "IsPoolPowerOn":false, "SampleDateTime":"2016-07-05T23:35:58.0882185Z" } 
Схема таблицы "Пулы" базы данных SQL SQL
 СОЗДАТЬ ТАБЛИЦУ [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, ОГРАНИЧЕНИЕ [PK_dbo.Pools] ПЕРВИЧНЫЙ КЛЮЧ КЛАСТЕРИРОВАН ([Id] ASC)); 
Репозиторий Git Hub для пула Интернета вещей
Весь исходный код https://github.com/khilscher/iotpool

Схема

Raspberry Pi к Arduino через I2C, соединяющий 2 датчика DS18B20 RaspiArduinoTwoDS18B20.fzz Общая архитектурная схема

Производственный процесс

  1. Бассейн
  2. Плата Arduino предназначена для промышленного Интернета вещей
  3. Наборы для разработки поддерживают Azure RTOS
  4. Интернет вещей в облаке:Azure против AWS
  5. Регистратор данных GPS, пространственный анализ и Azure IoT Hub.
  6. Спасение водных организмов и борьба с загрязнением воды с помощью Интернета вещей и искусственного интеллек…
  7. Монитор сердечного ритма с использованием Интернета вещей
  8. Использование Интернета вещей для удаленного управления манипулятором
  9. IOT - Smart Jar с использованием ESP8266, Arduino и ультразвукового датчика
  10. Солнечный трекер на основе Интернета вещей (IoT)