Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Промышленные технологии

GPS-Модули: Полное Руководство для Начинающих — Подключение к Arduino и Raspberry Pi

Нужны точные координаты, скорость, время для вашего проекта? GPS-модуль — решение. GPS (Global Positioning System) — спутниковая радионавигационная система (США, NAVSTAR), дающая позиционирование в любую погоду, на суше, в воздухе, на море. Модули GPS получают сигналы от спутников и выдают данные по UART/I2C/SPI в формате NMEA-0183. Разберем принцип работы, популярные модули (NEO-6M, NEO-M8N) и подключение к Arduino и Raspberry Pi.

Как работает GPS

Спутники (31 активный) на орбите ~20 200 км передают: точное время (атомные часы), эфемериды (орбита), альманах (грубая орбита всех). Приемник ловит сигналы ≥4 спутников. Из задержки распространения (скорость света) вычисляет псевдодальности. Трилатерация (пересечение 3 сфер) → 3D координаты (широта, долгота, высота) + время. Минимум 3 спутника для 2D, 4 для 3D. Точность: 2.5–5 м (стандарт), <1 м (SBAS/WAAS/EGNOS), ~1 см (RTK/PPK с базовой станцией).

Популярные GPS-модули для DIY

Подключение NEO-6M к Arduino

Схема (UART, SoftwareSerial)

GPS PinArduino Uno
VCC5V (на модуле есть LDO 3.3В)
GNDGND
TX (GPS)D3 (SoftwareSerial RX)
RX (GPS)D4 (SoftwareSerial TX) — через делитель 1к/2к на 3.3В!

Важно: RX GPS — 3.3В логика. Arduino 5В → делитель напряжения (R1=1кОм, R2=2кОм) или конвертер уровней. TX GPS → Arduino 5В толерантен (читает 3.3В как HIGH).

Код (TinyGPS++ — лучшая библиотека парсинга NMEA)

#include 
#include 

static const int RXPin = 3, TXPin = 4;
static const uint32_t GPSBaud = 9600; // дефолт NEO-6M

TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);

void setup() {
  Serial.begin(115200);
  ss.begin(GPSBaud);
  Serial.println(F("GPS Test - TinyGPS++"));
}

void loop() {
  while (ss.available() > 0) {
    gps.encode(ss.read());
  }
  if (gps.location.isUpdated()) {
    Serial.print(F("Lat: ")); Serial.print(gps.location.lat(), 6);
    Serial.print(F(" Lng: ")); Serial.println(gps.location.lng(), 6);
    Serial.print(F("Sats: ")); Serial.println(gps.satellites.value());
    Serial.print(F("HDOP: ")); Serial.println(gps.hdop.hdop());
    Serial.print(F("Alt: ")); Serial.print(gps.altitude.meters()); Serial.println(F(" m"));
    Serial.print(F("Speed: ")); Serial.print(gps.speed.kmph()); Serial.println(F(" km/h"));
    Serial.print(F("Date: ")); Serial.print(gps.date.day()); Serial.print(F("/"));
    Serial.print(gps.date.month()); Serial.print(F("/")); Serial.println(gps.date.year());
    Serial.print(F("Time: ")); Serial.print(gps.time.hour()); Serial.print(F(":"));
    Serial.print(gps.time.minute()); Serial.print(F(":")); Serial.println(gps.time.second());
    Serial.println();
  }
  // Таймаут: если нет данных 5 сек
  if (millis() > 5000 && gps.charsProcessed() < 10) {
    Serial.println(F("No GPS data: check wiring"));
  }
}

Установите библиотеку: Sketch → Include Library → Manage Libraries → «TinyGPSPlus» → Install.

Подключение NEO-M8N к Raspberry Pi (UART + Pynmea2)

Включение UART на Pi (Pi 3/4/5/Zero 2W)

  1. sudo raspi-config → Interface Options → Serial Port → Login Shell: No, Hardware: Yes → Finish → Reboot.
  2. Проверка: ls -l /dev/serial0 → должен указывать на ttyAMA0 (Pi 3/4/5) или ttyS0 (Pi 1/2/Zero).

