Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Componentes e Materiais

ComponenteQuantidade
Módulo de Prototipagem Helium Atom1
Arduino Zero1
Breakout GPS Ultimate Adafruit1
Protoboard (genérico)1

Aplicativos e Serviços Online

Sobre o Projeto

O Helium existe para ajudar desenvolvedores a criar dispositivos conectados, seguros e de baixo consumo. Neste projeto, mostraremos como usar o módulo Helium Atom Prototyping com um Arduino Zero e o Adafruit Ultimate GPS Breakout para enviar dados perfeitamente ao Azure IoT Hub e, em seguida, a um relatório do Power BI para visualização.

Saiba mais sobre os produtos sem fio de longo alcance, seguros e de baixo consumo da Helium e compre todo o hardware necessário em helium.com/store.

Hardware

Primeiro, conecte o módulo Helium Atom Prototyping ao adaptador Helium Atom Arduino e, em seguida, ao seu Arduino. Usamos um Arduino Zero neste guia, mas você pode usar um Uno, Due, M0 ou qualquer outro Arduino de sua preferência.

Após conectar o Atom ao Arduino, o conjunto deve parecer com isto:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Em seguida, conecte o Adafruit Ultimate GPS Breakout ao "sanduíche" Arduino. Usaremos uma protoboard para facilitar, mas você também pode ligar o breakout diretamente ao Arduino. A fiação deve ser:

O resultado final deve ser semelhante a isto:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Agora, precisamos conectar e alimentar o Helium Element. Se você tiver um Element Cellular, basta ligá-lo e aguardar a luz ficar na cor azul-esverdeada (teal). Se tiver um Element Ethernet, ou preferir usar conexão Ethernet no Cellular, conecte a porta Ethernet do Element a uma porta com DHCP habilitado (como a parte traseira de um modem a cabo ou roteador sem fio). Ao ligar o Element, a luz frontal ficará verde, indicando que está pronto.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Com o hardware Arduino/Atom configurado e o Element conectado, vamos configurar tudo no Helium Dashboard.

Helium Dashboard & Canais

Primeiro, adicione seu Atom e Element à sua conta no dashboard. Se não tiver conta, mas possuir o equipamento, envie e-mail para support@helium.com; caso contrário, faça login com as credenciais recebidas na compra.

Após logar, ative o Element: clique em Elements à esquerda, depois Add New no canto superior direito. Insira os últimos 4 dígitos do endereço MAC e o HVV da etiqueta traseira do Element, dê um nome e, opcionalmente, adicione tags. Clique em Activate Element.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Repita o processo para o Atom: clique em Atoms à esquerda, Add New, forneça o MAC e HVV da etiqueta do Atom, adicione tags se quiser e clique em Activate Atom.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Agora, crie um Azure IoT Hub para atuar como ponto de ingestão no Azure para todos os seus dispositivos Helium Atom. Assumimos que você já tenha uma conta Azure; caso contrário, crie uma.

No portal Azure, clique no + no canto superior esquerdo, depois Internet of Things e IoT Hub:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Faça as escolhas de configuração do IoT Hub e clique em Create. Recomendamos selecionar Pin to Dashboard na parte inferior para facilitar o acesso posterior:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Após a implantação (pode levar alguns minutos), clique no hub no seu dashboard. Para configurar o Canal Helium, precisamos de uma informação: no IoT Hub, escolha Shared Access Policies à esquerda, selecione RegistryReadWrite e clique no ícone de copiar ao lado de Connection string—primary key à direita. Isso copia a string de conexão para a área de transferência, que usaremos no Helium Dashboard. Não compartilhe esta string com ninguém em quem não confie. (Estamos usando um hub temporário neste exemplo.)

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

De volta ao Helium Dashboard, crie um Canal que mapeie para o Azure IoT Hub recém-criado. Clique em Channels à esquerda e em Azure IoT Hub abaixo de Create New Channel. Cole a Connection String copiada do Azure para criar o Canal no Helium:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Dê um nome ao Canal e clique em Create. Lembre-se do nome, pois você precisará dele no código Arduino para enviar dados a este Canal.

Sketch Arduino

Com o Azure IoT Hub configurado e o Canal Helium criado, precisamos de um sketch Arduino que use as bibliotecas Helium Arduino e Adafruit GPS para enviar localizações GPS ao Helium e, então, ao nosso canal Azure.

Primeiro, instale as bibliotecas Helium Arduino e Adafruit GPS na Arduino IDE. A maneira mais fácil: menu Sketch → Include Library → Manage Libraries, busque por Helium e Adafruit GPS e clique em Install.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

O sketch abaixo inicializa o Atom, cria um Canal que corresponde ao Azure IoT Hub Canal criado anteriormente, coleta dados GPS do Adafruit GPS, formata em JSON e envia pela rede Helium.

Há mais detalhes e guias para a biblioteca Helium Atom Arduino aqui.

/* 
 * Copyright 2017, Helium Systems, Inc. 
 * All Rights Reserved. See LICENCE.txt for license information 
 */
#include "Arduino.h"
#include "avr/dtostrf.h"
#include "Helium.h"
#include 
#include 
#include "wiring_private.h" // pinPeripheral() function

#define atom_serial Serial1 // para GPS
#define PIN_SERIAL2_RX (34ul) // Pin description number for PIO_SERCOM on D12
#define PIN_SERIAL2_TX (36ul) // Pin description number for PIO_SERCOM on D10
#define PAD_SERIAL2_TX (UART_TX_PAD_2) // SERCOM pad 2
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // SERCOM pad 3

Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);

void SERCOM1_Handler() {
  Serial2.IrqHandler();
}

Helium helium(&atom_serial);
Channel channel(&helium);

// GPS stuff
#define gps_serial Serial2
Adafruit_GPS GPS(&gps_serial);

void setup() {
  pinPeripheral(10, PIO_SERCOM);
  pinPeripheral(12, PIO_SERCOM);
  Serial.begin(115200);
  Serial.println("Starting");

  // Begin communication with the Helium Atom
  // The baud rate differs per supported board and is configured in Board.h
  helium.begin(helium_baud_b115200);

  // Connect the Atom to the Helium Network
  Serial.print("Connecting - ");
  int status = helium.connect();
  while (status != helium_status_OK) {
    status = helium.connect();
  }
  Serial.println("Succeeded");

  // Begin communicating with the channel. This should only need to be done once.
  // NOTE: Please ensure you've created a matching channel in the Helium Dashboard
  int8_t result;
  Serial.print("Creating Channel - ");
  status = channel.begin("Hackster Guide", &result);
  if (helium_status_OK == status && result == 0) {
    Serial.println("Succeeded");
  } else {
    Serial.println("Failed");
  }
  delay(1000);

  // Init GPS
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
  GPS.sendCommand(PGCMD_NOANTENNA);
  delay(2000);
}

uint32_t timer = millis();

void loop() {
  char c = GPS.read();
  if (GPS.newNMEAreceived()) {
    if (!GPS.parse(GPS.lastNMEA())) return;
  }

  if (timer > millis()) timer = millis();

  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer

    if (GPS.fix) {
      char lat[10];
      char lon[10];
      char data[100];
      dtostrf(GPS.latitudeDegrees, 4, 4, lat);
      dtostrf(GPS.longitudeDegrees, 4, 4, lon);

      // Format a JSON object of lat/lon to send to Azure
      sprintf(data, "{\"lat\": \"%s\", \"lon\": \"%s\"}", lat, lon);

      // Send the location data to the configured channel
      int8_t result; // the response from the Helium Router
      Serial.print("Sending - ");
      int status = channel.send(data, strlen(data), &result);
      // status is the response from the Atom serial connection
      if (helium_status_OK == status && result == 0) {
        Serial.print("Successfully sent ");
        Serial.println(data);
      } else {
        Serial.println("Failed");
      }
    } else {
      Serial.println("No GPS fix!");
    }
  }
}

Com as bibliotecas instaladas, crie um novo sketch (File → New na Arduino IDE), cole o código acima. Conecte seu sanduíche Arduino/Atom via USB e clique no botão Upload (seta para a direita).

