Пребарување код

Екстракција на географска ширина и должина од GPS сигнал во Arduino

Екстракција на географска ширина и должина од GPS сигнал во Arduino

Во ова упатство, ќе научиме како да извлечеме податоци за географска ширина и должина од GPS сигнал користејќи Arduino и Ublox NEO-6M GPS модул. Овој проект е особено корисен за апликации кои бараат следење на локација, како што се роботика или надворешна навигација. До крајот на ова упатство, ќе имате работна програма која чита GPS податоци и ги печати координатите на серискиот монитор.

Пред да навлеземе во деталите, можеби ќе сакате да го погледнете придружното видео за дополнително разјаснување на поврзувањето и имплементацијата на кодот (во видео на 00:00).

Објаснување на хардверот

Примарната компонента за овој проект е Ublox NEO-6M GPS модулот. Овој модул е дизајниран да обезбеди точни податоци за позиционирање користејќи сигнали од GPS сателити. Може да прима сигнали од повеќе сателити истовремено, што овозможува прецизно следење на локацијата. Модулот комуницира со Arduino користејќи сериска комуникација, што го прави лесен за интегрирање во различни проекти.

Покрај GPS модулот, ќе ви треба Arduino плоча за обработка на GPS податоците. Arduino ќе ги чита податоците испратени од GPS модулот и ќе ги извлече вредностите за географска ширина и должина за понатамошна употреба. GPS модулот обично работи на 5V, и обезбедува сериски излез кој Arduino може да го чита преку неговиот RX пин.

Детали од техничката документација

Производителu-blox
Број на делNEO-6M
Логички/IO напон3.3V
Напон на напојување3.0 до 5.5V
Излезна струја≤ 50 mA
GPS чувствителност-165 dBm
Работна температура-40 до 85 °C
Стапка на ажурирање1 Hz (стандардно)
Пакет25 x 35 x 4 mm
Белешки / варијантиДостапни се различни конфигурации

  • Осигурете се дека GPS модулот е поврзан на стабилен извор на напојување (3.0 до 5.5V).
  • Користете соодветна библиотека за обработка на GPS податоци.
  • Чувајте ја антената подалеку од пречки за подобар прием на сателитски сигнали.
  • Проверете ја брзината на пренос (baud rate) на GPS модулот; обично работи на 9600 baud.
  • Размислете за користење кондензатор за измазнување на напојувањето ако GPS модулот е нестабилен.

Инструкции за поврзување

Arduino wiring for Neo-6M GPS module
Arduino wiring for Neo-6M GPS module

За да го поврзете NEO-6M GPS модулот со вашиот Arduino, започнете со поврзување на VCC пинот од GPS модулот на 5V пинот на Arduino. Потоа, поврзете го GND пинот од GPS модулот на земјата (GND) пин на Arduino. GPS модулот ќе комуницира со Arduino користејќи ги TX и RX пиновите. Поврзете го TX пинот од GPS модулот на RX пинот (обично пин 0) на Arduino.

Ако користите Arduino со посветени I2C пинови, осигурете се да ги поврзете SDA и SCL пиновите соодветно (обично A4 за SDA и A5 за SCL на стандардни Arduino плочи). По поврзувањето, проверете ги сите врски за да се осигурате дека се безбедни и правилно ориентирани.

Примери на код и објаснување

Еве краток извадок од кодот за иницијализирање на сериската комуникација и поставување на влезниот стринг за GPS податоци:

void setup() {
    Serial.begin(9600);
    inputString.reserve(200);
}

Овој код ја иницијализира сериската комуникација со брзина од 9600 и резервира простор за дојдовниот GPS податочен стринг.

Следно, да го погледнеме делот од кодот кој ги обработува дојдовните GPS податоци и ги извлекува географската ширина и должина:

if (BB == signal) {
    String LAT = inputString.substring(7, 17);
    String LON = inputString.substring(20, 31);
    Serial.println(LAT);
    Serial.println(LON);
}

Во овој дел, програмата проверува дали дојдовните податоци одговараат на очекуваниот GPS сигнал. Ако одговараат, ги извлекува вредностите за географска ширина и должина од влезниот стринг и ги печати на серискиот монитор.

