工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

AzureIoTスイミングプール

コンポーネントと消耗品

DS18B20防水デジタル温度センサー
(赤のワイヤーは3-5Vに接続し、青/黒はアースに接続し、黄色/白はデータです)
× 2
IoTパワーリレー
× 1
抵抗4.75kオーム
1 / 4W、5%
× 2
Raspberry Pi2モデルB
× 1
Arduino UNO
Arduino Uno R3
× 1

アプリとオンラインサービス

>
Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015
Azure IoTHubデバイスエクスプローラー
フリッティング
Power BI

このプロジェクトについて

概要

このプロジェクトの目的は、温度センサー、リレー、およびMicrosoftAzureを使用してスイミングプールを制御および監視することです。

このプロジェクトのインスピレーションは、Intex 15'x48 "ラウンドプールである子供用プールをリモートで操作および監視する必要があることです。プールには約5000ガロンの水があります。サンドフィルター/ポンプに接続されています。 11KWヒーター、および塩水システム。目標は、プールの水温、気温を監視し、ポンプ、ヒーター、および塩水システムを制御して、プールがオーバーランすることなく、子供たちが十分に暖かくなるようにすることでした。

この5分間のビデオでは、プール、センサー、回路基板、リレーがどのように接続されているかを示しています。

次のアーキテクチャ図は、ソリューションのすべての主要コンポーネントを示しています。

<図>

Raspberry Pi、Arduino、IoT Power Relay、ブレッドボードは、水や湿気を防ぐためにプラスチック製の保管容器にジッパーで固定されています。ケーブルと換気のために穴が開けられました。

<図>

センサー

プールの水温と気温の監視は、Dallas ControlsLibraryとOneWireLibraryを使用してArduinoUnoR3に接続されたDS18B20防水温度センサーのペアを使用して行われます。温度データ(摂氏)は、I2Cを介して1秒ごとにRaspberryPiに送信されます。 2つの温度値は「|」で区切られます。

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

DS18B20防水温度センサーは、次のように事前に配線されています。

  • 赤は3v / 5vに接続します
  • 青/黒はアースに接続します
  • 黄色/白はデータです

水温を読み取るDS18B20の到達距離を伸ばすために、安価な20ゲージのベルワイヤー(ドアベルワイヤー)を使用しました。このDS18B20はプールに沈んでいます。

<図>

2番目のDS18B20センサーの読み取り空気温度は、プラスチック製の保管容器の外側にテープで固定されています。

リレー

Raspberry Piは、110vを使用してポンプと塩水システムが接続されているIoTパワーリレーパワーバーを制御します。これは、Piの3vピンを使用して行われます。 3vピンを切り替えると、IoTパワーリレーの110vコンセントのペアが有効/無効になります(コンセントのペアはデフォルトでオフになっています)。回路図については、後の図を参照してください。

<図>

ヒーターには流量センサーが内蔵されており、水流の有無により加熱を停止・開始しますので、リレーを接続する必要はありませんでした。さらに、3vまたは5vを使用してヒーターに必要な220v / 60amp回路を制御するためのリレーを簡単に見つけることができませんでした。

将来的には、110vおよび220v回路の電気的使用を測定するためのセンサーを取り付ける予定です。誰かが推薦してくれるなら、ありがたいです。

ラズベリーパイ

RaspberryPiはWindowsIoT Core Build 10.0.10586.0を実行し、以下を実行します。

  • IoTPoolRaspiBackgroundApp を実行します バックグラウンドアプリケーション;
  • IoTフィールドゲートウェイとして機能します(不透明)。
  • USB(5v)を介してArduinoUnoに電力を供給します。
  • I2Cを介してArduinoUnoからプールと気温(C)を受け取ります;
  • 3vピンを使用してIoTパワーリレーを制御します。および
  • プール名、プール温度、気温、IoTパワーリレーのオン/オフステータス、およびタイムスタンプ(UTC)を1分ごとにAzure IoTHubに送信します。

IoTPoolRaspiBackgroundAppは、バックグラウンドアプリケーション(IoT)を使用して構築されたヘッドレスC#アプリケーションです。 Visual Studio 2015、Update3のプロジェクトテンプレート。

IoTPoolRaspiBackgroundAppは、AMQPを使用して1分ごとに次のJSONペイロードをAzure IoT Hubに送信します(これは、ソースコードでHTTPSまたはMQTTに変更できます)。

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

Raspberry Piは、Azure IoTHubにデバイスとして登録されています。 Azure IoT Hubにデバイスを登録する最も簡単な方法は、デバイスエクスプローラーを使用することです。このツールは、デバイスの接続文字列を取得し、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は、Dallas ControlsLibraryとOneWireLibraryを使用して2つのDS18B20温度センサーに接続されています。これは、USB(5v)を介したRaspberry Piから電力を供給され、SDAピンとSLCピンを使用してI2Cを介してRaspberryPiに温度測定値のペアを送信します。回路図については、フリッツの図を参照してください。

<図>

Two-DS18B20-I2C.inoコードを使用してArduinoを実行します。

Azure

すべてのAzureコンポーネントは、出力トラフィックに関連するコストを最小限に抑えるために、同じAzureリージョン(米国西部)で作成されました。

AzureIoTハブ

