цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат



Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат

Автор: Mike(admin) от 18-03-2019, 06:55

GPS означает «Глобальная система позиционирования» и используется для определения широты и долготы любого местоположения на Земле с точным временем UTC (всемирное координированное время). Устройство GPS получает координаты от спутника каждую секунду с указанием времени и даты. GPS обеспечивает большую точность, а также предоставляет другие данные помимо координат положения.


Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат

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


В качестве модуля GPS будем использовать GY-NEO6MV2 XM37-1612. Этот модуль GPS имеет четыре контакта +5В, GND, TXD и RXD. Он связывается с вычислительной системой помощью последовательных контактов UART и может быть легко подключен к соответствующему порту STM32F103C8.


модуль GPS GY-NEO6MV2 XM37-1612

Модуль GPS отправляет данные в формате NMEA. Формат NMEA состоит из нескольких предложений, в которых нам нужно только одно предложение. Это предложение начинается с $GPGGA и содержит координаты, время и другую полезную информацию. GPGGA относится к данным коррекции системы глобального позиционирования. Ниже приведен пример строки $GPGGA вместе с ее описанием.


$GPGGA,104534.000,7791.0381,N,06727.4434,E,1,08,0.9,510.4,M,43.9,M,,*47


$GPGGA,ЧЧММСС.ССС, широта, N, долгота, E, FQ, NOS, HDP, высота над уровнем моря, M, высота, M,, данные контрольной суммы


В этом примере, мы используем библиотеку TinyGPSPlus GPS, которая извлекает всю необходимую информацию из предложения NMEA, и нам просто нужно написать простую строку кода для получения широты и долготы, которую мы увидим позже в этом примере.


В данном проекте мы используем микроконтроллер STM32F103C8 на плате BLUE PILL. Порты последовательной связи USART показаны на рисунке ниже. Они имеют синий цвет (PA9-TX1, PA10-RX1, PA2-TX2, PA3-RX2, PB10-TX3, PB11-RX3). У данного микроконтроллера три таких канала связи.


STM32F103

Используя информацию о распиновке отобразим схему подключения микроконтроллера STM32F103C8, GPS-модуля и LCD-дисплея, который будет использоваться для отображения данных.


Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат

Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат

STM32F103C8 можно запрограммировать с помощью Arduino IDE, просто подключив его к ПК через USB-порт. Убедитесь, что вы отключили контакты TX и RX при загрузке кода и подключите их после загрузки.


Чтобы связать GPS с STM32, сначала мы должны загрузить библиотеку из ссылки TinyGPSPlus (https://github.com/mikalhart/TinyGPSPlus). После загрузки библиотеки ее можно включить в IDE Arduino, выбрав Sketch - Include Library - Add .zip Library. Та же библиотека может быть использована для взаимодействия GPS с Arduino. Полный комментированный код взаимодействия микроконтроллера STM32 с модулем GPS представлен далее.



#include <LiquidCrystal.h>     // Библиотека для использования функций ЖК-дисплея                      
#include <TinyGPS++.h>         // Библиотека для использования функций GPS
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14;  // Выводы LCD, связанные с STM32
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
TinyGPSPlus gps;               // Объект GPS для класса TinyGPSPlus
void setup()
{
  Serial1.begin(9600);         // Инициализируем последовательную связь через последовательный порт 1 со скоростью 9600 бод
  lcd.begin(16,2);             // Настраиваем дисплей в режим 16x2
  lcd.print("Circuit Digest");
  lcd.setCursor(0,1);
  lcd.print("STM32 with GPS");
  delay(4000);
  lcd.clear();      
}
void loop()
{
  GPSDelay(1000);
  unsigned long start;
  double lat_val, lng_val;
  bool loc_valid;
  lat_val = gps.location.lat();        // Получаем широту
  loc_valid = gps.location.isValid(); 
  lng_val = gps.location.lng();        // Получаем долготу
 
  if (!loc_valid)                     // При получении неверных данных от GPS
  {
    lcd.print("Waiting");
    Serial.print("Latitude : ");
    Serial.println("*****");
    Serial.print("Longitude : ");
    Serial.println("*****");
    delay(4000);
    lcd.clear();
  }
  else                              // Когда действительные данные получены от GPS
  {
    lcd.clear();
    
    Serial.println("GPS READING: ");
   
    Serial.print("Latitude : ");
    Serial.println(lat_val, 6);   // Вывод широты в последовательный монитор
   
    lcd.setCursor(0,0);
    lcd.print("LAT:");
    lcd.print(lat_val,6);         // Вывод широты на ЖК-дисплее
    Serial.print("Longitude : ");
    Serial.println(lng_val, 6);   //  Вывод долготы в последовательный монитор
    lcd.setCursor(0,1);
    lcd.print("LONG:");
    lcd.print(lng_val,6);          // Вывод долготы в последовательный монитор
    delay(4000);
  }
}
static void GPSDelay(unsigned long ms)          // Задержка для получения данных от GPS
{
  unsigned long start = millis();
  do
  {
    while (Serial1.available()) 
    gps.encode(Serial1.read());
  } while (millis() - start < ms);
}

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


Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат

Вы можете проверить широту и долготу местоположения с помощью карт Google. Просто перейдите на Google maps с включенным GPS и нажмите на синюю точку. Он покажет адрес с широтой и долготой, как показано на рисунке ниже.


Как использовать модуль GPS с микроконтроллером STM32F103 для получения координат



© digitrode.ru


Теги: STM32, GPS




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий