Как подключить gps модуль к arduino

В этой статье на примере съемного GPS приемника от видеорегистратора я покажу, как можно подключить его к платформе Arduino и получать с него данные. В моем распоряжении был модуль GAM-2222-MTR. Он был в комплекте с видеорегистратором Ritmix AVR-827. Как я понял, большинство GPS приемников передают информацию по UART по протоколу NMEA-0183. Имеющийся у меня не исключение. Однако есть и другие gps приемники, которые более популярны у разработчиков.

К Arduino модуль подключается просто:
GPS модуль — Arduino
VCC +5
GND GND
Tx D2

GPS модуль с Arduino общается по программному серийному порту со своей скоростью (в даташите будет написано, на какой скорости он работает). В моем случае это 9600 бод. При этом цифровой порт 2 является приемником (Rx), а цифровой порт 3 — передатчиком (Tx). Но нам нужен только 2 порт.

А в компьютер Arduino полученную информацию передает уже через серийный порт на скорости 57600 бод.

Проверить работоспособность GPS приемника можно загрузив в Arduino стандартный пример — SoftwareSerialExemple.

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() <
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) <
; // wait for serial port to connect. Needed for native USB port only
>

// set the data rate for the SoftwareSerial port
mySerial.begin(9600);
mySerial.println(«Hello, world?»);
>

void loop() < // run over and over
if (mySerial.available()) <
Serial.write(mySerial.read());
>
if (Serial.available()) <
mySerial.write(Serial.read());
>
>

Такой ответ мы должны получить.

$GPGSV,3,1,09,07,69,195,36,09,67,098,43,23,37,099,29,16,28,049,33*72
$GPGSV,3,2,09,36,28,175,34,05,25,309,33,02,24,273,27,26,10,030,24*75
$GPGSV,3,3,09,30. 31*71
$GPRMC,115137.000,A,5353.0026,N,02733.9004,E,0.81,214.48,241218. D*69
$GPGGA,115138.000,5353.0025,N,02733.9005,E,2,7,1.21,155.7,M,26.2,M,0000,0000*5B

На данном этапе можно воспользоваться некоторыми программами для работы с GPS приемниками, которые позволяют получать данные через COM порт. Например это может быть U-Center. Но мне больше понравилась работа с SASPlanet. Там легко подключается такой приемник на Arduino. Если все настроено верно, данные начнут обрабатываться сразу же. А на карте мы увидим свое месторасположение.

Чтобы получить более понятную информацию, нам нужно ее расшифровать. В этом нам поможет библиотека TinyGPS. Загрузить можно на GitHab.

Она содержит тестовый скетч «test_with_gps-device», который расшифрует передаваемые модулем данные и покажет нам координаты. Увидеть можно на мониторе порта (Ctrl+Shift+M).

