جدول المحتويات:

البحث عن طريقك باستخدام نظام تحديد المواقع العالمي (GPS): 9 خطوات
البحث عن طريقك باستخدام نظام تحديد المواقع العالمي (GPS): 9 خطوات

فيديو: البحث عن طريقك باستخدام نظام تحديد المواقع العالمي (GPS): 9 خطوات

فيديو: البحث عن طريقك باستخدام نظام تحديد المواقع العالمي (GPS): 9 خطوات
فيديو: كيف تفعل خدمة تحديد الموقع على الأندرويد 2024, ديسمبر
Anonim
إيجاد طريقك مع GPS
إيجاد طريقك مع GPS

تمرين سريع في فهم وتطبيق بيانات GPS

  • الوقت المطلوب: ساعتان
  • التكلفة: 75 دولارًا - 150 دولارًا

بالنسبة للمصنعين ، أصبح دمج البيانات الجغرافية المكانية عالية الجودة في مشاريع الإلكترونيات رخيصًا جدًا. وفي السنوات القليلة الماضية ، نمت وحدات استقبال نظام تحديد المواقع العالمي (GPS) بشكل أكثر تنوعًا وقوة وسهولة للتكامل مع لوحات التطوير مثل Arduino و PIC و Teensy و Raspberry Pi. إذا كنت تفكر في البناء حول نظام تحديد المواقع العالمي (GPS) ، فقد اخترت الوقت المناسب للبدء.

الخطوة 1: كيف يعمل

وحدة GPS عبارة عن جهاز استقبال راديو صغير يعالج الإشارات التي يتم بثها على ترددات معروفة بواسطة أسطول من الأقمار الصناعية. تدور هذه الأقمار الصناعية حول الأرض في مدارات دائرية تقريبًا ، وتنقل بيانات الموقع والساعة الدقيقة للغاية إلى الأرض أدناه. إذا كان جهاز الاستقبال الأرضي يمكنه "رؤية" عدد كافٍ من هذه الأقمار الصناعية ، فيمكنه استخدامها لحساب موقعه والارتفاع.

عندما تصل رسالة GPS ، يقوم جهاز الاستقبال أولاً بفحص الطابع الزمني للبث لمعرفة وقت إرسالها. نظرًا لأن سرعة الموجة الراديوية في الفضاء ثابتة (c) ، يمكن للمستقبل مقارنة أوقات البث والاستقبال لتحديد المسافة التي قطعتها الإشارة. بمجرد تحديد المسافة بينه وبين أربعة أقمار صناعية معروفة أو أكثر ، فإن حساب موقعه يعد مشكلة بسيطة إلى حد ما في التثليث ثلاثي الأبعاد. ولكن للقيام بذلك بسرعة ودقة ، يجب أن يكون جهاز الاستقبال قادرًا على معالجة الأرقام بسرعة تصل إلى 20 تدفقًا للبيانات في وقت واحد. نظرًا لأن نظام GPS له هدف منشور وهو أن يكون قابلاً للاستخدام في كل مكان على الأرض ، يجب أن يضمن النظام وجود أربعة أقمار صناعية على الأقل - يفضل أكثر - تكون مرئية في جميع الأوقات من كل نقطة على الكرة الأرضية. يوجد حاليًا 32 قمرا صناعيا لنظام تحديد المواقع العالمي (GPS) تؤدي رقصة مصممة بدقة في سحابة متفرقة يبلغ ارتفاعها 20 ألف كيلومتر.

الخطوة الثانية: حقيقة المعجبين

لا يمكن لنظام تحديد المواقع العالمي أن يعمل بدون نظرية النسبية لأينشتاين ، حيث يجب التعويض عن 38 ميكروثانية تكتسبها الساعات الذرية المدارية كل يوم من تمدد الوقت في مجال الجاذبية الأرضية.

الخطوة الثالثة: البدء

ابدء
ابدء

