ArduinoMegaをNEO-6MGPSモジュールとインターフェースする方法
コンポーネントと消耗品
> ![]() |
| × | 1 | |||
| × | 1 |
アプリとオンラインサービス
> ![]() |
|
このプロジェクトについて
私が見つけたのは、ArduinoMegaとNEO-6MGPSモジュールとのインターフェースに関するチュートリアルがないため、作成することにしました。あなたがそれを好きになることを願っています!
必要なコンポーネント
ハードウェア
- Arduino Mega ==> $ 30
- Neo-6MGPSモジュール==> $ 30
ソフトウェア
- Arduino IDE
プロジェクトの総費用は60ドルです。
GPSに関する情報
GPSとは何ですか?
全地球測位システム(GPS)は、少なくとも24個の衛星で構成される衛星ベースのナビゲーションシステムです。 GPSは、世界中のあらゆる気象条件で24時間機能し、サブスクリプション料金やセットアップ料金はかかりません。
GPSの仕組み
GPS衛星は、正確な軌道で1日2回地球を周回します。各衛星は、GPSデバイスが衛星の正確な位置をデコードして計算できるようにする固有の信号と軌道パラメータを送信します。 GPS受信機は、この情報と三辺測量を使用して、ユーザーの正確な位置を計算します。基本的に、GPS受信機は、送信された信号を受信するのにかかる時間によって、各衛星までの距離を測定します。さらにいくつかの衛星からの距離測定により、受信機はユーザーの位置を特定して表示できます。
<図>

2D位置(緯度と経度)とトラックの動きを計算するには、GPS受信機を少なくとも3つの衛星の信号にロックする必要があります。 4つ以上の衛星がある場合、受信機は3D位置(緯度、経度、高度)を判別できます。通常、GPS受信機は8つ以上の衛星を追跡しますが、それは時刻と地球上のどこにいるかによって異なります。位置が特定されると、GPSユニットは
などの他の情報を計算できます。- 速度
- ベアリング
- 追跡
- トリップディスト
- 目的地までの距離
シグナルとは
GPS衛星は、少なくとも2つの低電力無線信号を送信します。信号は見通し内を通過します。つまり、信号は雲、ガラス、プラスチックを通過しますが、建物や山などのほとんどの固体オブジェクトは通過しません。ただし、最近の受信機はより感度が高く、通常は家の中を追跡できます。 GPS信号には3種類の情報が含まれています
- 疑似ランダムコード
I.D.です。どの衛星が情報を送信しているかを識別するコード。デバイスの衛星ページで、信号を受信している衛星を確認できます。
- エフェメリスデータ
エフェメリスデータは、衛星の位置を特定するために必要であり、衛星の状態、現在の日付と時刻に関する重要な情報を提供します。
- アルマナックデータ
アルマナックデータは、GPS受信機に各GPS衛星が一日中いつでもどこにあるべきかを伝え、その衛星とシステム内の他のすべての衛星の軌道情報を示します。
Neo-6MGPSモジュール
NEO-6MGPSモジュールを下図に示します。外部アンテナが付属しており、ヘッダーピンは付属していません。だからあなたはそれをはんだ付けする必要があります。
<図>

NEO-6MGPSモジュールの概要
- NEO-6MGPSチップ
モジュールの心臓部は、u-bloxのNEO-6MGPSチップです。 50チャネルで最大22の衛星を追跡でき、45mAの供給電流しか消費せずに、業界最高レベルの感度、つまり-161dBの追跡を実現します。 u-blox 6ポジショニングエンジンは、1秒未満のTime-To-First-Fix(TTFF)も誇っています。チップが提供する最高の機能の1つは、省電力モード(PSM)です。受信機の一部のON / OFFを選択的に切り替えることで、システムの消費電力を削減できます。これにより、モジュールの消費電力がわずか11mAに劇的に削減され、GPS腕時計などの電力に敏感なアプリケーションに適しています。 NEO-6M GPSチップの必要なデータピンは「0.1」ピッチヘッダーに分割されています。これには、UARTを介したマイクロコントローラーとの通信に必要なピンが含まれます。
注 :-モジュールは4800bpsから230400bpsまでのボーレートをサポートし、デフォルトのボーは9600です。
<図>
位置修正LEDインジケーター
NEO-6M GPSモジュールには、位置修正のステータスを示すLEDがあります。状態に応じてさまざまな速度で点滅します
- 点滅なし ==>は衛星を検索していることを意味します
- 1秒ごとに点滅 –位置修正が見つかったことを意味します

