산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Azure IoT 수영장

구성품 및 소모품

DS18B20 방수 디지털 온도 센서
(빨간선은 3-5V에 연결하고 파란색/검정색은 접지에 연결하고 노란색/흰색은 데이터 )
× 2
IoT 전력 릴레이
× 1
저항 4.75k 옴
1/4W, 5%
× 2
라즈베리 파이 2 모델 B
× 1
Arduino UNO
아두이노 우노 R3
× 1

앱 및 온라인 서비스

Microsoft Azure
Microsoft Windows 10 IoT Core
Arduino IDE
Microsoft Visual Studio 2015
Azure IoT Hub 장치 탐색기
프리징
파워 BI

이 프로젝트 정보

개요

이 프로젝트의 목적은 온도 센서, 릴레이 및 Microsoft Azure를 사용하여 수영장을 제어하고 모니터링하는 것입니다.

이 프로젝트에 대한 영감은 Intex 15' x 48" 원형 수영장인 우리 어린이 수영장을 원격으로 운영하고 모니터링할 필요가 있다는 것입니다. 수영장은 약 5000갤런의 물을 수용합니다. 이 수영장은 모래 필터/펌프에 연결되어 있습니다. 11KW 히터 및 염수 시스템. 목표는 수영장 수온, 공기 온도를 모니터링하고 펌프, 히터 및 염수 시스템을 제어하여 수영장이 과도하게 실행되지 않으면서 아이들이 충분히 따뜻할 수 있도록 하는 것이었습니다.

이 5분짜리 비디오는 수영장, 센서, 회로 기판 및 릴레이가 어떻게 연결되어 있는지 보여줍니다.

다음 아키텍처 다이어그램은 솔루션의 모든 주요 구성 요소를 보여줍니다.

Raspberry Pi, Arduino, IoT 전원 릴레이 및 브레드보드는 물/수분을 멀리 유지하기 위해 플라스틱 보관 용기에 지퍼로 묶여 있습니다. 케이블과 환기를 위해 구멍을 뚫었습니다.

센서

수영장 수온 및 공기 온도 모니터링은 Dallas Controls Library 및 OneWire Library를 사용하여 Arduino Uno R3에 연결된 한 쌍의 DS18B20 방수 온도 센서를 사용하여 수행됩니다. 온도 데이터(섭씨)는 I2C를 통해 1초마다 Raspberry Pi로 전송됩니다. 두 온도 값은 "|"로 구분됩니다.

온도 데이터 =padRight(String(poolSensor.getTempCByIndex(0)) + "|" + String(outsideSensor.getTempCByIndex(0)), I2C_BUFFER_LEN); 

DS18B20 방수 온도 센서는 다음과 같이 사전 배선되어 있습니다.

