Arduino an NMEA‑0183 anschließen: Schritt-für-Schritt-Anleitung
Komponenten und Materialien
| Arduino UNO (oder kompatibel) | 1 |
| RS422/RS485 Shield mit isolierter Schnittstelle | 1 |
Projektübersicht
NMEA-0183 ist ein elektrischer Standard zur Verbindung von GPS, Sonar, Sensoren und Autopiloten in der Schifffahrt. Im Gegensatz zum neueren NMEA 2000 (CAN-basiert) nutzt NMEA 0183 die EIA RS422 (manchmal auch RS-232 oder Einzelleiter). Dieses Tutorial zeigt, wie Sie einen Arduino UNO (oder jedes andere Arduino-Board) an ein NMEA-0183-Gerät mit differentieller Ausgabe anschließen. Obwohl der Standard isolierte Ein-/Ausgänge fordert, ist ein RS422/RS485-Shield mit isolierter Schnittstelle eine praktische Lösung.
Anschluss an NMEA 0183
Typische Geräte verfügen über differenzielle Ausgänge: NMEA OUT+ und NMEA OUT- (oder TX+/TX-). Die Eingänge NMEA IN+ und IN- sind optional.
Falls Ihr Gerät nur einen einzelnen Sendeleiter besitzt (oft als TX oder NMEA OUT bezeichnet), handelt es sich um RS-232. In diesem Fall benötigen Sie einen einfachen RS232-Wandler (z. B. MAX232).
Jumper-Einstellung am Shield
- UART RX → Position 2
- UART TX → Position 3
- Spannung → 5 V
DIP-Schalter-Einstellung
Die DIP-Schalter konfigurieren den Shield für RS422-Voll-duplex-Betrieb (Terminierung, Biasing). Die genaue Belegung entnehmen Sie dem Datenblatt des Shields.
Firmware / Software
Es gibt diverse NMEA-0183-Bibliotheken für Arduino. Eine empfehlenswerte ist die NMEA0183-Bibliothek von Justin R. Cutler: GitHub-Repository.
Wichtig: Ändern Sie in der Bibliothek die Pins für die Software-UART auf Pin 2 (RX) und Pin 3 (TX). Stellen Sie sicher, dass die Baudrate der Software-UART mit Ihrem NMEA-Gerät übereinstimmt – typischerweise 4800 Baud.
Testlauf
Nach dem Hochladen des Sketches decodiert das Programm eingehende NMEA-Sätze. Öffnen Sie den seriellen Monitor (115200 Baud), um die dekodierten Datensätze anzuzeigen.
Falls kein echtes NMEA-Gerät zur Hand ist, können Sie einen Simulator auf dem PC (z. B. NMEA Simulator) und einen USB-RS485-Adapter verwenden.
Beispielcode
#include <NMEA0183.h> // passt zum Zihatec RS422/RS485 Shield
SoftwareSerial gps(2, 3); // RX, TX
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 Satz akzeptiert (");
Serial.print(nmea.getFields());
Serial.print(" Felder): ");
Serial.write(nmea.getSentence());
Serial.println();
}
}
}
Herstellungsprozess
- C# Queues meistern: Enqueue, Dequeue und First-In-First-Out Operationen erklärt
- Universelle IR-Fernbedienung mit Arduino bauen: Schritt-für-Schritt-Anleitung
- Roomba Create 2 per Arduino & Android steuern – Schritt-für-Schritt
- Arduino Mega mit NEO‑6M GPS-Modul verbinden: Schritt-für-Schritt-Anleitung
- Temperatur & Luftfeuchte mit DHT11 auf Blynk auslesen – Arduino-Tutorial Schritt für Schritt
- Thermistor (NTC) einfach nutzen: Schritt-für-Schritt Arduino-Anleitung
- Musikalische Töne mit Arduino erzeugen: Schritt-für-Schritt-Anleitung
- Modbus auf Arduino meistern: Schritt-für-Schritt-Anleitung
- Zuverlässiger Arduino-basierter Gerätetester für Power Blough-R Produkte
- Schleiftechniken für Werkzeugschleifmaschinen meistern: Praktischer Leitfaden