Conectando Arduino ao NMEA‑0183: Guia Passo a Passo
Componentes e Materiais
| Arduino UNO | × | 1 |
| Shield RS422 / RS485 | × | 1 |
Sobre o Projeto
O NMEA-0183 é um padrão elétrico para conectar GPS, sonar, sensores, pilotos automáticos, etc., em navios e barcos. Diferente do padrão mais novo NMEA 2000 (baseado em CAN), o NMEA 0183 baseia-se no EIA RS422 (alguns sistemas mais antigos ou simples usam RS-232 ou fio único).
Mostrarei como conectar um Arduino UNO (ou qualquer outro Arduino) a qualquer dispositivo NMEA-0183 com saída diferencial. Embora o padrão exija entradas e saídas isoladas, é útil usar nosso Shield Arduino RS422/RS485 com interface isolada.
Conexão ao NMEA 0183
Na imagem abaixo, você vê um dispositivo típico com saída diferencial. Os terminais são NMEA OUT+ e NMEA OUT- ou TX+ ou TX-. Os fios NMEA IN+ e NMEA IN- são opcionais.

Se você tem apenas um fio de transmissão do seu dispositivo (provavelmente rotulado TX ou NMEA OUT), então seu dispositivo usa o protocolo RS-232. Nesse caso, você precisará de um conversor RS232 simples.
Configuração dos Jumpers

- UART RX na posição 2
- UART TX na posição 3
- Tensão na posição 5V
Configuração dos DIP Switches

Firmware
Existem várias bibliotecas NMEA-0183 para Arduino. Uma excelente solução é a biblioteca NMEA de Justin R Cutler:
É necessário alterar os pinos da UART de software para os pinos 2 e 3! Certifique-se de que a taxa de baud da UART de software seja a mesma do seu dispositivo NMEA - típico 4800 Baud.
Teste
Após compilar e carregar, o programa decodificará os protocolos NMEA recebidos. Abra o Monitor Serial para ver os protocolos decodificados.
Se você não tem um dispositivo NMEA em casa, também pode usar um simulador no PC e um adaptador USB para RS485 simples em vez de um dispositivo real.

Código
Demo NMEA 0183 Arduino
Parsing de protocolos NMEA 0183
#include <NMEA0183.h> // compatível com shield Zihatec RS422/RS485 SoftwareSerial gps(2, 3); 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 sentence accepted ("); Serial.print(nmea.getFields()); Serial.print(" fields): "); Serial.write(nmea.getSentence()); Serial.println(); } } }
Processo de manufatura
- Dominando Queues em C#: Enqueue, Dequeue e Operações First-In-First-Out Explicadas
- Construa um Controle Remoto IR Universal com Arduino: Guia Passo a Passo
- Controlar Roomba Create 2 com Arduino e Android: Guia Passo a Passo
- Conectando Arduino Mega ao Módulo GPS NEO‑6M: Guia Passo a Passo
- Leitura de Temperatura e Umidade com DHT11 no Blynk – Tutorial Arduino Passo a Passo
- Usando Termistor Facilmente: Guia Passo a Passo com Arduino
- Criar Tons Musicais com Arduino: Um Guia Passo a Passo
- Dominando Modbus no Arduino: Guia Passo a Passo
- Testador Automatizado Baseado em Arduino para Produtos Power Blough-R
- Dominando Técnicas de Retificadora de Ferramentas e Cortadores: Guia Prático