- Kinakailangan ang Mga Bahagi
- Pagkuha ng Data ng Lokasyon mula sa GPS
- Diagram ng Circuit
- Mga hakbang sa Interface GPS na may AVR Microcontroller
- Paliwanag sa Code
Ang mga module ng GPS ay malawakang ginagamit sa mga aplikasyon ng electronics upang subaybayan ang lokasyon batay sa mga coordinate ng longitude at latitude. Ang sistema ng pagsubaybay sa sasakyan, GPS Clock, Sistema ng Alerto sa Pagtuklas ng aksidente, pag-navigate sa trapiko, sistema ng pagsubaybay atbp ay ilan sa mga halimbawa kung saan mahalaga ang pagpapaandar ng GPS. Nagbibigay ang GPS ng Altitude, Latitude, Longitude, oras ng UTC at maraming iba pang impormasyon tungkol sa partikular na lokasyon, na kinunan mula sa higit sa isang satellite. Upang mabasa ang data mula sa GPS, kailangan ng isang microcontroller kaya narito kami nakikipag- interfaces ng module ng GPS sa AVR microcontroller Atmega16 at pini -print ang longitude at latitude sa 16x2 LCD display.
Kinakailangan ang Mga Bahagi
- Atmega16 / 32
- Module ng GPS (uBlox Neo 6M GPS)
- Mahabang wire Antenna
- 16x2 LCD
- 2.2k Resistor
- 1000uf Capacitor
- 10uF capacitor
- Nag-uugnay sa kawad
- LM7805
- DC Jack
- 12v DC Adapter
- Mga Burgstips
- PCB o Pangkalahatang Layunin PCB
Ang Ublox Neo 6M ay isang serial module ng GPS na nagbibigay ng mga detalye ng lokasyon sa pamamagitan ng serial na komunikasyon. Mayroon itong apat na mga pin.
Pin |
Paglalarawan |
Vcc |
2.7 - 5V power supply |
Gnd |
Lupa |
TXD |
Ipadala ang Data |
RXD |
Makatanggap ng Data |
Ang module ng Ublox neo 6M GPS ay tugma ang TTL at ang mga pagtutukoy nito ay ibinibigay sa ibaba.
Oras ng pagkuha |
Cool na pagsisimula: 27s, Mainit na pagsisimula: 1s |
Komunikasyon sa komunikasyon |
NMEA |
Serial na komunikasyon |
9600bps, 8 data bit, 1 stop bit, walang pagkakapantay-pantay at walang kontrol sa daloy |
Kasalukuyang operating |
45mA |
Pagkuha ng Data ng Lokasyon mula sa GPS
Ang Module ng GPS ay magpapadala ng data sa maraming mga string sa 9600 Baud Rate. Kung gumagamit kami ng isang UART terminal na may 9600 Baud rate, maaari naming makita ang data na natanggap ng GPS.
Ipinapadala ng module ng GPS ang data ng posisyon ng pagsubaybay sa Realtime 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. Sa proyektong ito, gumamit kami ng isang GPS Library na nagbibigay ng ilang mga pagpapaandar upang makuha ang latitude at longitude kaya't hindi namin kailangang mag-alala tungkol doon.
Mayroon kaming dating interface na GPS sa iba pang mga microcontroller:
- Paano Gumamit ng GPS gamit ang Arduino
- Tutorial sa Pag-interfacing ng Module ng Raspberry Pi GPS
- Pag-interface ng Module ng GPS sa PIC Microcontroller
- Subaybayan ang Isang Sasakyan sa Google Maps gamit ang Arduino, ESP8266 at GPS
Suriin ang lahat ng mga proyekto na nauugnay sa GPS dito.
Diagram ng Circuit
Ang diagram ng circuit para sa GPS na nakikipag-ugnay sa AVR Atemga16 microcontroller ay ibinibigay sa ibaba:
Ang buong sistema ay pinalakas ng isang 12v DC Adapter, ngunit ang mga circuit ay gumagana sa 5v kaya ang supply ng kuryente ay kinokontrol sa 5v ng LM7805 voltage regulator. Ang isang 16x2 LCD ay naka-configure sa 4-bit mode at ang mga koneksyon sa pin nito ay ipinapakita sa diagram ng circuit. Ang GPS ay pinalakas din ng 5v at ang tx pin nito ay direktang konektado sa Rx ng Atmega16 microcontroller. Ang isang 8MHz crystal oscillator ay ginagamit upang mai-orasan ang microcontroller.
Mga hakbang sa Interface GPS na may AVR Microcontroller
- Itakda ang mga pagsasaayos ng microcontroller na kasama ang pagsasaayos ng Oscillator.
- Itakda ang nais na port para sa LCD kasama ang rehistro ng DDR.
- Ikonekta ang module ng GPS sa microcontroller gamit ang USART.
- Simulan ang system UART sa ISR mode, na may 9600 baud rate at LCD sa 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 natanggap ang $ pagkatapos ito ay isang string, kailangan naming suriin ang $ GPGGA, ang 6 na liham kasama ang $.
- Kung ito ay GPGGA, pagkatapos ay tanggapin ang kumpletong string at itakda ang mga flag.
- Pagkatapos ay kunin ang latitude at longitude na may mga direksyon sa dalawang mga array.
- Panghuli i-print ang mga latitude at longitude array sa LCD.
Paliwanag sa Code
Ang kumpletong code na may isang video na Pagpapakita ay ibinigay sa dulo, narito ipinaliwanag ang ilang mahahalagang bahagi ng code.
Una sa lahat isama ang ilang kinakailangang header sa code at pagkatapos ay isulat ang MACROS ng bitmask para sa LCD at UART config.
# tukuyin ang F_CPU 8000000ul # isama ang # isama
Ngayon ideklara at simulan ang ilang mga variable at array para sa pag-iimbak ng GPS string, longitude ng latitude at mga watawat.
char buf; pabagu-bago ng isip char, flag, stringReceive; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char latitude; char logitude;
Pagkatapos nito mayroon kaming pagpapaandar sa LCD Driver upang himukin ang LCD.
walang bisa lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; kung (r == 1) RSHigh; iba pa ang RSLow; Taas; _delay_ms (1); Mababa; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; kung (r == 1) RSHigh; iba pa ang RSLow; Taas; _delay_ms (1); Mababa; _delay_ms (1); } void lcdprint (char * str) { habang (* str) { lcdwrite (* str ++, DATA); // __ delay_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; para sa (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Pagkatapos nito ay nasimulan namin ang serial na komunikasyon sa GPS at inihambing ang natanggap na string sa "GPGGA":
walang bisa serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Ngayon kung ang natanggap na string ay matagumpay na naitugma sa GPGGA pagkatapos ay sa pangunahing pag- andar ng function at ipakita ang latitude at longitude coordinate ng lokasyon:
lcdwrite (0x80,0); lcdprint ("Lat:"); serialprint ("Latitude:"); para sa (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (latitude, 1); serialwrite (latitude); kung (i == 24) { lcdwrite ('', 1); ako ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); serialprint ("Logitude:"); para sa (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); kung (i == 38) { lcdwrite ('', 1); ako ++; } }
Kaya't ito ay kung paano ang interface ng GPS ay maaaring ma-interfaced sa ATmega16 upang mahanap ang mga lokasyon sa lokasyon.
Hanapin ang kumpletong code at gumaganang video sa ibaba.