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

GPS-трекер с пространственным анализом на Azure IoT Hub

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

Arduino UNO × 1 шт.
Raspberry Pi 2 Model B × 1 шт.
Adafruit Ultimate GPS Breakout × 1 шт.
Разъём 9V на «баरल-джек» × 1 шт.
Крона 9V × 1 шт.
Фоторезистор × 1 шт.
Светодиоды (3 прозрачных, 1 красный, 1 жёлтый, 1 зелёный) × 6 шт.
Таковая кнопка 12 мм (SparkFun) × 2 шт.
Тумблер (slide switch) × 3 шт.
Резистор 10 кОм × 4 шт.
Резистор 221 Ом × 3 шт.
Половинная беспаяльная макетная плата × 1 шт.
Полноразмерная беспаяльная макетная плата × 1 шт.
Перемычки × 1 комплект
MicroSD 16 ГБ с адаптером (SanDisk) × 2 шт.

Программное обеспечение и онлайн-сервисы

О проекте

Введение

Современные мобильные технологии делают ГИС-карты доступными на любом устройстве. Этот проект можно использовать как учебное занятие для детей: основы открытого железа, мобильных вычислений, геопространственных технологий и облачных вычислений.

Проект состоит из трёх частей:

  1. Arduino GPS-трекер — запись GPS-координат, освещённости и типа объекта. Дети могут выезжать на улицу и отмечать местоположение заранее заданных объектов (знаки, деревья, лавочки). Это даёт понимание того, как данные попадают на ГИС-карты. В сопровождении взрослых можно замерять освещённость ночью для анализа безопасности.
  2. ГИС-визуализация и анализ — отображение точек на карте, интерполяция освещённости для выявления недостаточно освещённых зон.
  3. Windows 10 IoT Core и Azure IoT Hub — загрузка и распределение данных, масштабирование до тысяч устройств.

Arduino GPS-трекер

Видеообзор устройства и демонстрация работы. Исходный код и схема на макетной плате ниже.

Фоторезистор

Аналоговый датчик яркости (0–1023). Примеры: яркое солнце ~1000, тень днём ~900, под фонарём ночью ~170.

Слот MicroSD

Пример в Arduino IDE: File → Examples → SD → Datalogger.

Adafruit Ultimate GPS

Простой в использовании GPS. Библиотеки устанавливаются по инструкции Adafruit.

Индикация качества фиксации спутников (HDOP)

HDOP (Horizontal Dilution of Precision) — мера точности по горизонтали. Чем ниже, тем точнее.

Три тумблера для кодирования типа объекта (0–7)

Левый = 2² (4), центральный = 2¹ (2), правый = 2⁰ (1). Сумма даёт код 0–7.

OFF OFF OFF = 0 = Замер освещённости
OFF OFF ON  = 1 = Лавочка
OFF ON OFF  = 2 = Камень
OFF ON ON   = 3 = Мусорка
ON OFF OFF  = 4 = Дерево
ON OFF ON   = 5 = Телефонная будка
ON ON OFF   = 6 = Фонарный столб
ON ON ON    = 7 = Водопроводная колонка

Кнопка

Каждое нажатие дописывает в datalog.csv на MicroSD строку CSV:

ШИРОТА,ДОЛГОТА,ЗНАЧЕНИЕ_СВЕТА,ТИП_ОБЪЕКТА

Пример:

40.77221,-73.97392,105,5
40.77139,-73.97394,60,1
40.77051,-73.97460,150,6

Почему нет LCD-дисплея?

ГИС-визуализация и анализ

Визуализация точек в Google Earth Pro

Извлеките MicroSD, вставьте в ПК с Google Earth Pro. Откройте CSV в текстовом редакторе, добавьте заголовок:

LATITUDE,LONGITUDE,LIGHT_VALUE,FEATURE_TYPE

File → Import → выберите CSV → настройте стили иконок для типов объектов. Обычный Google Earth не умеет импортировать CSV.

GPS-трекер с пространственным анализом на Azure IoT Hub

Пространственный анализ в QGIS

QGIS — бесплатный открытый ГИС. Установка и туториалы на qgis.org.

  1. Загрузите границы территории, тропы и прочие базовые слои.
  2. Загрузите CSV-точки, настройте символику по значению освещённости (синий — светло, красный — темно).
  3. Выполните интерполяцию точечных данных для оценки освещённости между замерными точками.
  4. Соберите дополнительные замеры и загрузите в QGIS.
  5. Повторите интерполяцию на расширенном наборе — карта станет детальнее.
