工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Helium、Azure IoT Hub、およびPowerBIを使用したGPS追跡

コンポーネントと消耗品

ヘリウム原子プロトタイピングモジュール
× 1
Arduino Zero
× 1
Adafruit Ultimate GPS Breakout
× 1
ブレッドボード(汎用)
× 1

アプリとオンラインサービス

>
Microsoft Azure
Arduino IDE

このプロジェクトについて

このプロジェクトについて

ヘリウムは、開発者が低電力で安全な接続デバイスを構築するのを支援するために存在します。このプロジェクトでは、ArduinoZeroとAdafruitUltimate GPSBreakoutでHeliumAtom Prototypingモジュールを使用して、データをAzure IoT Hubにシームレスに送信し、PowerBIレポートに送信してデータを視覚化する方法について説明します。

ヘリウムの低電力、安全、長距離ワイヤレス製品の詳細については、helium.com / storeで必要なすべてのハードウェアを購入できます。

ハードウェア

最初に行う必要があるのは、HeliumAtomプロトタイピングモジュールをHeliumAtom Arduinoアダプターに接続し、次にArduinoに接続することです。このガイドではArduinoZeroを使用していますが、Uno、Due、M0、またはその他の任意のArduinoを使用できます。

AtomをArduinoに接続すると、次のようなものになります。

<図>

次に、Adafruit Ultimate GPSBreakoutをArduinoサンドイッチに取り付ける必要があります。ここでは、物事をより簡単かつ明確にするためにブレッドボードを使用しますが、GPSブレイクアウトをArduinoに直接配線するのも同じくらい簡単です。配線は次の形式である必要があります:

Arduino 5v-> GPS VIN

Arduino GND-> GPS GND

Arduino D12-> GPS TX

Arduino D10-> GPS RX

完了すると、次のようになります。

<図>

さて、Arduino側のセットアップが完了したので、HeliumElementを接続して電源を入れる必要があります。セルラーエレメントをお持ちの場合は、電源を入れて、ライトが青緑色に変わるのを待つだけです。それでおしまい。イーサネットエレメントを使用している場合、またはセルラーエレメントにイーサネット接続を使用する場合は、エレメントのイーサネットポートをケーブルモデムやワイヤレスルーターの背面などのDHCP対応ポートに接続します。エレメントの電源を入れ、エレメントの前面にあるライトが緑色に変わったら、準備は完了です。

<図>

ArduinoとAtomのハードウェアのセットアップが完了し、Elementの電源が入って接続されたので、Heliumダッシュボードでこれらすべてをセットアップします。

ヘリウムダッシュボードとチャネル

まず、ダッシュボードのユーザーアカウントにAtomとElementを追加する必要があります。ユーザーアカウントを持っていないが機器を持っている場合は、support @ helium.comまでメールでお問い合わせください。それ以外の場合は、Heliumからハードウェアを購入したときに受け取った資格情報を使用してログインしてください。

ログインしたら、最初にElementをアクティブ化する必要があります。 要素をクリックします 左側で、[新規追加] 右上にあるので、適切な場所に移動できます。 MAC の最後の4つを入力します アドレスと HVV 要素の背面にあるラベルから名前を付け、オプションでいくつかのタグを追加します。 要素のアクティブ化をクリックします それを実行するために。

<図>

次に、Atomに対して同じプロセスを繰り返す必要があります。もう一度、原子をクリックします 左側にあり、新規追加 MAC を提供します および HVV Atomラベルから、オプションでいくつかのタグを追加し、 Atomのアクティブ化をクリックします 。

<図>

次に、すべてのHeliumAtomデバイスのAzureへの取り込みポイントとして機能するAzureIoTHubを作成する必要があります。 Azureアカウントを既にお持ちであると想定しますが、そうでない場合は、アカウントを作成する必要があります。

Azureにログインしたら、IoTハブを作成します。 + をクリックします 左上にある[strong>モノのインターネット] 、次に IoTハブ

<図>

IoT Hubをどのように設定するかを選択してから、[作成]をクリックする必要があります。 ダッシュボードにピン留めを選択することをお勧めします 後で見つけやすくするために下部にあります:

<図>