- 3.3VLDOレギュレーター
NEO-6Mチップの動作電圧は2.7〜3.6Vです。ただし、モジュールには、MICRELのMIC5205超低ドロップアウト3V3レギュレータが付属しています。ロジックピンも5ボルト耐性があるため、ロジックレベルコンバータを使用せずに、Arduinoまたは任意の5Vロジックマイクロコントローラに簡単に接続できます。
<図>
バッテリーとEEPROM
モジュールには、HK24C322線式シリアルEEPROMが装備されています。サイズは4KBで、I2Cを介してNEO-6Mチップに接続されています。モジュールには、スーパーキャパシタとして機能する充電式ボタン電池も含まれています。
EEPROMとバッテリーは、バッテリーでバックアップされたRAM(BBR)を保持するのに役立ちます。 BBRには、クロックデータ、最新の位置データ(GNSSまたはビットデータ)、およびモジュール構成が含まれています。ただし、永続的なデータストレージを目的としたものではありません。
バッテリーは時計と最後の位置を保持するため、最初の修正までの時間(TTFF)は1秒に大幅に短縮されます。これにより、はるかに高速な位置ロックが可能になります。
バッテリーがないと、GPSは常にコールドスタートするため、最初のGPSロックには時間がかかります。電源を入れるとバッテリーは自動的に充電され、電源が入っていない状態で最大2週間データを保持します。
<図>

ピン配置
<図>
- GNDはグランドピンであり、ArduinoのGNDピンに接続する必要があります。
- TxD(トランスミッタ)ピンはシリアル通信に使用されます。
- RxD(レシーバー)ピンはシリアル通信に使用されます。
- VCCはモジュールに電力を供給します。 Arduinoの5Vピンに直接接続できます。
Arduino Mega
Arduinoは、使いやすいハードウェアとソフトウェアに基づくオープンソースのエレクトロニクスプラットフォームです。 Arduinoボードは、入力(センサーのライト、ボタンの指、またはTwitterメッセージ)を読み取り、それを出力に変換することができます。モーターをアクティブにし、LEDをオンにし、オンラインで何かを公開します。ボード上のマイクロコントローラーに一連の命令を送信することで、ボードに何をすべきかを伝えることができます。そのためには、Arduinoプログラミング言語(配線に基づく)と、処理に基づくArduinoソフトウェア(IDE)を使用します。
<図>
Arduino Mega 2560は、Atmega2560をベースにしたマイクロコントローラーボードです。
- ボードには54個のデジタルI / Oピンと16個のアナログピンが組み込まれており、このデバイスを他とは一線を画すものにしています。54個のデジタルI / Oのうち、15個がPWM(パルス幅変調)に使用されます。
- 16MHz周波数の水晶発振器。
- ボードには、コンピューターからボードにコードを接続および転送するために使用されるUSBケーブルポートが付属しています。
- DC電源ジャックは、ボードに電力を供給するために使用されるボードに結合されています。
- ボードには2つの電圧レギュレーター(5Vと3.3V)が付属しており、要件に応じて電圧を柔軟に調整できます。
- リセットボタンとUSARTと呼ばれる4つのハードウェアシリアルポートがあり、通信をセットアップするための最高速度を生成します。
- ボードに電力を供給する方法は3つあります。 USBケーブルを使用してボードに電力を供給し、コードをボードに転送するか、ボードのVinを使用するか、電源ジャックまたはバッターを介して電力を供給することができます。
仕様
<図>
ピン配置
<図>
ピンの説明
- 5Vおよび3.3V ==>このピンは、約5Vの出力安定化電圧を提供するために使用されます。この安定化電源は、ボード上のコントローラーおよびその他のコンポーネントに電力を供給します。これは、ボードのVin、USBケーブル、または別の安定化された5V電圧電源から取得できます。別の電圧レギュレーションは3.3Vピンによって提供されます。引き出すことができる最大電力は50mAです。
- GND ==>ボードには5つのアースピンがあり、プロジェクトに複数のアースピンが必要な場合に便利です。
- リセット ==>このピンはボードをリセットするために使用されます。このピンをLOWに設定すると、ボードがリセットされます。
- ビン ==>ボードに供給される入力電圧は7Vから20Vの範囲です。電源ジャックによって提供される電圧には、このピンを介してアクセスできます。ただし、このピンからボードへの出力電圧は自動的に5Vに設定されます。
- シリアル通信 ==> RXDとTXDは、シリアルデータの送受信に使用されるシリアルピンです。つまり、Rxはデータの送信を表し、Txはデータの受信に使用されます。これらのシリアルピンには4つの組み合わせがあり、Serail 0にはRX(0)とTX(1)が含まれ、Serial 1にはTX(18)とRX(19)が含まれ、Serial 2にはTX(16)とRX(17)が含まれます。シリアル3にはTX(14)とRX(15)が含まれています。
- 外部割り込み ==> 6つのピンは、外部割り込みの作成に使用されます。つまり、割り込み0(0)、割り込み1(3)、割り込み2(21)、割り込み3(20)、割り込み4(19)、割り込み5(18)です。これらのピンは、さまざまな方法で割り込みを生成します。つまり、LOW値の提供、立ち上がりエッジまたは立ち下がりエッジ、または割り込みピンへの値の変更です。
- LED ==>このボードには、デジタルピン13に接続されたLEDが組み込まれています。このピンのHIGH値はLEDをオンにし、LOW値はLEDをオフにします。
- AREF ==> AREFは、アナログ入力の基準電圧であるアナログ基準電圧の略です。
- アナログピン ==>ボードにはA0からA15のラベルが付いた16本のアナログピンが組み込まれています。これらのアナログピンはすべてデジタルI / Oピンとして使用できることに注意してください。各アナログピンには10ビットの分解能があります。これらのピンは、グランドから5Vまで測定できます。ただし、上限値はAREFおよびanalogReference()関数を使用して変更できます。
- I2C ==> 2つのピン20と21はI2C通信をサポートします。20はSDA(主にデータを保持するために使用されるシリアルデータライン)を表し、21はSCL(主にデバイス間のデータ同期を提供するために使用されるシリアルクロックライン)を表します。
- SPI通信 ==> SPIは、コントローラと他の周辺機器コンポーネント間のデータ送信に使用されるシリアルペリフェラルインターフェイスの略です。 SPI通信には、50(MISO)、51(MOSI)、52(SCK)、53(SS)の4つのピンが使用されます。
Arduino IDE
ここでは、ArduinoIDEがすでにインストールされていることを前提としています。
1.以下に示す必要なライブラリをダウンロードします
TinyGPS lib
2.ダウンロードした後。解凍してフォルダC:\ Users \ ... \ Documents \ Arduino \ librariesに移動し、(-)がないことを確認します。
<図>
3. Arduino IDEを開き、プログラムセクションからコードをコピーします。
4.次に、そのボードを選択します。[ツール] ==> [ボード] ==>ここでArduinoMega2560を使用しているボードを選択します。
<図>
5.ボードを選択したら、そのポートを選択し、[ツール] ==> [ポート]に移動します。
<図>
6.ボードとポートを選択したら、[アップロード]をクリックします。
<図>
接続
Arduino MEGA ==> NEO-6M GPS
- 3.3V ==> VCC
- GND ==> GND
- Tx1(18)==> Rx
- Rx1(19)==> Tx
Serial1の代わりにSerial2またはSerial3を使用することもできます
Serial2ピン
- Tx2(16)==> Rx
- Rx2(17)==> Tx
Serial3ピン
- Tx3(14)==> Rx
- Rx3(15)==> Tx
<図>

