Search Code

د ارډوینو کې د GPS سیګنال څخه د عرض البلد او طول البلد استخراج

د ارډوینو کې د GPS سیګنال څخه د عرض البلد او طول البلد استخراج

په دې ټیوټوریل کې به موږ زده کړو چې څنګه د Arduino او Ublox NEO-6M GPS ماډل په کارولو سره د GPS سیګنال څخه د عرض البلد او طول البلد معلومات راوباسو. دا پروژه په ځانګړي ډول د هغو غوښتنلیکونو لپاره ګټوره ده چې د موقعیت تعقیب ته اړتیا لري، لکه روبوټیک یا بهرنۍ نیویګیشن. د دې ټیوټوریل په پای کې به تاسو یو فعال پروګرام ولرئ چې د GPS معلومات لوستل او همغږي په سیریل مانیټر کې چاپوي.

مخکې له دې چې موږ په تفصیلاتو کې ډوب شو، تاسو ممکن وغواړئ چې د تارونو او کوډ پلي کولو په اړه د نورو روښانتیا لپاره اړونده ویډیو ته مراجعه وکړئ (په ویډیو کې په 00:00).

هارډویر تشریح شوی

د دې پروژې لومړنی جز د Ublox NEO-6M GPS ماډل دی. دا ماډل د GPS سپوږمکیو څخه د سیګنالونو په کارولو سره دقیق موقعیت معلومات چمتو کولو لپاره ډیزاین شوی. دا کولی شي په یو وخت کې د ډیری سپوږمکیو څخه سیګنالونه ترلاسه کړي، کوم چې دقیق موقعیت تعقیب ته اجازه ورکوي. ماډل د سیریل اړیکو په کارولو سره له Arduino سره اړیکه نیسي، چې دا په مختلفو پروژو کې مدغم کول اسانه کوي.

د GPS ماډل سربیره، تاسو به د GPS معلوماتو پروسس کولو لپاره د Arduino بورډ ته اړتیا ولرئ. 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 معلوماتو پارس کولو اداره کولو لپاره یو مناسب کتابتون وکاروئ.
  • د سپوږمکۍ ښه استقبال لپاره انټینا له خنډونو څخه پاک وساتئ.
  • د GPS ماډل د باؤډ کچه وګورئ؛ دا معمولا په 9600 باؤډ کار کوي.
  • که د GPS ماډل بې ثباته وي، د برېښنا د نرموالي لپاره د کیپاسیټر کارولو په اړه فکر وکړئ.

د تارونو لارښوونې

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

د NEO-6M GPS ماډل خپل Arduino سره د تار کولو لپاره، لومړی د GPS ماډل د VCC پن د Arduino په 5V پن سره وصل کړئ. بیا، د GPS ماډل د GND پن د Arduino په ځمکني (GND) پن سره وصل کړئ. د GPS ماډل به د TX او RX پنونو په کارولو سره له Arduino سره اړیکه ونیسي. د 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 بیرغ ریښتیا ټاکي، چې په ګوته کوي چې د معلوماتو بشپړ سټرینګ ترلاسه شوی دی.

ډیمونسټریشن / څه تمه وکړئ

د کوډ اپلوډ کولو او د Arduino چلولو وروسته، تاسو باید په سیریل مانیټر کې د عرض البلد او طول البلد ارزښتونه چاپ شوي وګورئ. دا مهمه ده چې ډاډ ترلاسه کړئ چې د GPS ماډل د سپوږمکۍ سیګنالونو په مؤثره توګه ترلاسه کولو لپاره د اسمان روښانه لید لري. که ماډل سیګنال ترلاسه نه کړي، دا ممکن اعتباري همغږي ونه ښیې (په ویډیو کې په 02:30).

عامې ستونزې د تارونو تېروتنې، د برېښنا ناکافي سرچینه، او د سپوږمکۍ ضعیف استقبال شامل دي. ډاډ ترلاسه کړئ چې که تاسو کومې ستونزې سره مخ شئ دا اړخونه حل کړئ.

د ویډیو وخت نښې

  • 00:00 - پیژندنه
  • 02:30 - د تارونو لارښوونې
  • 05:00 - د کوډ تشریح
  • 08:15 - د GPS فعالیت ډیمونسټریشن

Images

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
Language: 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;
        }
    }
}

Things you might need

Resources & references

No resources yet.

Files📁

Other files

  • 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