- 必要な材料
- ArduinoLoRaシールド
- LoRaシールド用のPCBの製造
- PCBの組み立て
- GPSモジュールをLoRa送信機に接続する
- ArduinoLoRaをGPS送信機としてプログラミング
- ArduinoLoRaをGPS受信機としてプログラミング
- Arduino LoRaGPSトラッカーの動作
特定のオブジェクト/人の所在を知ることは常に慰められてきました。今日、GPSは、車両追跡、フリート追跡、資産監視、人追跡、ペットトラッカーなどの資産管理アプリケーションで広く使用されています。追跡デバイスの主な設計上の考慮事項は、バッテリーの期待値と監視範囲です。両方を考慮すると、LoRaは消費電力が非常に低く、長距離で動作できるため、最適な選択肢のようです。したがって、このチュートリアルでは、LoRaを使用してGPS追跡システムを構築します。システムは、NEO-6MGPSモジュールから位置情報を読み取る送信機で構成されます。Lora経由でワイヤレスで送信します。レシーバー部分は情報を受け取り、16x2LCDディスプレイに表示します。LoRaを初めて使用する場合は、先に進む前に、LoRaおよびLoRaWANテクノロジーと、それをArduinoとインターフェースする方法について学習してください。
このプロジェクトで物事をシンプルかつ費用効果の高いものにするために、LoRaゲートウェイは使用しません。代わりに、送信機と受信機の間でピアツーピア通信を実行します。ただし、グローバル範囲が必要な場合は、レシーバーをLoRaゲートウェイに置き換えることができます。また、私はインド出身なので、ここでは合法的なISM帯域である433MHz LoRaモジュールを使用します。したがって、国に基づいてモジュールを選択する必要がある場合があります。そうは言っても、始めましょう…
必要な材料
- Arduino Lora Shield – 2Nos(PCBデザインをダウンロード可能)
- Arduino Uno – 2Nos
- SX1278 433MHz LoRaモジュール– 2
- 433MHzLoraアンテナ
- NEO-6MGPSモジュール
- LCDディスプレイモジュール
- 接続線
ArduinoLoRaシールド
LoRaを使用した構築を容易にするために、このプロジェクト用にLoRaArduinoシールドを設計しました。このシールドは、LM317可変レギュレーターを使用して設計された3.3Vレギュレーターを備えたSX1278433MHzで構成されています。ShieldはArduinoの上に直接配置され、LoRa機能を提供します。このLoRaシールドは、LoRaセンシングノードを展開する必要がある場合、またはLoRaメッシュネットワークを作成する必要がある場合に役立ちます。LoRaArduinoシールドの完全な回路図を以下に示します。
シールドは12Vジャックで構成されており、電源を入れると、LM317レギュレータを使用してLoRaモジュールの3.3Vを調整するために使用されます。また、Vinピンを介してArduino UNOに電力を供給するために使用され、Arduinoからの安定化された5Vは、シールド上のLCDに電力を供給するために使用されます。 LM317の出力電圧は抵抗R1とR2をそれぞれ使用して3.3Vに固定されており、これらの抵抗の値はLM317Calculatorを使用して計算できます。
LoRaモジュールは消費電力が非常に少ないため、Arduinoの3.3Vピンから直接電力を供給することもできますが、LM317はオンボード電圧レギュレータよりも信頼性が高いため、外部レギュレータ設計を使用しました。シールドには、LCDの明るさを調整するために使用できるポテンショメータもあります。LoRaモジュールとArduinoの接続は、ArduinoとLoraのインターフェースに関する以前のチュートリアルで行ったものと似ています。
LoRaシールド用のPCBの製造
回路の準備ができたので、PCBの設計に進むことができます。PCB設計ソフトウェアで開き、トラックの形成を開始しました。PCBの設計が完了すると、私のボードは次のようになります。
ガーバー形式のデザインファイルをダウンロードして作成し、ボードを入手することもできます。ガーバーファイルのリンクを以下に示します
Arduino LoRaShieldのガーバーファイルをダウンロードする
これで、デザインの準備ができたので、それらを製造する時が来ました。PCBを完成させるのは非常に簡単で、以下の手順に従ってください。
ステップ1: www.pcbgogo.comにアクセスし、初めての場合はサインアップします。次に、[PCBプロトタイプ]タブで、PCBの寸法、層の数、および必要なPCBの数を入力します。PCBが80cm×80cmであると仮定すると、以下に示すように寸法を設定できます。
ステップ2: [今すぐ見積もり ]ボタンをクリックして 続行し ます。使用するトラック間隔など、必要に応じていくつかの追加パラメータを設定するページが表示されます。ただし、ほとんどの場合、デフォルト値で問題なく機能します。ここで考慮しなければならないのは、価格と時間だけです。ご覧のとおり、ビルド時間はわずか2〜3日で、PSBの費用はわずか5ドルです。その後、要件に基づいて希望の配送方法を選択できます。
ステップ3: 最後のステップは、ガーバーファイルをアップロードして支払いを続行することです。プロセスがスムーズであることを確認するために、PCBGOGO は、支払いを続行する前に、ガーバーファイルが有効かどうかを確認します。このようにして、PCBが製造に適していて、コミットされたとおりに到達することを確認できます。
PCBの組み立て
ボードが注文された後、数日後に私に届きましたが、きちんとラベルが貼られた箱に入った宅配便で、いつものようにPCBの品質は素晴らしかったです。
はんだごての電源を入れて、ボードの組み立てを始めました。フットプリント、パッド、ビア、シルクスクリーンは完全に正しい形状とサイズであるため、ボードの組み立てに問題はありませんでした。はんだ付けが完了すると、ボードは次のようになります。これは、私のArduinoUnoボードにぴったりと収まることがわかります。
私たちのプロジェクトにはArduinoLoRa送信機とArduinoLoRa受信機があるため、受信機用と送信機用の2つのシールドが必要になります。そこで、別のPCBのはんだ付けを進めました。LoRaモジュールを備えたPCBとLCDの両方を以下に示します。
ご覧のとおり、受信機のLoRaシールド(左側)にLCDが接続されているため、送信機側はLoRaモジュールのみで構成されています。さらに、以下で説明するように、GPSモジュールを送信機側に接続します。
GPSモジュールをLoRa送信機に接続する
ここで使用されているGPSモジュールはNEO-6MGPSモジュールであり、モジュールは小さなフォームファクタで非常に低電力で動作できるため、追跡アプリケーションに適しています。ただし、さまざまな種類の車両追跡および位置検出アプリケーションで以前に使用した他の多くのGPSモジュールが利用可能です。
モジュールは5Vで動作し、9600ボーレートのシリアル通信を使用して通信します。したがって、モジュールにArduinoの+ 5Vピンに電力を供給し、以下に示すように、RxピンとTxピンをそれぞれデジタルピンD4とD3に接続します。
ピンD4とD3は、ソフトウェアシリアルピンとして構成されます。NEO-6M GPSモジュールに電力が供給されると、衛星接続が検索され、すべての情報が自動的にシリアルに出力されます。この出力データは、National Marine Electronics Associationの略で、すべてのGPSデバイスの標準形式であるNMEAセンテンス形式になります。ArduinoでGPSを使用する方法の詳細については、リンクをたどってください。このデータは大きくなり、ほとんどの場合、目的の結果を得るために手動で表現する必要があります。私たちにとって幸運なことに、TinyGPS ++と呼ばれるライブラリがあります。LoRaライブラリをまだ追加していない場合は、追加する必要もあります。それでは、以下のリンクから両方のライブラリをダウンロードしましょう
TinyGPS ++ Arduinoライブラリをダウンロードする
ArduinoLoRaライブラリをダウンロードする
リンクはZIPファイルをダウンロードします。ZIPファイルは、コマンド[スケッチ]-> [ライブラリを含める]-> [Add.ZIP ライブラリ] に従ってArduinoIDEに追加でき ます。ハードウェアとライブラリの準備ができたら、Arduinoボードのプログラミングに進むことができます。
ArduinoLoRaをGPS送信機としてプログラミング
LoRaはトランシーバーデバイスであることがわかっているため、情報の送受信の両方が可能です。ただし、このGPSトラッカープロジェクトでは、一方のモジュールを送信機として使用してGPSから座標情報を読み取り、送信し、もう一方のモジュールを受信機として使用してGPS座標値を受信してLCDに出力します。送信機モジュールと受信機モジュールの両方のプログラムは、このページの下部にあります。コードを続行する前に、GPSモジュールとLoRaモジュールのライブラリがインストールされていることを確認してください。このセクションでは、送信機のコードを見ていきます。
いつものように、必要なライブラリとピンを追加することからプログラムを開始します。ここでは、SPIおよびLoRaライブラリがLoRa通信に使用され、TinyGPS ++およびSoftwareSerialライブラリがGPS通信に使用されています。私のハードウェアのGPSモジュールはピン3と4に接続されているため、次のように定義します。
#include
セットアップ 機能内で、シリアルモニターを開始し、NEO- 6MGPS モジュールと通信するためにソフトウェアシリアルを 「gpsSerial 」として初期化します。また、LoRaの動作周波数として433E6(433 MHz)を使用していることにも注意してください。使用しているモジュールのタイプに応じて、周波数を変更する必要がある場合があります。
void setup(){ Serial.begin(9600); gpsSerial.begin(9600); while(!Serial); Serial.println( "LoRa Sender"); if(!LoRa.begin(433E6)){ Serial.println( "LoRaの開始に失敗しました!"); while(1); } LoRa.setTxPower(20); }
ループ 関数内で、GPSモジュールがデータを出力しているかどうかを確認し、出力している場合は、すべてのデータを読み取り、gps.encode関数を使用して表現します。次に、 gps.location.isValid() 関数を使用して、有効な位置データを受信したかどうかを確認します。
while(gpsSerial.available()> 0) if(gps.encode(gpsSerial.read())) if(gps.location.isValid()) {
有効な場所を受信した場合は、緯度と経度の値の送信を開始できます。関数 gps.location.lat() は緯度座標を提供し、関数 gps.location.lng() は経度座標を提供します。16 * 2 LCDに印刷するので、2行目にいつ入力するかを指定する必要があります。したがって、キーワード「c」を使用して、受信者に次の情報を2行目に印刷します。
LoRa.beginPacket(); LoRa.print( "Lat:"); LoRa.print(gps.location.lat()、6); LoRa.print( "c"); LoRa.print( "Long:"); LoRa.print(gps.location.lng()、6); Serial.println( "LoRa経由で送信"); LoRa.endPacket();
ArduinoLoRaをGPS受信機としてプログラミング
送信機コードはすでに緯度と経度の座標の値を送信しているので、受信機はこれらの値を読み取ってLCDに印刷する必要があります。同様に、ここではLoRaモジュールとLCDディスプレイのライブラリを追加し、LCDが接続されているピンを定義し、以前と同様にLoRaモジュールを初期化します。
#include
ループ 関数内で、送信機LoRaモジュールからのデータパケットとそのサイズを LoRa.parsePacket() 関数を使用して リッスン し、「 packetSize 」変数に格納します。パケットを受信した場合は、文字として読み取り、LCDに印刷します。プログラムは、LoRaモジュールがキーワード「c」を送信しているかどうかもチェックします。送信している場合は、残りの情報を2行目に出力します。
if(packetSize){//パケットが受信された場合 Serial.print( "Received packet '"); lcd.clear(); while(LoRa.available()){charcoming =(char)LoRa.read(); if(incoming == 'c') { lcd.setCursor(0、1); } else { lcd.print(incoming); } }
Arduino LoRaGPSトラッカーの動作
ハードウェアとプログラムの準備ができたら、それぞれのArduinoモジュールに両方のコードをアップロードし、12VアダプターまたはUSBケーブルを使用してそれらに電力を供給できます。送信機の電源が入っていると、GPSモジュールの青いLEDが点滅していることがわかります。これは、モジュールが座標を取得するために衛星接続を探していることを示しています。その間、Receiverモジュールの電源がオンになり、LCD画面にウェルカムメッセージが表示されます。送信機が情報を送信すると、受信機モジュールは以下に示すようにその情報をLCDに表示します
これで、送信機のGPSモジュールを使って移動でき、受信機がその位置を更新していることがわかります。送信機モジュールが正確にどこにあるかを知るには、LCDに表示されている緯度と経度の値を読み取り、それをGoogleマップに入力して、以下に示すように地図上の場所を取得します。
完全な作業は、ビデオで見ることができ、このページの一番下に与えられました。チュートリアルを理解し、それを使って何か役に立つものを作るのを楽しんだことを願っています。疑問がある場合は、下のコメントセクションに残すか、フォーラムを使用して他の技術的な質問をしてください。