Auslesen eines Smartsensors (NMEA2000) durch Arduino UNO möglich?

Hallo in die Runde,

da ich hier neu bin, hoffe ich an der richtigen Stelle gelandet zu sein, und keinen bereits bestehenden Thread übersehen zu haben -falls doch, lasst es mich wissen.

Rahmen
In einem Arduino-Projekt versuche ich manuell einen Tiefenmesser (Echolot) für Gewässer zu basteln, dessen Werte zusammen mit GPS Daten auf einem Datenlogger gespeichert werden sollen.

Eigentliche Frage:
Kann ich ohne Shields etc. das Echolot (Raymarine DST 800V, NMEA2000 PGN 128267) mit Hilfe eines Arduino UNO auslesen? Welcher Bus wird verwendet und kann ich bestehende Bibliotheken nutzen?

Da ich relativ neu auf dem Gebiet bin, weiß ich nicht richtig, wie ich an so eine Fragestellung herangehen soll. Die Hardware besitze ich bereits -nur das Wissen fehlt :grin:

Hoffe ich kann hier ein wenig Hilfe bekommen. Falls ich hier richtig bin, kann ich gerne weitere Informationen nachkommen lassen.

Viele Grüße,
Roonpower

Welche Schnittstellen das Echolot hat und mit welchem Protokol die Daten gesendet werden mußt Du im Handbuch / Informationen vomHändler suchen.

Wenn Du das weißt dann sehen wir weiter.

Grüße Uwe

Hallo Uwe,

danke für die schnelle Antwort.
Als Infos zu Protokoll und Schnittstelle habe ich 2 Bilder hinzugefügt, die vom Hersteller sind.
Hilft das weiter?

Gruß
Roonpower

Also so wie ich das sehe ist das ein CAN-Anschluss.
Ich weiß nicht ob das mit einem nackten UNO machbar ist, wenn dann aber nur mit einem ziemlichen Berg an Code.
Sinnvoll wäre ein CAN-Modul, MCP2515 wäre wohl das Stichwort.

Weiter kann ich da mangels Wissen allerdings auch nicht helfen, obwohl mich das Thema (Bzw beide Themen für sich: CAN und Nautik) sehr fasziniert!

Also ich habe mir gerade mal ein paar Sachen auf Wikipedia dazu durchgelesen. NMEA 2000 verwendet einen CAN-Bus mit 250 kBit/s. Es basiert auf dem SAE J1939 Protokoll aus dem Automobilbereich. Dieses wiederum erlaubt das Versenden von Nachrichten mit bis zu 1785 Bytes Nutzdaten.

Da dürfte ein Uno keine Chance haben. Wie es mit dem CAN-Interface auf dem Due aussieht, kann ich nicht sagen.

Ein alternatives Einsteigerboard mit CAN und gerade hinreichend viel Speicher wäre z.B. das hier
https://developer.mbed.org/platforms/mbed-LPC1768/

Eventuell macht es aber mehr Sinn z.B. einen Raspi mit einem CAN-Interface einzusetzen, je nachdem was der Rest der Anwendung eigentlich machen soll.

Danke für die Infos, ArduFe und Zeitsklave!

Die Wiki Seiten habe ich mir auch schon durchgelesen, verstehe aber nur die Hälfte, weil ich nicht vom Fach bin.

Dass das Echolot einen CAN Bus verwendet habe ich mittlerweile verstanden, womit mein UNO aber nicht klar kommt (wobei ich hier die Begründung nicht ganz verstehe, ist es die Datenmenge, oder die Geschwindigkeit oder was überfordert das Board? :sweat_smile: ).

Da ich aber bei Arduino als Controller bleiben will, und das Echolot "nur" auslesen will, lässt mir das offensichtlich 3 Möglichkeiten:

o ein Shield für das UNO CAN BUS Shield

o Arduino Due Arduino DUE
Wobei ich nicht verstehe wenn es heißt: "CAN: CANRX and CANTX These pins support the CAN communication protocol but are not not yet supported by Arduino APIs."

