- المكونات مطلوبة
- الحصول على بيانات الموقع من GPS
- مخطط الرسم البياني
- خطوات واجهة GPS مع متحكم AVR
- شرح الكود
تُستخدم وحدات GPS على نطاق واسع في التطبيقات الإلكترونية لتتبع الموقع استنادًا إلى إحداثيات خطوط الطول والعرض. نظام تتبع المركبات ، ساعة GPS ، نظام تنبيه اكتشاف الحوادث ، الملاحة المرورية ، نظام المراقبة وما إلى ذلك هي أمثلة قليلة حيث تكون وظيفة GPS ضرورية. يوفر GPS الارتفاع وخط العرض وخط الطول ووقت UTC والعديد من المعلومات الأخرى حول الموقع المحدد ، والتي يتم أخذها من أكثر من قمر صناعي. لقراءة البيانات من نظام تحديد المواقع العالمي (GPS) ، يلزم وجود متحكم دقيق ، لذلك نحن هنا نربط وحدة GPS بوحدة التحكم الدقيقة AVR Atmega16 ونطبع خط الطول وخط العرض على شاشة LCD مقاس 16 × 2.
المكونات مطلوبة
- Atmega16 / 32
- وحدة GPS (uBlox Neo 6M GPS)
- هوائي سلك طويل
- 16x2 LCD
- 2.2 كيلو المقاوم
- 1000 ف ف مكثف
- 10 فائق التوهج مكثف
- توصيل الأسلاك
- إل إم 7805
- جاك دي سي
- محول تيار مستمر 12 فولت
- بورغستيبس
- ثنائي الفينيل متعدد الكلور أو ثنائي الفينيل متعدد الكلور للأغراض العامة
Ublox Neo 6M عبارة عن وحدة GPS تسلسلية توفر تفاصيل الموقع من خلال الاتصال التسلسلي. لديها أربعة دبابيس.
دبوس |
وصف |
Vcc |
2.7 - 5V امدادات الطاقة |
Gnd |
أرض |
TXD |
نقل البيانات |
RXD |
استقبال البيانات |
وحدة Ublox neo 6M GPS متوافقة مع TTL ومواصفاتها موضحة أدناه.
وقت الالتقاط |
بداية رائعة: 27 ثانية ، بداية ساخنة: 1 ثانية |
بروتوكول الاتصالات |
نميا |
الاتصال التسلسلي |
9600 بت في الثانية ، 8 بتات بيانات ، 1 بت توقف ، لا تكافؤ ولا تحكم في التدفق |
التشغيل الحالي |
45 مللي أمبير |
الحصول على بيانات الموقع من GPS
ستنقل وحدة GPS البيانات في سلاسل متعددة بمعدل 9600 باود. إذا استخدمنا محطة UART بمعدل 9600 Baud ، فيمكننا رؤية البيانات التي يتلقاها GPS.
وحدة GPS ترسل بيانات موقع التعقب في الوقت الحقيقي بتنسيق NMEA (انظر لقطة الشاشة أعلاه). يتكون تنسيق NMEA من عدة جمل ، وفيها أربع جمل مهمة ترد أدناه. يمكن العثور على مزيد من التفاصيل حول جملة NMEA وتنسيق البيانات الخاص بها هنا.
- GPGGA دولار: بيانات إصلاح نظام تحديد المواقع العالمي
- GPGSV دولار: أقمار GPS الصناعية قيد النظر
- GPGSA دولار: GPS DOP والأقمار الصناعية النشطة
- GPRMC $: الحد الأدنى الموصى به لبيانات GPS / النقل العام
تعرف على المزيد حول بيانات GPS وسلاسل NMEA هنا.
هذه هي البيانات التي يتلقاها نظام تحديد المواقع العالمي (GPS) عند الاتصال بمعدل 9600 باود.
$ GPRMC، 141848.00، A، 2237.63306، N، 08820.86316، E، 0.553، 100418 ،،، A * 73 $ GPVTG، T، M، 0.553، N، 1.024، K، A * 27 دولارًا GPGGA، 141848.00، 2237.63306، N، 08820.86316، E، 1،03،2.56،1.9، M، -54.2، M ،، * 74 $ GPGSA، A، 2،06،02،05 ،،،،،،،،،، 2.75، * 2.56،1.00 * 02 دولار GPGSV، 1،1،04،02،59،316،30،05،43،188،25،06،44،022،23،25،03،324 ، * 76 دولارًا GPGLL ، 2237.63306 ، N ، 08820.86316 ، E ، 141848.00 ، أ ، أ * 65
عندما نستخدم وحدة GPS لتتبع أي موقع ، فإننا نحتاج فقط إلى الإحداثيات ويمكننا العثور عليها في سلسلة $ GPGGA. يتم استخدام سلسلة GPGGA (بيانات نظام تحديد المواقع العالمي) فقط في الغالب في البرامج ويتم تجاهل السلاسل الأخرى.
GPGGA دولار ، 141848.00 ، 2237.63306 ، N ، 08820.86316 ، E ، 1،03،2.56،1.9 ، M ، -54.2 ، M ، * 74
ما معنى هذا الخط؟
معنى هذا الخط هو: -
1. تبدأ السلسلة دائمًا بعلامة "$"
2. يرمز GPGGA إلى بيانات إصلاح نظام تحديد المواقع العالمي
3. "،" تشير الفاصلة إلى الفصل بين قيمتين
4. 141848.00: توقيت غرينتش كـ 14 (ساعة): 18 (دقيقة): 48 (ثانية): 00 (مللي ثانية)
5. 2237.63306 ، شمالاً: خط العرض 22 (درجة) 37 (دقيقة) 63306 (ثانية) شمالاً
6. 08820.86316، E: خط الطول 088 (درجة) 20 (دقيقة) 86316 (ثانية) شرقًا
7. 1: إصلاح الكمية 0 = بيانات غير صالحة ، 1 = بيانات صحيحة ، 2 = إصلاح DGPS
8. 03: عدد الأقمار الصناعية المعروضة حاليًا.
9. 1.0: HDOP
10. 2.56، M: الارتفاع (الارتفاع فوق مستوى سطح البحر بالمتر)
11. 1.9 ، م: ارتفاع جيويدس
12. * 74: المجموع الاختباري
لذلك نحن بحاجة إلى الرقمين 5 ورقم 6 لجمع معلومات حول موقع الوحدة أو مكان وجودها. في هذا المشروع ، استخدمنا مكتبة GPS توفر بعض الوظائف لاستخراج خطوط الطول والعرض حتى لا داعي للقلق بشأن ذلك.
لقد سبق لنا استخدام نظام تحديد المواقع العالمي (GPS) مع متحكمات دقيقة أخرى:
- كيفية استخدام GPS مع Arduino
- Raspberry Pi GPS Module Interfacing Tutorfacing
- واجهة وحدة GPS مع متحكم PIC
- تتبع مركبة على خرائط Google باستخدام Arduino و ESP8266 و GPS
تحقق من جميع المشاريع المتعلقة بنظام تحديد المواقع العالمي هنا.
مخطط الرسم البياني
فيما يلي مخطط الدائرة لتفاعل GPS مع متحكم AVR Atemga16:
يتم تشغيل النظام بالكامل بواسطة محول تيار مستمر بجهد 12 فولت ، لكن الدوائر تعمل بجهد 5 فولت ، لذلك يتم تنظيم مصدر الطاقة إلى 5 فولت بواسطة منظم الجهد LM7805. تم تكوين شاشة LCD مقاس 16 × 2 في وضع 4 بت وتظهر توصيلات الدبوس في مخطط الدائرة. يتم أيضًا تشغيل نظام تحديد المواقع العالمي (GPS) بواسطة 5 فولت ويتم توصيل دبوس tx الخاص به مباشرة بـ Rx من متحكم Atmega16. يتم استخدام مذبذب بلوري بسرعة 8 ميجاهرتز لتوقيت وحدة التحكم الدقيقة.
خطوات واجهة GPS مع متحكم AVR
- اضبط تكوينات الميكروكونترولر التي تتضمن تكوين المذبذب.
- قم بتعيين المنفذ المرغوب لشاشة LCD بما في ذلك سجل DDR.
- قم بتوصيل وحدة GPS بالمتحكم الدقيق باستخدام USART.
- قم بتهيئة نظام UART في وضع ISR ، بمعدل 9600 باود وشاشة LCD في وضع 4 بت.
- خذ صفيفين من الأحرف بناءً على طول خط العرض وخط الطول.
- احصل على حرف واحد بت في كل مرة وتحقق مما إذا كان يبدأ من $ أم لا.
- إذا تم استلام $ فهو عبارة عن سلسلة ، نحتاج إلى التحقق من $ GPGGA ، هذه الأحرف الستة بما في ذلك $.
- إذا كانت GPGGA ، فاستلم السلسلة الكاملة وقم بتعيين العلامات.
- ثم استخرج خطي الطول والعرض بالاتجاهات في صفيفين.
- أخيرًا اطبع صفيفتي خطوط الطول والعرض في شاشة LCD.
شرح الكود
يتم تقديم كود كامل مع فيديو توضيحي في النهاية ، وهنا يتم شرح بعض الأجزاء المهمة من الكود.
بادئ ذي بدء ، قم بتضمين بعض الرؤوس المطلوبة في الكود ثم اكتب MACROS الخاص بقناع بت لشاشات الكريستال السائل وتكوين UART.
#define F_CPU 8000000ul # تضمين # تضمين
قم الآن بتعريف بعض المتغيرات والمصفوفات وتهيئتها لتخزين سلسلة GPS وخط الطول والعلامات.
شار بوف متقلبة char ind ، flag ، stringReceived ؛ char gpgga = {'$'، 'G'، 'P'، 'G'، 'G'، 'A'}؛ خط عرض شار شار لوجيتيود
بعد ذلك لدينا بعض وظيفة برنامج تشغيل LCD لقيادة شاشة LCD.
lcdwrite (char ch، char r) باطل { LCDPORT = ch & 0xF0؛ RWLow. إذا (ص == 1) RSHigh ؛ آخر RSLow؛ EN عالية ؛ _delay_ms (1) ؛ ENLow _delay_ms (1) ؛ LCDPORT = الفصل << 4 & 0xF0 ؛ RWLow. إذا (ص == 1) RSHigh ؛ آخر RSLow؛ EN عالية ؛ _delay_ms (1) ؛ ENLow _delay_ms (1) ؛ } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++، DATA)؛ // __ delay_ms (20) ؛ } } void lcdbegin () { char lcdcmd = {0x02،0x28،0x0E، 0x06،0x01} ؛ لـ (int i = 0 ؛ i <5 ؛ i ++) LCDwrite (lcdcmd ، CMD) ؛ }
بعد ذلك ، قمنا بتهيئة الاتصال التسلسلي مع GPS وقارننا السلسلة المستلمة بـ "GPGGA":
serialbegin () باطل { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1) ؛ UBRRH = (BAUD_PRESCALE >> 8) ، UBRRL = BAUD_PRESCALE ، UCSRB = (1 <
الآن إذا تمت مطابقة السلسلة المستلمة بنجاح مع GPGGA ، ففي استخراج الوظيفة الرئيسية وعرض إحداثيات خطوط الطول والعرض للموقع:
lcdwrite (0x80،0) ؛ lcdprint ("Lat:") ؛ طباعة تسلسلية ("Latitude:") ؛ لـ (int i = 15 ؛ i <27 ؛ i ++) { latitude = buf ؛ lcdwrite (خط العرض ، 1) ؛ كتابة مسلسل (خط العرض) ؛ إذا (i == 24) { lcdwrite (''، 1) ؛ أنا ++ ؛ } } serialprintln ("")؛ lcdwrite (192،0) ؛ lcdprint ("السجل:") ؛ طباعة تسلسلية ("Logitude:") ؛ لـ (int i = 29 ؛ i <41 ؛ i ++) { logitude = buf ؛ lcdwrite (logitude، 1) ؛ متسلسل (logitude) ؛ إذا (i == 38) { lcdwrite (''، 1) ؛ أنا ++ ؛ } }
هذه هي الطريقة التي يمكن بها ربط وحدة GPS مع ATmega16 للعثور على إحداثيات الموقع.
ابحث عن الكود الكامل وفيديو العمل أدناه.