/* This sample code demonstrates the normal use of a TinyGPS object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 4(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial ss(2, 3);

static void smartdelay(unsigned long ms);
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
<
Serial.begin(57600);

Serial.print(«Testing TinyGPS library v. «); Serial.println(TinyGPS::library_version());
Serial.println(«by Mikal Hart»);
Serial.println();
Serial.println(«Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum»);
Serial.println(» (deg) (deg) Age Age (m) — from GPS —- —- to London —- RX RX Fail»);
Serial.println(«————————————————————————————————————————————-«);

void loop()
<
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const double LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
print_date(gps);
print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? «*** » : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE : TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? «*** » : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();

static void smartdelay(unsigned long ms)
<
unsigned long start = millis();
do
<
while (ss.available())
gps.encode(ss.read());
> while (millis() — start 1)
Serial.print(‘*’);
Serial.print(‘ ‘);
>
else
<
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val = 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i 0)
sz[len-1] = ‘ ‘;
Serial.print(sz);
smartdelay(0);
>

static void print_date(TinyGPS &gps)
<
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print(«********** ******** «);
else
<
char sz[32];
sprintf(sz, «%02d/%02d/%02d %02d:%02d:%02d «,
month, day, year, hour, minute, second);
Serial.print(sz);
>
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
smartdelay(0);
>

static void print_str(const char *str, int len)
<
int slen = strlen(str);
for (int i=0; i 5.0 из 5. Уже оценило 1 читатель

В этом проекте мы покажем вам как связать Arduino Uno с GPS модулем, а получаемые данные по долготе и широте отобразим на ЖК-дисплее.

Нам для проекта нужны:

  • Arduino Uno
  • Модуль GPS NEO-6m
  • ЖК-дисплей
  • 10K резистор

Глобальная система позиционирования (GPS) — это спутниковая навигационная система, состоящая по меньшей мере из 24 спутников. GPS работает в любых погодных условиях в любой точке мира 24 часа в сутки без абонентской платы или платы за установку.

Спутники GPS обходят Землю два раза в день на точной орбите. Каждый спутник передает уникальный сигнал и параметры орбиты, которые позволяют устройствам GPS декодировать и вычислять точное местоположение спутника. GPS-приемники используют эту информацию и трилатерацию для расчета точного местоположения пользователя. По сути, GPS-приемник измеряет расстояние до каждого спутника на количество времени, которое требуется для приема передаваемого сигнала. При измерениях расстояния от нескольких спутников приемник может определить положение пользователя и отобразить его.

Чтобы вычислить ваше двумерное положение (широта и долгота) и направление движения, GPS-приемник должен быть зафиксирован на сигнал от не менее 3 спутников. При наличии 4 или более спутников приемник может определить ваше трехмерное положение (широта, долгота и высота). Как правило, приемник GPS будет отслеживать 8 или более спутников, но это зависит от времени суток и того, где вы находитесь на земле.

Как только ваша позиция будет определена, модуль GPS может рассчитать и другую информацию, такую ​​как:

  • скорость;
  • азимут, пеленг;
  • направление;
  • расстояние до отключения;
  • расстояние до пункта назначения.

Спутники GPS передают по меньшей мере 2 маломощных радиосигнала. Сигналы движутся по прямой видимости, то есть они будут проходить сквозь облака, стекло и пластик, но не будут проходить через большинство твердых объектов, таких как здания и горы. Однако современные приемники более чувствительны и обычно могут отслеживать и сквозь дома.

Сигнал GPS содержит 3 различных типа информации:

  • Псевдослучайный код — это I.D. код, который идентифицирует, какой спутник передает информацию. Вы можете видеть, с какого спутника вы получаете сигналы на странице информации о спутниках на вашем устройстве.
  • Данные эфемерид необходимы для определения местоположения спутника и дают важную информацию о состоянии спутника, текущую дату и время.
  • Данные альманаха сообщают GPS-приемнику, где каждый спутник GPS должен быть в любое время в течение дня и отображать информацию о орбите для этого спутника и каждого другого спутника в системе.

Внешне GPS модуль выглядит так:

Плата Ардуино Уно вам, скорее всего, уже знакома:

Подключите четыре контакта к Arduino следующим образом:

GND → GND
TX → Цифровой вывод (D3)
RX → цифровой вывод (D4)
Vcc → 5Vdc

Предлагаем использовать внешний источник питания для питания модуля GPS, потому что минимальная потребляемая мощность для работы модуля Arduino GPS составляет 3,3 В, а Arduino не способен обеспечить такое напряжение. Для обеспечения напряжения используйте USB TTL:

Еще одна вещь, которая была обнаружена при работе с антенной GPS — модуль не принимает сигнал внутри дома, поэтому нужно использовать антенну.

Теперь нам необходимо соединить Ардуино и ЖК-дисплей, мы взяли LHD162a:

Перечень соединений ниже, это LCD → Arduino:

VSS → GND
VCC → 5V
VEE → 10K резистор
RS → A0 (аналоговый пин)
R/W → GND
E → A1
D4 → A2
D5 → A3
D6 → A4
D7 → A5
LED+ → VCC
LED- → GND

Дополнительно нам понадобятся некоторые библиотеки:

Больше различных библиотек вы можете найти на нашем сайте в разделе Библиотеки.

Скетч для Arduino GPS вы можете скачать или скопировать ниже:

В Visual Studio мы создали приложение в котором можно найти текущее местоположение GPS. Оно работает только тогда, когда подключено последовательно к ПК или ноутбуку:

Если вы хотите внести некоторые изменения в приложение, вы можете сделать это открыв sln-файл в Visual Studio (2012 и выше), или вы можете напрямую установить и использовать его.

Глобальная система позиционирования (GPS) – это спутниковая навигационная система, состоящая по меньшей мере из 24 спутников. GPS работает в любых погодных условиях в любой точке мира 24 часа в сутки без абонентской платы или платы за установку. Система GPS идеальна для определения местоположения в радиолюбительских проектах с использованием Arduino.

Спутники GPS кружат вокруг Земли два раза в день на точной орбите. Каждый спутник передает уникальный сигнал и параметры орбиты, которые позволяют устройствам GPS декодировать и вычислять точное местоположение спутника. GPS-приемники используют эту информацию и трилатерацию для расчета точного местоположения пользователя. По сути, GPS-приемник измеряет расстояние до каждого спутника относительно количества времени, которое требуется для приема передаваемого сигнала. При измерениях расстояния от нескольких спутников приемник может определить положение пользователя и отобразить его.

Чтобы вычислить ваше положение в двумерном пространстве (широта и долгота) и движение, GPS-приемник должен принимать сигналы не менее 3 спутников. При наличии 4 или более спутников приемник может определить ваше трехмерное положение (широта, долгота и высота). Как правило, приемник GPS будет отслеживать 8 или более спутников, но это зависит от времени суток и того, где вы находитесь на земле. Как только ваша позиция будет определена, модуль GPS сможет рассчитать другую информацию, такую как скорость, расстояние до пункта назначения и т.д.

Спутники GPS передают по меньшей мере 2 маломощных радиосигнала. Сигналы движутся по линии прямой видимости, то есть они будут проходить сквозь облака, стекло и пластик, но не будут проходить через большинство твердых объектов, таких как здания и горы. Однако современные приемники более чувствительны и обычно могут отслеживать эти сигналы в помещениях. Сигнал GPS содержит 3 различных типа информации. Во-первых, это псевдослучайный код, то есть ID-код, который идентифицирует, какой спутник передает информацию. Во-вторых, данные эфемерид – необходимы для определения местоположения спутника и дают важную информацию о состоянии спутника, текущую дату и время. В-третьих, данные альманаха, которые сообщают GPS-приемнику, где каждый спутник GPS должен быть в определенное время в течение дня, и отображают информацию об орбите для этого спутника и каждого другого спутника в системе.

Добавить в Arduino-проект возможности GPS довольно просто. Нужно лишь подключить к плате Arduino GPS-модуль, например, NEO-6m. Схема подключения показана ниже. Для лучшего приема сигналов к GPS-модулю желательно присоединить антенну.

Ниже представлен код (скетч), позволяющий получать данные от GPS-модуля и выводить их на экран LCD-дисплея.

Читайте также:
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Adblock
detector