このプロジェクトでは、Azure IoTHubの無料版が使用されました。それぞれ500バイトで1日あたり8,000メッセージに制限されています。 IoTPoolRaspiBackgroundAppは、D2Cメッセージを1分あたり1回、つまり1日あたり1,440バイトでそれぞれ158バイトで送信します。これにより、C2Dメッセージに十分な余裕ができます。

まず、デバイスをAzure IoTHubに登録する必要があります。最も簡単な方法は、デバイスエクスプローラーを使用することです。登録すると、デバイスエクスプローラーを使用してデバイス接続文字列を取得できます。

<図>

Azure Streaming Analytics

Azure Streaming Analytics(ASA)ジョブは、次の単純なASAクエリを使用して、IoTHub入力をAzureSQLデータベース出力に接続します。

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

このクエリは、各Device to Cloud(D2C)JSONメッセージ(1分あたり1つ)をAzureSQLデータベースのPoolsという名前のテーブルに書き込みます。

このクエリの将来の改善には、アラートを目的としたいくつかの集計関数が含まれる可能性があります(たとえば、平均PoolWaterTempC> 35は、プールが暖かくなりすぎていることを示します)。

AzureSQLデータベース

コストを最小限に抑えるため、またデータベースのパフォーマンス要件が最小限であるため、データベースは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));  

AzureAPIアプリ

APIは、ASP.NET WebAPIを使用して構築されたRESTfulAPIです。

APIクライアントは、HTTPヘッダーで指定されたAPIキーを使用して認証する必要があります。

  api-key:{あなたのAPIキー}  

APIキーは、 IoTPoolAPI \ Controllers \ PoolControllers.cs で定義されています 。モバイルアプリとウェブアプリは、APIと通信するためにこのAPIキーを使用する必要があります。

REST APIは、次のメソッドをサポートしています。

<図>

APIの将来の改善には、Azure API Managementの背後に配置することや、Azure ActiveDirectoryなどの他の認証オプションをAPIに追加することが含まれる可能性があります。

AzureWebアプリ

IoTPoolWebAppには、APIと対話するためのASP.NETWebフォームアプリケーションが含まれています。

<図>

モバイルフレンドリーバージョンのウェブアプリもあります。

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を使用して認証する必要があります。

まず、WebアプリをAADテナント(例:tenant_name.onmicrosoft.com)に登録する必要があります。これは、AzurePortalまたはVisualStudioを介して実行できます。登録したら、AzureポータルからクライアントIDをコピーします。

次に、web.configのを変更して、WebアプリのAADドメインを変更します。

       

モバイルアプリ

モバイルアプリはXamarinフォームを使用して作成されています。 WindowsPhoneとWindows10で実行するようにコンパイルしただけですが、iOSとAndroidでクロスコンパイルする必要があります。

<図>

Core.csを編集し、以下を変更します。

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

DataService.csを編集し、以下を変更します。

  private static string apiKey ="";  

PoolPage.xaml.csを編集し、以下を変更します:

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

Power BI

Power BI(無料版)を使用して、IoTプールデータを表示するリアルタイムダッシュボードを作成および公開しました。

<図>

このプロセスには、Power BI Desktopのダウンロード、Azure SQL DBへの接続(DirectQueryを使用)、ビジュアルを使用したレポートの作成、および.pbixのPowerBI.comへの公開が含まれていました。次に、レポートをダッシュ​​ボードに固定しました。

将来的には、Power BI Embeddedを使用して、ダッシュボードをWebアプリに直接埋め込む可能性があります。

今のところ、Powerbi.comまたは無料のPowerBIモバイルアプリからダッシュボードを表示できます。

参照

このソリューションの構築に使用したリソースのリストは次のとおりです。

  • 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

Dallas ControlsLibraryのMilesBurtonとArduino / I2C / DS18B20サンプルコードのMikeMackes、およびこのプロジェクトの全体的なインスピレーションに特に感謝します。

コード

  • デバイスからクラウド(D2C)メッセージ用のJSONメッセージペイロード形式
  • SQLデータベースの「プール」テーブルスキーマ
デバイスからクラウド(D2C)メッセージ用のJSONメッセージペイロード形式 JSON
注:「IsPoolPowerOn」-0は電源がオフであることを示します。 1は電源オンを示します
 {"PoolName": "IoTPool"、 "PoolWaterTempC":30、 "OutsideAirTempC":27、 "IsPoolPowerOn":false、 "SampleDateTime": "2016-07-05T23:35:58.0882185Z" } 
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)); 
IoTプールGitHubリポジトリ
すべてのソースコードhttps://github.com/khilscher/iotpool

回路図

2つのDS18B20センサーを接続するI2Cを介したRaspberryPiからArduinoへ RaspiArduinoTwoDS18B20.fzz全体的なアーキテクチャ図

製造プロセス

  1. スイミングプール
  2. Arduinoボードは産業用IoTをターゲットにしています
  3. 開発キットはAzureRTOSをサポートします
  4. IoT in the Cloud:Azure vs AWS
  5. GPSデータロガー、空間分析、およびAzureIoTハブ。
  6. IoTとAIで水生生物を救い、水質汚染と戦う
  7. IoTを使用した心拍数モニター
  8. IoTを使用してロボットアームをリモート制御する
  9. IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
  10. モノのインターネット(IoT)ベースのソーラートラッカー
  11. Arduino、Yaler、IFTTTを使用したIoTゲージ