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

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

부품 및 소모품

Arduino UNO × 1개
Raspberry Pi 2 Model B × 1개
Adafruit Ultimate GPS Breakout × 1개
9V 배럴 잭 커넥터 × 1개
9V 배터리 (범용) × 1개
포토레지스터 (조도 센서) × 1개
LED (범용) × 6개 (투명 3, 빨강 1, 노랑 1, 초록 1)
SparkFun 푸시버튼 스위치 12mm × 2개
슬라이드 스위치 × 3개
10kΩ 저항 × 4개
221Ω 저항 × 3개
하프 사이즈 브레드보드 × 1개
풀 사이즈 브레드보드 × 1개
점퍼 와이어 (범용) × 1세트
SanDisk 16GB MicroSD (어댑터 포함) × 2개

앱 및 온라인 서비스

프로젝트 소개

소개

현재 모바일 기술은 매우 발전해 거의 모든 기기에서 GIS 정보 지도를 쉽게 사용할 수 있습니다. 이 프로젝트는 어린이들에게 오픈 소스 하드웨어, 모바일 컴퓨팅, 지리공간 기술, 클라우드 컴퓨팅 기초를 가르치는 교실 활동으로 활용할 수 있습니다.

이 프로젝트는 3가지 파트로 구성됩니다:

1) Arduino GPS 데이터로거

어린이들도 도움을 받아 GPS 위치 정보, 조도 측정, 위치 대상 유형을 기록하는 장치를 만들 수 있습니다. 실외에서 표지판, 나무, 공원 벤치 등 정해진 대상의 위치를 표시하며 주변 세계와 GIS 지도에 표시되는 데이터에 대한 이해도를 높일 수 있습니다. 야간 공공장소의 낮은 조도는 안전 문제이므로, 성인 동반 하에 야간 조도 측정을 수집해 분석할 수 있습니다.

2) GIS 시각화 및 분석

현장에서 수집한 위치를 지도에 시각화합니다. 공간 포인트 보간 분석으로 영역별 조도 수준을 추정하고 지도에 표시합니다.

3) Windows 10 IoT Core와 Azure IoT Hub 활용

GIS 시각화 및 분석 후, Windows 10 IoT Core와 Azure IoT Hub로 데이터를 업로드하고 배포합니다. 이를 통해 수천 개의 데이터 수집기와 현장 장치를 쉽게 확장 관리할 수 있습니다.

Arduino GPS 데이터로거

다음 영상은 Arduino Uno GPS 데이터로거 장치 개요와 빠른 시연을 보여줍니다. 소스 코드와 브레드보드 다이어그램은 아래에서 확인할 수 있습니다.

주요 부품 정보:

포토레지스터

밝기를 측정하는 아날로그 센서로 사용이 매우 쉽습니다. 아날로그 판독값은 0~1023이나 대부분 200 미만이며, 매우 밝은 빛에서만 높습니다. 장치 제작 시 조도 테스트로 예상값을 파악하세요. 예: 밝은 햇빛 약 1000, 주간 야외 그늘 약 900, 야간 가로등 바로 아래 약 170.

마이크로 SD 슬롯

Arduino IDE의 파일 > 예제 > SD > Datalogger에서 좋은 예제를 찾을 수 있습니다.

Adafruit Ultimate GPS

사용하기 쉬운 GPS입니다. 여기서 예제를 따라 Arduino IDE에 GPS 라이브러리를 설치하세요.

위성 고정 상태 LED

수평 정밀도 저하(HDOP)는 GPS에서 오는 X,Y 위치 정확도 측정값입니다. HDOP 값이 낮을수록 위치 정확도가 높습니다. GPS가 고정되면 위도/경도와 함께 HDOP 값을 반환합니다.

이진 기능 유형 슬라이드 스위치

3개 슬라이드 스위치로 10진수 0~7을 이진 표현합니다. 왼쪽 스위치는 2²(4), 가운데는 2¹(2), 오른쪽은 2⁰(1)을 나타냅니다. 스위치 상태에 따른 값의 합으로 0~7 기준 10진수 값을 얻어 수집 대상 유형을 나타냅니다.

예시:

OFF OFF OFF = 0 0 0 = 0 = 조도 센서 판독
OFF OFF ON = 0 0 1 = 1 = 공원 벤치
OFF ON OFF = 0 1 0 = 2 = 바위
OFF ON ON = 0 1 1 = 3 = 쓰레기통
ON OFF OFF = 1 0 0 = 4 = 나무
ON OFF ON = 1 0 1 = 5 = 공중전화
ON ON OFF = 1 1 0 = 6 = 가로등
ON ON ON = 1 1 1 = 7 = 음수대

버튼

버튼을 누를 때마다 CSV 형식의 데이터 한 줄이 마이크로SD 카드의 datalog.csv에 추가됩니다.

데이터 형식:

위도,경도,조도값,기능유형

CSV 데이터 예시:

40.77221,-73.97392,105,5
40.77139,-73.97394,60,1
40.77051,-73.97460,150,6
40.77225,-73.97650,25,3
40.77171,-73.97462,43,2
40.77283,-73.975033,54,1

LCD 디스플레이가 없는 이유?

여러 LED를 1602 LCD와 추가 버튼으로 대체할 수 있었지만 문제가 있었습니다.

GIS 시각화 및 분석

GPS 포인트 시각화

CSV 형식의 GIS 데이터는 지도에서 보기 전까진 유용하지 않습니다. Arduino GPS 데이터로거에서 마이크로SD 카드를 꺼내 Google Earth Professional이 설치된 Windows 10 컴퓨터에 꽂으세요. 텍스트 파일을 복사해 텍스트 에디터로 열고 맨 위에 다음 열 제목을 추가한 후 .CSV로 저장하세요.

위도,경도,조도값,기능유형

Google Earth Professional에서 파일 > 가져오기로 .CSV 파일을 가져옵니다. 옵션을 거쳐 기능 유형별 다른 아이콘 스타일을 만들고 포인트 위치를 표시합니다. Google Earth Professional 버전이어야 합니다. 일반 버전은 .CSV 가져오기 기능이 없습니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

Quantum GIS (QGIS)로 공간 분석

QGIS는 인기 있는 무료 오픈소스 GIS로, 설치 프로그램과 튜토리얼은 여기에서 확인하세요. QGIS로 GPS 위치의 조도 센서 속성에 공간 분석을 수행해 공원 등 공공장소의 야간 조도 충분/부족 영역을 파악할 수 있습니다.

1단계 - 평가 대상 지역의 경계, 산책로 등 관련 정보를 로드합니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

2단계 - GPS 데이터로거의 .CSV 파일에서 포인트를 QGIS 맵에 로드합니다. 포인트 심볼로지와 라벨을 적용해 조도 값을 시각적으로 확인합니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

포인트에 조도 센서 값이 표시되어 밝은 곳(파랑)과 어두운 곳(빨강)을 볼 수 있습니다. 하지만 알려진 위치 사이의 더 넓은 영역 분석에는 포인트 데이터만으로는 부족합니다.

3단계 - 포인트 데이터에 보간을 수행해 알려진 위치 주변과 사이의 값을 추정합니다. 보간은 특정 위치의 데이터가 있을 때 알려진 위치 사이의 값을 추정하는 데 사용됩니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

보간으로 공원 내 조도 값을 더 잘 파악할 수 있습니다. 알려진 위치에 더 많은 조도 판독값을 제공하면 분석이 개선됩니다.

4단계 - 더 많은 조도 판독값을 수집해 QGIS에 로드합니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

5단계 - 더 큰 데이터셋으로 보간을 재실행합니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

두 번째 보간이 첫 번째와 유사한 패턴을 보이지만 추가 포인트 덕분에 더 자세합니다.

Windows 10 IoT Core와 Azure IoT Hub 사용

확장성

Arduino GPS 데이터로거는 센서 정보를 마이크로SD 카드에 기록하는 저렴하고 간단한 장치입니다. 이 장치들을 지리적으로 넓게 배포해 정보를 수집할 수 있습니다. 이들 장치에서 들어오는 정보를 관리하는 시스템을 직접 설계하려면 어려울 수 있습니다.