結果 <図>

コード
- Arduinomega_GPS
Arduinomega_GPS Arduino
//ピン18および19に接続#include// long lat、lon; //緯度と経度の変数を作成しますobjectfloatlat、lon; TinyGPS gps; // gps objectvoid setup(){Serial.begin(57600);を作成します// serialSerial.println( "GPS受信信号:"); Serial1.begin(9600);に接続します// gpsセンサーを接続します} void loop(){while(Serial1.available()){// gpsデータをチェックしますif(gps.encode(Serial1.read()))// gpsデータをエンコードします{gps.f_get_position(&lat 、&lon); //緯度と経度を取得Serial.print( "Position:"); // Latitude Serial.print( "Latitude:"); Serial.print(lat、6); Serial.print( "、"); // Longitude Serial.print( "Longitude:"); Serial.println(lon、6); }}} / * //ピン16および17に接続#include // long lat、lon; //緯度と経度の変数を作成しますobjectfloatlat、lon; TinyGPS gps; // gps objectvoid setup(){Serial.begin(57600);を作成します// serialSerial.println( "GPS受信信号:"); Serial2.begin(9600);に接続します// gpsセンサーを接続します} void loop(){while(Serial2.available()){// gpsデータをチェックしますif(gps.encode(Serial2.read()))// gpsデータをエンコードします{gps.f_get_position(&lat 、&lon); //緯度と経度を取得Serial.print( "Position:"); // Latitude Serial.print( "Latitude:"); Serial.print(lat、6); Serial.print( "、"); // Longitude Serial.print( "Longitude:"); Serial.println(lon、6); }}} * // * //ピン14および15に接続#include // long lat、lon; //緯度と経度の変数を作成しますobjectfloatlat、lon; TinyGPS gps; // gps objectvoid setup(){Serial.begin(57600);を作成します// serialSerial.println( "GPS受信信号:"); Serial3.begin(9600);に接続します// gpsセンサーを接続します} void loop(){while(Serial3.available()){// gpsデータをチェックしますif(gps.encode(Serial3.read()))// gpsデータをエンコードします{gps.f_get_position(&lat 、&lon); //緯度と経度を取得Serial.print( "Position:"); // Latitude Serial.print( "Latitude:"); Serial.print(lat、6); Serial.print( "、"); // Longitude Serial.print( "Longitude:"); Serial.println(lon、6); }}} * /
回路図

製造プロセス