مهما كان مشروعك ، فإن نظام GPS سهل الدمج. تتصل معظم وحدات جهاز الاستقبال ببروتوكول تسلسلي مباشر ، لذلك إذا كان بإمكانك العثور على منفذ تسلسلي احتياطي على لوحة التحكم الخاصة بك ، فيجب أن يستغرق الأمر عددًا قليلاً من الأسلاك لإجراء الاتصال المادي. وحتى إذا لم يكن الأمر كذلك ، فإن معظم وحدات التحكم تدعم الوضع التسلسلي "البرنامج" الذي يمكنك استخدامه للاتصال بدبابيس عشوائية.

للمبتدئين ، تعد وحدة Ultimate GPS Breakout من Adafruit خيارًا جيدًا. هناك الكثير من المنتجات المنافسة في السوق ، لكن Ultimate أداء قويًا وبسعر معقول ، مع ثقوب كبيرة يسهل لحامها أو توصيلها بلوح التجارب.

أولاً ، قم بتوصيل الأرض والطاقة. في مصطلحات Arduino ، يعني هذا توصيل أحد مسامير GND الخاصة بالمتحكم الدقيق بوحدة GND الخاصة بالوحدة ، ودبوس + 5V بـ VIN الخاص بالوحدة. لإدارة نقل البيانات ، تحتاج أيضًا إلى توصيل دبابيس TX و RX للوحدة بـ Arduino. سأختار بشكل تعسفي دبابيس Arduino 2 (TX) و 3 (RX) لهذا الغرض ، على الرغم من أن الدبابيس 0 و 1 مصممة خصيصًا للاستخدام كـ "منفذ تسلسلي للأجهزة" أو UART. لماذا؟ لأنني لا أريد أن أضيع UART الوحيد الذي تمتلكه معالجات AVR المنخفضة الجودة. Arduino's UART متصل بموصل USB الموجود باللوحة ، وأود أن أبقيه متصلاً بجهاز الكمبيوتر الخاص بي لتصحيح الأخطاء.

الخطوة 4: إصبع القدم في Datastream

اصبع القدم في Datastream
اصبع القدم في Datastream

في اللحظة التي تقوم فيها بتطبيق الطاقة ، تبدأ وحدة GPS في إرسال أجزاء من البيانات النصية على خط TX الخاص بها. قد لا ترى قمرًا صناعيًا واحدًا حتى الآن ، ناهيك عن وجود "إصلاح" ، لكن صنبور البيانات يأتي على الفور ، ومن المثير للاهتمام معرفة ما سيحدث. أول رسم بسيط لدينا (أدناه) لا يفعل شيئًا سوى عرض هذه البيانات غير المعالجة.

# تضمين # تعريف RXPin 2

#define TXPin 3 # حدد GPSBaud 4800

#define ConsoleBaud 115200

// الاتصال التسلسلي بجهاز GPSSoftwareSerial ss (RXPin ، TXPin) ؛

الإعداد باطل(){

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("مثال GPS 1") ؛

Serial.println ("عرض بيانات NMEA الأولية المنقولة بواسطة وحدة GPS") ؛

Serial.println ("بقلم ميكال هارت") ؛ Serial.println () ،

}

حلقة فارغة()

{if (ss.available ()> 0) // عند وصول كل حرف…

Serial.write (ss.read ()) ؛ //… اكتبه على وحدة التحكم

}

ملاحظة: يعرّف الرسم التخطيطي دبوس الاستقبال (RXPin) على أنه 2 ، على الرغم من أننا قلنا سابقًا أن دبوس الإرسال (TX) سيكون متصلاً بالدبوس 2. وهذا مصدر شائع للارتباك. RXPin هو دبوس الاستقبال (RX) من وجهة نظر Arduino. وبطبيعة الحال ، يجب توصيله بدبوس الإرسال (TX) الخاص بالوحدة ، والعكس صحيح.

قم بتحميل هذا الرسم التخطيطي وافتح Serial Monitor عند 115 ، 200 باود. إذا كان كل شيء يعمل ، فمن المفترض أن ترى دفقًا كثيفًا لا نهاية له من السلاسل النصية المفصولة بفواصل. سيبدو كل شيء مثل الصورة الثانية في بداية الفقرة.

