Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Registrador GPS con Análisis Espacial en Azure IoT Hub

Componentes y Suministros

ComponenteCantidadNotas
Arduino UNO1Registrador GPS
Raspberry Pi 2 Model B1Gateway IoT
Adafruit Ultimate GPS Breakout1Módulo GPS de alta sensibilidad
Conector 9V a Jack Barril1Alimentación Arduino
Batería 9V (genérica)1Portátil
Fotorresistencia1Sensor de luz ambiental
LED (genérico)63 Transparentes, 1 Rojo, 1 Amarillo, 1 Verde (estado GPS)
Pulsador SparkFun 12mm2Registro de waypoint y control
Interruptor Deslizante3Codificación binaria tipo de característica (0-7)
Resistencia 10k Ω4Pull-up/down
Resistencia 221 Ω3Limitación corriente LEDs
Protoboard Media1Montaje GPS + sensores
Protoboard Completa1Montaje principal
Cables Dupont1Conexiones
MicroSD SanDisk 16GB con adaptador2Almacenamiento datos

Aplicaciones y Servicios Online

Sobre el Proyecto

Introducción

La tecnología móvil actual permite mapas GIS en casi cualquier dispositivo. Este proyecto puede ser una actividad educativa para enseñar a niños hardware abierto, computación móvil, tecnologías geoespaciales y computación en la nube.

Consta de 3 partes:

  1. Registrador GPS Arduino: Niños (con ayuda) construyen un dispositivo que registra posición GPS, nivel de luz y tipo de elemento. Salen al exterior a marcar ubicaciones (señales, árboles, bancos...), comprendiendo mejor los datos en mapas GIS. Acompañados de un adulto, pueden medir luz nocturna en áreas públicas para análisis de seguridad.
  2. Visualización y Análisis GIS: Visualizar puntos en mapa, interpolar espacialmente los niveles de luz y mostrar resultados.
  3. Windows 10 IoT Core y Azure IoT Hub: Subir y distribuir datos, escalando a miles de dispositivos.

Registrador GPS Arduino

El siguiente video muestra el dispositivo y una demostración rápida. Código y diagrama de protoboard abajo.

Fotorresistencia

Sensor analógico de brillo (0-1023). Lecturas típicas: sol directo ~1000, sombra diurna ~900, bajo farola nocturna ~170. Pruebe lecturas al construir para calibrar.

Ranura Micro SD

Ejemplo en Arduino IDE: Archivo > Ejemplos > SD > Datalogger.

Adafruit Ultimate GPS

GPS fácil de usar. Instalar librerías desde ejemplos de Adafruit.

LEDs de Estado de Fijación Satelital

HDOP (Dilución Horizontal de Precisión) mide precisión X,Y. Menor HDOP = mayor precisión.

Interruptores Deslizantes para Tipo de Característica (Binario)

Tres interruptores codifican base 10 (0-7): izquierda = 2² (4), centro = 2¹ (2), derecha = 2⁰ (1). Sumando valores según estado se obtiene el código 0-7.

OFF OFF OFF = 0 = Lectura sensor luz
OFF OFF ON  = 1 = Banco parque
OFF ON OFF  = 2 = Roca
OFF ON ON   = 3 = Papelera
ON OFF OFF  = 4 = Árbol
ON OFF ON   = 5 = Teléfono público
ON ON OFF   = 6 = Farola
ON ON ON    = 7 = Fuente agua

Botón

Cada pulsación añade una línea CSV a datalog.csv en la microSD:

LATITUD,LONGITUD,VALOR_LUZ,TIPO_CARACTERISTICA

Ejemplo 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

¿Sin Pantalla LCD?

Los LEDs reemplazan a una pantalla 1602 porque:

Visualización y Análisis GIS

Visualizar Puntos GPS

Extraer microSD, insertar en PC con Windows 10 y Google Earth Pro. Copiar archivo, abrir en editor, añadir cabecera LATITUDE,LONGITUDE,LIGHT_VALUE,FEATURE_TYPE y guardar como .CSV. Importar en Google Earth Pro (versión Professional requerida) para crear estilos de iconos por tipo.

Registrador GPS con Análisis Espacial en Azure IoT Hub

Análisis Espacial con Quantum GIS (QGIS)

QGIS es GIS libre y open source. Permite interpolar datos de luz para identificar áreas con iluminación suficiente/insuficiente en parques nocturnos.

  1. Cargar límites, senderos y info relevante del área.
  2. Registrador GPS con Análisis Espacial en Azure IoT Hub
  3. Cargar puntos del CSV del registrador. Aplicar simbología y etiquetas para ver valores de luz.
  4. Registrador GPS con Análisis Espacial en Azure IoT Hub
  5. Interpolar datos puntuales para estimar valores entre ubicaciones conocidas.
  6. Registrador GPS con Análisis Espacial en Azure IoT Hub
  7. Recoger más lecturas de luz y cargar en QGIS.
  8. Registrador GPS con Análisis Espacial en Azure IoT Hub
  9. Re-ejecutar interpolación con dataset mayor.
  10. Registrador GPS con Análisis Espacial en Azure IoT Hub

La segunda interpolación muestra patrón similar pero con más detalle gracias a puntos adicionales.

Usando Windows 10 IoT Core y Azure IoT Hub

Escalado

El registrador Arduino es barato y simple, guarda datos en microSD. Dispositivos geográficamente distribuidos generan gestión compleja. Windows 10 IoT Core y Azure IoT Hub como base de mensajería permiten escalar a miles de dispositivos fácilmente.

Primero Pruebe Estos Ejemplos

