Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

GPS-tracking met Helium, Azure IoT Hub en Power BI

Componenten en benodigdheden

Helium Atom Prototyping Module
× 1
Arduino Zero
× 1
Adafruit Ultimate GPS Breakout
× 1
Broodplank (algemeen)
× 1

Apps en online services

Microsoft Azure
Arduino IDE

Over dit project

Over dit project

Helium bestaat om ontwikkelaars te helpen bij het bouwen van energiezuinige, veilige, verbonden apparaten. In dit project lopen we door het gebruik van de Helium Atom Prototyping-module met een Arduino Zero en Adafruit Ultimate GPS Breakout om naadloos gegevens naar Azure IoT Hub te verzenden en vervolgens naar een Power BI-rapport om de gegevens te visualiseren.

U kunt meer te weten komen over Helium's energiezuinige, veilige, lange afstand draadloze producten en alle benodigde hardware kopen op helium.com/store.

Hardware

Het eerste dat u hoeft te doen, is uw Helium Atom Prototyping-module op de Helium Atom Arduino-adapter en vervolgens op uw Arduino bevestigen. We gebruiken een Arduino Zero voor deze handleiding, maar je kunt een Uno, Due, M0 of elke andere Arduino gebruiken die je maar wilt.

Zodra je de Atom op de Arduino hebt aangesloten, zou je iets moeten hebben dat er zo uitziet:

Vervolgens moeten we de Adafruit Ultimate GPS Breakout aan de Arduino-sandwich bevestigen. We gaan hier een breadboard gebruiken om dingen gemakkelijker en duidelijker te maken, maar je kunt de GPS-breakout net zo gemakkelijk rechtstreeks op de Arduino aansluiten. Uw bedrading moet de vorm hebben van:

Arduino 5v -> GPS VIN

Arduino GND -> GPS GND

Arduino D12 -> GPS TX

Arduino D10 -> GPS RX

Je zou iets moeten hebben dat er zo uitziet als je klaar bent:

Ok, nu we de Arduino-kant van de dingen hebben ingesteld, moeten we het Helium Element aangesloten en ingeschakeld krijgen. Als je een cellulair element hebt, hoef je het alleen maar aan te zetten en te wachten tot het licht groenblauw kleurt. Dat is het. Als je een Ethernet Element hebt, of als je liever een Ethernet-verbinding gebruikt voor je Cellular Element, sluit je de Ethernet-poort van je Element aan op een voor DHCP geschikte poort, zoals de achterkant van een kabelmodem of draadloze router. Zodra je het Element hebt ingeschakeld en het lampje aan de voorkant van het Element groen wordt, kun je aan de slag.

Nu je de Arduino- en Atom-hardware-configuratie hebt en het Element is ingeschakeld en aangesloten, is het tijd om dit allemaal in te stellen in het Helium Dashboard.

Helium Dashboard &Kanalen

Eerst moeten we onze Atom en Element toevoegen aan ons gebruikersaccount in het dashboard. Als je geen gebruikersaccount hebt maar wel apparatuur bij de hand hebt, stuur dan een e-mail naar [email protected], anders log je in met de inloggegevens die je hebt gekregen toen je je hardware bij Helium kocht.

Eenmaal ingelogd, moeten we eerst ons Element activeren. Klikken op Elementen aan de linkerkant en vervolgens Nieuwe toevoegen in de rechterbovenhoek komt u op de juiste plaats. Typ de laatste 4 van de MAC adres en de HVV van het label op de achterkant van het Element, geef het een naam en voeg eventueel wat tags toe. Klik op Element activeren om het op gang te krijgen.

We moeten dan hetzelfde proces herhalen voor het Atom. Klik nogmaals op Atomen aan de linkerkant en Nieuwe toevoegen , en geef de MAC en HVV van het Atom-label, voeg eventueel enkele tags toe en klik op Activeer Atom .

Vervolgens moeten we een Azure IoT Hub maken om te fungeren als een opnamepunt voor Azure voor al uw Helium Atom-apparaten. We gaan ervan uit dat u al een Azure-account hebt, zo niet, dan moet u er een maken.

Nadat u zich hebt aangemeld bij Azure, gaan we een IoT Hub maken. Klik op de + in de linkerbovenhoek, dan Internet of Things , dan IoT Hub :

U moet een aantal keuzes maken over hoe u uw IoT Hub wilt instellen en vervolgens op Maken klikken. We raden u aan Vastmaken aan dashboard . te selecteren onderaan om het later gemakkelijker te vinden:

Als u klaar bent en de hub is geïmplementeerd (dit kan enkele minuten duren), klikt u erop vanuit uw dashboard. Om het heliumkanaal in te stellen, hebben we één stukje informatie uit de hub nodig. Kies vanuit de IoT Hub Beleid voor gedeelde toegang selecteer aan de linkerkant RegistryReadWrite en klik vervolgens op het kopieerpictogram naast Verbindingsreeks—primaire sleutel aan de rechterkant. Hiermee wordt de verbindingsreeks gekopieerd naar het klembord dat we zullen gebruiken in het Helium Dashboard. Zorg ervoor dat u deze string niet deelt met iemand die u niet vertrouwt. (In dit voorbeeld gebruiken we alleen een tijdelijke hub.)

Terug in het Helium-dashboard moeten we nu een kanaal maken dat wordt toegewezen aan de Azure IoT Hub die u zojuist hebt gemaakt. Klik eerst op Kanalen aan de linkerkant en klik op Azure IoT Hub hieronder Nieuw kanaal maken . We gaan de Connection String in plakken we hebben gekopieerd van Azure om het kanaal op Helium te maken:

Geef het kanaal een naam en druk vervolgens op Maken . Het is belangrijk om de naam te onthouden, omdat je die in je Arduino-code nodig hebt om gegevens naar dit kanaal te sturen.

Arduino-schets

Met de Azure IoT Hub opgezet en een Helium Channel gecreëerd, hebben we nu een geschikte Arduino Sketch nodig die gebruik maakt van de Helium Arduino en Adafruit GPS-bibliotheken om GPS-locaties naar Helium en vervolgens naar ons nieuw gecreëerde Azure-kanaal te sturen.

Ten eerste heb je zowel de Helium Arduino-bibliotheek als de Adafruit GPS-bibliotheek nodig die in je Arduino IDE is geïnstalleerd. De eenvoudigste manier om dit te bereiken is door naar Schets -> Bibliotheek opnemen -> Bibliotheken beheren te gaan. menu vanuit de IDE en zoek naar beide Helium en Adafruit GPS en druk op Installeren .

De onderstaande schets initialiseert de Atom, creëert een kanaal dat overeenkomt met de Azure IoT Hub Kanaal dat we in de vorige stap hebben gemaakt, verzamelt GPS-gegevens van het Adafruit GPS-bord, formatteert het in JSON en verzendt het vervolgens via het Helium-netwerk.

Hier vindt u meer details en handleidingen voor de Helium Atom Arduino-bibliotheek.