完了してハブの展開が完了したら(これには数分かかる場合があります)、ダッシュボードからハブをクリックします。ヘリウムチャネルを設定するには、ハブ内から1つの情報が必要です。 IoTハブ内から共有アクセスポリシーを選択します 左側で、 RegistryReadWrite を選択します 、次に、接続文字列-主キーの横にあるコピーアイコンをクリックします。 右側に。これにより、接続文字列がヘリウムダッシュボードで使用するクリップボードにコピーされます。この文字列を信頼できない人と共有しないように注意してください。 (この例では、一時的なハブを使用しています。)

<図>

Heliumダッシュボードに戻って、作成したAzure IoTHubにマップするチャネルを作成する必要があります。まず、チャンネルをクリックします 左側で、 Azure IoT Hub をクリックします 新しいチャンネルの作成の下 。 接続文字列を貼り付けます Azureからコピーして、ヘリウムにチャネルを作成しました:

<図>

チャンネルに名前を付けて、作成をクリックします 。このチャネルにデータを送信するには、Arduinoコードで名前が必要になるため、名前を覚えておくことが重要です。

Arduinoスケッチ

Azure IoT Hubをセットアップし、Heliumチャネルを作成したら、HeliumArduinoおよびAdafruitGPSライブラリを使用してGPS位置をHeliumに送信し、次に新しく作成したAzureチャネルに送信する適切なArduinoスケッチが必要です。

まず、ArduinoIDEにHeliumArduinoライブラリとAdafruitGPSライブラリの両方をインストールする必要があります。これを実現する最も簡単な方法は、スケッチ->ライブラリを含める->ライブラリの管理に移動することです。 IDE内からメニューを選択し、両方の Helium を検索します および Adafruit GPS インストールをクリックします 。

<図>

以下のスケッチは、Atomを初期化し、 Azure IoT Hub に一致するチャネルを作成します。 前の手順で作成したチャネルは、Adafruit GPSボードからGPSデータを収集し、JSONにフォーマットしてから、Heliumネットワーク経由で送信します。

Helium AtomArduinoライブラリの詳細とガイドはここにあります。

  / * * Copyright 2017、Helium Systems、Inc。*無断複写・転載を禁じます。ライセンス情報については、LICENCE.txtを参照してください* / #include "Arduino.h" #include "avr / dtostrf.h" #include "Helium.h" #include  #include  #include "wiring_private .h "// pinPeripheral()関数#define atom_serial Serial1 // for GPS #define PIN_SERIAL2_RX(34ul)// D12上のPIO_SERCOMのピン記述番号#definePIN_SERIAL2_TX(36ul)// D10上のPIO_SERCOMのピン記述番号#definePAD_SERIAL2_TX (UART_TX_PAD_2)// SERCOMパッド2#define PAD_SERIAL2_RX(SERCOM_RX_PAD_3)// SERCOMパッド3Uart Serial2(&sercom1、PIN_SERIAL2_RX、PIN_SERIAL2_TX、PAD_SERIAL2_RX、PAD_SERIAL2_TX); void SERCOM1_Handler(){Serial2; }ヘリウムヘリウム(&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( "開始"); //ヘリウム原子との通信を開始します//ボーレートはサポートされているボードごとに異なります//Board.hで構成されますhelium.begin(helium_baud_b115200); // Atomをヘリウムネットワークに接続しますSerial.print( "Connecting-"); int status =helium.connect(); while(status!=helium_status_OK){status =helium.connect(); } Serial.println( "Succeeded"); //チャネルとの通信を開始します。 //これは1回だけ実行する必要があります。 // //注:Helium Dashbaordint8_tの結果に一致するチャネルが作成されていることを確認してください。 Serial.print( "チャネルの作成-"); status =channel.begin( "ハックスターガイド"、&result); if(helium_status_OK ==status &&result ==0){Serial.println( "Succeeded"); } else {Serial.println( "Failed"); } delay(1000); // 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タイマー=ミリ秒(); void loop(){char c =GPS.read(); if(GPS.newNMEAreceived()){if(!GPS.parse(GPS.lastNMEA()))return; } if(タイマー>ミリ秒())タイマー=ミリ秒(); if(millis()-タイマー> 2000){タイマー=ミリ秒(); //タイマーをリセットしますif(GPS.fix){char lat [10]; char lon [10]; char data [100]; dtostrf(GPS.latitudeDegrees、4、4、lat); dtostrf(GPS.longitudeDegrees、4、4、lon); // lat / lonのJSONオブジェクトをフォーマットしてAzureに送信しますsprintf(data、 "{\" lat \ ":\"%s \ "、\" lon \ ":\"%s \ "}"、lat、 lon); //位置データを設定されたチャネルに送信しますint8_tresult; //ヘリウムルーターからの応答Serial.print( "Sending-"); int status =channel.send(data、strlen(data)、&result); // statusは、Atomシリアル接続からの応答ですif(helium_status_OK ==status &&result ==0){Serial.print( "Successfully send"); Serial.println(data); } else {Serial.println( "Failed"); }} else {Serial.println( "GPS修正なし!"); }}}  