Após alguns segundos, as luzes do Atom começarão a piscar vermelho e azul, e depois se estabilizarão em um padrão de piscar vermelho constante. Isso significa que o Atom está conectado à rede Helium. A luz FIX do GPS também piscará em vermelho lento. Quando parar, o módulo GPS obteve fixação na sua localização e começará a enviar dados ao Helium. Ajuda colocar o GPS próximo a uma janela ou, idealmente, totalmente ao ar livre.

Você pode verificar o Serial Monitor (Tools → Serial Monitor) na Arduino IDE para ver a saída de depuração. Deverá ver mensagens de conexão, criação de canal e, em seguida, uma sequência de mensagens No GPS fix! até que a fixação por satélite seja adquirida.

Verificando se os Dados Estão Sendo Enviados Corretamente

Agora que o Arduino, Atom e GPS estão funcionando, voltemos ao Helium Dashboard para confirmar que os dados estão chegando ao canal Azure.

Clique em Channels à esquerda e selecione o canal Azure que você criou na seção Active Channels. Role para baixo até o Event Log, onde você verá algo como a captura de tela abaixo. Isso mostra o timestamp e o tamanho dos dados, além de relatar se foram roteados com sucesso para o Azure:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Se você olhar no seu Azure IoT Hub, sob a navegação Device Explorer, verá seu dispositivo Helium Atom listado sob seu endereço MAC. Clicar nele confirmará que protegemos este dispositivo automaticamente, sem configuração necessária, usando um certificado X509 assinado por hardware.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Levando os Dados ao Power BI

Assumimos que você já tenha uma conta Power BI configurada e um workspace criado. (Caso contrário, acesse www.powerbi.com e configure um.)

Com a conta Power BI pronta, criaremos um Azure Stream Analytics Job para pegar os dados do Azure IoT Hub e entregá-los ao Power BI.

No painel do Azure, clique em New no canto superior esquerdo, busque por Stream Analytics Job, selecione-o quando aparecer. Clique em Create no canto inferior esquerdo, escolha as opções e clique em create para configurar.

Após a implantação, precisamos dizer ao Streaming Job para usar o IoT Hub como entrada e o Power BI como saída. Na página do Streaming Job, clique em Inputs no menu à esquerda, depois Add.

Dê um alias (nome) ao job, selecione IoT Hub no dropdown de fonte. Escolha o IoT Hub apropriado no dropdown IoT Hub e deixe o resto como padrão. Deverá ficar assim:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Uma vez criada a entrada, criaremos uma saída que se conecta ao Power BI. Na página do Streaming Job, clique em Outputs no menu à esquerda, depois Add. Escolha Power BI no dropdown Sink. Você precisará autorizar sua conta Power BI e selecionar o Workspace desejado. Crie um nome para a tabela. Ficará semelhante a isto:

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

O passo final é criar uma Query que vincule a entrada à saída. Clique em Query no menu à esquerda. Sua query deve basicamente ter a forma mostrada na captura de tela abaixo, dependendo dos nomes que você deu às entradas e saídas no passo anterior. Isso selecionará todos os dados vindos do IoT Hub e os enviará ao workspace do Power BI.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Clique em Save no canto superior esquerdo e, assumindo que nomeou tudo corretamente, você está quase pronto. Volte à página Overview e clique em Start na barra de navegação superior. Após alguns minutos, os dados estarão fluindo para o Power BI.

Visualizando no Power BI

Agora que os dados estão fluindo, podemos fazer uma visualização rápida no Power BI para mostrar onde tudo está no mapa.

Vá ao seu Workspace Power BI, clique em + Create no canto superior direito e selecione Report. Selecione o dataset criado no Azure Streaming Job e clique em Create.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Em seguida, escolha a visualização de mapa no painel direito (ícone de globo branco). No painel à esquerda, arraste lat para Latitude e lon para Longitude. Você também pode arrastar EventProcessedUTCTime para Tooltips se quiser ver quando foi enviado ao passar o mouse. Clique em Save no canto superior direito. Pronto! Você terá um mapa mostrando a localização do seu Helium Atom conectado ao Arduino.

Rastreamento GPS em Tempo Real com Helium, Azure IoT Hub e Power BI

Código Completo

Atom + Arduino + Adafruit GPS (C/C++)