/* * Copyright 2017, Helium Systems, Inc. * Alle rechten voorbehouden. Zie LICENCE.txt voor licentie-informatie */ #include "Arduino.h" #include "avr/dtostrf.h" #include "Helium.h" #include  #include  #include "wiring_private .h" // pinPeripheral() functie #define atom_serial Serial1//for GPS #define PIN_SERIAL2_RX (34ul) // Pinbeschrijvingsnummer voor PIO_SERCOM op D12 #define PIN_SERIAL2_TX (36ul) // Pinbeschrijvingsnummer voor PIO_SERCOM op 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_TX); }Helium helium(&atom_serial); Kanaalkanaal (&helium);//GPS-dingen #define gps_serial Serial2 Adafruit_GPS GPS (&gps_serial); void setup () { pinPeripheral (10, PIO_SERCOM); pinPeripheral (12, PIO_SERCOM); Serieel.begin(115200); Serial.println("Begint"); // Begin communicatie met de Helium Atom // De baudrate verschilt per ondersteund bord // en wordt geconfigureerd in Board.h helium.begin(helium_baud_b115200 ); // Verbind de Atom met het Helium-netwerk Serial.print ("Verbinden - "); int-status =helium.connect(); while (status !=helium_status_OK) { status =helium.connect(); } Serial.println("Geslaagd"); // Begin te communiceren met het kanaal. Dit hoeft // maar één keer te worden gedaan. // // OPMERKING:zorg ervoor dat u een overeenkomend kanaal hebt gemaakt in het Helium Dashbaord int8_t-resultaat; Serial.print("Kanaal maken - "); status =channel.begin("Hackstergids", &result); if (helium_status_OK ==status &&resultaat ==0) { Serial.println("Geslaagd"); } else { Serial.println("Mislukt"); } vertraging (1000); //Init GPS GPS.begin (9600); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand (PGCMD_NOANTENNA); vertraging (2000); }uint32_t timer =millis(); void loop() { char c =GPS.read(); if (GPS.newNMEAreceived()) { if (!GPS.parse(GPS.lastNMEA())) terugkeer; } if (timer> millis()) timer =millis(); if (millis() - timer> 2000) { timer =millis(); // reset de timer als (GPS.fix) { char lat [10]; char lon[10]; char-gegevens [100]; dtostrf(GPS.latitudeDegrees, 4, 4, lat); dtostrf(GPS.longitudeDegrees, 4, 4, lon); //format een JSON-object van lat/lon om te verzenden naar Azure sprintf(data, "{\"lat\":\"%s\", \"lon\":\"%s\"}", lat, lang); // Stuur de locatiegegevens naar het geconfigureerde kanaal int8_t resultaat; //het antwoord van de Helium Router Serial.print ("Verzenden - "); int status =channel.send(data, strlen(data), &result); //status is het antwoord van de Atom seriële verbinding if (helium_status_OK ==status &&result ==0) { Serial.print("Succesvol verzonden"); Serial.println(gegevens); } else { Serial.println("Mislukt"); } } else { Serial.println("Geen GPS-fix!"); } } }  

Nadat de bibliotheken zijn geïnstalleerd, maakt u een nieuwe schets (Bestand -> Nieuw vanuit de Arduino IDE) en plak de bovenstaande code in. Verbind je Arduino/Atom-sandwich via USB en druk op Uploaden knop die eruitziet als een pijl naar rechts.

Na een paar seconden zou je moeten zien dat de Atom-lampjes rood en blauw beginnen te knipperen en zich dan in een constant rood knipperend patroon vestigen. Dit betekent dat de Atom nu is aangesloten op het Helium-netwerk. De GPS FIX lampje moet ook knipperen met een langzaam rood patroon. Zodra dit stopt, heeft de GPS-module uw locatie vast en begint deze gegevens naar Helium te verzenden. Het helpt om te proberen de GPS bij een raam te plaatsen of idealiter helemaal buiten te zijn.

U kunt de Seriële Monitor . controleren (Extra -> Seriële monitor ) vanuit de Arduino IDE om de debug-uitvoer te zien. U zou berichten moeten zien die verbinding maken, een kanaal maken en vervolgens een reeks Geen GPS-fix! berichten totdat een satellietfix is ​​verkregen.

Controleren of de gegevens correct worden verzonden

Nu de Arduino, Atom en GPS operationeel zijn, kunnen we terugkeren naar het Helium Dashboard en ervoor zorgen dat gegevens hun weg vinden naar het Azure-kanaal.