تُعرف هذه السلاسل المميزة باسم جمل NMEA ، وقد سميت بذلك لأن التنسيق اخترعته الرابطة الوطنية للإلكترونيات البحرية. تحدد NMEA عددًا من هذه الجمل للبيانات الملاحية التي تتراوح من الأساسي (الموقع والوقت) ، إلى الباطني (نسبة إشارة القمر الصناعي إلى الضوضاء ، التباين المغناطيسي ، إلخ). الشركات المصنعة غير متسقة بشأن أنواع الجمل التي تستخدمها أجهزة الاستقبال الخاصة بهم ، لكن GPRMC ضرورية. بمجرد إصلاح الوحدة الخاصة بك ، يجب أن ترى عددًا لا بأس به من جمل GPRMC هذه.

الخطوة 5: العثور على نفسك

ليس من السهل تحويل مخرجات الوحدة الأولية إلى معلومات يمكن لبرنامجك استخدامها بالفعل. لحسن الحظ ، هناك بعض المكتبات الرائعة المتاحة بالفعل للقيام بذلك نيابة عنك. تعد مكتبة Adafruit GPS Library الشهيرة من Limor Fried اختيارًا مناسبًا إذا كنت تستخدم ميزة Ultimate Breakout. تمت كتابته لتمكين الميزات الفريدة لـ Ultimate (مثل تسجيل البيانات الداخلية) وإضافة بعض الأجراس والصفارات الرائعة الخاصة بها. لكن مكتبة التحليل المفضلة لدي - وأنا هنا بالطبع غير متحيزة تمامًا - هي تلك التي كتبتها باسم TinyGPS ++. لقد صممته ليكون شاملاً وقويًا وموجزًا وسهل الاستخدام. دعونا نأخذها في جولة.

الخطوة 6: البرمجة باستخدام TinyGPS ++

من وجهة نظر المبرمج ، فإن استخدام TinyGPS ++ بسيط للغاية:

1) إنشاء كائن GPS.

2) قم بتوجيه كل حرف يصل من الوحدة النمطية إلى الكائن باستخدام gps.encode ().

3) عندما تحتاج إلى معرفة موقعك أو الارتفاع أو الوقت أو التاريخ ، ما عليك سوى الاستعلام عن كائن GPS.

# تضمين # تضمين

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// الاتصال التسلسلي بجهاز GPSSoftwareSerial ss (RXPin ، TXPin) ؛

// كائن TinyGPS ++

TinyGPSPlus GPS ؛

الإعداد باطل(){

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("مثال GPS 2") ؛

Serial.println ("أداة تعقب بسيطة باستخدام TinyGPS ++.")؛

Serial.println ("بقلم ميكال هارت") ؛

Serial.println () ،

}

حلقة فارغة(){

// إذا وصلت أي أحرف من GPS ، /

/ أرسلها إلى كائن TinyGPS ++

بينما (ss.available ()> 0)

gps.encode (ss.read ()) ؛

// لنعرض الموقع الجديد والارتفاع

// متى تم تحديث أي منهما

if (gps.location.isUpdated () || gps.altitude.isUpdated ())

{

Serial.print ("الموقع:") ؛

Serial.print (gps.location.lat ()، 6) ؛

Serial.print ("،") ؛

Serial.print (gps.location.lng ()، 6) ؛

Serial.print ("الارتفاع:") ؛

Serial.println (gps.altitude.meters ()) ؛

}

}

يعرض تطبيقنا الثاني باستمرار موقع المتلقي والارتفاع ، باستخدام TinyGPS ++ للمساعدة في التحليل. في جهاز حقيقي ، يمكنك تسجيل هذه البيانات في بطاقة SD أو عرضها على شاشة LCD. احصل على المكتبة وارسم FindingYourself.ino (أعلاه). قم بتثبيت المكتبة ، كالعادة ، في مجلد مكتبات Arduino. قم بتحميل المخطط على Arduino وافتح Serial Monitor على 115 ، 200 باود. من المفترض أن ترى موقعك والارتفاع يتم تحديثهما في الوقت الفعلي. لترى المكان الذي تقف فيه بالضبط ، الصق بعض إحداثيات خطوط الطول / العرض الناتجة في خرائط Google. الآن قم بتوصيل الكمبيوتر المحمول الخاص بك والذهاب في نزهة أو قيادة السيارة. (لكن تذكر أن تبقي عينيك على الطريق!)