o 2 MCs (CAN Controller MCP2515 und MCP2551 CAN Transceiver) und jede Menge Coding

Sehe ich das richtig?

Ziel soll es grundsätzlich sein das Echolot auslesen zu können, um die Tiefen-Daten zu erhalten... Bietet sich hier eine der genannten Alternativen an, oder gibt es sogar noch eine andere Möglichkeit im Rahmen von Arduino?

Vielen Dank!

Hallo und Danke für die Rückmeldung.

Ja, meine Antwort zum Uno war etwas kurz. Das muss ich noch etwas genauer erklären.

Wie du schon bemerkt hast, gibt es Controller mit eingebauten CAN. Der genannte LPC1768 gehört dazu und auch der SAM3 auf dem Due. Das heißt aber nicht, dass man den CAN-Bus da direkt anschliessen kann, einen Transceiver-Chip, wie den MCP2551 braucht man immer noch. Das sind aber recht einfache ICs, die wandeln nur Spannungen um. Der genannte MCP2551 geht übrigens nicht am Due, da dieser keine 5V Signale verträgt, da müsste man sich nach einer Alternative umsehen.

Da fängt das Problem schon an, die offizielle Unterstützung für die CAN-Schnittstelle des Due ist praktisch nicht vorhanden, man muss sich da durch einen Forenthread mit 30 Seiten hangeln. So interessiert an CAN bin ich nicht, das ich mir das bisher mal angetan habe.

Es führt also kein Weg an einem Shield vorbei. Meistens ist da auch ein MCP2515 und ein Transceiver verbaut.

Ok, nach diesem Exkurs komme ich zum eigentlichen Grund meiner Antwort zum Uno. So ein Uno hat 2 kB RAM und 30 kB Flashspeicher. Das ist für so eine Anwendung ein bischen wenig.

Es wird ja erstmal eine Library für das CAN-Shield benötigt. Die sendet und empfängt erstmal nur einzelne CAN-Messages, welche maximal 8 Bytes Daten empfangen.

Darüber liegen dann die sogenannten Transportprotokolle. Die sind dazu da, mit vielen kleinen 8 Byte Messages große Datenblöcke zu transportieren. Unschönerweise verwendet dieses J1939 gleich zwei davon, je nach Bedarf. Das wird eine ganze Menge Programmierarbeit. Ist keine Raketenwissenschaft, ich habe das mal für ein anderes Protokoll gemacht, das im PKW-Bereich verbreitetere ISO 15765-2. Man muss halt programmieren können und die Bereitschaft haben Doku zu lesen. Die könnte noch ein Problem werden, wenn man da nichts öffentliches findet, muss man notfall die ISO-Norm kaufen. Das ist teuer.

So im Controller läuft also erstmal eine Logik, die über diese Transportprotokolle die Datenpakete zusammensetzt. Da schon eines davon bis zu knapp 1800 Bytes groß sein kann, wäre schon mal ein Mega die kleinstmögliche Lösung dafür.

Aus diesen Rohdaten-Paketen muss man jetzt noch mit Hilfe eines Katalogs dieser NMEA Botschaften die Daten extrahieren. Darüber weiß ich nicht viel, da ist wieder Doku gefragt. Der Code könnte eine gewisse Menge Flash belegen, das spricht wieder für Mega oder Due.

Ich denke das ist alles im Prinzip machbar, man sollte aber etwas Zeit einplanen und das ganze etwas in Teilprojekte zerlegen.

Was mir gerade noch einfällt: Ein anderer Weg wäre man bleibt bei einem Uno mit CAN-Shield und hängt diesen per USB an was größeres (Raspi, Beaglebone, PC ...). Der Arduino reicht dabei nur den Inhallt der CAN-Messages über die serielle Schnittstelle durch.