Siga el tutorial Getting Started with Azure IoT Hub for .NET: crear cuenta Azure trial, configurar IoT Hub, desarrollar ejemplos de envío/recepción. Descargue Azure IoT Hub Device Explorer para administración de dispositivos.

Windows 10 IoT Core en Raspberry Pi 2

Desde PC Windows 10, descargar Windows 10 IoT Core para RPi2, flashear microSD con Windows IoT Image Helper. Montar tarjeta, conectar Ethernet, verificar en Windows IoT Core Watcher al arrancar.

Conectar botón en protoboard (ver esquemático abajo). Código fuente al final.

Registrador GPS con Análisis Espacial en Azure IoT Hub

Aplicación Universal Windows para Subida de Datos

En Visual Studio 2015: Nuevo proyecto > Blank App (Universal Windows). Nombre: IoTHubClientSendEvent. NuGet: Microsoft.Azure.Devices.Client y Newtonsoft.Json. Referencia: Windows IoT Extensions for UWP (acceso GPIO).

Añadir using en Mainpage.xaml.cs:

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

Variables y constantes en clase MainPage:

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

Clase evData para serialización JSON:

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

En constructor MainPage:

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

Función 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;
}

Manejador de botón:

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

Envío a Azure IoT Hub:

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

Compilar Debug x86, luego cambiar a Release ARM y Remote Machine. Si RPi2 está en red, Visual Studio lo detecta para despliegue.

Consejo: En Propiedades del proyecto > Manifest > Packaging, cambie Package Name a nombre reconocible (ej. IoTHubClientSendEvent).

Build > Deploy Solution. En IoT Core Watcher, clic derecho > Webbrowser Here. Login Admin > Apps > seleccionar app desplegada > Start.

Registrador GPS con Análisis Espacial en Azure IoT Hub

Aplicación Universal Windows para Recibir Mensajes de Azure IoT Hub

Nuevo proyecto C# Windows Console: IoTEventHubReceiver. NuGet: WindowsAzure.ServiceBus y Newtonsoft.Json.

using en Program.cs:

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

Clase evData para deserialización:

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

Variables para recibir mensajes:

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

En Main():

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

Funciones SynchMessages() y ReceiveMessagesFromDeviceAsync():

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("Mensaje recibido de {0}.\n{1}", d.id, d.data));
  }
}

Crear carpeta c:\gps\download en PC desarrollo.

Ejecutar Aplicaciones de Envío y Recepción

Iniciar IoTEventHubReceiver en PC y esperar consola. Pulsar botón en RPi2 con Windows 10 IoT Core ejecutando IoTHubClientSendEvent. Se envía mensaje "Just checking in!" a Azure IoT Event Hub. Consola muestra:

Mensaje recibido de MakerChallengeDevice2. Just checking in!

También es posible enviar contenido de archivo de texto (< 256 KB, límite actual mensaje IoT Hub). Ver funciones sendMessageToIOTHub() y ReceiveMessagesFromDeviceAsync().

Windows 10 IoT Core no permite acceso a rutas absolutas, pero sí a archivo en mismo directorio que ejecutable. Para colocar archivo: en IoT Core Watcher, clic derecho > Open Network Share > Admin > navegar a c$\Data\Users\DefaultAccount\AppxLayouts > buscar carpeta app desplegada > colocar data.csv (< 256 KB). Ejemplo CSV con Latitud, Longitud, luz, tipo. Pulsar botón y consola muestra:

Mensaje recibido de MakerChallengeDevice2. LAT,LNG,LT,TYP
45.45926,-110.57361,45,6
45.78546,-110.02487,156,3

Para subida de archivos a Azure Blob Storage, ver ejemplos Get started with Azure IoT Hub for .NET (sección Next Steps).

Resumen

Este proyecto demuestra: crear registrador GPS Arduino simple, analizar datos recogidos, usar nube para gestión. Puntos de extensión:

Código

Registrador GPS Arduino

Sketch y diagrama de cableado: GitHub

Ejemplo Azure IoT Hub

Aplicación Universal Windows para IoT Core que envía mensajes a Azure IoT Hub: GitHub

Azure SDK

Azure IoT Device Explorer: GitHub

Ejemplos Windows 10 IoT Core

Muestras para desplegar en IoT Core: GitHub

Esquemáticos

Registrador GPS con Análisis Espacial en Azure IoT Hub Registrador GPS con Análisis Espacial en Azure IoT Hub

Proceso de manufactura

  1. Monitorización Precisa de Temperatura y Humedad con SHT15 en Windows 10 IoT Core
  2. Registrador de Temperatura y Humedad con Arduino, DHT11 y Ethernet Shield
  3. Construye un tarro inteligente IoT con ESP8266, Arduino y sensor ultrasónico: Monitorización en tiempo real
  4. Celebra con Luz y Sonido: Proyecto Arduino de Cumpleaños DIY
  5. Módulo GPS u-blox LEA‑6H 02: Guía de integración con Arduino y Python
  6. Controla tu TV con Alexa mediante Arduino IoT Cloud: Guía Paso a Paso
  7. Púa de Velocidad y Pedal Stomp para Guitarra DIY – Construye tu Propia Púa Motorizada Impresa en 3D
  8. Estación Meteorológica WiFi con ESP8266 y Sensor DHT22 – Envío a ThingSpeak
  9. Sistema de Control de Piscina con Azure IoT: Sensores Inteligentes y Monitorización Remota
  10. Dominando el Diseño de PCB para Internet de las Cosas: Guía Completa
  11. Avnet Silica muestra soluciones de IA, IoT y conectividad de vanguardia en Embedded World 2019