Modul GPS NEO-6M dengan Arduino: Baca Koordinat & Kenapa Fix Lambat

Cartoon of a blue NEO-6M GPS module with a silver metal-can chip and four pins, its grey coaxial cable running to a large square silver-shielded ceramic patch antenna tilted skyward with teal signal arcs and navy stars above it

NEO-6M memberi Arduino koordinat kedudukan secara langsung melalui tiga wayar sahaja β€” VCC ke 5 V, GND ke GND, dan pin TX modul disilangkan ke satu pin SoftwareSerial pada 9600 baud β€” tetapi di luar rumah sahaja. Di dalam rumah ia tetap hidup, tetap menghantar data, dan tetap tidak pernah dapat fix, dan LED fix-nya memang tidak akan berkelip. Itu modul yang berfungsi, bukan modul rosak.

Apa yang anda perlukan untuk membaca koordinat GPS pada Arduino?

Modul GPS GY-NEO-6M ialah sebuah board biru yang membawa penerima u-blox NEO-6M dalam tin logam perak, berserta antena patch seramik segi empat 25 mm bersalut perisai perak pada satu pigtail coaxial kelabu. Empat sambungannya bersilkscreen VCC, RX, TX, GND di sepanjang tepi atas β€” dan ia tiba sebagai lubang plated yang masih kosong. Empat pin yang dipatahkan daripada jalur header male 40-pin lalu disolder masuk ialah langkah pertama binaan ini, sebelum sebarang pendawaian; panduan solder pin header kami menerangkan tekniknya.

Pilihan β€” paparan di meja, kabel dan set solder

ItemPriceQty
0.96β€˜ OLED Display Module Blue White Screen I2C IIC Serial 128X64 LCD Display Board - 0.96' OLED WHITE0.96β€˜ OLED Display Module Blue White Screen I2C IIC Serial 128X64 LCD Display Board - 0.96' OLED WHITE096OLWHRM15.80
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)ATBC100RM4.90
80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic Project80W Electronics Soldering Iron with LCD Display Ajustable Temperature Microconstroller Electronic ProjectASOIRONRM39.95
50g Soldering Wire Lead with Flux Core 1mm Diameter50g Soldering Wire Lead with Flux Core 1mm Diameter50SOTINRM9.90

OLED 0.96 inci menjadikan binaan ini alat pegang tangan yang memaparkan koordinat tanpa laptop, dan ia menggunakan pin I2C Uno iaitu A4 dan A5, yang memang dibiarkan kosong oleh binaan ini. Kabel USB A-to-B pula ialah kabel berplug segi empat yang diterima oleh soket bersaiz penuh pada Uno β€” tambah satu kalau bentuk itu belum ada dalam laci anda. Besi solder dan timah pula untuk empat pin header modul; langkau kalau anda sudah ada besi solder.

Selepas disolder, modul itu memakai pin male, Uno pula mempunyai soket shield female dan OLED tiba dengan pin male sudah terpasang β€” jadi satu pek jumper male-to-female menyambung kedua-duanya terus ke board, tanpa breadboard di tengah.

Perbandingan kartun sudut modul GPS biru: di sebelah kiri empat lubang kosong bercincin emas ditanda pangkah oren, di sebelah kanan lubang yang sama dengan header perak empat pin berpangkal hitam sudah disolder masuk dan tanda betul teal, di sebelah jalur header 40-pin yang dipatahkan
Modul ini tiba dengan empat lubang bercincin emas yang masih kosong. Empat pin dipatahkan dari jalur lalu disolder masuk ialah langkah sifar, bukan naik taraf.

Kenapa fix GPS pertama ambil masa berminit-minit sedangkan datasheet kata 27 saat?

Bagi NEO-6M, datasheet u-blox menyebut cold start 27 saat, hot start 1 saat dan ketepatan mendatar 2.5 m, semuanya di bawah langit terbuka. Jurang antara angka itu dengan sepuluh minit yang orang sebenarnya tunggu bukan tanda modul rosak; itu had apa yang satelit mampu hantar secara fizikal.