So, ich habe mich noch etwas umgesehen. Es gibt Open Source Projekte die NMEA 2000 auf dem PC verarbeiten können. Die verwenden aber käufliche NMEA zu USB-Adapter. Diesen Teil soll hier ja dann auch noch der Arduino übernehmen. Allerdings braucht man nur den Ausschnitt der Protokolle, die das Echolot tatsächlich verwendet. Aber auch das muss man erst mal herausfinden.

Windows
http://openskipper.org/openskipperwordpress/

Linux

Die vorgeschlagene Raspi plus Uno (mit CAN-Bus Shield) Lösung scheint also der Weg zu sein. Für eine Lösung mit Arduino allein kommt wahrscheinlich nur der Due mit für 3,3 V geeignetem Shield infrage, der Mega dürfte auch aus dem Rennen sein.

Vielen Dank nochmal an euch!
Von open skipper habe ich während der Recherche schon gehört und mich schlau gemacht. An sich interessant, aber ich hatte einen anderen Weg erhofft.

Aber die Tatsachen sind anscheinend doch ernüchternd und schade.
Werde mich nochmals melden, falls es irgendwie weiter geht!
Dann aber mit einem anderen Schwerpunkt nämlich einer SPI Verschaltung der restlichen Komponenten. Da sitze ich an einem Fehler, den ich einfach nicht genau lokalisieren kann -dazu aber bald mehr!

Grüße an die Community!

Hallo, hier bin ich wieder!

Anscheinend gibt es doch einen Weg die Daten auslesen zu können ( NMEA Projekt ) und ich will probieren es auf mein Projekt zu übertragen und dabei den Weg dahin zu verstehen.

Als erstes ist anscheinend die unterschiedliche Signalspannung der Komponenten das Problem.
N2k arbeitet mit 2,5 V, der zulässige Spannungsbereich des Arduino liegt jedoch bei 6 bis 20 V. Deshalb ist ein Pegelwandler nötig, der die Signale auf die gewünschte Spannung transformiert.

Leider verstehe ich die Wahl des gewählten Wandlers (MAX232N Datenblatt) und die dazugehörige Erklärung nicht: "Er wandelt RS232 Pegel in USART (5V) für den Arduino Uno".
Ich hätte an einen Wandler von 2,5 V auf beispielsweise 12 V gedacht.
Wo liegt denn mein Denkfehler?

Beste Grüße!

Hallo,

Roonpower:
Anscheinend gibt es doch einen Weg die Daten auslesen zu können ( NMEA Projekt )

Soweit ich sehe, geht es da um GPS-Datensätze. Die sind auch von der NMEA (National Marine Electronics Association) genormt. Einen Bezug zu den Daten eines Echolots sehe ich da aber nicht, außer dass man die Position misst, an der man die Tiefe misst. Ok, habs gefunden, das ist allgemein NMEA 0183, gilt auch für Echolote.

Roonpower:
N2k arbeitet mit 2,5 V, .

CAN arbeitet nicht mit 2,5 V Logikpegeln. Das ist etwas anderes (Differenzsignal).

Roonpower:
der zulässige Spannungsbereich des Arduino liegt jedoch bei 6 bis 20 V.

Das ist falsch. Die Stromversorgung des Arduino liegt in diesem Bereich. Die meisten Arduinos arbeiten mit 5 V CMOS Logikpegeln, außer Zero und Due, da sind es 3,3 V.

Roonpower:
Er wandelt RS232 Pegel in USART (5V) für den Arduino Uno".

Das passt ja auch. Am Eingang eines Arduino sind "low" 0 bis 1,5 V und "high" 2,0 V bis 5 V. Bei einer echten seriellen Schnittstelle (RS232, kein USB) sind "low" 3 V bis 15 V und "high" -3 V bis -15 V (man beachte die Vorzeichen).

Hallo,

vielen Dank wieder an ArduFe für die vielen Antworten!
Aber auf welchem Weg das Echolot die Daten weiter gibt, verstehe ich noch nicht.
Ich werde die vorgebastelte Lösung für NMEA0183 auf jeden Fall mal ausprobieren und sehen was passiert..