NMEA 0183 datastream to Computer via USB , NMEA 0183 via Arduino to Computer
Use NMEA data for navigation program on a computer
English version of the page below in pdf Using a NMEA 0183 data stream through the USB port of a computer using an Arduino Uno microprocessor {3 pages)
Gebruik van een NMEA 0183 datastroom via USB 2022 05 10
Doel
In mijn geval voor het gebruiken van een Raymarine AIS ontvanger als databron voor het OpenCPN navigatie/plotter programma. Er zijn tal van andere toepassingen, zoals bijvoorbeeld om een NMEA 0183 datastroom te kunnen inspecteren op een Serieel Monitor programma. (Standaard programma bij de Arduino IDE)
Gebruikte hardware
Er zijn andere mogelijkheden maar omdat ik de onderdelen nog had liggen heb ik hiervoor een Arduino Uno type microcontroller met een MAX485 module gebruikt.
De uitvoering
De Arduino Uno heeft een USB connectie om met een computer te communiceren: Deze wordt zowel gebruikt om de Arduino te programmeren als wel om data tijdens het runnen van het programma te kunnen gebruiken of inspecteren.
De NMEA datastroom is een differentieel systeem met twee datalijnen A en B. Ze liggen niet aan aarde om beter bestand te zijn tegen storing. Als lijn A 5 volt is, is lijn B 0 volt en andersom. De MAX 485 module zet de NMEA datastroom om in TTL met 5 volt ten opzichte van aarde. De ontvangen NMEA AIS datastroom loopt daarom via de MAX485 naar de digitale datapoorten van de Arduino:
De Raymarine AIS ontvanger met daarop de (zwarte) clone van een Arduino-Uno. De MAX 485 module is met 4 header pinnetjes verbonden met de digitale ingangen D4 t/m D7. De NMEA datastroom gaat via de getwiste wit groene verbinding van de AIS ontvanger naar de A en B ingang van de MAX485 module. De 5V voor de MAX wordt afgetapt van de Arduino. De USB poort voor de verbinding met de laptop zit linksonder op het zwarte Arduino printje nèt rechts van het rode reset knopje. De printjes liggen vast met dubbelzijdig schuimtape.
Het Programma
// Connecties
// Arduino naar MAX 485
// 6 DE Data Enable (SSerialTXControl)
// 5 RE Receive Enable (LedPin)
// 4 RO Receive Out (SSerialRX)
// 7 DI Data In (SSerialTX)
// 5V 5V red
// GND GND black
// AIS CABLE MAX485
// NMEA - white A
// NMEA + green B
// 12 V + red removed socket
// 12 V - black removed socket
#include <SoftwareSerial.h>
#define SSerialRX 4 // Receive Out
#define REPin 5 // Receive Enable
#define SSerialTXControl 6 // Data Enable
#define SSerialTX 7 // Data In
#define RS485Receive LOW
#define RS485Transmit HIGH
String inputString = "";
SoftwareSerial RS485Serial(SSerialRX, SSerialTX);
void setup()
{
inputString = ""; // start with empty line
inputString.reserve(200);
Serial.begin(38400); // data rate for communication with PC
pinMode(REPin, OUTPUT);
pinMode(SSerialTXControl, OUTPUT);
digitalWrite(SSerialTXControl, RS485Receive);
RS485Serial.begin(38400); // set data rate for communication MAX485 with AIS
}
void loop()
{
if(RS485Serial.available())
{
char charReceived = (char)RS485Serial.read();
inputString += charReceived;
if(charReceived == '\n') // end of line
{
Serial.println(inputString); // print line to USB/PC
Serial.println(""); // blanco line
inputString = ""; // clear inputstring
}
}
}
In bovenstaand geval wordt Software Serial gebruikt. Het is ook mogelijk de eerste twee hardware matig gekoppelde datapoorten D0 en D1 te gebruiken die standaard met de USB verbonden zijn.
De MAX 485 module wordt dan als volgt verbonden met de Arduino:
RO Receive Out to D0 (Hardware Serial connection)
DI Data In to D1
RE Receive Enable LOW in receive mode dus naar Signal Ground
DE Data Enable LOW in receive mode dus naar Signal Ground
5V 5V
GND GND
The MAX485 Module
A NMEA+
B NMEA-
In dit geval kan een programma met een lege loop() geladen worden
Voor het gebruik van de USB datastroom op de computer moet daar wel de juiste COM poort en baudrate op ingesteld zijn.
Bij het OpenCPN programma gaat dit via het menu Tools > Options > Connections
Het OpenCPN programma kan data via meerdere USB ingangen ontvangen. Bijvoorbeeld een GPS-muis positie via één USB poort en de AIS datastroom via een andere USB ingang. Het is in dit geval dus niet nodig eerst twee NMEA datastromen samen te voeg in één datastroom. (zoals bij de NMEA datarecorder [pagina NMEA Sentence Recording] gedaan is)
Jeroen Droogh bootprojecten@gmail.com