<울>
  • 빨간색은 3v/5v에 연결
  • <울>
  • 파란색/검정색은 접지에 연결됩니다.
  • <울>
  • 노란색/흰색은 데이터입니다.
  • 나는 수온을 읽는 DS18B20의 도달 범위를 확장하기 위해 저렴한 20 게이지 벨 와이어(도어 벨 와이어)를 사용했습니다. 이 DS18B20은 수영장에 잠겨 있습니다.

    두 번째 DS18B20 센서 판독 공기 온도는 플라스틱 보관 용기 외부에 테이프로 부착되어 있습니다.

    릴레이

    Raspberry Pi는 110v를 사용하여 Pump와 Salt Water System이 연결된 IoT Power Relay 파워 바를 제어합니다. 이것은 Pi의 3v 핀을 사용하여 수행됩니다. 3v 핀을 토글하면 IoT 전원 릴레이에서 한 쌍의 110v 콘센트를 활성화/비활성화합니다(한 쌍의 콘센트는 기본적으로 꺼져 있음). 회로도는 나중에 다이어그램을 참조하십시오.

    히터에 릴레이를 연결할 필요가 없었고, 유량 센서가 내장되어 있고 물의 흐름 유무에 따라 가열을 중지/시작합니다. 또한 3v 또는 5v를 사용하여 히터에 필요한 220v/60amp 회로를 제어하는 ​​릴레이를 쉽게 찾을 수 없었습니다.

    앞으로 110v 및 220v 회로의 전기 사용량을 측정하기 위해 센서를 부착할 것입니다. 누군가 추천할 수 있다면 감사하겠습니다.

    라즈베리 파이

    Raspberry Pi는 Windows IoT Core Build 10.0.10586.0을 실행하고 다음을 수행합니다.

    <울>
  • IoTPoolRaspiBackgroundApp 실행 백그라운드 애플리케이션;
  • <울>
  • IoT 현장 게이트웨이 역할(불투명)
  • <울>
  • USB(5v)를 통해 Arduino Uno에 전원을 제공합니다.
  • <울>
  • I2C를 통해 Arduino Uno에서 수영장 및 공기 온도(C) 수신
  • <울>
  • 3v 핀을 사용하여 IoT 전원 릴레이를 제어합니다. 그리고
  • <울>
  • 1분마다 풀 이름, 풀 온도, 기온, IoT Power Relay 켜기/끄기 상태 및 타임스탬프(UTC)를 Azure IoT Hub로 보냅니다.
  • IoTPoolRaspiBackgroundApp은 백그라운드 애플리케이션(IoT)을 사용하여 구축된 헤드리스 C# 애플리케이션입니다. Visual Studio 2015, 업데이트 3의 프로젝트 템플릿.

    IoTPoolRaspiBackgroundApp은 AMQP를 사용하여 1분마다 Azure IoT Hub에 다음 JSON 페이로드를 보냅니다(소스 코드에서 HTTPS 또는 MQTT로 변경할 수 있음).

    <사전><코드>{"PoolName":"iotpool","PoolWaterTempC":30,"OutsideAirTempC":27,"IsPoolPowerOn":false, "SampleDateTime":"2016-07-05T23:35:58.0882185Z"}

    Raspberry Pi는 Azure IoT Hub에 장치로 등록됩니다. Azure IoT Hub에 장치를 등록하는 가장 쉬운 방법은 장치 탐색기를 사용하는 것입니다. 이 도구는 또한 장치의 연결 문자열을 얻고, D2C(장치 대 클라우드) 메시지를 모니터링하고, C2D(클라우드 대 장치) 메시지 전송을 테스트하는 좋은 방법입니다.

    IoTPoolRaspiBackgroundApp을 IoT Hub에 연결하려면 StartupTask.cs에서 다음을 편집하세요.

    정적 문자열 iotPoolConnString ="HostName=.azure-devices.net;DeviceId=iotpool;SharedAccessKey=";정적 문자열 deviceName ="iotpool";  

    아두이노 우노

    Arduino Uno R3는 Dallas Controls Library 및 OneWire Library를 사용하여 2개의 DS18B20 온도 센서에 연결됩니다. USB(5v)를 통해 Raspberry Pi로 전원이 공급되고 SDA 및 SLC 핀을 사용하여 I2C를 통해 Raspberry Pi에 온도 판독값 쌍을 보냅니다. 회로도는 Fritzing 다이어그램을 참조하십시오.

    Two-DS18B20-I2C.ino 코드를 사용하여 Arduino를 실행합니다.

    Azure

    모든 Azure 구성 요소는 송신 트래픽과 관련된 비용을 최소화하기 위해 동일한 Azure 지역(미국 서부)에서 생성되었습니다.

    Azure IoT 허브

    이 프로젝트에서는 Azure IoT Hub 무료 버전을 사용했습니다. 각 500바이트에서 하루 8,000개의 메시지로 제한됩니다. IoTPoolRaspiBackgroundApp은 분당 1개 또는 1,440개/일, 각각 158바이트로 D2C 메시지를 보냅니다. 이것은 모든 C2D 메시지를 위한 충분한 여유 공간을 남깁니다.

    먼저 Azure IoT Hub에 디바이스를 등록해야 합니다. 가장 쉬운 방법은 장치 탐색기를 사용하는 것입니다. 등록이 완료되면 Device Explorer를 사용하여 장치 연결 문자열을 얻을 수 있습니다.

    Azure 스트리밍 분석

    ASA(Azure Streaming Analytics) 작업은 다음과 같은 간단한 ASA 쿼리를 사용하여 IoT Hub 입력을 Azure SQL Database 출력에 연결합니다.

    풀 이름, PoolWaterTempC, OutsideAirTempC, IsPoolPowerOn, SampleDateTimeINTO sqlFROM iothub 선택 

    이 쿼리는 Azure SQL Database의 Pools라는 테이블에 각 D2C(Device to Cloud) JSON 메시지(분당 1개)를 씁니다.

    이 쿼리에 대한 향후 개선 사항에는 경고 목적을 위한 일부 집계 기능이 포함될 수 있습니다(예:Average PoolWaterTempC> 35는 풀이 너무 뜨거워지고 있음을 나타냄).

    Azure SQL 데이터베이스

    비용을 최소화하고 데이터베이스의 성능 요구 사항을 최소화하기 위해 데이터베이스는 S0 표준(10 DTU)입니다.

    모든 D2C 메시지를 저장하기 위해 단일 테이블이 있는 단일 데이터베이스가 생성되었습니다.

    스키마:

    CREATE TABLE [dbo].[풀]([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] 기본 키 클러스터형([Id] ASC)), 

    Azure API 앱

    API는 ASP.NET Web API를 사용하여 구축된 RESTful API입니다.

    API 클라이언트는 HTTP 헤더에 지정된 API 키를 사용하여 인증해야 합니다.

    api-key :{귀하의 API 키} 

    API 키는 IoTPoolAPI\Controllers\PoolControllers.cs에 정의되어 있습니다. . 모바일 앱과 웹 앱은 이 API 키를 사용하여 API와 통신해야 합니다.

    REST API는 다음 메소드를 지원합니다.

    API에 대한 향후 개선 사항에는 Azure API Management 뒤에 배치하고 Azure Active Directory와 같은 API에 다른 인증 옵션을 추가하는 것이 포함될 수 있습니다.

    Azure 웹 앱

    IoTPoolWebApp에는 API와 상호 작용하는 ASP.NET 웹 양식 응용 프로그램이 포함되어 있습니다.

    웹 앱의 모바일 친화적 버전도 있습니다.

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

    웹앱은 인증을 위해 AAD(Azure Active Directory)와 통합됩니다. 웹 앱을 사용하려면 모든 사용자가 AAD를 사용하여 인증해야 합니다.

    먼저 AAD 테넌트(예:tenant_name.onmicrosoft.com)에 웹앱을 등록해야 합니다. Azure Portal 또는 Visual Studio를 통해 이 작업을 수행할 수 있습니다. 등록되면 Azure Portal에서 클라이언트 ID를 복사합니다.

    그런 다음 web.config에서 를 수정하여 웹 앱에서 AAD 도메인을 변경합니다.

     

    모바일 앱

    모바일 앱은 Xamarin Forms를 사용하여 작성되었습니다. Windows Phone 및 Windows 10에서만 실행되도록 컴파일했지만 iOS 및 Android에서는 크로스 컴파일해야 합니다.

    Core.cs를 편집하고 다음을 변경합니다.

    문자열 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"); 

    파워 BI

    Power BI(무료 버전)는 IoT Pool 데이터를 보여주는 실시간 대시보드를 만들고 게시하는 데 사용되었습니다.

    이 프로세스에는 Power BI Desktop 다운로드, Azure SQL DB에 연결(DirectQuery 사용), 시각적 개체가 포함된 일부 보고서 생성, PowerBI.com에 .pbix 게시가 포함되었습니다. 그런 다음 보고서를 대시보드에 고정했습니다.

    앞으로는 Power BI Embedded를 사용하여 대시보드를 웹 앱에 직접 포함할 수 있습니다.

    지금은 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
  • Dallas Controls Library의 Miles Burton과 Arduino / I2C / DS18B20 샘플 코드의 Mike Mackes와 이 프로젝트에 대한 전반적인 영감에 특별히 감사드립니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • D2C(Device to Cloud) 메시지용 JSON 메시지 페이로드 형식
  • SQL 데이터베이스 "풀" 테이블 스키마
  • D2C(Device to Cloud) 메시지용 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].[풀] ( [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 풀 Git 허브 리포지토리
    모든 소스 코드https://github.com/khilscher/iotpool

    회로도

    2개의 DS18B20 센서를 연결하는 I2C를 통해 Raspberry Pi를 Arduino로 연결 RaspiArduinoTwoDS18B20.fzz전체 아키텍처 다이어그램

    제조공정

    1. 수영장
    2. Arduino 보드는 산업용 IoT를 대상으로 합니다.
    3. 개발 키트는 Azure RTOS를 지원합니다.
    4. 클라우드의 IoT:Azure와 AWS
    5. GPS 데이터 로거, 공간 분석 및 Azure IoT Hub.
    6. IoT 및 AI로 수중 생물 구하고 수질 오염 방지
    7. IoT를 사용한 심박수 모니터
    8. IoT를 사용하여 로봇 팔 원격 제어
    9. IOT - ESP8266, Arduino 및 초음파 센서를 사용하는 스마트 항아리
    10. 사물 인터넷(IoT) 기반 태양열 추적기