Конечно, кодот вклучува дел за обработка на нови податоци кои пристигнуваат преку сериската врска:

void serialEvent() {
    while (Serial.available()) {
        char inChar = (char) Serial.read();
        inputString += inChar;
        if (inChar == '\\n') {
            stringComplete = true;
        }
    }
}

Оваа функција чита дојдовни карактери од серискиот порт и ги додава на inputString. Штом се детектира знак за нова линија, го поставува stringComplete знамето на true, што означува дека е примен комплетен стринг со податоци.

Демонстрација / Што да очекувате

По поставувањето на кодот и стартувањето на Arduino, треба да ги видите вредностите за географска ширина и должина испечатени на серискиот монитор. Важно е да се осигурате дека GPS модулот има јасен поглед кон небото за ефикасно примање на сателитски сигнали. Ако модулот не прима сигнал, може да не прикаже валидни координати (во видео на 02:30).

Вообичаени грешки вклучуваат грешки во поврзувањето, недоволно напојување и слаб прием на сателитски сигнали. Осигурете се да ги проверите овие аспекти ако наидете на какви било проблеми.

Временски ознаки од видеото

  • 00:00 - Вовед
  • 02:30 - Инструкции за поврзување
  • 05:00 - Објаснување на кодот
  • 08:15 - Демонстрација на GPS функционалноста

Слики

GPS antenna
GPS antenna
GPS module with antenna
GPS module with antenna
GPS modules
GPS modules
Arduino wiring for Neo-6M GPS module
Arduino wiring for Neo-6M GPS module
3-Extract latitude and longitude from a GPS signal in an Arduino NEO-6M
Јазик: C++
/*
 * This is Arduino code for the Ublox NEO-6M GPS module.
 * This code extracts the GPS latitude and longitude so it can be used for other purposes.


 * 
 * Written by Ahmad Nejrabi for Robojax Video
 * Date: January 24, 2017, in Ajax, Ontario, Canada
 * Permission granted to share this code, given that this
 * note is kept with the code.
 * Disclaimer: This code is "AS IS" and for educational purposes only.
 * 
 */

// Written for RoboJax.com 
String inputString = ""; // a string to hold incoming data
boolean stringComplete = false; // whether the string is complete
String signal = "\$GPGLL";
void setup() {
    // initialize serial:
    Serial.begin(9600);
    // reserve 200 bytes for the inputString:
    inputString.reserve(200);
}

void loop() {
    // print the string when a newline arrives:
    if (stringComplete) {
        String BB = inputString.substring(0, 6);
        if (BB == signal) {
            String LAT = inputString.substring(7, 17);
            int LATperiod = LAT.indexOf('.');
            int LATzero = LAT.indexOf('0');
            if (LATzero == 0) {
                LAT = LAT.substring(1);
            }

            String LON = inputString.substring(20, 31);
            int LONperiod = LON.indexOf('.');
            int LONTzero = LON.indexOf('0');
            if (LONTzero == 0) {
                LON = LON.substring(1);
            }

            Serial.println(LAT);
            Serial.println(LON);

        }

        // Serial.println(inputString);
        // clear the string:
        inputString = "";
        stringComplete = false;
    }
}

/*
SerialEvent occurs whenever new data arrives via the
hardware serial RX. This routine runs between each
time loop() runs, so using delay inside loop can delay
response. Multiple bytes of data may be available.
*/
void serialEvent() {
    while (Serial.available()) {
        // get the new byte:
        char inChar = (char) Serial.read();
        // add it to the inputString:
        inputString += inChar;
        // if the incoming character is a newline, set a flag
        // so the main loop can do something about it:
        if (inChar == '\\n') {
            stringComplete = true;
        }
    }
}

Работи што можеби ќе ви требаат

Ресурси и референци

Сè уште нема ресурси.

Датотеки📁

Други датотеки

  • GPS TinyGPSPlus NEO-7 DataSheet
    Datasheet for the u-blox NEO-7 GPS module, a compact GNSS receiver with high sensitivity and low power consumption. It provides positioning data via UART and is commonly used with Arduino and the TinyGPSPlus library.
    robojax_GPS_TinyGPSPlus_NEO-7_DataSheet.pdf 1.73 MB