Ардуино-да GPS сигналынан ендік пен бойлықты алу
Бұл оқулықта біз Arduino және Ublox NEO-6M GPS модулін пайдаланып, GPS сигналынан ендік пен бойлық деректерін алуды үйренеміз. Бұл жоба әсіресе робототехника немесе ашық ауада навигация сияқты орналасқан жерді бақылауды қажет ететін қолданбалар үшін пайдалы. Осы оқулықтың соңында сізде GPS деректерін оқитын және координаттарды сериялық мониторға басып шығаратын жұмыс істейтін бағдарлама болады.

Толық мәліметтерге кіріспес бұрын, сымдарды жалғау және кодты іске асыру туралы қосымша түсініктеме алу үшін байланысты бейнені қарауыңызға болады (бейнеде 00:00).
Аппараттық құрал түсіндірмесі
Бұл жобаның негізгі құрамдас бөлігі - Ublox NEO-6M GPS модулі. Бұл модуль GPS спутниктерінің сигналдарын пайдаланып дәл орналасу деректерін қамтамасыз етуге арналған. Ол бір уақытта бірнеше спутниктен сигнал қабылдай алады, бұл дәл орналасқан жерді бақылауға мүмкіндік береді. Модуль Arduino-мен сериялық байланыс арқылы байланысады, бұл оны әртүрлі жобаларға оңай интеграциялауға мүмкіндік береді.
GPS модулінен басқа, GPS деректерін өңдеу үшін сізге Arduino тақтасы қажет болады. Arduino GPS модулі жіберген деректерді оқиды және әрі қарай пайдалану үшін ендік пен бойлық мәндерін алады. GPS модулі әдетте 5В кернеуде жұмыс істейді және Arduino өзінің RX пині арқылы оқи алатын сериялық шығысты қамтамасыз етеді.
Деректер парағының мәліметтері
| Өндіруші | u-blox |
|---|---|
| Бөлшек нөмірі | NEO-6M |
| Логика/IO кернеуі | 3.3В |
| Қоректендіру кернеуі | 3.0 - 5.5В |
| Шығыс тогы | ≤ 50 мА |
| GPS сезімталдығы | -165 дБм |
| Жұмыс температурасы | -40 - 85 °C |
| Жаңарту жылдамдығы | 1 Гц (әдепкі) |
| Қаптама | 25 x 35 x 4 мм |
| Ескертулер / нұсқалар | Әртүрлі конфигурациялар қолжетімді |
- GPS модулінің тұрақты қорек көзіне (3.0 - 5.5В) қосылғанына көз жеткізіңіз.
- GPS деректерін талдауды өңдеу үшін қолайлы кітапхананы пайдаланыңыз.
- Жақсы спутниктік қабылдау үшін антеннаны кедергілерден таза ұстаңыз.
- GPS модулінің бауд жылдамдығын тексеріңіз; ол әдетте 9600 баудта жұмыс істейді.
- GPS модулі тұрақсыз болса, қуатты тегістеу үшін конденсаторды пайдалануды қарастырыңыз.
Сымдарды жалғау нұсқаулары

NEO-6M GPS модулін Arduino-ға қосу үшін алдымен GPS модулінің VCC пинін Arduino-дағы 5V пиніне қосыңыз. Әрі қарай, GPS модулінің GND пинін Arduino-дағы жерге (GND) пиніне қосыңыз. GPS модулі Arduino-мен TX және RX пиндері арқылы байланысады. GPS модулінің TX пінін Arduino-дағы RX пініне (әдетте 0 пин) қосыңыз.
Егер сіз арнайы I2C пиндері бар Arduino пайдалансаңыз, SDA және SCL пиндерін тиісті түрде қосуды қамтамасыз етіңіз (стандартты Arduino тақталарында әдетте SDA үшін A4 және SCL үшін A5). Сымдарды жалғағаннан кейін, барлық қосылымдардың сенімді және дұрыс бағытталғанын тексеру үшін қайта тексеріңіз.
Код мысалдары және түсіндірме
Міне, сериялық байланысты инициализациялау және 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 функционалдығын демонстрациялау
/*
* 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;
}
}
}
Сізге қажет болуы мүмкін нәрселер
-
АмазонкаNeo 6m GPS module on Amazonamzn.to
-
eBayNeo 6m GPS module on eBayebay.us
-
AliExpressNeo 6m 7m 8m on AliExpresss.click.aliexpress.com
-
AliExpressNeo 6m 7m 8m on AliExpress-2s.click.aliexpress.com
Ресурстар мен сілтемелер
Әлі ресурстар жоқ.
Файлдар📁
Басқа файлдар
-
GPS TinyGPSPlus NEO-7 DataSheetDatasheet 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.pdf1.73 MB