/* 
 * Copyright 2017, Helium Systems, Inc. 
 * All Rights Reserved. See LICENCE.txt for license information 
 */
#include "Arduino.h"
#include "avr/dtostrf.h"
#include "Helium.h"
#include 
#include 
#include "wiring_private.h" // pinPeripheral() function

#define atom_serial Serial1 //for GPS
#define PIN_SERIAL2_RX (34ul) // Pin description number for PIO_SERCOM on D12
#define PIN_SERIAL2_TX (36ul) // Pin description number for PIO_SERCOM on D10
#define PAD_SERIAL2_TX (UART_TX_PAD_2) // SERCOM pad 2
#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // SERCOM pad 3

Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX);

void SERCOM1_Handler() {
  Serial2.IrqHandler();
}

Helium helium(&atom_serial);
Channel channel(&helium);

//GPS stuff
#define gps_serial Serial2
Adafruit_GPS GPS(&gps_serial);

void setup() {
  pinPeripheral(10, PIO_SERCOM);
  pinPeripheral(12, PIO_SERCOM);
  Serial.begin(115200);
  Serial.println("Starting");

  // Begin communication with the Helium Atom
  // The baud rate differs per supported board and is configured in Board.h
  helium.begin(helium_baud_b115200);

  // Connect the Atom to the Helium Network
  Serial.print("Connecting - ");
  int status = helium.connect();
  while (status != helium_status_OK) {
    status = helium.connect();
  }
  Serial.println("Succeeded");

  // Begin communicating with the channel. This should only need to be done once.
  // NOTE: Please ensure you've created a matching channel in the Helium Dashboard
  int8_t result;
  Serial.print("Creating Channel - ");
  status = channel.begin("Hackster Guide", &result);
  if (helium_status_OK == status && result == 0) {
    Serial.println("Succeeded");
  } else {
    Serial.println("Failed");
  }
  delay(1000);

  //Init GPS
  GPS.begin(9600);
  GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
  GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
  GPS.sendCommand(PGCMD_NOANTENNA);
  delay(2000);
}

uint32_t timer = millis();

void loop() {
  char c = GPS.read();
  if (GPS.newNMEAreceived()) {
    if (!GPS.parse(GPS.lastNMEA())) return;
  }

  if (timer > millis()) timer = millis();

  if (millis() - timer > 2000) {
    timer = millis(); // reset the timer

    if (GPS.fix) {
      char lat[10];
      char lon[10];
      char data[100];
      dtostrf(GPS.latitudeDegrees, 4, 4, lat);
      dtostrf(GPS.longitudeDegrees, 4, 4, lon);

      //format a JSON object of lat/lon to send to Azure
      sprintf(data, "{\"lat\": \"%s\", \"lon\": \"%s\"}", lat, lon);

      // Send the location data to the configured channel
      int8_t result; //the response from the Helium Router
      Serial.print("Sending - ");
      int status = channel.send(data, strlen(data), &result);
      //status is the response from the Atom serial connection
      if (helium_status_OK == status && result == 0) {
        Serial.print("Successfully sent ");
        Serial.println(data);
      } else {
        Serial.println("Failed");
      }
    } else {
      Serial.println("No GPS fix!");
    }
  }
}

Processo de manufatura

  1. Sistema de Presença RFID Confiável com Arduino e Python
  2. Construa um Datalogger GPS com Análise Espacial no Azure IoT Hub
  3. Controle Remoto Universal Android com Arduino, 1Sheeld e IR
  4. Construa um Voltímetro Inteligente com Arduino e Smartphone – Projeto DIY Fácil
  5. Monitor de Frequência Cardíaca IoT em Tempo Real com Arduino e MAX30100
  6. Controle IoT Remoto de Braço Robótico Personalizado
  7. Construa um Pote Inteligente IoT com ESP8266, Arduino e Sensor Ultrassônico – Monitoramento em Tempo Real
  8. Medição Precisa de Frequência e Ciclo de Trabalho com Arduino UNO
  9. Medição de Distância em Tempo Real com Sonar Arduino e Visualização no Processing
  10. Sistema de Controle de Piscina com Azure IoT: Sensores Inteligentes e Monitoramento Remoto