ライブラリをインストールしたら、新しいスケッチを作成します(ファイル->新規 Arduino IDE内から)、上記のコードを貼り付けます。 USB経由でArduino / Atomサンドイッチを接続し、アップロードを押します 右矢印のようなボタン。

数秒後、Atomライトが赤と青で点滅し始め、その後、安定した赤の点滅パターンに落ち着くはずです。これは、AtomがHeliumネットワークに接続されたことを意味します。 GPS FIX ライトもゆっくりと赤いパターンで点滅しているはずです。これが停止すると、GPSモジュールが現在地を修正し、ヘリウムへのデータ送信を開始します。 GPSを窓の近くに配置するか、理想的には完全に外に配置することをお勧めします。

シリアルモニターを確認できます (ツール->シリアルモニター )Arduino IDE内から、デバッグ出力を確認します。接続、チャンネルの作成、そして GPS修正なし!のシーケンスを示すメッセージが表示されます。 衛星修正が取得されるまでのメッセージ。

データが正しく送信されていることを確認する

Arduino、Atom、GPSが稼働しているので、Heliumダッシュボードに戻って、データがAzureチャネルに到達していることを確認できます。

チャンネルをクリックする 左側で、アクティブチャネルで既に作成したAzureチャネルを選択します。 セクションで詳細ビューが表示されます。ここを下にスクロールすると、イベントログが表示されます。ここに、下のスクリーンショットのようなものが表示されることを願っています。これは、データのタイムスタンプとサイズ、およびデータがAzureに正常にルーティングされたかどうかに関するレポートを示します。

<図>

デバイスエクスプローラーの下にあるAzureIoTHubを見てください。 ナビゲーションでは、MACアドレスの下にHeliumAtomデバイスも表示されます。それをクリックすると、ハードウェア署名されたX509証明書を使用して、構成を必要とせずに、このデバイスが自動的に保護されたことも確認されます。

<図>

データをPowerBIに取り込む

Power BIアカウントが既にセットアップされており、ワークスペースが既に作成されていることを前提としています。 (そうでない場合は、www.powerbi.comにアクセスして設定してください。)

Power BIアカウントを設定したら、Azure IoTHubからデータを取得してPowerBIに配信するためのAzureStreamAnalyticsジョブを作成する必要があります。

Azureダッシュボード内で、[新規]をクリックします 左上で、 Stream Analytics Job を検索します。 、表示されたら選択します。 作成をクリックします 左下でオプションを選択し、[作成]をクリックして設定します。

デプロイしたら、ストリーミングジョブにIoT Hubを入力として使用し、PowerBIを出力として使用するように指示する必要があります。ストリーミングジョブページ内から、[入力]をクリックします 左側のメニューから、追加

ジョブにエイリアス(名前)を付けてから、 IoT Hub を選択します ソースドロップダウンから。 [IoTハブ]ドロップダウンから適切なIoTハブを選択し、その他はすべてデフォルトのままにします。最終的には次のようになります:

<図>

入力が作成されたら、PowerBIに接続する出力を作成します。 [ストリーミングジョブ]ページで、[出力]をクリックします 左側のメニューから、[追加] Power BI を選択します シンクから 落ちる。次に、Power BIアカウントを承認し、使用するワークスペースを選択する必要があります。テーブルの名前を作成します。最終的には次のようになります:

<図>

最後のステップは、入力を出力にリンクするクエリを作成することです。もう一度、クエリをクリックします 左のメニューから。前の手順で入力と出力に名前を付けたものに応じて、クエリは基本的に以下のスクリーンショットと一致する形式にする必要があります。これにより、IoT Hubからのすべてのデータが選択され、PowerBIワークスペースに出力されます。

<図>

左上の[保存]をクリックし、すべてに正しく名前を付けたと仮定すると、ほぼ完了です。次に、概要ページに戻り、開始をクリックします。 上部のナビゲーションバーに表示され、数分後にPowerBIにデータがストリーミングされます。

PowerBIでの視覚化

