কোড অনুসন্ধান

আরডুইনোতে জিপিএস সিগন্যাল থেকে অক্ষাংশ ও দ্রাঘিমাংশ বের করা

আরডুইনোতে জিপিএস সিগন্যাল থেকে অক্ষাংশ ও দ্রাঘিমাংশ বের করা

এই টিউটোরিয়ালে, আমরা শিখব কীভাবে 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
লজিক/আইও ভোল্টেজ3.3V
সাপ্লাই ভোল্টেজ3.0 থেকে 5.5V
আউটপুট কারেন্ট≤ 50 mA
GPS সংবেদনশীলতা-165 dBm
অপারেটিং তাপমাত্রা-40 থেকে 85 °C
আপডেট রেট1 Hz (ডিফল্ট)
প্যাকেজ25 x 35 x 4 মিমি
নোট / ভেরিয়েন্টবিভিন্ন কনফিগারেশন উপলব্ধ

  • নিশ্চিত করুন যে 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 বোর্ডে A4 SDA-এর জন্য এবং A5 SCL-এর জন্য)। ওয়্যারিংয়ের পরে, সমস্ত সংযোগ সুরক্ষিত এবং সঠিকভাবে ওরিয়েন্টেড কিনা তা নিশ্চিত করতে ডাবল-চেক করুন।

কোড উদাহরণ ও ওয়াকথ্রু

সিরিয়াল কমিউনিকেশন শুরু করতে এবং 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