# NMEA-0183

NMEA-0183 is een protocol om apparatuur aan boord van schepen gegevens te laten uitwisselen. Dit protocol is geschikt om via seriële verbindingen (met name RS-422-lijnen in de nieuwere versies, RS-232 in de originele 1.0-versie) informatie te versturen. Volgens het officiële protocol gaat dit met 4800 baud, maar vaak kan een hogere baudrate gekozen worden als alle apparatuur dit ondersteunt.

## Het protocol

Het precieze protocol is beschermd materiaal en kan via het National Marine Electronics Association (NMEA) tegen betaling verkregen worden. Er zijn talloze beschrijvingen van sentences te vinden op het internet.
Het protocol bestaat uit losse berichtjes (sentences) waarin bepaalde gegevens gegroepeerd zijn. De sentences bestaan in principe alleen uit leesbare ASCII characters en de 'carriage return'- en 'line feed'-karakters. Een sentence kan maximaal 82 tekens lang zijn, inclusief de $ en de CR/LF.
Iedere sentence bevat een vast aantal componenten.
* Eerst komt een dollarteken ($).
* Daarna twee tekens met de talker id. Dit is een afkorting voor de apparatuur die de sentence verstuurt (bijvoorbeeld de gps stuurt berichtjes met de talker id GP en GLONASS id GL).
* Dan volgt de sentence identifier van drie letters. Deze geeft aan wat de informatie in de sentence is en bepaalt daarmee ook de lay-out van de rest van de sentence. Een voorbeeld van een sentence identifier is HDT voor een bericht dat de koers van een schip verstuurt.
* Het deel dat nu volgt is van variabele lengte en kan getallen en tekst bevatten. De inhoud wordt bepaald door de sentence identifier en het NMEA-0183 protocol. Sommige velden in een sentence zijn niet verplicht, maar dan moeten die posities wel leeg worden doorgegeven. (zie onderstaand voorbeeld) Verschillende velden worden met komma's gescheiden.
* Aan het einde van het bericht mag een checksum toegevoegd worden. Als dit gedaan wordt, dan komt eerst een asterisk (*) en volgt daarna de hexadecimale weergave van de xor van alle tekens tussen de '$' en de '*'. De checksum is twee tekens lang. Voorbeeld: $TTSSS,veld,1,veld,2,,*2A.
* Als laatste volgen de tekens 'carriage return' en 'line feed'.
Een voorbeeld:

## Lengte- en breedtegraden

De geografische coördinaten in de NMEA-sentences zijn in die notatie-vorm niet altijd meteen bruikbaar en moeten dan omgerekend worden. De eerste 2 (of 3 bij de lengtegraden) cijfers representeren het aantal graden, gevolgd door 2 cijfers die de minuten representeren. De laatste 4 cijfers (na de punt) representeren 1/10000e van een minuut.
Voorbeeld:
* NMEA uitvoer:
    5312.3456,N,00612.3456,E
* Graden, minuten, seconde -notatie (° ' "):
    53°12'20.736" (noorderbreedte)
    6°12'20.736" (oosterlengte)
* Graden:
    53.20576 (noorderbreedte)
    6.20576 (oosterlengte)

### Omrekenen

Van NMEA naar graden-minuten-seconde notatie gaat als volgt:
Van NMEA naar graden gaat als volgt:

## Betrouwbaarheid van de data

Een indicatie van de betrouwbaarheid van de ontvangen NMEA-data is het aantal satellieten wat gebruikt is voor de plaatsbepaling. Voor een nauwkeurige plaatsbepaling dienen de satellieten zo ver mogelijk uit elkaar te staan ten opzichte van het punt waar de ontvanger zich bevindt. Naarmate het aantal zichtbare satellieten groter is, zal er zeer waarschijnlijk ook een paar zijn, wat een redelijk grote hoek maakt t.o.v. de ontvanger en dus zal de nauwkeurigheid groter zijn. Een eenheid, die in de NMEA-sentences meegegeven kan worden, die deze (on)nauwkeurigheid aangeeft is de dilution of precision (DOP). Er zijn verschillende varianten van deze DOP-waarde:
* PDOP = Position Dilution Of Precision (Komt het meest voor)
* VDOP = Vertical Dilution Of Precision
* GDOP = Geometric Dilution Of Precision
* HDOP = Horizontal Dilution Of Precision
* TDOP = Time Dilution Of Precision
Deze DOP-waarde geeft de verwachte standaard deviatie weer in meters. DOP-waardes van meer dan 6 zijn in de praktijk niet bruikbaar meer voor navigatie op straat, omdat je dan al snel een zijstraat zou kunnen missen binnen de bebouwde kom.

### Fix, 2D of 3D navigatie

De NMEA-sentences geven ook informatie, terwijl de ontvanger mogelijk nog geen betrouwbare "fix" heeft kunnen vaststellen. In de $GPGSA-sentence staat of er al een "fix" is bepaald en zo ja, of dit een betrouwbare 2D-, dan wel een 3D- positiebepaling is en welke satellieten hiervoor gebruikt zijn. Voor een 3D-positiebepaling zijn minimaal 4 satellieten nodig, maar het is evenwel mogelijk dat er bijvoorbeeld 10 satellieten ontvangen worden en toch geen nauwkeurige hoogte bepaald kan worden. Dit kan het gevolg zijn van reflecties door gebouwen of andere obstakels.

## Meest voorkomende NMEA-sentences

Er zijn vele tientallen verschillende NMEA-sentences mogelijk en nog veel meer als je de fabrikant-eigen uitbreidingen meeneemt (beginnen met een $P). Niet alle NMEA-sentences zijn echter altijd even nuttig en worden daarom ook niet standaard weergegeven. (NMEA-sentences zijn vaak wel aan- of uit te zetten)
Dit zijn de meest voorkomende:
* $GPRMC Recommended minimum specific GNSS data
    De meest nuttige informatie in 1 NMEA-sentence. Hierin staan de coördinaten, tijd, datum, grondsnelheid en -richting en of de data "Valid" is.
* $GPGGA Global positioning system fixed data
    Hierin staat onder andere de tijd, de breedte- en lengtegraad, Noord/Zuid, Oost/West, de hoogte, aantal satellieten, HDOP en of er een "fix" is en zo ja of dat een 2D of 3D-fix is.
* $GPGLL Geographic position - latitude / longitude
    Een vrij korte NMEA-sentence met de coördinaten en de tijd.
* $GPGSA GNSS DOP and active satellites
    Informatie over de gebruikte satellieten, diverse DOP-waardes en of er een "fix" is.
* $GPGSV GNSS satellites in view
    Gedetailleerde informatie over de satellieten die in beeld zijn. Dit kan zelfs verdeeld zijn over maximaal 3 NMEA-sentences.
* $GPVTG Course over ground and ground speed
    Deze (vaak korte) NMEA-sentence geeft aan wat de koers en snelheid (in knopen en/of km/u) is.