Windows 10 IoT Core와 Azure IoT Hub를 메시징 시스템 기반으로 사용하면 장치 수를 수천 대로 쉽게 확장할 수 있습니다.

먼저 이 예제들을 시도해보세요

진행하기 전에 Azure IoT Hub for .NET 시작하기 튜토리얼을 따라하는 것을 강력히 권장합니다. Azure 체험 계정 생성, Azure IoT Hub 설정, 메시지 송수신을 위한 핵심 샘플 개발 단계를 안내합니다.

Azure IoT Hub Device Explorer도 다운로드해 Windows 10 IoT Core 장치 관리에 활용하세요. 소스/설치파일은 여기서 다운로드하세요.

Raspberry Pi 2에서 Windows 10 IoT Core

Windows 10 개발 머신에서 Raspberry Pi 2용 Windows 10 IoT Core를 다운로드하고 Windows IoT Image Helper로 마이크로SD 카드에 플래싱하세요.

마이크로SD 카드를 Raspberry Pi 2에 장착하고 이더넷 연결 후 부팅 시 Windows IoT Core Watcher에 나타나는지 확인하세요.

아래 그림과 같이 브레드보드에 버튼을 연결하세요. 하단의 회로도 참조. 소스 코드 링크도 하단에 있습니다.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

데이터 업로드용 유니버설 Windows 애플리케이션

Windows 10 컴퓨터에서 Visual Studio 2015를 시작하고 파일 > 새로 만들기 > 프로젝트. 유니버설 Windows 애플리케이션용 빈 앱 템플릿 선택. 프로젝트 이름을 IoTHubClientSendEvent로 지정. NuGet으로 Microsoft.Azure.Devices.Client와 Newtonsoft.Json 추가. Windows IoT Extensions for the UWP 참조 추가로 Raspberry Pi 2의 GPIO 접근 권한 획득.

준비되면 MainPage.xaml.cs 상단에 다음 using 문 추가:

using Windows.Devices.Gpio;
using Newtonsoft.Json;
using Microsoft.Azure.Devices.Client;
using System.Text;

MainPage 클래스에 다음 변수와 상수 추가. deviceId 값은 Azure IoT Hub Device Explorer에서 구성한 장치 이름이어야 합니다.

private const int buttonPin = 6;
private GpioPin buttonGPIO;
static DeviceClient deviceClient;
static string deviceId = "MakerChallengeDevice2";
static string uploadFile = "data.csv";

MainPage 클래스에 JSON 직렬화용 evData 클래스 추가:

class evData {
  public string id { get; set; }
  public string data { get; set; }
}

MainPage 생성자에 다음 2줄 추가. DEVICE_CONNECTION_STRING 값은 Azure IoT Hub Device Explorer에서 가져오세요.

deviceClient = DeviceClient.CreateFromConnectionString("DEVICE_CONNECTION_STRING", TransportType.Http1);
initGPIO();

GPIO 초기화 함수 추가:

private void initGPIO() {
  var gpio = GpioController.GetDefault();
  buttonGPIO = gpio.OpenPin(buttonPin);
  if (buttonGPIO.IsDriveModeSupported(GpioPinDriveMode.InputPullUp))
    buttonGPIO.SetDriveMode(GpioPinDriveMode.InputPullUp);
  else
    buttonGPIO.SetDriveMode(GpioPinDriveMode.Input);
  buttonGPIO.DebounceTimeout = TimeSpan.FromMilliseconds(50);
  buttonGPIO.ValueChanged += buttonPin_ValueChanged;
}

버튼 클릭 핸들러 함수 추가:

private void buttonPin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) {
  if (e.Edge == GpioPinEdge.FallingEdge) {
    sendMessageToIOTHub();
  }
}

Azure IoT Hub로 메시지 전송하는 sendMessageToIOTHub() 함수 추가:

private static async void sendMessageToIOTHub() {
  string myString;
  var msg = new evData();
  if (File.Exists(uploadFile)) {
    myString = System.IO.File.ReadAllText(uploadFile);
  } else {
    myString = "Just checking in!!";
  }
  msg.id = deviceId;
  msg.data = myString;
  var messageString = JsonConvert.SerializeObject(msg);
  var message = new Message(Encoding.ASCII.GetBytes(messageString));
  await deviceClient.SendEventAsync(message);
}

