亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Azure IoT 游泳池

组件和用品

DS18B20 防水数字温度传感器
(红线接3-5V,蓝/黑接地,黄/白为数据)
× 2
物联网功率继电器
× 1
电阻 4.75k ohm
1/4W, 5%
× 2
Raspberry Pi 2 B 型
× 1
Arduino UNO
Arduino Uno R3
× 1

应用和在线服务

Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015
Azure IoT 中心设备资源管理器
Fritzing
Power BI

关于这个项目

概览

该项目的目的是使用温度传感器、继电器和 Microsoft Azure 来控制和监控游泳池。

这个项目的灵感是需要远程操作和监控我们的儿童游泳池,这是一个 Intex 15' x 48" 圆形游泳池。该游泳池可容纳约 5000 加仑的水。它连接到一个砂滤器/泵,一个 11KW 加热器和一个盐水系统。目标是监控泳池水温、空气温度并控制水泵、加热器和盐水系统,以确保泳池对孩子们来说足够温暖,同时又不会过度运行。

这个 5 分钟的视频展示了水池、传感器、电路板和继电器是如何连接的。

以下架构图显示了解决方案中的所有主要组件。

Raspberry Pi、Arduino、IoT 电源继电器和面包板用拉链固定在塑料储存容器中,以防止水/湿气进入。为电缆和通风钻孔。

传感器

使用一对 DS18B20 防水温度传感器完成泳池水温和空气温度的监测,这些传感器使用达拉斯控制库和 OneWire 库连接到 Arduino Uno R3。温度数据(以摄氏度为单位)每 1 秒通过 I2C 发送到 Raspberry Pi。两个温度值以“|”分隔。

温度数据 =padRight(String(poolSensor.getTempCByIndex(0)) + "|" + String(outsideSensor.getTempCByIndex(0)), I2C_BUFFER_LEN); 

DS18B20 防水温度传感器的预接线如下:

  • 红色连接到 3v/5v
  • 蓝色/黑色接地
  • 黄色/白色是数据

我使用了一些便宜的 20 号钟线(门铃线)来扩展读取水温的 DS18B20 的范围。这个 DS18B20 被淹没在水池中。

读取空气温度的第二个 DS18B20 传感器贴在塑料储存容器的外面。

接力

Raspberry Pi 控制 IoT 电源继电器电源条,使用 110v 电压将泵和盐水系统连接到该电源条。这是使用 Pi 上的 3v 引脚完成的。切换 3v 引脚可启用/禁用 IoT 电源继电器上的一对 110v 插座(默认情况下,这对插座是关闭的)。原理图见后图。

无需将继电器连接到加热器,因为它有一个内置的流量传感器,并且会根据水流的存在或不存在来停止/开始加热。另外,我无法轻易找到继电器来控制使用 3v 或 5v 的加热器所需的 220v/60amp 电路。

将来,我将连接传感器来测量 110v 和 220v 电路的电气使用情况。如果有人可以推荐一些,我将不胜感激。

树莓派

Raspberry Pi 运行 Windows IoT Core Build 10.0.10586.0 并执行以下操作:

  • 运行 IoTPoolRaspiBackgroundApp 后台应用程序;
  • 充当物联网现场网关(不透明);
  • 通过 USB (5v) 为 Arduino Uno 供电;
  • 通过 I2C 从 Arduino Uno 接收游泳池和空气温度(以 C 为单位);
  • 使用 3v 引脚控制 IoT 功率继电器;和
  • 每 1 分钟向 Azure IoT 中心发送池名称、池温度、气温、IoT 电源继电器开/关状态和时间戳(UTC)。

IoTPoolRaspiBackgroundApp 是一个无头 C# 应用程序,使用 后台应用程序 (IoT) 构建 Visual Studio 2015 更新 3 中的项目模板。

IoTPoolRaspiBackgroundApp 每 1 分钟使用 AMQP 将以下 JSON 负载发送到 Azure IoT 中心(这可以在源代码中更改为 HTTPS 或 MQTT)。

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

Raspberry Pi 在 Azure IoT 中心注册为设备。在 Azure IoT 中心注册设备的最简单方法是使用设备资源管理器。该工具也是获取设备连接字符串、监控 D2C(设备到云)消息和测试发送 C2D(云到设备)消息的好方法。

在 StartupTask.cs 中编辑以下内容以将 IoTPoolRaspiBackgroundApp 连接到您的 IoT 中心:

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

Arduino Uno

Arduino Uno R3 使用达拉斯控制库和 OneWire 库连接到两个 DS18B20 温度传感器。它由 Raspberry Pi 通过 USB (5v) 供电,并使用 SDA 和 SLC 引脚通过 I2C 将温度读数对发送到 Raspberry Pi。原理图请参考 Fritzing 图。

使用 Two-DS18B20-I2C.ino 代码运行 Arduino。

蔚蓝

所有 Azure 组件均在同一 Azure 区域(美国西部)中创建,以最大限度地降低与出口流量相关的成本。

Azure 物联网中心

本项目中使用了 Azure IoT 中心的免费版本。它限制为每天 8,000 条消息,每条消息 500 字节。 IoTPoolRaspiBackgroundApp 每分钟发送 1 条 D2C 消息,或每天 1,440 条,每条 158 字节。这为任何 C2D 消息留下了充足的空间。

必须首先向 Azure IoT 中心注册设备。最简单的方法是使用设备资源管理器。注册后,您可以使用设备资源管理器获取设备连接字符串。

Azure 流分析

Azure 流分析 (ASA) 作业使用以下简单的 ASA 查询将 IoT 中心输入连接到 Azure SQL 数据库输出。

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

此查询将每个设备到云 (D2C) JSON 消息(每分钟 1 条)写入 Azure SQL 数据库中名为 Pools 的表。

此查询的未来改进可能包括一些用于警报目的的聚合函数(例如,Average PoolWaterTempC> 35 表示池变得太热)。

Azure SQL 数据库

为了最大限度地降低成本,并且由于对数据库的性能要求最低,因此该数据库采用 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,CONSTRAINT [PK_dbo.Pools] PRIMARY KEY CLUSTERED ([Id] ASC)); 

Azure API 应用

该 API 是使用 ASP.NET Web API 构建的 RESTful API。

API 客户端必须使用 HTTP 标头中指定的 API 密钥进行身份验证。

api-key :{您的 API 密钥} 

API 密钥在 IoTPoolAPI\Controllers\PoolControllers.cs 中定义 .移动应用程序和 Web 应用程序必须使用此 API 密钥与 API 通信。

REST API 支持以下方法:

未来对该 API 的改进可能包括将其置于 Azure API 管理之后,并将其他身份验证选项添加到 API 中,例如 Azure Active Directory。

Azure 网络应用

IoTPoolWebApp 包含一个用于与 API 交互的 ASP.NET Web 表单应用程序。

该网络应用程序还有一个适合移动设备的版本。

编辑 default.aspx.cs 并更改以下内容:

private static string 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"); 

Web 应用程序与 Azure Active Directory (AAD) 集成以进行身份​​验证。 Web 应用程序要求所有用户都必须使用 AAD 进行身份验证。

您必须首先向 AAD 租户注册您的 Web 应用(例如,tenant_name.onmicrosoft.com)。您可以通过 Azure 门户或 Visual Studio 执行此操作。注册后,从 Azure 门户复制客户端 ID。

接下来,通过修改 web.config 中的 来更改 Web 应用程序中的 AAD 域。

 

移动应用

移动应用程序是使用 Xamarin Forms 编写的。我只编译它以在 Windows Phone 和 Windows 10 上运行,但应该在 iOS 和 Android 上交叉编译。

编辑 Core.cs 并更改以下内容:

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

编辑 DataService.cs 并更改以下内容:

私有静态字符串 apiKey =""; 

编辑 PoolPage.xaml.cs 并更改以下内容:

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

电源 BI

Power BI(免费版)用于创建和发布显示 IoT 池数据的实时仪表板。

该过程包括下载 Power BI Desktop、连接到 Azure SQL DB(使用 DirectQuery)、创建一些带有视觉效果的报告,以及将 .pbix 发布到 PowerBI.com。然后我将报告固定到仪表板上。

将来我可能会使用嵌入式 Power BI 将仪表板直接嵌入到 Web 应用程序中。

现在,我可以通过 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

特别感谢 Miles Burton 提供的 Dallas Controls Library 和 Mike Mackes 提供的 Arduino / I2C / DS18B20 示例代码以及该项目的整体灵感。

代码

  • 设备到云 (D2C) 消息的 JSON 消息有效负载格式
  • SQL 数据库“池”表架构
设备到云 (D2C) 消息的 JSON 消息有效负载格式JSON
注意:"IsPoolPowerOn" - 0 表示断电; 1 表示开机
{ "PoolName" :"IoTPool", "PoolWaterTempC" :30, "OutsideAirTempC" :27, "IsPoolPowerOn" :false, "SampleDateTime" :"2016-07-05T23:35:58.0882185" }
SQL 数据库“池”表架构SQL
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));
物联网池 Git 中心存储库
所有源码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 中心。
  6. 利用物联网和人工智能拯救水生生物和防治水污染
  7. 使用物联网的心率监测器
  8. 使用物联网远程控制机械臂
  9. IOT - 使用 ESP8266、Arduino 和超声波传感器的智能罐
  10. 基于物联网 (IoT) 的太阳能跟踪器
  11. 带有 Arduino、Yaler 和 IFTTT 的物联网仪表
  12. 使用 Alexa 和 Arduino IoT Cloud 完全控制您的电视