Klikken op Kanalen aan de linkerkant en selecteer vervolgens het Azure-kanaal dat u al hebt gemaakt in de Actieve kanalen sectie zou je naar een detailweergave moeten brengen - als je hier naar beneden scrolt, zou je het gebeurtenislogboek moeten zien, waar je hopelijk iets zult zien als de onderstaande schermafbeelding. Dit toont het tijdstempel en de grootte van gegevens, evenals rapportage over of deze met succes naar Azure zijn gerouteerd:

Als u uw Azure IoT Hub bekijkt onder de Device Explorer navigatie zou u uw Helium Atom-apparaat ook onder het MAC-adres moeten zien staan. Als u erop klikt, wordt ook bevestigd dat we dit apparaat automatisch hebben beveiligd, zonder enige configuratie, met behulp van een hardware-ondertekend X509-certificaat.

De gegevens in Power BI krijgen

We gaan ervan uit dat u al een Power BI-account hebt ingesteld en dat er al een werkruimte is gemaakt. (Zo niet, ga dan naar www.powerbi.com en stel er een in.)

Met uw Power BI-accountconfiguratie moeten we nu een Azure Stream Analytics-taak maken om de gegevens van de Azure IoT Hub op te halen en aan Power BI te leveren.

Klik vanuit het Azure-dashboard op Nieuw in de linkerbovenhoek en zoek naarStream Analytics Job , door het te selecteren zodra het verschijnt. Klik op Maken in de linkerbenedenhoek, selecteer de opties en klik op maken om het in te stellen.

Eenmaal geïmplementeerd, moeten we de streamingtaak vertellen om de IoT Hub als invoer en Power BI als uitvoer te gebruiken. Klik vanuit de Streaming Job-pagina op Ingangen in het linkermenu en vervolgens Toevoegen .

Geef de taak een alias (naam) en selecteer vervolgens IoT Hub uit de vervolgkeuzelijst Bron. Kies de juiste IoT Hub uit de vervolgkeuzelijst IoT Hub en laat de rest als standaard. Je zou moeten eindigen met iets dat er zo uitziet:

Zodra de invoer is gemaakt, maken we een uitvoer die verbinding maakt met Power BI. Klik op de pagina Streaming Job op Outputs in het linkermenu en vervolgens Toevoegen . We kiezen voor Power BI van de Sink laten vallen. U moet vervolgens uw Power BI-account autoriseren en de werkruimte selecteren die u wilt gebruiken. Maak een naam voor de tabel. Je krijgt zoiets als dit:

De laatste stap is het maken van een query die de invoer aan de uitvoer koppelt. Klik nogmaals op Query uit het linkermenu. U wilt dat uw zoekopdracht in principe de vorm heeft die overeenkomt met de onderstaande schermafbeelding, afhankelijk van hoe u uw invoer en uitvoer uit de vorige stap hebt genoemd. Hiermee worden alle gegevens die afkomstig zijn van de IoT Hub geselecteerd en uitgevoerd naar de Power BI-werkruimte.

Klik linksboven op Opslaan en ervan uitgaande dat je alles correct hebt genoemd, ben je bijna klaar. Ga nu terug naar de overzichtspagina en druk op Start in de bovenste navigatiebalk en na een paar minuten worden gegevens naar Power BI gestreamd.

Visualiseren in Power BI

Nu de gegevens stromen, kunnen we een snelle visualisatie in Power BI doen om ons op een kaart te laten zien waar alles zich bevindt.

Ga naar uw Power BI-werkruimte en klik op + Maken in de rechterbovenhoek en selecteer Melden . U selecteert vervolgens de dataset die u in de Azure Streaming Job hebt gemaakt en drukt op Maken .

Vervolgens kiezen we de kaartvisualisatie in het rechterdeelvenster, het ziet eruit als een witte wereldbol. Helemaal rechts ziet u de velden met gegevens die we vanaf de Arduino hebben verzonden. Sleep lat naar Latitude en lon naar lengtegraad in het linkerdeelvenster. U kunt ook EventProcessedUTCTime . slepen naar Tooltips als u wilt zien wanneer het bij mouseover is verzonden. Klik vervolgens rechtsboven op Opslaan. Dat is het! Je hebt nu een kaart met de locatie van je Helium Atom die aan de Arduino is bevestigd.