Setiap satelit GPS menyiarkan mesej navigasinya pada 50 bit sesaat, dibina daripada frame 30 saat, dan apa yang penerima perlukan daripada setiap satelit β€” pembetulan jamnya dalam subframe 1, data orbitnya atau ephemeris dalam subframe 2 dan 3 β€” memenuhi tiga daripada lima subframe enam saat itu, jadi ia berulang sekali setiap 30 saat. Penerima yang tidak tahu apa-apa terpaksa mentafsir 18 saat siaran itu daripada setiap satelit yang hendak digunakannya, dan ia hanya sempat menangkapnya dari mula sekali setiap frame. Lapan belas hingga tiga puluh saat mendengar semata-mata itulah lantainya; tiada perubahan pendawaian atau library yang boleh memendekkannya.

Selebihnya mesej itu ialah almanak, orbit kasar seluruh konstelasi, ditaburkan nipis merentasi 25 frame berturut-turut β€” 25 Γ— 30 s = 12.5 minit untuk diterima sepenuhnya. Itulah angka di sebalik nasihat “biarkan di luar seketika”: u-blox meletakkan almanak lengkap pada kebiasaannya 12 minit selepas fix pertama. Setelah modul memilikinya, ia tahu lebih kurang di mana setiap satelit sepatutnya berada dan berhenti mencari secara buta.

Itu juga tugas sel bateri sandaran di bahagian bawah board. Ia menyimpan jam penerima dan ephemeris terakhir dalam memori bersokong bateri pada kira-kira 22 Β΅A, jadi hidupan berikutnya ialah hot start β€” modul sudah tahu waktu dan ke mana hendak mencari, lalu angka 1 saat dalam datasheet itu menjadi realistik. Dibiarkan tanpa kuasa berminggu-minggu, atau selnya sudah kosong, ia kembali semula ke cold start.

Melihat satu modul mencari fix di luar rumah membuatkan tempoh menunggu itu lebih nyata:

Kenapa NEO-6M tidak pernah dapat fix di dalam rumah?

Angka kepekaan NEO-6M menjawabnya dengan tepat. Tracking dan navigasi dispesifikasikan pada βˆ’161 dBm, tetapi cold start tanpa bantuan memerlukan βˆ’147 dBm. Menangkap satelit dari kosong memerlukan isyarat 14 dB lebih kuat berbanding mengekalkan satelit yang sudah ada β€” beza kuasa dua puluh lima kali ganda. Pemasaan dalam datasheet menganggap satelit tiba pada kira-kira βˆ’130 dBm, yang meninggalkan cold start hanya 17 dB ruang lebih sedangkan tracking ada 31 dB β€” dan konkrit, jubin serta plaster biasa memakan bajet itu dengan cepat. Jadi modul yang nampak elok di birai tingkap selepas anda bawa masuk dari kebun itu tidak akan sesekali mendapat fix pertamanya di situ.

Antena patch seramik itu bersifat berarah: permukaan logam perak yang rata itulah sisi penerimanya, dan ia mahu permukaan itu mengadap langit terbuka, bukan berdiri tegak β€” nota antena u-blox meminta satah patch itu selari dengan ufuk dengan pandangan langit yang penuh. Railing balkoni, meja taman atau bumbung kereta semuanya menjadi, dan permukaan logam rata di bawahnya menolong dan bukan mengganggu: ia melanjutkan ground plane antena, sebab itulah u-blox menyebut bumbung atau dashboard kereta sebagai tempat ideal dan meletakkan saiz ground plane yang berguna pada 50–70 mm persegi. Yang menghalang langit ialah logam di atas atau di sisi permukaan perak itu, termasuk filem tinted bermetal pada cermin kereta, bukan logam di bawahnya. Hujan dan awan pula tidak: GPS pada 1.5 GHz menembusi titisan air, manakala dedaun basah dan konkrit menyerapnya.