Схема подключения

GPS PinRaspberry Pi (40-pin)
VCC3.3V (Pin 1 или 17)
GNDGND (Pin 6, 9, 14, 20, 25, 30, 34, 39)
TX (GPS)RX (GPIO 15, Pin 10)
RX (GPS)TX (GPIO 14, Pin 8) — через делитель 1к/2к на 3.3В!

Python скрипт (pynmea2)

pip3 install pyserial pynmea2

import serial
import pynmea2

port = "/dev/serial0"
baud = 9600 # или 115200 для M8N
ser = serial.Serial(port, baudrate=baud, timeout=1)

print("Reading GPS NMEA sentences...")
try:
    while True:
        line = ser.readline().decode('ascii', errors='replace').strip()
        if line.startswith('$G') or line.startswith('$GNGGA') or line.startswith('$GNRMC'):
            try:
                msg = pynmea2.parse(line)
                if isinstance(msg, pynmea2.types.talker.GGA):
                    print(f"Fix: {msg.gps_qual}, Sats: {msg.num_sats}, HDOP: {msg.horizontal_dil}")
                    print(f"Lat: {msg.lat} {msg.lat_dir}, Lon: {msg.lon} {msg.lon_dir}, Alt: {msg.altitude} {msg.altitude_units}")
                elif isinstance(msg, pynmea2.types.talker.RMC):
                    print(f"Speed: {msg.spd_over_grnd} knots, Course: {msg.true_course} deg")
                    print(f"Date: {msg.datestamp}, Time: {msg.timestamp}")
            except pynmea2.ParseError:
                pass
except KeyboardInterrupt:
    print("Exit")
    ser.close()

Как выбрать GPS-модуль для проекта

ЗадачаРекомендуемый модульПочему
Простое логирование трека, навигация пешехода/автоNEO-6M / ATGM336HДешево, просто, 5 Гц достаточно
Дрон, робот, быстрая динамикаNEO-M8N / M9N (10–25 Гц)Высокая частота обновления, мульти-GNSS, быстрый холодный старт
Точное позиционирование (геодезия, сельхоз, дроны RTK)NEO-M8P / ZED-F9P (RTK)Поддержка RTK/PPK, точность см, L1/L2/L5
Автономный трекер на батарее (mesiats)NEO-6M / M8N + Deep Sleep MCUНизкое потребление, быстрый горячий старт (Hot Start < 1 с)
Городские ущелья, лес, сложные условияМульти-GNSS (M8N/M9N) + внешняя активная антеннаБольше спутников = лучшая геометрия и доступность

Заключение

GPS-модули — доступный способ получить точное время и координаты. Начинайте с NEO-6M + Arduino + TinyGPS++ — за 15 минут получите координаты. Для серьезных задач — мульти-GNSS (M8N/M9N), внешняя антенна, RTK. Raspberry Pi + pynmea2 — для логирования, серверов, IoT-шлюзов. Главные грабли: 3.3В логика (делитель на RX GPS), активная антенна (питание 3.3В через центр. контакт SMA), холодный старт (30–60 сек под открытым небом). Вопросы по NMEA, UBX протоколу, RTK, антеннам — пишите.

Промышленные технологии

  1. AIaaS разоблачен: полное руководство по AI как услуге
  2. Мастерство управления обслуживанием: повышение эффективности и снижение затрат
  3. Освоение управления цепочками поставок: Полное руководство
  4. Ваше полное руководство по покупке CMMS: максимизация производительности активов
  5. Промышленные сенсорные мониторы: руководство для новичков по долговечным open-frame дисплеям
  6. Пресенситизированные PCB: полное руководство по проектированию и производству
  7. Мастерство LED-драйверов: полное руководство по эффективному освещению
  8. Холодная электричество: теория LC-контура, эксперимент Теслы и отличия от обычного тока
  9. Полное руководство по трассам печатных плат: проектирование PCB Trace
  10. LM311: полное руководство по аналогам и заменам компаратора