- ส่วนประกอบที่ต้องการ:
- แผนภาพวงจรและคำอธิบาย: -
- การรับข้อมูลตำแหน่งจาก GPS:
- ขั้นตอนในการเชื่อมต่อ GPS กับไมโครคอนโทรลเลอร์ PIC: -
- คำอธิบายรหัส:
GPS เป็นรูปแบบย่อของระบบกำหนดตำแหน่งบนพื้นโลก เป็นระบบที่ให้ข้อมูลระดับความสูงละติจูดลองจิจูดเวลา UTC และข้อมูลอื่น ๆ อีกมากมายซึ่งนำมาจากดาวเทียม 2, 3, 4 หรือมากกว่า ในการอ่านข้อมูลจาก GPS เราจำเป็นต้องมีไมโครคอนโทรลเลอร์และเราได้เชื่อมต่อ GPS กับ Arduino และ Raspberry Pi แล้ว
เราได้เลือกโมดูลจีพีเอส G7020ซึ่งผลิตโดย U-blox เราจะได้รับลองจิจูดและละติจูดของตำแหน่งใดตำแหน่งหนึ่งจากดาวเทียมและจะแสดงเหมือนกันบนจอ LCD 16x2 ตัวอักษร ดังนั้นที่นี่เราจะเชื่อมต่อ GPS กับไมโครคอนโทรลเลอร์ PIC16F877Aด้วยไมโครชิป
ส่วนประกอบที่ต้องการ:
- Pic16F877A - แพ็คเกจ PDIP40
- คณะกรรมการขนมปัง
- Pickit-3
- อะแดปเตอร์ 5V
- จอ LCD JHD162A
- โมดูล GPS uBLOX-G7020
- สายเชื่อมต่ออุปกรณ์ต่อพ่วง
- ตัวต้านทาน 4.7k
- หม้อ 10k
- คริสตัล 20mHz
- 2 ชิ้น 33pF ตัวเก็บประจุเซรามิก
แผนภาพวงจรและคำอธิบาย: -
LCD ตัวอักษร 16x2 เชื่อมต่อผ่านไมโครคอนโทรลเลอร์ PIC16F877A ซึ่งเชื่อมต่อ RB0, RB1, RB2 ตามลำดับกับขา LCD ซึ่งเป็น RS, R / W และ E RB4, RB5, RB6 และ RB7 เชื่อมต่อผ่าน 4 พิน D4, D5 ของ LCD, D6, D7. LCD เชื่อมต่อในโหมด 4 บิตหรือโหมดแทะ เรียนรู้เพิ่มเติมเกี่ยวกับการเชื่อมต่อ LCD กับไมโครคอนโทรลเลอร์ PIC
ออสซิลเลเตอร์คริสตัล 20MHz พร้อมตัวเก็บประจุเซรามิกสองตัวที่ 33pF เชื่อมต่อผ่านขา OSC1 และ OSC2 จะให้ความถี่สัญญาณนาฬิกาคงที่ 20 MHz แก่ไมโครคอนโทรลเลอร์
uBlox-G7020 โมดูล GPSรับและส่งข้อมูลโดยใช้ UART PIC16F877A ประกอบด้วยไดรเวอร์ USART หนึ่งตัวภายในชิปเราจะรับข้อมูลจากโมดูล GPS โดย USART ดังนั้นการเชื่อมต่อแบบข้ามจะทำจากขาไมโครคอนโทรลเลอร์ Rx ไปยังพิน Tx ของ GPS และพิน USART รับที่เชื่อมต่อผ่านพินส่งของ GPS
uBlox-G7020 มีรหัสสีสำหรับหมุด พิน Positive หรือ 5V เป็นสีแดงพิน Negative หรือ GND เป็นสีดำและพิน Transmit เป็นสีน้ำเงิน
ฉันเชื่อมต่อทั้งหมดนี้ในเขียงหั่นขนมแล้ว
การรับข้อมูลตำแหน่งจาก GPS:
มาดูวิธีการเชื่อมต่อ GPS โดยใช้ USART และดูผลลัพธ์ใน LCD 16x2 ตัวอักษร
โมดูลจะส่งข้อมูลในหลาย ๆ สตริงที่ 9600 Baud Rate หากเราใช้เทอร์มินัล UART ที่มีอัตรารับส่งข้อมูล 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, ก, ก * 65
เมื่อเราใช้โมดูลจีพีเอส สำหรับการติดตามสถานที่ใด ๆ เราจะต้องพิกัดและเราสามารถหานี้ในสตริง เฉพาะ $ 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 ย่อมาจาก Global Positioning System Fix Data
3. “,” ลูกน้ำหมายถึงการแยกระหว่างสองค่า
4. 141848.00: GMT เวลาเป็น 14 (ชม.): 18 (นาที): 48 (วินาที): 00 (มิลลิวินาที)
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: ความสูงของ Geoids
12. * 74: เช็คซัม
ดังนั้นเราจึงต้องการหมายเลข 5 และหมายเลข 6 เพื่อรวบรวมข้อมูลเกี่ยวกับตำแหน่งโมดูลหรือที่ตั้งของโมดูล
ขั้นตอนในการเชื่อมต่อ GPS กับไมโครคอนโทรลเลอร์ PIC: -
- ตั้งค่าคอนฟิกของไมโครคอนโทรลเลอร์ซึ่งรวมถึงคอนฟิกูเรชันออสซิลเลเตอร์
- ตั้งค่าพอร์ตที่ต้องการสำหรับ LCD รวมถึง TRIS register
- เชื่อมต่อโมดูล GPS กับไมโครคอนโทรลเลอร์โดยใช้ USART
- เริ่มต้นระบบ USART ในโหมดรับต่อเนื่องด้วยอัตรารับส่งข้อมูล 9600 และ LCD พร้อมโหมด 4 บิต
- ใช้อาร์เรย์อักขระสองตัวขึ้นอยู่กับความยาวของละติจูดและลองจิจูด
- รับครั้งละหนึ่งอักขระและตรวจสอบว่าเริ่มต้นจาก $ หรือไม่
- หาก $ รับเป็นสตริงเราต้องตรวจสอบ GPGGA ตัวอักษร 5 ตัวนี้และลูกน้ำ
- หากเป็น GPGGA เราจะข้ามเวลาและค้นหาละติจูดและลองจิจูดเราจะจัดเก็บละติจูดและลองจิจูดไว้ในอาร์เรย์อักขระสองตัวจนกว่าจะไม่ได้รับ N (เหนือ) และ E (ตะวันออก)
- เราจะพิมพ์อาร์เรย์ใน LCD
- ล้างอาร์เรย์
คำอธิบายรหัส:
ลองดูโค้ดทีละบรรทัด สองสามบรรทัดแรกมีไว้สำหรับการตั้งค่าบิตการกำหนดค่าซึ่งได้อธิบายไว้ในบทช่วยสอนก่อนหน้านี้ดังนั้นฉันจึงข้ามไปก่อน รหัสที่สมบูรณ์จะได้รับในตอนท้ายของบทช่วยสอนนี้
ห้าบรรทัดนี้ใช้สำหรับรวมไฟล์ส่วนหัวของไลบรารี, lcd.h และ eusart.h ใช้ สำหรับ LCD และ USART ตามลำดับ และ xc.h ใช้ สำหรับไฟล์ส่วนหัวของไมโครคอนโทรลเลอร์
# รวม
ในฟังก์ชัน void main () system_init () ; ฟังก์ชันใช้เพื่อเริ่มต้น LCD และ USART
โมฆะ main (โมฆะ) { TRISB = 0x00; // ตั้งค่าเป็นเอาต์พุต system_init ();
lcd_init (); และ EUSART_Intialize (); ถูกเรียกจากไลบรารีทั้งสอง lcd.h และ eusart.h
โมฆะ system_init (โมฆะ) { lcd_init (); // สิ่งนี้จะเริ่มต้น LCD EUSART1_Initialize (); // นี่จะเป็นการเริ่มต้น Eusart }
ใน ขณะที่ วนซ้ำเราทำลายสตริง GPGGA เพื่อรับพิกัดลองจิจูดและละติจูด เรารับทีละบิตและเปรียบเทียบกับอักขระแต่ละตัวที่มีอยู่ในสตริง GPGGA
เราทำลายรหัสที่เราจะได้รับ: -
incomer_data = EUSART1_Read (); // ตรวจสอบสตริง '$ GPGGA' / * ------------------------------ ค้นหาบรรทัด GPGGA ทีละขั้นตอน --------------------------- * / if (incomer_data == '$') {// คำสั่งแรกของข้อมูล GPS เริ่มต้นด้วย a $ ลงชื่อ incomer_data = EUSART1_Read (); // ถ้าครั้งแรก if เป็นจริงแล้วเฟสถัดไป if (incomer_data == 'G') { incomer_data = EUSART1_Read (); ถ้า (incomer_data == 'P'); { incomer_data = EUSART1_Read (); ถ้า (incomer_data == 'G'); { incomer_data = EUSART1_Read (); ถ้า (incomer_data == 'G') { incomer_data = EUSART1_Read (); ถ้า (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// แรกรับ incomer_data = EUSART1_Read (); // ในขั้นตอนนี้เสร็จสิ้นการเช็คอินขั้นสุดท้ายจะพบ GPGGA
การใช้รหัสนี้ทำให้เราข้ามเวลา UTC
ในขณะที่ (incomer_data! = ',') {// ข้ามเวลา GMT incomer_data = EUSART1_Read (); }
รหัสนี้ใช้สำหรับจัดเก็บข้อมูลละติจูดและลองจิจูดในอาร์เรย์อักขระ
incomer_data = EUSART1_Read (); ละติจูด = incomer_data; ในขณะที่ (incomer_data! = ',') { สำหรับ (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); ละติจูด = incomer_data; // จัดเก็บข้อมูล Latitude } incomer_data = EUSART1_Read (); ถ้า (incomer_data == ',') { สำหรับ (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); ลองจิจูด = incomer_data; // จัดเก็บข้อมูลลองจิจูด } }
และในที่สุดเราก็ได้พิมพ์ลองจิจูดและละติจูดบน LCD
array_count = 0; lcd_com (0x80); // LCD line one selection while (array_count <12) {// Array of Latitude data is 11 digit lcd_data (latitude); // พิมพ์ข้อมูล Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Lcd line two selection while (array_count <13) {// Array of Longitude data is 12 digit lcd_data (longitude); // พิมพ์ข้อมูลลองจิจูด array_count ++; }
นี่คือวิธีที่เราสามารถเชื่อมต่อโมดูล GPS กับไมโครคอนโทรลเลอร์ PICเพื่อรับ Latitude และลองจิจูดของตำแหน่งปัจจุบัน
รหัสที่สมบูรณ์และไฟล์ส่วนหัวมีให้ด้านล่าง