الخطوة 7: "البعد الرابع"

على الرغم من أننا نربط نظام تحديد المواقع العالمي (GPS) بالموقع في الفضاء ، فلا تنس أن هذه الأقمار الصناعية تنقل الوقت وطوابع التاريخ أيضًا. متوسط ساعة GPS دقيقة حتى جزء من عشرة ملايين من الثانية ، والحد النظري أعلى من ذلك. حتى إذا كنت تحتاج فقط إلى مشروعك لتتبع الوقت ، فقد تظل وحدة GPS أرخص الحلول وأسهلها.

لتحويل FindingYourself.ino إلى ساعة فائقة الدقة ، ما عليك سوى تغيير الأسطر القليلة الأخيرة مثل هذا:

if (gps.time.isUpdated ()) {

شار بوف [80] ؛

sprintf (buf، "الوقت٪ 02d:٪ 02d:٪ 02d"، gps.time.hour ()، gps.time.minute ()، gps.time.second ())؛ Serial.println (buf) ؛

}

الخطوة 8: إيجاد طريقك

البحث عن طريقك
البحث عن طريقك

تطبيقنا الثالث والأخير هو نتيجة لتحدي شخصي لكتابة رسم تخطيطي TinyGPS ++ قابل للقراءة ، في أقل من 100 سطر من التعليمات البرمجية ، والتي من شأنها توجيه المستخدم إلى وجهة باستخدام تعليمات نصية بسيطة مثل "ابق مستقيماً" أو "انحرف إلى اليسار".

# تضمين # تضمين

#define RXPin 2

#define TXPin 3

#define GPSBaud 4800

#define ConsoleBaud 115200

// الاتصال التسلسلي بجهاز GPSSoftwareSerial ss (RXPin ، TXPin) ؛

// كائن TinyGPS ++ TinyGPSPlus gps ؛

lastUpdateTime طويل بدون توقيع = 0 ؛

#define EIFFEL_LAT 48.85823 # حدد EIFFEL_LNG 2.29438

/ * يوضح هذا المثال إطارًا أساسيًا لكيفية استخدام الدورة والمسافة لتوجيه شخص (أو طائرة بدون طيار) إلى وجهة. هذه الوجهة هي برج إيفل. قم بتغييره كما هو مطلوب

أسهل طريقة للحصول على إحداثيات خطوط العرض / الطول هي النقر بزر الماوس الأيمن فوق الوجهة في خرائط Google (maps.google.com) ، واختيار "ماذا هنا؟" هذا يضع القيم الدقيقة في مربع البحث

*/

الإعداد باطل(){

Serial.begin (ConsoleBaud) ؛

ss.begin (GPSBaud) ؛

Serial.println ("مثال GPS 3") ؛

Serial.println ("نظام توجيه غير شامل") ؛

Serial.println ("بقلم ميكال هارت") ؛

Serial.println () ،

}

حلقة فارغة(){

// إذا وصلت أي أحرف من GPS ، // أرسلها إلى كائن TinyGPS ++ أثناء (ss.available ()> 0) gps.encode (ss.read ()) ؛

// كل 5 ثوانٍ ، قم بإجراء تحديث

إذا (مللي () - lastUpdateTime> = 5000)

{

lastUpdateTime = ميلي () ،

Serial.println () ،

// تحديد وضعنا الحالي

مسافة مزدوجة ToDestination = TinyGPSPlus:: مسافة بين

gps.location.lat () ، gps.location.lng () ، EIFFEL_LAT ، EIFFEL_LNG) ؛

ضعف courseToDestination = TinyGPSPlus:: courseTo

gps.location.lat () ، gps.location.lng () ، EIFFEL_LAT ، EIFFEL_LNG) ؛

const char * directionToDestination = TinyGPSPlus:: cardinal (courseToDestination) ؛

int courseChangeNeeded = (int) (360 + courseToDestination - gps.course.deg ())٪ 360 ؛

// debug Serial.print ("DEBUG: Course2Dest:") ؛