Perbandingan kartun modul GPS biru berantena seramik perak di dalam rumah di bawah siling konkrit kelabu dengan lengkung isyarat teal dihalang pangkah oren dan LED yang gelap, berbanding di luar rumah di bawah langit terbuka dengan lengkung isyarat yang tidak terputus dan LED merah berkelip
Modul sama, pendawaian sama, dua tempat berbeza. Di sebelah kiri LED fix gelap dan modul itu sihat sepenuhnya; di sebelah kanan ia berkelip sekali sesaat.

Bagaimana cara mendawai NEO-6M ke Arduino Uno?

Cip NEO-6M berjalan pada rel 2.7–3.6 V, yang dihasilkan oleh regulator kecil pada board biru itu daripada apa sahaja yang anda beri pada VCC, jadi 5 V masuk memang betul dan memang dijangka. Pin I/O cip itu sendiri yang merupakan bahagian 3.3 V: u-blox menetapkan julat inputnya sebagai 0 V hingga VCC dan maksimum mutlaknya 3.6 V, jadi TX 5 V daripada Uno tidak boleh mendarat terus pada pin RX modul. Binaan di bawah memang langsung tidak menggunakan arah itu.

Pin modul Uno Kenapa
VCC 5V Regulator board menurunkannya ke rel 3.3 V penerima
GND GND Rujukan dikongsi β€” tanpanya talian serial tiada makna langsung
TX D4 Bersilang. Modul bercakap, Uno mendengar. Ini sahaja wayar yang diperlukan sketch
RX β€” (biarkan kosong) Hanya perlu untuk konfigur semula modul. TX Uno ialah 5 V dan perlukan pembahagi voltan dahulu

TX ke TX gagal secara senyap β€” dua pemancar menjerit sesama sendiri tidak menghasilkan data dan tiada mesej ralat β€” sebab itulah ia kesilapan yang paling lama bertahan. D4 itu sendiri pilihan bebas β€” mana-mana pin digital kecuali 0 dan 1.

TX modul memacu taliannya ke rel 3.3 V dalaman itu. ATmega328P pada 5 V mengira apa-apa yang melebihi 0.6 Γ— VCC β€” iaitu 3.0 V β€” sebagai logik tinggi, jadi 3.3 V melepasi ambang itu dengan margin lebih kurang 0.3 V. Margin 0.3 V itu nipis, jadi noise pada jumper yang panjang boleh menarik satu bit ke bawah ambang di tengah-tengah aksara: pendekkan wayar TX. Panduan Bluetooth HC-05 kami menggunakan corak terima-sahaja yang sama atas sebab yang sama.

Library apa yang diperlukan oleh code Arduino NEO-6M?

NEO-6M menghantar teks NMEA biasa pada 9600 baud, 8-N-1, sebaik sahaja ia dihidupkan β€” ayat GGA, GLL, GSA, GSV, RMC, VTG dan TXT, sama ada ia sudah dapat fix atau belum. TinyGPSPlus oleh Mikal Hart, dipasang daripada Library Manager, menukarkan ayat berpisah koma itu menjadi nombor: latitud mentah tiba dalam bentuk ddmm.mmmm, bukan darjah perpuluhan, dan setiap ayat membawa checksum untuk disahkan.

Ayat-ayat itu juga mengumumkan keadaan fix dalam teks biasa, dan itu pemeriksaan kesihatan yang lebih baik daripada LED. Dalam $GPRMC, medan tepat selepas waktu ialah satu huruf β€” V untuk void, bermakna belum ada kedudukan, bertukar kepada A untuk active pada fix pertama β€” dan $GPGGA menyatakan perkara yang sama dengan satu digit kualiti fix, 0 sebelum dan 1 selepas. Modul yang belum dapat fix tetap menghantar kedua-duanya setiap saat, cuma medan kedudukannya dibiarkan kosong.