データが流れているので、Power BIですばやく視覚化して、すべてがマップ上のどこにあるかを示すことができます。

Power BIワークスペースに移動し、[ +作成]をクリックします 右上隅にある[レポート]を選択します 。次に、Azure Streaming Jobで作成したデータセットを選択し、作成をクリックします。 。

<図>

次に、右側のペインでマップの視覚化を選択します。これは白い地球のように見えます。右端には、Arduinoから送信したデータのフィールドが表示されます。 lat をドラッグします Latitudeと lon 左側のペインで経度に変更します。 EventProcessedUTCTime をドラッグすることもできます マウスオーバーでいつ送信されたかを確認したい場合は、ツールチップに移動します。次に、右上の[保存]をクリックします。それでおしまい!これで、Arduinoに接続されているヘリウム原子の位置を示すマップが作成されます。

<図>

コード

  • Atom + Arduino + Adafruit GPS
Atom + Arduino + Adafruit GPS C / C ++
 / * * Copyright 2017、Helium Systems、Inc。*無断複写・転載を禁じます。ライセンス情報については、LICENCE.txtを参照してください* /#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)// D12#defineのPIO_SERCOMのピン記述番号PIN_SERIAL2_TX(36ul)// D10#definePAD_SERIAL2_TXのPIO_SERCOMのピン記述番号(UART_TX_PAD_2)// SERCOMパッド2#define PAD_SERIAL2_RX(SERCOM_RX_PAD_3)// SERCOMパッド3UartSerial2(&sercom1、PIN_SERIAL2_RX、PIN_SERIAL2_TX、PAD_SERIAL2_RX、PAD_SERIAL2_TX); void SERCOM1_Handler()チャネルchannel(&helium); // GPS stuff#define gps_serial Serial2Adafruit_GPS GPS(&gps_serial); void setup(){pinPeripheral(10、PIO_SERCOM); pinPeripheral(12、PIO_SERCOM); Serial.begin(115200); Serial.println( "開始"); //ヘリウム原子との通信を開始します//ボーレートはサポートされているボードごとに異なります//Board.hで構成されますhelium.begin(helium_baud_b115200); // Atomをヘリウムネットワークに接続しますSerial.print( "Connecting-"); int status =helium.connect(); while(status!=helium_status_OK){status =helium.connect(); } Serial.println( "Succeeded"); //チャネルとの通信を開始します。 //これは1回だけ実行する必要があります。 // //注:Helium Dashbaordint8_tの結果に一致するチャネルが作成されていることを確認してください。 Serial.print( "チャネルの作成-"); status =channel.begin( "ハックスターガイド"、&result); if(helium_status_OK ==status &&result ==0){Serial.println( "Succeeded"); } else {Serial.println( "Failed"); } delay(1000); // 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(タイマー>ミリ秒())タイマー=ミリ秒(); if(millis()-タイマー> 2000){タイマー=ミリ秒(); //タイマーをリセットしますif(GPS.fix){char lat [10]; char lon [10]; char data [100]; dtostrf(GPS.latitudeDegrees、4、4、lat); dtostrf(GPS.longitudeDegrees、4、4、lon); // lat / lonのJSONオブジェクトをフォーマットしてAzureに送信しますsprintf(data、 "{\" lat \ ":\"%s \ "、\" lon \ ":\"%s \ "}"、lat、 lon); //位置データを設定されたチャネルに送信しますint8_tresult; //ヘリウムルーターからの応答Serial.print( "Sending-"); int status =channel.send(data、strlen(data)、&result); // statusは、Atomシリアル接続からの応答ですif(helium_status_OK ==status &&result ==0){Serial.print( "Successfully send"); Serial.println(data); } else {Serial.println( "Failed"); }} else {Serial.println( "GPS修正なし!"); }}} 

製造プロセス

  1. PythonでArduinoとRFIDを使用した出席システム
  2. GPSデータロガー、空間分析、およびAzureIoTハブ。
  3. Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
  4. Arduinoとスマートフォンを使用したDIY電圧計
  5. IoTを使用した心拍数モニター
  6. IoTを使用してロボットアームをリモート制御する
  7. IOT-ESP8266、Arduino、超音波センサーを使用したスマートジャー
  8. Arduinoを使用した周波数とデューティサイクルの測定
  9. arduinoを使用したソナーと処理IDEでの表示
  10. BoltとArduinoを使用したLEDの明るさの制御
  11. AzureIoTスイミングプール