ArduinoをNMEA-0183に接続するステップバイステップガイド
必要な部品と材料
| 部品名 | 数量 |
|---|---|
| Arduino UNO | 1 |
| RS422/RS485シールド(絶縁インターフェース付き推奨) | 1 |
プロジェクト概要
NMEA-0183は、船舶でGPS、ソナー、センサー、オートパイロットなどを接続するための電気規格です。新しいNMEA 2000(CANベース)とは異なり、NMEA-0183はEIA RS422ベース(古い/簡易システムではRS-232や単線も使用)です。
このガイドでは、Arduino UNO(または他のArduino)を差動出力を持つNMEA-0183デバイスに接続する方法を解説します。規格では絶縁入出力が求められますが、絶縁インターフェースを備えたRS422/RS485 Arduinoシールドを使用すると便利です。
NMEA-0183への接続
一般的な差動出力デバイスの端子は「NMEA OUT+ / NMEA OUT-」または「TX+ / TX-」です。「NMEA IN+ / NMEA IN-」はオプションです。

デバイスから単一の送信線(TX、NMEA OUT等のラベル)のみ出ている場合はRS-232プロトコルです。この場合、シンプルなRS232コンバーターが必要です。
ジャンパー設定
- UART RX → 位置2
- UART TX → 位置3
- 電圧 → 5V
DIPスイッチ設定
ファームウェア
Arduino用のNMEA-0183ソフトウェアスタックはいくつか存在します。優れたソリューションとして、Justin R Cutler氏のNMEAライブラリがあります。
GitHubリポジトリ
重要: ソフトウェアUARTのピンを2と3に変更する必要があります。また、ソフトウェアUARTのボーレートがNMEAデバイスと一致することを確認してください(通常4800ボー)。
テスト実行
コンパイルしてアップロードすると、着信NMEAプロトコルをデコードします。シリアルモニターを開くとデコードされたプロトコルが表示されます。
実機がない場合は、PC上のシミュレーターとUSB-RS485変換アダプターでテスト可能です。

サンプルコード
#include <NMEA0183.h> // Zihatec RS422/RS485シールドに対応
SoftwareSerial gps(2, 3);
NMEA0183 nmea;
void setup() {
while (!Serial);
Serial.begin(115200);
gps.begin(4800);
Serial.println("NMEA0183 parser test");
}
void loop() {
if (gps.available()) {
char c = gps.read();
if (nmea.update(c)) {
Serial.print("NMEA0183 sentence accepted (");
Serial.print(nmea.getFields());
Serial.print(" fields): ");
Serial.write(nmea.getSentence());
Serial.println();
}
}
}
製造プロセス
- ArduinoでユニバーサルIRリモコンを自作:ステップバイステップガイド
- ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
- Arduino MegaとNEO-6M GPSモジュールの接続:ステップバイステップガイド
- DHT11 と Blynk で温湿度をリアルタイム監視する Arduino チュートリアル
- サーミスタを使った温度測定: Arduinoステップバイステップガイド
- Arduinoで楽器演奏:音階生成のステップバイステップガイド
- ArduinoでModbusをマスターする:ステップバイステップガイド
- Arduinoベースの信頼性の高いPower Blough-R製品テスター
- Arduino搭載HID UPS:ダミー電源をUSB対応バックアップにアップグレード
- カッターグラインダー技術の習得:実践ガイド
- C# Queue完全ガイド:Enqueue、Dequeue、FIFO操作の実例解説