/*
  NEO-6M GPS -> Arduino Uno: koordinat langsung pada Serial Monitor.
  Library: TinyGPSPlus oleh Mikal Hart (Library Manager).

  Pendawaian ini TERIMA-SAHAJA dan TX/RX mesti BERSILANG:
    GPS VCC -> Uno 5V     GPS GND -> Uno GND     GPS TX -> Uno D4
  Uno D3 -> GPS RX bersifat pilihan dan perlukan pembahagi voltan (lihat artikel).

  Serial Monitor pada 115200, modul pada 9600. Dua nombor berbeza, memang sengaja.
*/
#include <SoftwareSerial.h>
#include <TinyGPS++.h>

const uint8_t  UNO_RX_PIN = 4;      // Uno MENDENGAR di sini <- TX modul
const uint8_t  UNO_TX_PIN = 3;      // Uno BERCAKAP di sini  -> RX modul (pilihan)
const uint32_t GPS_BAUD   = 9600;   // lalai kilang NEO-6M, 8-N-1

SoftwareSerial gpsSerial(UNO_RX_PIN, UNO_TX_PIN);
TinyGPSPlus gps;

uint32_t lastReport = 0;

void setup() {
  Serial.begin(115200);
  gpsSerial.begin(GPS_BAUD);
  Serial.println(F("NEO-6M starting. Give it sky - indoors it will never fix."));
}

void loop() {
  // Kosongkan modul setiap pusingan. Terlepas ini, buffer 64 bait melimpah.
  while (gpsSerial.available() > 0) {
    gps.encode(gpsSerial.read());
  }

  if (millis() - lastReport < 2000) return;
  lastReport = millis();

  // MASALAH 1: tiada apa-apa masuk langsung -> pendawaian atau baud, bukan langit.
  if (gps.charsProcessed() < 10) {
    Serial.println(F("NO DATA on D4 - check GPS TX -> D4 (crossed) and 9600 baud"));
    return;
  }

  Serial.print(F("chars "));
  Serial.print(gps.charsProcessed());
  Serial.print(F("  bad-checksum "));
  Serial.print(gps.failedChecksum());
  Serial.print(F("  sats "));
  if (gps.satellites.isValid()) {
    Serial.print(gps.satellites.value());
  } else {
    Serial.print(F("--"));
  }

  // MASALAH 2: ayat mengalir tetapi tiada kedudukan -> antena dan langit, bukan wayar.
  if (!gps.location.isValid()) {
    Serial.println(F("  NO FIX YET - data is flowing, so the module is alive"));
    return;
  }

  Serial.print(F("  lat "));
  Serial.print(gps.location.lat(), 6);
  Serial.print(F("  lng "));
  Serial.print(gps.location.lng(), 6);
  Serial.print(F("  age "));
  Serial.print(gps.location.age());
  Serial.print(F(" ms  alt "));
  Serial.print(gps.altitude.meters(), 1);
  Serial.println(F(" m"));
}

Pada Uno, ini mengkompil kepada 8,434 bait flash β€” 26% daripada 32 KB β€” dan 518 bait RAM statik. Pemisahan baud itu berbaloi: SoftwareSerial hanya menyimpan 64 bait yang diterima, sedangkan modul menghantar sehingga 960 bait sesaat pada 9600 baud. Mencetak laporan 110 aksara pada 9600 akan menyibukkan board selama kira-kira 115 ms, dan dalam tempoh itu kira-kira 110 bait lagi tiba lalu buffer melimpah; pada 115200 baris yang sama mengambil kira-kira 10 ms dan kurang daripada sedozen bait sahaja beratur. Tampal latitud dan longitud yang tercetak itu terus ke Google Maps untuk menyemaknya.

