GPS-модуль uBlox Neo 6M не отвечает

Я недавно начал работать с GPS-модулем uBlox Neo 6 М (спецификация http://www.u-blox.com/images/downloads/Product_Docs/NEO-6_DataSheet_%28GPS.G6-HW-09005%29.pdf). Я подключил его к Arduino Uno, как показано на рисунке:

GPS Arduino VCC-- 3,3 В RX -- D11 TX -- D10 GND-- GND

Я попробовал этот пример кода из TinyGPS++ (конечно, изменив контакты и gpsbaud на 9600, что является стандартом gps по умолчанию).

#include <TinyGPS++.h>
#include <SoftwareSerial.h>
/*
   Этот пример скетча демонстрирует нормальное использование объекта TinyGPS++ (TinyGPSPlus).
   Это требует использования программного обеспечения и предполагает, что у вас есть
   последовательное GPS-устройство с частотой 4800 бод подключено к контактам 4(rx) и 3(tx).
*/
static const int RXPin = 10, TXPin = 11;
static const uint32_t GPSBaud = 9600;

// Объект TinyGPS++ object
TinyGPSPlus gps;

// Последовательное подключение к GPS-устройству
SoftwareSerial ss(RXPin, TXPin);

void setup() {
  Serial.begin(115200);
  ss.begin(GPSBaud);
  Serial.println(F("DeviceExample.ino"));
  Serial.println(F("Простая демонстрация TinyGPS++ с подключенным GPS-модулем"));
  Serial.print(F("Testing TinyGPS++ library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
  Serial.println(F("by Mikal Hart"));
  Serial.println();
}

void loop() {
  // Этот скетч отображает информацию каждый раз, когда новое предложение правильно закодировано.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
      displayInfo();
  if (millis() > 5000 && gps.charsProcessed() < 10) {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo() {
  Serial.print(F("Location: ")); 
  if (gps.location.isValid()) {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid()) {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  } else {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid()) {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  } else {
    Serial.print(F("INVALID"));
  }
  Serial.println();
}

Однако у меня не мигает индикатор GPS, а также индикатор RX моего Arduino, поэтому модуль не передает никаких данных. Это вывод из кода:

A simple demonstration of TinyGPS++ with an attached GPS module
    Testing TinyGPS++ library v. 0.92
    by Mikal Hart

    Location: INVALID  Date/Time: 0/0/2000 00:00:00.00
    Location: INVALID  Date/Time: 0/0/2000 00:00:00.00

Спасибо!

, 👍3

Обсуждение

Откуда у тебя GPS-навигатор? Возможно, тот, который вы получили, был настроен на использование двоичного протокола uBlox по умолчанию вместо NMEA, @BrettAM

Еще один комментарий: я некоторое время работал с некоторыми GPS-модулями u-blox LEA-6T, и они были ДЕЙСТВИТЕЛЬНО нетерпимы к несоответствиям скорости передачи данных до такой степени, что он не разговаривал с моим устройством, передавая 115200 бод, даже если скорость передачи данных была всего ~2%. Я специально выбрал скорость передачи данных, которая хорошо работала с локальным генератором, который у меня был. Я не знаю, похожи ли модули NEO-6M, но это может быть возможно., @Connor Wolf


4 ответа


1

Попробуйте подключить свой GPS-модуль с помощью кабеля FTDI непосредственно к последовательному порту вашего компьютера (и считайте его с помощью экрана или любой другой терминальной программы). Как только это сработает, приступайте к работе с Arduino. И проверьте, что означает отсутствие мигания вашего GPS-модуля. Обычно он говорит, что "исправления" нет, что означает, что он не видит достаточного количества спутников. Результат, который вы показали, соответствовал бы этой теории. Что означало бы, что все в порядке, за исключением того, что ваш модуль не видит неба...

,

Спасибо! Реальной проблемы не было, просто я находился в тесном пространстве и у меня не было терпения ;), @Alrro


7

Neo 6M требует немного времени для исправления при первом включении. Если на вашей плате установлена небольшая батарея, она, скорее всего, разрядится и зарядка займет час или два. Он предназначен для обеспечения зарядки EEPROM и встроенного RTC.

Также убедитесь, что провода на батарее не закорачиваются.

Вы не получите действительное предложение данных из GPS до тех пор, пока RTC не сможет синхронизировать время.

В сообщении об ошибке, которое вы получили от Майка Харта, во-первых, говорится, что для исправления недостаточно данных, а во-вторых, дата и время не синхронизируются.

,

Я думал, что мой GPS был неисправен. Слава Богу, я увидел ваш ответ и позволил своему модулю остаться включенным на час... И знаешь что?.. Это сработало идеально... Индикатор на борту начал мигать, @Bhuvnesh


1

1) Попробуйте выйти на улицу или подойти к окну. потому что сигнал может не проникнуть внутрь дома.

2)Проверьте соединение.

3) Выведите количество подключенных спутников, чтобы узнать, подключено ли устройство с помощью

Serial.println(gps.satellites.value());

Удачи!!!

,

2

После 2 дней устранения неполадок я нашел решение

  1. Используйте внешнее питание 3,3 вольта
  2. Используйте делители напряжения, чтобы сделать 3,3 вольта совместимыми с модулем
  3. выйди на улицу(открытое пространство)

Вот и все

,