기본 Debug x86으로 컴파일해 작동 확인. 다음, Release ARM으로 타겟 변경하고 원격 머신 선택.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

네트워크에 Windows 10 IoT Core 장치가 있으면 Visual Studio 2015가 감지해 배포 타겟으로 설정 가능.

빠른 팁:

Windows IoT Core에 배포하기 전 프로젝트 우클릭 > 속성. 응용 프로그램 패널에서 패키지 매니페스트 버튼 클릭. 패키징 탭에서 패키지 이름을 지정(예: IoTHubClientSendEvent). 안 하면 Windows 10 IoT Core 웹 인터페이스에서 앱 식별이 어렵습니다.

빌드 > 솔루션 배포 선택. 배포 완료 후 Windows IoT Core Watcher에서 장치 찾기. 우클릭 > 웹브라우저 여기. 로컬 관리자 계정으로 로그인 후 왼쪽 Apps 링크 클릭. 설치된 앱 드롭다운에서 방금 배포한 앱 선택 후 시작.

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

이제 IoT Hub 모니터링 애플리케이션을 개발해봅시다.

Azure IoT Hub에서 메시지 수신용 유니버설 Windows 애플리케이션

Visual Studio 2015에서 새 C# Windows 콘솔 애플리케이션 생성. 프로젝트 이름 IoTEventHubReceiver. NuGet으로 WindowsAzure.ServiceBus와 Newtonsoft.Json 추가.

Program.cs 상단에 using 문 추가:

using System.IO;
using System.Threading;
using Newtonsoft.Json;
using Microsoft.ServiceBus.Messaging;

IoTEventHubReceiver 클래스에 JSON 역직렬화용 클래스 추가:

class evData {
  public string id { get; set; }
  public string data { get; set; }
}

Azure IoT Hub에서 메시지 수신용 변수 추가. IOT_HUB_CONNECTION_STRING 값은 Azure IoT Hub Device Manager에서 가져오세요.

static string connectionString = "IOT_HUB_CONNECTION_STRING";
static string iotHubD2cEndpoint = "messages/events";
static EventHubClient eventHubClient;

main() 함수에 다음 2줄 추가해 EventHubClient 생성 및 메시지 수신 시작:

eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, iotHubD2cEndpoint);
SynchMessages();

마지막으로 연속 루프 설정용 SynchMessages() 함수와 메시지 수신 및 디스크 저장용 ReceiveMessages 추가:

private static async void SynchMessages() {
  while (true) {
    var d2cPartitions = eventHubClient.GetRuntimeInformation().PartitionIds;
    foreach (string partition in d2cPartitions) {
      ReceiveMessagesFromDeviceAsync(partition);
    }
  }
}
private async static Task ReceiveMessagesFromDeviceAsync(string partition) {
  var eventHubReceiver = eventHubClient.GetDefaultConsumerGroup().CreateReceiver(partition, DateTime.UtcNow);
  while (true) {
    EventData eventData = await eventHubReceiver.ReceiveAsync();
    if (eventData == null) continue;
    string data = Encoding.UTF8.GetString(eventData.GetBytes());
    evData d = JsonConvert.DeserializeObject<evData>(data);
    StreamWriter writer = new StreamWriter("c:\\gps\\download\\" + d.id + "." + DateTime.Now.Year + "." + DateTime.Now.Month + "." + DateTime.Now.Day + "." + DateTime.Now.Hour + "." + DateTime.Now.Minute + "." + DateTime.Now.Second + ".csv");
    writer.Write(d.data);
    writer.Close();
    Console.WriteLine(string.Format("Message received from {0}.\n{1}", d.id, d.data));
  }
}

개발 워크스테이션에 수신 메시지 저장용 "c:\gps\download" 폴더 생성.

Azure IoT Hub 메시지 송수신 애플리케이션 실행