GPS-трекер с пространственным анализом на Azure IoT Hub
GPS-трекер с пространственным анализом на Azure IoT Hub
GPS-трекер с пространственным анализом на Azure IoT Hub
GPS-трекер с пространственным анализом на Azure IoT Hub
GPS-трекер с пространственным анализом на Azure IoT Hub

Windows 10 IoT Core и Azure IoT Hub

Масштабирование

Arduino-трекер прост и дешев. Устройств может быть тысячи. Управление данными от них — задача для Azure IoT Hub на базе Windows 10 IoT Core.

Сначала пройдите базовые примеры

Рекомендуется пройти «Getting Started with Azure IoT Hub for .NET» — создание учётной записи, настройка хаба, отправка/приём сообщений. Скачайте Azure IoT Hub Device Explorer для администрирования устройств.

Windows 10 IoT Core на Raspberry Pi 2

На ПК с Windows 10 скачайте образ IoT Core для RPi2, прошейте MicroSD через Windows IoT Image Helper. Вставьте карту в RPi2, подключите Ethernet, дождитесь появления в Windows IoT Core Watcher.

Подключите кнопку к GPIO (схема в конце). Исходный код ниже.

GPS-трекер с пространственным анализом на Azure IoT Hub

UWP-приложение для отправки данных в IoT Hub

Visual Studio 2015 → New Project → Blank App (Universal Windows). Название: IoTHubClientSendEvent. NuGet: Microsoft.Azure.Devices.Client, Newtonsoft.Json. Добавить ссылку на Windows IoT Extensions for UWP (доступ к GPIO).

В MainPage.xaml.cs:

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

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

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

// В конструкторе MainPage:
deviceClient = DeviceClient.CreateFromConnectionString("DEVICE_CONNECTION_STRING", TransportType.Http1);
initGPIO();

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

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 → Remote Machine. Выберите RPi2 в списке устройств.

Совет: в свойствах проекта → Package Manifest → Packaging → измените Package Name на понятное (например, IoTHubClientSendEvent), иначе в веб-интерфейсе IoT Core сложно найти приложение.

Build → Deploy Solution. В IoT Core Watcher → правый клик → Web Browser Here → логин Administrator → Apps → выберите приложение → Start.

GPS-трекер с пространственным анализом на Azure IoT Hub

UWP-приложение для приёма сообщений из IoT Hub

Visual Studio 2015 → New Project → C# Console App. Название: IoTEventHubReceiver. NuGet: WindowsAzure.ServiceBus, Newtonsoft.Json.

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

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

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

static void Main() {
    eventHubClient = EventHubClient.CreateFromConnectionString(connectionString, iotHubD2cEndpoint);
    SynchMessages();
}

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(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 для сохраняемых файлов.

Запуск и тест

Запустите IoTEventHubReceiver на рабочей станции. Нажмите кнопку на RPi2 — отправится сообщение «Just checking in!». Консоль покажет:

Message received from MakerChallengeDevice2. Just checking in!

Максимальный размер сообщения — 256 КБ. Файл data.csv кладётся в папку приложения на RPi2 через сетевую шару (Windows IoT Core Watcher → Open Network Share → c$\Data\Users\DefaultAccount\AppxLayouts\). При нажатии кнопки в консоли появится содержимое CSV.

Резюме

Проект демонстрирует: создание простого GPS-трекера, анализ собранных данных, облачное управление информацией. Точки расширения:

Код

Схемы

GPS-трекер с пространственным анализом на Azure IoT Hub
GPSDataLogger.fzz
GPS-трекер с пространственным анализом на Azure IoT Hub
RPi2 IOT Core.fzz

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

  1. Avnet Silica демонстрирует передовую ИИ, IoT и решения связности на Embedded World 2019
  2. Точный мониторинг температуры и влажности с SHT15 на Windows 10 IoT Core
  3. Логгер температуры и влажности на Arduino с DHT11 и Ethernet Shield
  4. Умная банка на ESP8266 + Arduino: мониторинг наполненности в реальном времени
  5. Празднуем со светом и звуком: DIY-проект «С днём рождения» на Arduino
  6. Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
  7. Управление телевизором через Alexa и Arduino IoT Cloud — пошаговое руководство
  8. DIY Guitar Speed Pick & Stomp Pedal — моторизированный медиатор на Arduino
  9. Система управления бассейном на Azure IoT: умные датчики и удаленный мониторинг
  10. Освоение проектирования печатных плат для Интернета вещей: Полное руководство