Arduino MegaとNEO-6M GPSモジュールの接続:ステップバイステップガイド
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Mega 2560 | 1 | 約$30 |
| u-blox NEO-6M GPSモジュール | 1 | 約$30、外部アンテナ付属、ピンヘッダは要ハンダ付け |
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
Arduino MegaとNEO-6M GPSモジュールのインターフェースに関するチュートリアルが見当たらなかったため、自分で作成しました。総費用は約$60です。
GPSについて
GPSとは?
全地球測位システム(GPS)は、最低24基の衛星で構成される衛星ベースの航法システムです。天候に関係なく、世界中どこでも、24時間365日、利用料やセットアップ費用なしで利用できます。
GPSの仕組み
GPS衛星は1日2周の精密な軌道を周回し、固有の信号と軌道パラメータを送信します。GPS受信機はこれらを受信し、三辺測量によって正確な位置を計算します。具体的には、衛星からの信号到達時間から距離を測定し、複数の衛星との距離から位置を特定します。
2D位置(緯度・経度)と移動追跡には最低3基、3D位置(高度含む)には4基以上の衛星捕捉が必要です。通常8基以上を追尾しますが、時間帯と場所によります。位置確定後は速度、方位、移動距離、目的地までの距離なども算出可能です。
GPS信号の構成
GPS衛星は少なくとも2つの低電力無線信号を送信します。信号は見通し線で伝播し、雲・ガラス・プラスチックは透過しますが、建物や山などの固体は遮断します(最新受信機は家屋内でも受信可能な場合あり)。信号には3種類の情報が含まれます:
- 擬似ランダムコード:衛星を識別するIDコード
- エフェメリスデータ:衛星の精密軌道、健全性、日時情報
- アルマナックデータ:全衛星の軌道情報と、一日を通した各衛星の位置予測
NEO-6M GPSモジュール
モジュールには外部アンテナが付属し、ピンヘッダは自分でハンダ付けする必要があります。
モジュールの概要
NEO-6M GPSチップ
u-blox製NEO-6Mチップを搭載。50チャネルで最大22衛星を同時追尾し、業界最高レベルの-161 dBm感度を実現しながら消費電流はわずか45mA。TTFF(初回測位時間)は1秒未満。特筆すべきはPower Save Mode(PSM)で、受信機の一部を選択的にオン/オフすることで消費電流を11mAまで低減可能。GPS腕時計など電力に敏感な用途に最適です。必要なデータピンは0.1インチピッチのヘッダに引き出されており、UARTでマイコンと通信できます。
注意:ボーレートは4800bps〜230400bps対応、デフォルトは9600bps。
測位状態LEDインジケータ
モジュール上のLEDで測位状態を表示:
- 点灯しない:衛星探索中
- 1秒ごとに点滅:測位完了(Position Fix取得)
3.3V LDOレギュレータ
NEO-6Mチップの動作電圧は2.7〜3.6Vですが、モジュールにはMIC5205超低ドロップアウト3.3Vレギュレータ(MICREL製)を搭載。ロジックピンは5Vトレラントなので、Arduino等の5Vマイコンにロジックレベル変換なしで直接接続可能です。
バッテリーとEEPROM
HK24C32 2線式シリアルEEPROM(4KB、I2C接続)と充電式ボタン電池(スーパーキャパシタとして機能)を搭載。これらはバッテリーバックアップRAM(BBR)を維持します。BBRにはクロックデータ、最新測位データ、モジュール設定が保存されます(永続ストレージではない)。バッテリーによりクロックと最終位置が保持されるため、TTFFが1秒に短縮され、高速な測位ロックが可能になります。バッテリーなしでは常にコールドスタートとなり、初回ロックに時間がかかります。電源投入時に自動充電され、無電源状態で最大2週間データを保持します。
ピンアウト
- GND:グランド、ArduinoのGNDに接続
- TxD(送信):シリアル通信用
- RxD(受信):シリアル通信用
- VCC:電源入力、Arduinoの5Vピンに直接接続可能
Arduino Mega 2560
Atmega2560ベースのマイコンボード。主な特徴:
- デジタルI/O 54本(うち15本はPWM対応)、アナログ入力16本
- 16MHz クリスタル発振子
- USBポート、DC電源ジャック
- 5Vと3.3Vの2系統レギュレータ内蔵
- リセットボタン、4つのハードウェアシリアルポート(USART)
- 3通りの電源供給:USB、Vinピン、DCジャック/バッテリー
ピン説明(主要なもの)
- 5V / 3.3V:レギュレート済み電源出力。3.3Vは最大50mA
- GND:グランドピン×5
- Reset:LOWでボードリセット
- Vin:7-20V入力、内部で5Vに変換
- シリアル通信:4系統(Serial0: RX0/TX1、Serial1: RX19/TX18、Serial2: RX17/TX16、Serial3: RX15/TX14)
- 外部割り込み:6ピン(0, 3, 21, 20, 19, 18)
- 内蔵LED:デジタルピン13
- AREF:アナログ基準電圧
- アナログピン:A0-A15、10ビット分解能、デジタルI/Oとしても使用可
- I2C:SDA(20)、SCL(21)
- SPI:MISO(50)、MOSI(51)、SCK(52)、SS(53)
Arduino IDEの準備
- TinyGPSライブラリをダウンロード
- 解凍後、
C:\Users\...\Documents\Arduino\librariesに配置(フォルダ名にハイフンを含めないこと) - Arduino IDEを開き、ボードを「Arduino Mega 2560」、ポートを選択してアップロード
配線
Arduino Mega → NEO-6M GPS
- 3.3V → VCC
- GND → GND
- Tx1 (ピン18) → Rx
- Rx1 (ピン19) → Tx
Serial2(Tx2:16/Rx2:17)やSerial3(Tx3:14/Rx3:15)を使うことも可能です。
実行結果
シリアルモニタに緯度・経度が6桁の精度で表示されます。添付のスクリーンショットを参照してください。
製造プロセス
- Arduino Nanoで水滴を高速撮影 – DIYハイスピードフォトグラフィ
- Arduino MegaとNextion HMIで作る高機能ウェザーステーション
- u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- ArduinoをNMEA-0183に接続するステップバイステップガイド
- Arduino GPS+TFTタッチシールドで作るリアルタイム位置表示デバイス
- ArduinoでModbusをマスターする:ステップバイステップガイド
- VisuinoでGPSデータをMicroSDカードにログ記録する方法(Arduino Nano)
- Arduino UNOとNEO-6MモジュールでGPS目的地通知装置を作る
- SIM800L GPRSモジュールをArduinoでATコマンド制御:統合ガイド