- Kinakailangan ang Mga Bahagi:
- Circuit Diagram at Paliwanag: -
- Pagkuha ng Data ng Lokasyon mula sa GPS:
- Mga Hakbang sa Interface GPS na may PIC Microcontroller: -
- Paliwanag sa Code:
Ang GPS ay ang maikling anyo ng Global Positioning System. Ito ay isang sistema na nagbibigay ng tumpak na Altitude, Latitude, Longitude, oras ng UTC at marami pang impormasyon, na kinuha mula sa 2, 3, 4 o higit pang satellite. Upang mabasa ang data mula sa GPS, kailangan namin ng ilang Microcontroller at na-interfaced na namin ang GPS sa Arduino at sa Raspberry Pi.
Pinili namin ang module ng G7020 GPS na ginawa ng U-blox. Tumatanggap kami ng Longhitud at latitude ng isang partikular na posisyon mula sa satellite at ipapakita ang pareho sa isang 16x2 na Character LCD. Kaya dito makikipag-ugnay kami ng GPS sa PIC16F877A microcontroller sa pamamagitan ng microchip.
Kinakailangan ang Mga Bahagi:
- Pic16F877A - Pakete ng PDIP40
- Lupon ng Tinapay
- Pitas-3
- 5V adapter
- LCD JHD162A
- uBLOX-G7020 module ng GPS
- Mga wire upang ikonekta ang mga peripheral.
- 4.7k Mga Resistor
- 10k palayok
- 20mHz Crystal
- 2 pcs 33pF ceramic capacitor
Circuit Diagram at Paliwanag: -
Ang 16x2 character LCD ay konektado sa kabuuan ng PIC16F877A microcontroller, kung saan ang RB0, RB1, RB2 ay konektado ayon sa pagkakabanggit sa LCD pin na ang RS, R / W, at E. RB4, RB5, RB6 at RB7 ay konektado sa kabuuan ng 4 pin D4, D5 ng LCD, D6, D7. Ang LCD ay konektado sa 4bit mode o nibble mode. Dagdagan ang nalalaman tungkol sa interfacing LCD sa PIC Microcontroller.
Isang kristal Oscillator na 20MHz na may dalawang ceramic capacitor ng 33pF na konektado sa buong OSC1 at OSC2 pin. Magbibigay ito ng palaging 20 MHz na dalas ng orasan sa microcontroller.
uBlox-G7020 module ng GPS, tumanggap at magpadala ng data gamit ang UART. Ang PIC16F877A ay binubuo ng isang driver ng USART sa loob ng maliit na tilad, makakatanggap kami ng data mula sa module ng GPS sa pamamagitan ng USART, kaya ang isang koneksyon sa krus ay gagawin mula sa microcontroller Rx pin sa Tx pin ng GPS at USART Tumanggap ng pin na konektado sa kabuuan ng Transmit pin ng GPS.
Ang uBlox-G7020 ay may color code para sa mga pin. Ang Positibo o 5V na pin ay nasa Pulang kulay, ang Negatibo o GND na pin ay nasa Itim na kulay at ang Transmit pin ay nasa asul na kulay.
Ang lahat ng ito ay nakakonekta ko sa breadboard.
Pagkuha ng Data ng Lokasyon mula sa GPS:
Tingnan natin kung paano i-interface ang GPS gamit ang USART at tingnan ang resulta sa isang 16x2 na character na LCD.
Ang Module ay magpapadala ng data sa maraming mga string sa 9600 Baud Rate. Kung gagamit kami ng isang UART terminal na may 9600 Baud rate, makikita namin ang data na natanggap ng GPS.
Nagpadala ang module ng GPS ng data ng posisyon ng pagsubaybay sa Real time sa format na NMEA (tingnan ang screenshot sa itaas). Ang format na NMEA ay binubuo ng maraming mga pangungusap, kung saan ang apat na mahahalagang pangungusap ay ibinibigay sa ibaba. Higit pang detalye tungkol sa pangungusap NMEA at ang format ng data nito ay matatagpuan dito.
- $ GPGGA: Ang System ng Global Positioning System ayusin ang Data
- $ GPGSV: Mga satellite ng GPS na nakikita
- $ GPGSA: GPS DOP at mga aktibong satellite
- $ GPRMC: Inirekumenda na minimum na tukoy na data ng GPS / Transit
Matuto nang higit pa tungkol sa data ng GPS at mga string ng NMEA dito.
Ito ang data na natanggap ng GPS kapag nakakonekta sa 9600 baud rate.
$ 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,,,,,,,,,,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
Kapag gumagamit kami ng module ng GPS para sa pagsubaybay sa anumang lokasyon, kailangan lang namin ng mga coordinate at mahahanap namin ito sa $ GPGGA string. Ang $ GPGGA (Global Positioning System Fix Data) lamang ang string na ginagamit sa mga programa at ang iba pang mga string ay hindi pinapansin.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
Ano ang kahulugan ng linyang iyon?
Ang kahulugan ng linyang iyon ay: -
1. Ang string ay palaging nagsisimula sa isang "$" sign
2. Ang GPGGA ay kumakatawan sa Global Positioning System Fix Data
3. "," Ipinapahiwatig ng Comma ang paghihiwalay sa pagitan ng dalawang halaga
4. 141848.00: GMT oras bilang 14 (hr): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: Latitude 22 (degree) 37 (minuto) 63306 (sec) North
6. 08820.86316, E: Longitude 088 (degree) 20 (minuto) 86316 (sec) Silangan
7. 1: Ayusin ang Dami 0 = hindi wastong data, 1 = wastong data, 2 = pag-aayos ng DGPS
8. 03: Bilang ng mga satellite na kasalukuyang tiningnan.
9. 1.0: HDOP
10. 2.56, M: Altitude (Taas sa taas ng dagat sa metro)
11. 1.9, M: Taas ng Geoids
12. * 74: checkum
Kaya kailangan namin ng Blg. 5 at Blg. 6 upang mangalap ng impormasyon tungkol sa lokasyon ng module o, kung saan ito matatagpuan.
Mga Hakbang sa Interface GPS na may PIC Microcontroller: -
- Itakda ang mga pagsasaayos ng microcontroller na kasama ang pagsasaayos ng Oscillator.
- Itakda ang nais na port para sa LCD kasama ang TRIS register.
- Ikonekta ang module ng GPS sa microcontroller gamit ang USART.
- Simulan ang system na USART sa tuluy-tuloy na mode na pagtanggap, na may 9600 baud rate at LCD na may 4bit mode.
- Kumuha ng dalawang mga arrays ng character depende sa Haba ng Latitude at Longitud.
- Makatanggap ng isang maliit na character nang paisa-isa at suriin kung nagsimula ito mula sa $ o hindi.
- Kung $ Makatanggap sa gayon ito ay isang string, kailangan naming suriin ang GPGGA, ang 5 titik at ang kuwit.
- Kung ito ay GPGGA, pagkatapos ay lalaktawan namin ang oras, at hahanapin ang Latitude at Longitude, Itatabi namin ang Latitude at Longitud sa dalawang hanay ng character hanggang sa hindi matanggap ang N (Hilaga) at E (Silangan).
- I-print namin ang array sa LCD.
- I-clear ang array.
Paliwanag sa Code:
Tingnan natin ang linya ng code sa pamamagitan ng linya. Ang mga unang ilang linya ay para sa pagse-set up ng mga config bit na ipinaliwanag sa nakaraang tutorial kaya't nilalaktawan ko ang mga ito sa ngayon. Ang kumpletong Code ay ibinigay sa pagtatapos ng tutorial na ito.
Ang limang linya na ito ay ginagamit para sa pagsasama ng mga file ng header ng library, lcd.h at eusart.h ay para sa LCD at USART ayon sa pagkakabanggit. At ang xc.h ay para sa file ng header ng microcontroller.
# isama
Sa walang bisa na pangunahing () pag- andar, ang system_init () ; Ginagamit ang pagpapaandar upang simulan ang LCD at USART.
Walang bisa ang pangunahing (walang bisa) { TRISB = 0x00; // Ang pagtatakda bilang output system_init ();
Ang lcd_init (); at EUSART_Intialize (); ay tinawag mula sa dalawang aklatan lcd.h at eusart.h
void system_init (void) { lcd_init (); // Ito ay magpapasimula sa lcd EUSART1_Initialize (); // Ito ay magpapasimula sa Eusart }
Sa habang binabali namin ang string ng GPGGA upang makuha ang koordinasyon ng Longitude at Latitude. Tumatanggap kami nang paunti-unti at ihinahambing ito sa mga indibidwal na character na naroroon sa GPGGA string.
Sinisira namin ang mga code na makukuha namin: -
incomer_data = EUSART1_Read (); // Suriin ang string na '$ GPGGA,' / * ---------------------------- Hakbang-hakbang na hanapin ang linya ng GPGGA- --------------------------- * / if (incomer_data == '$') {// Ang unang pahayag ng data ng GPS ay nagsisimula sa a $ sign incomer_data = EUSART1_Read (); // Kung ang una kung naging totoo pagkatapos ang susunod na yugto kung (incomer_data == 'G') { incomer_data = EUSART1_Read (); kung (incomer_data == 'P'); { incomer_data = EUSART1_Read (); kung (incomer_data == 'G'); { incomer_data = EUSART1_Read (); kung (incomer_data == 'G') { incomer_data = EUSART1_Read (); kung (incomer_data == 'A') { incomer_data = EUSART1_Read (); kung (incomer_data == ',') {// una, natanggap incomer_data = EUSART1_Read (); // Sa yugtong ito Huling pag-check in tapos na, ang GPGGA ay matatagpuan.
Sa pamamagitan ng paggamit ng code na ito ay nilalaktawan namin ang oras ng UTC.
habang (incomer_data! = ',') {// paglaktaw sa GMT Oras incomer_data = EUSART1_Read (); }
Ang code na ito ay para sa pag-iimbak ng data ng Latitude at Longitude sa character character.
incomer_data = EUSART1_Read (); latitude = incomer_data; habang (incomer_data! = ',') { para sa (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitude = incomer_data; // Itago ang data ng Latitude } incomer_data = EUSART1_Read (); kung (incomer_data == ',') { para sa (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = incomer_data; // Iimbak ang data ng Longitude } }
At sa wakas nai-print namin ang longitude at latitude sa LCD.
array_count = 0; lcd_com (0x80); // LCD linya ng isang pagpipilian habang (array_count <12) {// Array ng data ng Latitude ay 11 digit na lcd_data (latitude); // Print the Latitude data array_count ++; } array_count = 0; lcd_com (0xC0); // Lcd linya ng dalawang pagpipilian habang (array_count <13) {// Ang data ng Array ng Longitude ay 12 digit na lcd_data (longitude); // I-print ang data ng Longitude na array_count ++; }
Ito ay kung paano namin mai- interface ang module ng GPS sa PIC Microcontroller upang makuha ang Latitude at longitude ng kasalukuyang lokasyon.
Ang kumpletong mga file ng code at header ay ibinibigay sa ibaba.