IoTEventHubReceiver 프로그램을 개발 워크스테이션에서 시작하고 콘솔 화면 대기. 다음, Windows 10 IoT Core가 실행 중인 Raspberry Pi 2의 GPIO에 연결된 버튼과 IoTHubClientSendEvent 프로그램을 누르세요. 버튼을 누르면 "Just checking in!" 텍스트가 Azure IoT 이벤트 허브로 전송됩니다. 개발 머신 콘솔에 다음 메시지 표시:

Message received from MakerChallengeDevice2. Just checking in!

텍스트 파일 내용을 메시지로 전송하는 것도 가능합니다(256KB 미만 - 현재 Azure IoT Hub 최대 메시지 크기). sendMessageToIOTHub() 함수에서 파일 읽기 및 직렬화, ReceiveMessagesFromDeviceAsync() 함수에서 역직렬화 및 파일 저장 방식을 확인하세요.

현재 Windows 10 IoT Core는 코드로 절대 경로 파일 접근을 허용하지 않지만, 실행 파일과 같은 디렉토리의 파일은 참조 가능합니다. 모범 사례는 아니지만 작동합니다. 앱 폴더에 텍스트 파일 배치: Windows 10 IoT Core Watcher에서 장치 우클릭 > 네트워크 공유 열기. 로컬 관리자 계정으로 인증 후 탐색:

c$\Data\Users\DefaultAccount\AppxLayouts

배포된 애플리케이션 이름의 폴더를 찾아 텍스트 파일을 넣으세요. 이 예제에서는 파일명이 data.csv여야 하고 256KB 미만이어야 합니다. 위도, 경도, 조도 판독값, 기능 유형을 나열한 CSV 파일이 좋은 예시입니다. Raspberry Pi 2 GPIO에 연결된 버튼을 누르면 콘솔에 다음 표시:

Message received from MakerChallengeDevice2. LAT,LNG,LT,TYP
45.45926,-110.57361,45,6
45.78546,-110.02487,156,3

파일 업로드 확장 - Azure IoT Hub for .NET 시작하기 예제를 따라하면 다음 단계 섹션에서 Azure Blob Storage에 파일 업로드 예제를 찾을 수 있습니다.

요약

이 프로젝트는 간단한 Arduino GPS 데이터로거로 정보를 기록하고, 수집된 데이터를 분석하며, 클라우드로 수집 정보를 관리하는 방법을 보여줍니다. 다음과 같은 확장 포인트가 있습니다:

코드

Arduino GPS 데이터로거

Arduino GPS 데이터로거 스케치 및 배선도
https://github.com/ShawnCruise/ArduinoGPSDataLogger

Azure IoT Hub 예제

Windows 10 IoT Core에 배포해 Azure IoT Hub로 메시지 전송하는 유니버설 Windows 애플리케이션
https://github.com/ShawnCruise/AzureIotHubExample

Azure SDK

Azure IoT Device Explorer 다운로드
https://github.com/Azure/azure-iot-sdks/blob/master/tools/DeviceExplorer/doc/how_to_use_device_explorer.md

Windows 10 IoT Core 샘플

Windows 10 IoT Core에 배포할 샘플들
https://github.com/ms-iot/samples

회로도

Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축
Azure IoT Hub에서 공간 분석 기능을 갖춘 GPS 데이터로거 구축

제조공정

  1. 아반트 실리카, 임베디드 월드 2019에서 첨단 AI·IoT·연결 솔루션 전시
  2. Windows 10 IoT Core에서 SHT15로 정확한 온도 & 습도 모니터링
  3. 아두이노 DHT11 이더넷 실드 온습도 데이터 로거
  4. 스마트 IoT 자 제작: ESP8266, 아두이노 & 초음파 센서로 실시간 모니터링
  5. 아두이노로 만드는 빛과 소리의 생일 축하 DIY 프로젝트
  6. u-blox LEA-6H GPS 모듈: 아두이노 & 파이썬 연동 가이드
  7. 아두이노 IoT 클라우드로 알렉사와 TV 제어하기: 단계별 가이드
  8. DIY 기타 스피드 픽 & 스톰프 페달 - 3D 프린팅 모터식 픽 직접 만들기
  9. 애저 IoT 기반 스마트 수영장 제어 시스템: 온도 모니터링 및 원격 제어
  10. IoT 시대의 PCB 설계 마스터하기: 종합 가이드