Serial.print (courseToDestination) ؛

Serial.print ("CurCourse:")؛

Serial.print (gps.course.deg ()) ؛

Serial.print ("Dir2Dest:") ؛

Serial.print (directionToDestination) ؛

Serial.print ("RelCourse:")؛

Serial.print (courseChangeNeeded) ؛

Serial.print ("CurSpd:") ؛

Serial.println (gps.speed.kmph ()) ،

// في نطاق 20 مترا من الوجهة؟ نحن هنا

إذا (المسافة إلى الوجهة <= 20.0)

{Serial.println ("تهانينا: لقد وصلت!") ،

خروج (1) ؛

}

Serial.print ("DISTANCE:") ؛ Serial.print (مسافة إلى الوجهة) ؛

Serial.println ("متر للذهاب.") ؛

Serial.print ("التعليمات:") ؛

// لا يزال قائما؟ فقط أشر إلى الاتجاه الذي يجب أن تسلكه

إذا (gps.speed.kmph () <2.0)

{

Serial.print ("الرأس") ؛

Serial.print (directionToDestination) ؛

Serial.println (".") ؛

إرجاع؛

}

if (courseChangeNeeded> = 345 || courseChangeNeeded <15) Serial.println ("Keep on Straight forward!")؛

وإلا إذا (courseChangeNeeded> = 315 && courseChangeNeeded <345)

Serial.println ("فير قليلاً إلى اليسار.")؛

وإلا إذا (courseChangeNeeded> = 15 && courseChangeNeeded <45)

Serial.println ("فير قليلاً إلى اليمين.") ؛

وإلا إذا (courseChangeNeeded> = 255 && courseChangeNeeded <315)

Serial.println ("انعطف إلى اليسار.") ؛

وإلا إذا (courseChangeNeeded> = 45 && courseChangeNeeded <105)

Serial.println ("انعطف إلى اليمين.") ؛

آخر

Serial.println ("استدر تمامًا.") ؛

}

}

كل 5 ثوانٍ ، يلتقط الرمز موقع المستخدم ومساره (اتجاه السفر) ويحسب الاتجاه (الاتجاه إلى الوجهة) ، باستخدام طريقة TinyGPS ++ courseTo (). تؤدي المقارنة بين المتجهين إلى إنشاء اقتراح بالاستمرار في الاتجاه المستقيم أو الانعطاف ، كما هو موضح أدناه.

انسخ المخطط FindingYourWay.ino (أعلاه) والصقه في Arduino IDE. قم بتعيين وجهة على بعد كيلومتر واحد أو كيلومترين ، وقم بتحميل المخطط على Arduino الخاص بك ، وقم بتشغيله على الكمبيوتر المحمول الخاص بك ، ومعرفة ما إذا كان سيرشدك إلى هناك. لكن الأهم من ذلك ، دراسة الكود وفهم كيفية عمله.

الخطوة 9: المضي قدمًا

الإمكانات الإبداعية لنظام تحديد المواقع العالمي (GPS) هائلة. كان أحد أكثر الأشياء إرضاءً التي صنعتها هو صندوق أحجية يدعم نظام تحديد المواقع العالمي (GPS) يفتح فقط في موقع واحد مبرمج مسبقًا. إذا أرادت ضحيتك الاحتفاظ بالكنز بالداخل ، فعليها معرفة مكان هذا الموقع السري وإحضار الصندوق فعليًا هناك. فكرة المشروع الأولى الشائعة هي نوع من جهاز التسجيل الذي يسجل دقيقة بدقيقة الموقع والارتفاع ، على سبيل المثال ، متجول يمشي في طريق ترانس بينين. أو ماذا عن أحد هؤلاء المتعقبين المغناطيسيين المخادعين وكلاء إدارة مكافحة المخدرات في لعبة Breaking Bad على سيارات الأشرار؟ كلاهما ممكن تمامًا ، وربما يكون من الممتع بنائه ، لكنني أشجعك على التفكير بشكل أوسع ، بما يتجاوز الأشياء التي يمكنك شراؤها بالفعل على أمازون. إنه عالم كبير هناك. تجول بقدر ما تستطيع.

موصى به: