נעשה שימוש נרחב במודולי GPS ביישומי אלקטרוניקה כדי לעקוב אחר המיקום על סמך קואורדינטות אורך ורוחב. מערכת מעקב אחר רכב, שעון GPS, מערכת התראות לגילוי תאונות, ניווט בתנועה, מערכת מעקב וכו 'הן כמה מהדוגמאות בהן פונקציונליות GPS חיונית. GPS מספק גובה, קו רוחב, קו רוחב, זמן UTC ומידע רב אחר על המיקום המסוים, הנלקח ביותר מלווין אחד. כדי לקרוא נתונים מ- GPS, יש צורך במיקרו-בקר ולכן הנה אנו מממשקים את מודול ה- GPS למיקרו-הבקר AVR Atmega16 ומדפיסים את אורך ורוחב על צג LCD בגודל 16x2.
רכיבים נדרשים
- Atmega16 / 32
- מודול GPS (uBlox Neo 6M GPS)
- אנטנת חוט ארוכה
- LCD בגודל 16x2
- נגד 2.2k
- 1000uf קבלים
- קבל 10uF
- חוט חיבור
- LM7805
- שקע
- מתאם DC 12v
- בורגסטיפס
- PCB או PCB לשימוש כללי
Ublox Neo 6M הוא מודול GPS סדרתי המספק פרטי מיקום באמצעות תקשורת טורית. יש לו ארבעה סיכות.
פִּין |
תיאור |
Vcc |
2.7 - ספק כוח 5V |
Gnd |
קרקע, אדמה |
TXD |
העבר נתונים |
RXD |
קבל נתונים |
מודול GPS של Ublox neo 6M תואם ל- TTL והמפרט שלו מופיע להלן.
זמן לכידת |
התחלה מגניבה: 27s, התחלה חמה: 1s |
פרוטוקול תקשורת |
NMEA |
תקשורת טורית |
9600 סיביות לשנייה, 8 סיביות נתונים, סיבית עצירה אחת, ללא זוגיות וללא בקרת זרימה |
זרם הפעלה |
45mA |
קבלת נתוני מיקום מ- GPS
מודול ה- GPS ישדר נתונים במספר מיתרים בקצב שידור 9600. אם אנו משתמשים במסוף UART עם קצב Baud 9600, אנו יכולים לראות את הנתונים המתקבלים באמצעות 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, A, A * 65
כאשר אנו משתמשים במודול GPS למעקב אחר מיקום כלשהו, אנו זקוקים רק לקואורדינטות ונוכל למצוא זאת במחרוזת $ GPGGA. רק מחרוזת $ GPGGA (Global Positioning System Fix Data) משמשת בעיקר בתוכניות ומתעלמים ממחרוזות אחרות.
$ 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: שעון GMT בשעה 14 (שעה): 18 (דקות): 48 (שניות): 00 (ms)
5. 2237.63306, N: קו רוחב 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, M: גובה הגיאואידים
12. * 74: סכום בדיקה
אז אנחנו צריכים מס '5 ומס' 6 כדי לאסוף מידע על מיקום המודול או היכן הוא ממוקם. בפרויקט זה השתמשנו בספריית GPS המספקת כמה פונקציות לחילוץ קו רוחב ואורך כך שלא נצטרך לדאוג לכך.
בעבר ממשקנו GPS עם מיקרו-בקרים אחרים:
- כיצד להשתמש ב- GPS עם Arduino
- מדריך לממשקי GPS של Raspberry Pi
- ממשק GPS מודול עם מיקרו-בקר PIC
- עקוב אחר רכב במפות Google באמצעות Arduino, ESP8266 ו- GPS
בדוק את כל הפרויקטים הקשורים ל- GPS כאן.
תרשים מעגל
תרשים המעגל לממשק GPS עם AVR Atemga16 מיקרו בקר הוא להלן:
המערכת כולה מופעלת על ידי מתאם DC 12V, אך המעגלים פועלים על 5V ולכן אספקת החשמל מוסדרת ל -5V על ידי ווסת המתח LM7805. LCD 16x2 מוגדר במצב 4 סיביות וחיבורי הסיכה שלו מוצגים בתרשים המעגל. GPS מופעל גם על ידי 5v וסיכת ה- tx שלו מחוברת ישירות ל- Rx של מיקרו-בקרת Atmega16. מתנד קריסטל 8 מגה-הרץ משמש לשעון המיקרו-בקר.
צעדים לממשק GPS עם מיקרו בקר AVR
- הגדר את התצורות של המיקרו-בקר הכוללות תצורת מתנד.
- הגדר את היציאה הרצויה עבור LCD כולל רישום DDR.
- חבר את מודול ה- GPS למיקרו-בקר באמצעות USART.
- אתחל את מערכת UART במצב ISR, עם קצב שידור 9600 ו- LCD במצב 4 ביט.
- קח שני מערכי תווים בהתאם לאורך קו רוחב ואורך.
- קבל טיפוס אחד בכל פעם ובדוק אם הוא התחיל מ- $ או לא.
- אם $ מתקבל אז זה מחרוזת, עלינו לבדוק $ GPGGA, 6 אותיות אלה כולל $.
- אם מדובר ב- GPGGA, קבל את המחרוזת המלאה והגדר דגלים.
- ואז לחלץ את קו הרוחב והאורך עם כיוונים בשני מערכים.
- לבסוף הדפיסו את מערכי הרוחב והאורך ב- LCD.
הסבר קוד
קוד שלם עם סרטון הדגמה ניתן בסוף, כאן מוסברים כמה חלקים חשובים בקוד.
ראשית כל כלול כותרת נדרשת בקוד ואז כתוב MACROS של מסיכת סיביות עבור תצורת LCD ו- UART.
#define F_CPU 8000000ul #include #include
כעת הכריזו ואותחלו כמה משתנים ומערכים לאחסון מחרוזת GPS, אורך רוחב ודגלים.
שרף בוף; Char char נדיף, דגל, מחרוזתקבל; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; קו רוחב צ'אר; תו חושי;
אחרי זה יש לנו פונקציית מנהל התקן LCD כדי להניע LCD.
בטל lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; אם (r == 1) RSHigh; אחרת RSLow; ENHigh; _עכב_מס (1); ENLow; _עכב_מס (1); LCDPORT = ch << 4 & 0xF0; RWLow; אם (r == 1) RSHigh; אחרת RSLow; ENHigh; _עכב_מס (1); ENLow; _עכב_מס (1); } בטל lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ עיכוב_מס (20); } } בטל lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; עבור (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
לאחר מכן אתחזנו את התקשורת הטורית עם GPS והשווינו את המחרוזת שהתקבלה עם "GPGGA":
בטל סדרהתחיל () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
עכשיו אם המחרוזת שהתקבלה תואמת בהצלחה GPGGA אז בפונקציה הראשית לחלץ ולהציג את קואורדינטות קו רוחב ואורך של המיקום:
lcdwrite (0x80,0); lcdprint ("לט:"); טביעת טורי ("קו רוחב:"); עבור (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (קו רוחב, 1); סדרתי (קו רוחב); אם (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("יומן:"); טביעת טורי ("Logitude:"); עבור (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); אם (i == 38) { lcdwrite ('', 1); i ++; } }
אז כך ניתן לממשק את מודול ה- GPS עם ATmega16 כדי למצוא את קואורדינטות המיקום.
מצא את הקוד המלא וסרטון העבודה למטה.