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

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

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

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

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

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

О проекте

Обзор

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

Вдохновением послужила необходимость удаленного управления детским бассейном Intex 15' x 48" (около 19 000 литров). Бассейн оснащен песковым фильтром/насосом, нагревателем 11 кВт и системой соленой воды. Задача: следить за температурой воды и воздуха, управлять насосом, нагревателем и системой соленой воды, чтобы вода была достаточно теплой, но не перегревалась.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Raspberry Pi, Arduino, IoT Power Relay и макетная плата закреплены в пластиковом контейнере для защиты от влаги. Выдрелены отверстия для кабелей и вентиляции.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Датчики

Мониторинг температуры воды и воздуха осуществляется двумя датчиками DS18B20, подключенными к Arduino Uno через библиотеки Dallas Controls и OneWire. Данные (в °C) передаются на Raspberry Pi каждую секунду по I2C. Два значения разделяются символом «|».

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

Проводка DS18B20:

Для датчика воды использовал дешевый двухжильный провод (от дверного звонка) для удлинения. Датчик погружен в бассейн.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Второй датчик (воздух) закреплен снаружи контейнера.

Реле

Raspberry Pi управляет IoT Power Relay (у которого пара розеток 110В отключены по умолчанию) через 3.3В пин. Переключение этого пина включает/выключает розетки, к которым подключены насос и система соленой воды.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

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

В будущем планирую добавить датчики потребления электроэнергии на 110В и 220В цепях. Буду благодарен за рекомендации.

Raspberry Pi

Работает на Windows IoT Core Build 10.0.10586.0 и выполняет:

Приложение написано на C# (шаблон Background Application (IoT) в Visual Studio 2015 Update 3).

JSON-полезная нагрузка, отправляемая каждую минуту по AMQP (можно сменить на HTTPS или MQTT):

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

Устройство зарегистрировано в Azure IoT Hub. Проще всего сделать это через Device Explorer, который также удобен для получения строки подключения, мониторинга D2C сообщений и тестирования C2D.

В StartupTask.cs нужно указать:

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

Arduino Uno

Подключен к двум DS18B20 (библиотеки Dallas Controls и OneWire). Питание от Raspberry Pi по USB (5В). Передает пару температур на Pi по I2C (пины SDA/SCL). Схема в Fritzing.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Используйте скетч Two-DS18B20-I2C.ino.

Azure

Все компоненты созданы в одном регионе (West US) для минимизации затрат на исходящий трафик.

Azure IoT Hub

Использован бесплатный уровень: 8000 сообщений/день по 500 байт. Наш трафик — 1440 сообщений/день по 158 байт, запас есть.

Регистрация устройства через Device Explorer. Там же получаем строку подключения.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Azure Streaming Analytics

Задача ASA соединяет вход IoT Hub с выходом в Azure SQL Database простым запросом:

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

Каждое D2C сообщение (1 в минуту) записывается в таблицу Pools. В будущем можно добавить агрегацию для алертов (например, средняя температура > 35°C).

Azure SQL Database

Для экономии и низких требований к производительности — уровень S0 Standard (10 DTU). Одна база, одна таблица.

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 на ASP.NET Web API. Аутентификация по API-ключу в заголовке HTTP:

api-key : {your API key}

Ключ определен в IoTPoolAPI\Controllers\PoolControllers.cs. Мобильное и веб-приложения используют его.

Поддерживаемые методы API показаны на скриншоте.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Планируется размещение за Azure API Management и добавление Azure AD.

Azure Web App

IoTPoolWebApp — ASP.NET Web Forms для работы с API.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

Есть мобильная версия. В default.aspx.cs нужно прописать API-ключ и URL эндпоинтов (/api/pool/poweroff, /api/pool/poweron, /api/pool/getlatest).

Интеграция с Azure Active Directory (AAD) для аутентификации пользователей. Необходимо зарегистрировать веб-приложение в своем AAD-тенанте, скопировать Client ID и обновить web.config:

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

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

Написано на Xamarin Forms. Скомпилировано для Windows Phone и Windows 10, должно кросс-компилироваться под iOS и Android.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

В Core.cs, DataService.cs, PoolPage.xaml.cs нужно задать API-ключ и URL вашего веб-приложения.

Power BI

Бесплатный Power BI Desktop использован для создания real-time дашборда. Подключение к Azure SQL DB (DirectQuery), создание отчетов, публикация .pbix на PowerBI.com, закрепление на дашборде.

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

В будущем возможно внедрение Power BI Embedded в веб-приложение. Пока смотрю через PowerBI.com или мобильное приложение Power BI.

Ссылки и ресурсы

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

Код

Формат JSON полезной нагрузки D2C

Примечание: "IsPoolPowerOn" — 0 = выкл, 1 = вкл

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

Схема таблицы Pools в SQL Database

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

Репозиторий на GitHub

Весь исходный код: https://github.com/khilscher/iotpool

Схемы

Подключение Raspberry Pi к Arduino по I2C с двумя DS18B20: RaspiArduinoTwoDS18B20.fzz

Общая архитектурная схема:

Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг
Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг

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

  1. Полное руководство по проектированию и строительству наземных и надземных бассейнов
  2. Arduino запускает Portenta H7: Industrial-Grade IoT Board дебютирует на CES
  3. Azure RTOS расширяет поддержку основных встраиваемых платформ с новыми комплектами разработки
  4. Azure против AWS: какая облачная платформа выигрывает для IoT?
  5. GPS-трекер с пространственным анализом на Azure IoT Hub
  6. IoT и ИИ для мониторинга качества воды: защита водных экосистем
  7. IoT-монитор пульса в реальном времени на Arduino и MAX30100
  8. Удаленное IoT-управление самодельной манипулятором
  9. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  10. IoT-солнечный трекер на Arduino: умное управление энергией с мониторингом через Cayenne