Menambah OLED bermakna empat wayar lagi β€” GND, VCC, SCL ke A5, SDA ke A4, dan ambil perhatian bahawa GND yang datang dahulu pada headernya, bukan VCC β€” kemudian Adafruit_SSD1306 pada alamat 0x3C mencetak nilai gps.location.lat() yang sama. Ia bukan percuma pada Uno: library itu menyimpan keseluruhan frame buffer 128 Γ— 64 dalam RAM, iaitu 1 KB daripada 2 KB milik ATmega328P, jadi balut string literal dalam F() dan lukis semula secara berjimat β€” satu frame penuh melalui I2C mengambil puluhan milisaat, sedangkan buffer serial 64 bait itu penuh dalam enam puluh tujuh milisaat. Merekod ke kad SD pula binaan seterusnya yang paling semula jadi β€” trek GPS hanyalah baris berstempel masa, dan data logger SD Arduino kami menguruskan bahagian failnya.

Macam mana rupanya NEO-6M yang sihat tetapi belum dapat fix?

NEO-6M memberi dua isyarat kesihatan yang berasingan, dan membacanya secara berasingan menukar panik “modul rosak” menjadi diagnosis dua minit. LED fix dipacu oleh output TIMEPULSE, yang menurut spesifikasi protokol u-blox secara lalai menghasilkan satu denyut 100 ms sesaat mengikut waktu GPS, dan tiada denyut langsung apabila tiada fix β€” dan penerima tidak boleh menyelaraskan apa-apa dengan waktu GPS sehingga ia menyelesaikan ofset jamnya sendiri, yang memerlukan fix. Jadi LED itu bukan lampu kuasa: gelap atau menyala tetap ialah keadaan normal tanpa fix, dan kelipan 1 Hz mengumumkan bahawa koordinat sudah sah.

Apa yang anda nampak Apa maknanya Di mana hendak periksa
Langsung tiada apa-apa pada Serial Monitor Modul tidak sampai ke Uno TX/RX bersilang? TX modul pada pin yang diisytiharkan sketch? Monitor pada 115200, gpsSerial pada 9600? VCC dan GND kedua-duanya bersambung?
Ayat mengalir, tiada koordinat, LED gelap Modul yang sihat sepenuhnya, cuma tiada langit Keluar ke luar rumah dan tunggu β€” bawa laptop sekali, atau pasang OLED supaya ia boleh dibaca tanpa laptop. Pastikan pigtail antena sudah berklik masuk, dan perhatikan $GPRMC sehingga Vnya bertukar kepada A
Bilangan satelit naik, masih tiada fix Ia sedang berfungsi β€” cuma satelitnya belum cukup, atau data orbitnya belum cukup Tunggu lebih lama dan luaskan pandangan langit. Empat ialah minimum: tiga menetapkan kedudukan, yang keempat menyelesaikan ofset jam penerima itu sendiri
Koordinat keluar, kemudian beku Isyarat hilang, nilai terakhir dikekalkan Perhatikan nilai age memanjat; melebihi beberapa saat bermakna ia sudah berhenti dikemas kini
Aksara bercelaru Baud tak sepadan atau buffer melimpah Set dropdown Serial Monitor ke 115200 β€” pada 9600 lalai ia mencetak sampah; 9600 pula dalam gpsSerial.begin(); pendekkan jumper TX; jangan tersekat di dalam loop()
Perbandingan kartun dua laptop: di sebelah kiri skrin gelap kosong dengan pangkah oren dan jumper kuning yang longgar, di sebelah kanan skrin penuh garisan data kelabu abstrak dengan tanda betul teal, berwayar ke modul GPS biru berantena seramik perak
Monitor kosong bermakna wayarnya salah. Data mengalir tanpa koordinat bermakna pendawaian betul dan langitnya yang tidak cukup.

Kesilapan biasa yang kami nampak daripada pelanggan sebenar

