Schlagwort-Archive: NMEA Shield

Die Airmar PB100 Wetterstation mit dem NMEA Shield am PC auslesen

André Singer hat ein Programm für die Airmar Wetterstation PB100 und das NMEA Shield geschrieben.

Moin Moin !

Ich habe einen AIRMAR PB100 an das Shield angeschlossen.
Die PB100 sendet und empfängt Ihre NMEA0183 Daten nicht über eine normale RS232 sondern über RS485.
Zum Glück haben die gesendeten Daten einen vernünftigen Pegel, trotz 25m Zuleitung, sodass
hierfür die Serial3 zum empfangen der Daten genutzt werden konnte. Zum senden der Einstellungen und Befehle habe ich die RS485 auf Serial1 verwendet, da hierfür die 25m einfach zu lang war, oder aber die PB100 die Daten wirklich als RS485 erwartet.
Für die Serial3 ist es wichtig die Masse der 12V Versorgung der PB100 noch mit auf die Klemme zu legen.


Danach kann man die Daten über den Seriellen Monitor sich anschauen oder aber über die Software von AIRMAR visualisieren. Weiterlesen

Der Heading NMEA2000 Datensatz 127250 wird zu NMEA0183 übersetzt und ausgegeben

Der Vessel Heading PGN 127250 wird mit dem NMEA Shield eingelesen, zerlegt und als NMEA0183 Datensatz auf TX1 wieder ausgegeben. Bei einem Magnetkompass wird HDM (Magnetic) ausgegeben und bei einem Satelliten- oder Kreiselkompass HDT (True).

Genau so können auch andere NMEA2000 Daten übersetzt werden.

Diese Übersetzung wird benötigt wenn man von einem neuen Autopiloten mit NMEA2000 Verkabelung ein schnelles Heading für ein altes Radar benötigt. Die Kompaßdaten werden typisch 10x pro Sekunde ausgegeben.

Die NMEA0183 Datensätze sind hier beschrieben:
http://nmea.de/nmea0183datensaetze.html#hdm

Hier das Programm: Weiterlesen

NMEA2000 Position einlesen und auf USB Klartext ausgeben mit dem NMEA Shield

Der NMEA2000 PGN 129025 liefert schnelle Positionsdaten mit Breite und Länge typisch 10x in der Sekunde. Diese werden mit den NMEA Shield am N2K Eingang eingelesen und als Klartext per USB am PC ausgegeben.

Hier das Programm:

// Die Positionsdaten vom PGN 129025 werden mit dem 
// NMEA Shield in den Arduino eingelesen und dann 
// formatiert auf USB ausgegeben.
// 
// PGN 129025 : Position, Rapid Update, typisch 10x pro Sek.
//
// Matthias Busse 12.04.2017 Version 1.0

#include <SPI.h>
#include <Arduino.h>
#include <NMEA2000_CAN.h>
#include <N2kMessages.h>
#include <N2kMessagesEnumToStr.h>

#define N2k_CAN_INT_PIN 21
#define MCP_CAN_RX_BUFFER_SIZE 100

typedef struct {
  unsigned long PGN;
  void (*Handler)(const tN2kMsg &N2kMsg); 
} tNMEA2000Handler;

void PositionRapid(const tN2kMsg &N2kMsg);

tNMEA2000Handler NMEA2000Handlers[]={
  {129025L,&PositionRapid},
  {0,0}
};

template<typename T> void PrintLabelValWithConversionCheckUnDef(const char* label, T val, double (*ConvFunc)(double val)=0, bool AddLf=false ) {
  Serial.print(label);
  if (!N2kIsNA(val)) {
    if (ConvFunc) { Serial.print(ConvFunc(val)); } 
    else { Serial.print(val); }
  } 
  else Serial.print("not available");
  if (AddLf) Serial.println();
}

void setup() {
  Serial.begin(115200);
  Serial.println("NMEA2000 PGN 129025 PositionRapid als Klartext ausgeben");
  NMEA2000.EnableForward(false);
  NMEA2000.SetMsgHandler(HandleNMEA2000Msg);
  NMEA2000.Open();
}

void loop() {
  NMEA2000.ParseMessages();
}

void PositionRapid(const tN2kMsg &N2kMsg) {
// PGN 129025 LAT & LON, Rapid Update.
// kommt typisch 10x pro Sekunde
double Latitude;
double Longitude;
    
  if (ParseN2kPositionRapid(N2kMsg,Latitude,Longitude) ) {
    Serial.print("Breite: ");
    Serial.print(Latitude,5);
    Serial.print(" Laenge: ");
    Serial.println(Longitude,5);
  }
  else {
    Serial.print("Fehler PGN: ");
    Serial.println(N2kMsg.PGN);
  }
}

void HandleNMEA2000Msg(const tN2kMsg &N2kMsg) {
int iHandler;
  
  for (iHandler=0; NMEA2000Handlers[iHandler].PGN!=0 && !(N2kMsg.PGN==NMEA2000Handlers[iHandler].PGN); iHandler++);
  if (NMEA2000Handlers[iHandler].PGN!=0) {
    NMEA2000Handlers[iHandler].Handler(N2kMsg); 
  }
}

Verwendet wurden:
Arduino Software 1.8.0
NMEA Shield Version 1.7
Arduino Mega 2560
NMEA2000 GPS Antenne

von Matthias Busse

NMEA 2000 Daten in den Actisense NMEA Reader einlesen mit dem NMEA shield

Mit dem NMEA Shield werden Daten aus dem NMEA2000 Netz eingelesen und über USB zum PC gegeben. Im NMEA Reader von Actisense werden diese Daten als PGN mit den enthaltenen aktuellen Werten ausgegeben.

Der NMEA2000 Bus ist an die N2K High und N2K Low Klemme des NMEA Shields geschaltet.
Die Versorgungsspannung kann aus dem NMEA2000 Bus kommen mit 8V bis maximal 14V und GND (Bei einer höheren Spannung wird der Spannungsregler des Arduino Mega heiss ), von einem extra Netzteil mit 9V für den Mega direkt oder aus der USB Schnittstelle des PC. Weiterlesen