아두이노를 NMEA-0183에 연결하기: 단계별 가이드
부품 및 소모품
| 아두이노 우노 |
1개 |
| RS422 / RS485 쉴드 |
1개 |
프로젝트 소개
NMEA-0183은 선박에서 GPS, 소나, 센서, 자동조타 장치 등을 연결하기 위한 전기 표준입니다. 최신 NMEA 2000 표준(CAN 기반)과 달리 NMEA 0183은 EIA RS422 기반입니다(일부 구형/단순 시스템은 RS-232 또는 단일 와이어 사용).
이 가이드에서는 아두이노 우노(또는 기타 아두이노)를 차동 출력을 가진 NMEA-0183 장치에 연결하는 방법을 보여줍니다. 표준은 절연 입출력을 요구하지만, 절연 인터페이스가 있는 RS422/RS485 아두이노 쉴드를 사용하는 것이 실용적입니다.
NMEA-0183 연결
아래 그림은 차동 출력을 가진 일반적인 장치입니다. 단자는 NMEA OUT+와 NMEA OUT- 또는 TX+/TX-입니다. NMEA IN+/IN- 와이어는 선택 사항입니다.
장치에서 단일 송신 와이어만 있는 경우(대개 TX 또는 NMEA OUT으로 표시), 해당 장치는 RS-232 프로토콜을 사용합니다. 이 경우 간단한 RS232 컨버터가 필요합니다.
점퍼 설정
- UART RX → 위치 2
- UART TX → 위치 3
- 전압 → 5V 위치
DIP 스위치 설정
펌웨어
아두이노용 NMEA-0183 소프트웨어 스택이 다양하게 존재합니다. 저스틴 R 커틀러의 NMEA 라이브러리가 훌륭한 솔루션입니다.
중요: 소프트웨어 UART 핀을 2번과 3번으로 변경해야 합니다! 또한 소프트웨어 UART의 보드레이트가 NMEA 장치와 동일해야 합니다(일반적으로 4800 보드).
테스트 실행
컴파일 및 업로드 후 프로그램이 수신된 NMEA 프로토콜을 디코딩합니다. 시리얼 모니터를 열어 디코딩된 프로토콜을 확인하세요.
실제 NMEA 장치가 없다면 PC에서 시뮬레이터와 간단한 USB-RS485 어댑터를 사용하여 테스트할 수 있습니다.
코드
NMEA 0183 데모 아두이노
NMEA 0183 프로토콜 파싱
#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();
}
}
}