Menilai modul berdasarkan LEDnya. Seorang pelanggan memberitahu kami secara terus terang: “Helo my gps cant turn on”, kemudian “i tried with uno, nano”, dan sekali lagi “My gps cant turn on”. Bertukar board memang tidak akan menjawabnya β€” Uno dan Nano menjalankan sketch ini pada pin yang sama β€” dan dua punca sebenarnya bukan kerosakan langsung: NEO-6M di dalam rumah tidak dapat fix, jadi LEDnya memang tidak akan berkelip, dan TX mesti bersilang ke RX. Periksa kedua-duanya sebelum anda mendawai semula apa-apa atau mengesyaki board itu.

Terlepas klik antena. Penyambung u.FL emas di sudut board itu sangat kecil dan duduk dengan satu klik positif yang halus. Separuh masuk, modul tetap boot dan tetap mengalirkan ayat β€” ia cuma langsung tidak mengumpul satelit, yang nampak persis seperti penerimaan teruk. Tanggalkannya dengan memegang badan plug, jangan sekali-kali tarik pada coax: soket pada board yang akan tercabut dahulu.

Membekalkan kuasa daripada power bank yang sudah lemah. Ketika mencari satelit itulah penerima menarik arus paling banyak, dan brown-out di tengah pencarian memulakan semula cold start dari kosong. Port laptop atau adapter yang betul ialah sumber yang lebih selamat untuk fix pertama itu.

Mengharapkan prestasi taraf dron di atas meja. Ini board yang sama digunakan flight controller β€” tetapi pada dron ia mendapat UART perkakasan yang khas untuknya dan antena yang dipasang tinggi pada tiang, bukan patch terbaring rata di bawah tangan anda.

FAQ

Kenapa LED NEO-6M saya tidak berkelip?

Sebab ia belum dapat fix, dan di dalam rumah itu perkara normal, bukan kerosakan. LED itu mengikut output timepulse, dan timepulse hanya bermula setelah penerima mempunyai waktu GPS yang sah β€” yang tiba bersama fix pertama. Gelap atau menyala tetap bermakna ia sedang mencari. Kalau ayat NMEA sampai ke Serial Monitor anda, modul itu perlukan langit, bukan pembaikan.

Berapa lama NEO-6M ambil masa untuk dapat fix?

Di bawah langit terbuka, u-blox menetapkan 27 saat dari cold, 1 saat dari hot. Fix kali pertama selalunya ambil beberapa minit kerana satelit menyiar pada 50 bit sesaat dan data orbitnya berulang hanya setiap 30 saat. Biarkan ia di luar rumah dan terus hidup selama sepuluh minit pada kali pertama; hidupan selepas itu jauh lebih pantas.

Perlukah level shifter untuk NEO-6M pada Arduino Uno?

Tidak perlu kalau anda cuma membacanya. Output TX modul pada 3.3 V melepasi ambang logik tinggi 3.0 V milik Uno, jadi wayar terus pun berfungsi. Pembahagi voltan hanya diperlukan pada pin RX modul, dan hanya kalau anda menghantar arahan konfigurasi kepadanya β€” input itu dinilai pada rel 3.3 V dalamannya, bukan pada 5 V.

Boleh tak saya guna pin 0 dan 1 dan bukan SoftwareSerial?

Boleh, tetapi anda kehilangan Serial Monitor: pin 0 dan 1 ialah UART perkakasan yang sama digunakan cip USB, jadi modul dan komputer anda akan menjerit pada satu talian yang sama. Mana-mana pin digital lain dengan SoftwareSerial mengekalkan kedua-duanya.

Apa beza modul NEO-6M dengan NEO-8M?

GY-NEO-8M membawa u-blox NEO-M8N, yang menerima beberapa konstelasi satelit serentak dan bukan GPS semata-mata. Lebih banyak satelit dalam pandangan bermakna fix yang lebih pantas dan lebih stabil, dan itu paling terasa apabila langitnya separa terlindung. Pinout, output 9600 baud dan sketch di atas semuanya kekal sama β€” naik taraf terus pasang.

Kemas kini terakhir Ogos 2026. Tersangkut? Chat dengan kami di WhatsApp.

Leave a Reply

Your email address will not be published. Required fields are marked *