Cara Menggunakan NMEA-0183 dengan Arduino
Komponen dan persediaan
| | × | 1 | |
| | × | 1 | |
Tentang proyek ini
NMEA-0183 adalah standar kelistrikan untuk menghubungkan GPS, SONAR, sensor, unit pilot otomatis, dll. di kapal dan perahu. Berbeda dengan standar NMEA 2000 yang lebih baru (berdasarkan CAN), NMEA 0183 didasarkan pada EIA RS422 (beberapa sistem lama dan/atau sederhana menggunakan RS-232, atau satu kabel).
Saya ingin menunjukkan kepada Anda cara menghubungkan Arduino UNO (atau Arduino lainnya) ke perangkat NMEA-0183 apa pun dengan output diferensial. Meskipun panggilan standar untuk input dan output terisolasi, berguna untuk menggunakan RS422/RS485 Arduino Shield kami dengan antarmuka terisolasi.
Koneksi ke NMEA 0183
Pada gambar di bawah ini Anda dapat melihat perangkat khas dengan output diferensial. Terminalnya adalah NMEA OUT+ dan NMEA OUT- atau TX+ atau TX-. Kabel NMEA IN+ dan NMEA IN adalah opsional.
Jika Anda memiliki satu kabel transmisi dari perangkat Anda (kemungkinan besar berlabel TX atau NMEA OUT atau semacamnya), maka perangkat Anda menggunakan protokol RS-232. Dalam hal ini Anda memerlukan konverter RS232 sederhana.
Pengaturan Jumper
Pengaturan Pengalihan DIP
Firmware
Anda dapat menemukan banyak tumpukan perangkat lunak NMEA-0183 yang berbeda untuk Arduino. Solusi yang sangat bagus adalah perpustakaan NMEA oleh Justin R Cutler
https://github.com/jrcutler/NMEA0183
Perlu untuk mengubah pin UART perangkat lunak menjadi pin 2 dan 3! Ambil peduli itu yang bau tarif dari yang perangkat lunak uart adalah yang sama sebagai di Anda NMEA perangkat - khas 4800 Bau.
Uji Coba
Setelah kompilasi dan pengunggahan, program akan memecahkan kode protokol NMEA yang masuk. Anda dapat membuka monitor serial untuk melihat protokol yang didekodekan.
Jika Anda tidak memiliki perangkat NMEA di rumah, Anda juga dapat menggunakan Simulator di PC Anda dan adaptor USB ke RS485 sederhana alih-alih perangkat nyata.
Kode
Demo NMEA 0183Arduino
Mengurai protokol NMEA 0183#include // cocok dengan Zihatec RS422/RS485 shieldSoftwareSerial 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("Kalimat NMEA0183 diterima ("); Serial.print(nmea.getFields()); Serial.print(" bidang):"); Serial.write(nmea.getSentence()); Serial.println(); } }}