Code

  • Atom + Arduino + Adafruit GPS
Atom + Arduino + Adafruit GPSC/C++
/* * Copyright 2017, Helium Systems, Inc. * Alle rechten voorbehouden. Zie LICENCE.txt voor licentie-informatie*/#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) // Pinbeschrijvingsnummer voor PIO_SERCOM op D12#define PIN_SERIAL2_TX (36ul) // Pinbeschrijvingsnummer voor PIO_SERCOM op D10#define PAD_SERIAL2_TX (UART_TX_PAD_2) // SERCOM-pad 2#define PAD_SERIAL2_RX (SERCOM_RX_PAD_3) // SERCOM-pad 3Uart Serial2(&sercom1, PIN_SERIAL2_RX, PIN_SERIAL2_TX, PAD_SERIAL2_RX, PAD_SERIAL2_TX); Kanaalkanaal(&helium);//GPS stuff#define gps_serial Serial2Adafruit_GPS GPS(&gps_serial);void setup() { pinPeripheral(10, PIO_SERCOM); pinPeripheral (12, PIO_SERCOM); Serieel.begin(115200); Serial.println("Begint"); // Begin communicatie met de Helium Atom // De baudrate verschilt per ondersteund bord // en wordt geconfigureerd in Board.h helium.begin(helium_baud_b115200); // Verbind de Atom met het Helium-netwerk Serial.print ("Verbinden - "); int-status =helium.connect(); while (status !=helium_status_OK) { status =helium.connect(); } Serial.println("Geslaagd"); // Begin te communiceren met het kanaal. Dit hoeft // maar één keer te worden gedaan. // // OPMERKING:zorg ervoor dat u een overeenkomend kanaal hebt gemaakt in het Helium Dashbaord int8_t-resultaat; Serial.print("Kanaal maken - "); status =channel.begin("Hackstergids", &result); if (helium_status_OK ==status &&resultaat ==0) { Serial.println("Geslaagd"); } else { Serial.println("Mislukt"); } vertraging (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())) terugkeer; } if (timer> millis()) timer =millis(); if (millis() - timer> 2000) { timer =millis(); // reset de timer als (GPS.fix) { char lat [10]; char lon[10]; char-gegevens [100]; dtostrf(GPS.latitudeDegrees, 4, 4, lat); dtostrf(GPS.longitudeDegrees, 4, 4, lon); //format een JSON-object van lat/lon om te verzenden naar Azure sprintf(data, "{\"lat\":\"%s\", \"lon\":\"%s\"}", lat, lang); // Stuur de locatiegegevens naar het geconfigureerde kanaal int8_t resultaat; //het antwoord van de Helium Router Serial.print ("Verzenden - "); int status =channel.send(data, strlen(data), &result); //status is het antwoord van de Atom seriële verbinding if (helium_status_OK ==status &&result ==0) { Serial.print("Succesvol verzonden"); Serial.println(gegevens); } else { Serial.println("Mislukt"); } } else { Serial.println("Geen GPS-fix!"); } }}

Productieproces

  1. Aanwezigheidssysteem met Arduino en RFID met Python
  2. GPS-datalogger, ruimtelijke analyse en Azure IoT Hub.
  3. Universele afstandsbediening met Arduino, 1Sheeld en Android
  4. DIY voltmeter met Arduino en smartphone
  5. Hartslagmeter met IoT
  6. Ioed gebruiken om een ​​robotarm op afstand te bedienen
  7. IOT - Smart Jar met ESP8266, Arduino en ultrasone sensor
  8. Frequentie- en werkcyclusmeting met Arduino
  9. Sonar met arduino en weergave op verwerkings-IDE
  10. LED-helderheid regelen met Bolt en Arduino
  11. Azure IoT-zwembad