u-blox NEO-M9N GPS Logger

Hook a multi-band GNSS module to an Arduino and log NMEA position fixes to the serial monitor.

Difficulty: Breadboard. Estimated build time: about 45 minutes. Estimated parts cost: about US$45.00. 5-line bill of materials. Compare supplier offers when available. A position-aware data source built around the u-blox NEO-M9N, a 25-channel GNSS receiver that tracks GPS (USA), Galileo (EU), GLONASS (Russia), and BeiDou (China) simultaneously.

Power the module and place the antenna

The NEO-M9N takes 3.3 V on V_CC. Connect Arduino 3.3 V, GND to GND. The module needs a clear sky view: take it outside or place the active antenna by a window. Indoors in a basement you will see zero satellites and the fix LED will never blink.

Wire UART with a level shifter

Module TX (3.3 V) goes directly to Arduino RX (D0 on the UNO is 5 V tolerant on input). Arduino TX (5 V) to module RX needs a 1k/2k divider down to 3.3 V to avoid damaging the GNSS chip’s input. Or use a software-serial pair (D2/D3) with a logic-level converter for safety.

Install TinyGPS++ and parse a fix

Library Manager, “TinyGPSPlus by Mikal Hart”. Open File > Examples > TinyGPSPlus > DeviceExample. Upload, open Serial Monitor at 115200 baud. After 1–3 minutes you should see “Satellites: 4 LAT: 45.4733 LNG: -75.7203” — a real position fix.

Log to an SD card

Combine with the Arduino MicroSD Data Logger build: every time gps.location.isUpdated() returns true, append a CSV line of timestamp, lat, lng, alt to a file. You’ve just built a hiking tracker. Decode the CSV in Google My Maps to see your route.