- Nepieciešamās sastāvdaļas
- Vietas datu iegūšana no GPS
- Ķēdes shēma
- Soļi GPS saskarnei ar AVR mikrokontrolleru
- Kods Paskaidrojums
GPS moduļi tiek plaši izmantoti elektronikas lietojumos, lai izsekotu atrašanās vietu, pamatojoties uz garuma un platuma koordinātām. Transportlīdzekļu izsekošanas sistēma, GPS pulkstenis, Negadījumu atklāšanas brīdināšanas sistēma, satiksmes navigācija, novērošanas sistēma utt. Ir daži no piemēriem, kur GPS funkcionalitāte ir būtiska. GPS nodrošina augstumu, platumu, garumu, UTC laiku un daudz citu informāciju par konkrēto atrašanās vietu, kas tiek ņemta no vairākiem satelītiem. Lai nolasītu datus no GPS, ir nepieciešams mikrokontrolleris, tāpēc šeit mēs saskaramies ar GPS moduli ar AVR mikrokontrolleru Atmega16 un drukājam garumu un platumu uz 16x2 LCD displeja.
Nepieciešamās sastāvdaļas
- Atmega16 / 32
- GPS modulis (uBlox Neo 6M GPS)
- Gara stieples antena
- 16x2 LCD
- 2.2k pretestība
- 1000uf kondensators
- 10uF kondensators
- Savienojošais vads
- LM7805
- DC Džeks
- 12v līdzstrāvas adapteris
- Burgstips
- PCB vai vispārējas nozīmes PCB
Ublox Neo 6M ir seriāls GPS modulis, kas nodrošina detalizētu informāciju par atrašanās vietu, izmantojot seriālo saziņu. Tam ir četras tapas.
Piespraust |
Apraksts |
Vcc |
2,7 - 5 V barošanas avots |
Gnd |
Zeme |
TXD |
Pārsūtīt datus |
RXD |
Saņemt datus |
Ublox neo 6M GPS modulis ir saderīgs ar TTL, un tā specifikācijas ir norādītas zemāk.
Uzņemšanas laiks |
Foršs starts: 27s, Karstais starts: 1s |
Komunikācijas protokols |
NMEA |
Seriālā komunikācija |
9600 bps, 8 datu biti, 1 pieturas bits, bez paritātes un plūsmas kontroles |
Darbības strāva |
45mA |
Vietas datu iegūšana no GPS
GPS modulis pārsūtīs datus vairākās virknēs ar 9600 pārraides ātrumu. Ja izmantojam UART termināli ar 9600 Baud pārraides ātrumu, mēs varam redzēt GPS saņemtos datus.
GPS modulis reāllaika izsekošanas pozīcijas datus nosūta NMEA formātā (skatiet iepriekš redzamo ekrānuzņēmumu). NMEA formāts sastāv no vairākiem teikumiem, kuros turpmāk ir norādīti četri svarīgi teikumi. Sīkāka informācija par NMEA teikumu un tā datu formātu ir atrodama šeit.
- $ GPGGA: Globālās pozicionēšanas sistēmas fiksēšanas dati
- $ GPGSV: GPS satelīti ir redzami
- $ GPGSA: GPS DOP un aktīvi satelīti
- $ GPRMC: ieteicamais minimālais specifiskais GPS / tranzīta dati
Uzziniet vairāk par GPS datiem un NMEA virknēm šeit.
Šie ir dati, ko GPS saņem, kad ir izveidots savienojums ar 9600 bitu pārraides ātrumu.
$ 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
Kad mēs izmantojam GPS moduli jebkuras vietas izsekošanai, mums ir nepieciešamas tikai koordinātas, un to varam atrast virknē $ GPGGA. Programmās lielākoties tiek izmantota tikai virkne $ GPGGA (globālās pozicionēšanas sistēmas labošanas dati), un citas virknes tiek ignorētas.
GPGGA, 141848.00, 2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Kāda ir šīs līnijas nozīme?
Šīs līnijas nozīme ir: -
1. Stīgas vienmēr sākas ar zīmi “$”
2. GPGGA apzīmē globālās pozicionēšanas sistēmas fiksēšanas datus
3. “,” Comma norāda divu vērtību atdalīšanu
4. 141848.00: GMT laiks kā 14 (h): 18 (min): 48 (sec): 00 (ms)
5. 2237.63306, N: 22 platums (grāds) 37 (minūtes) 63306 (sek) ziemeļi
6. 08820.86316, E: 088 garums (grāds) 20 (minūtes) 86316 (sek) Austrumi
7. 1: Fix Quantity 0 = nederīgi dati, 1 = derīgi dati, 2 = DGPS labojums
8. 03: Pašlaik skatīto satelītu skaits.
9. 1.0: HDOP
10. 2.56, M: augstums (augstums virs jūras līmeņa metros)
11. 1.9, M: ģeoīdu augstums
12. * 74: kontrolsumma
Tāpēc mums ir vajadzīgi Nr. 5 un Nr. 6, lai apkopotu informāciju par moduļa atrašanās vietu vai, kur tā atrodas. Šajā projektā mēs esam izmantojuši GPS bibliotēku, kas nodrošina dažas funkcijas, lai iegūtu platumu un garumu, tāpēc mums par to nav jāuztraucas.
Iepriekš mēs esam saskarnē GPS ar citiem mikrokontrolleriem:
- Kā lietot GPS ar Arduino
- Raspberry Pi GPS moduļa saskarnes apmācība
- Saskarsmes GPS modulis ar PIC mikrokontrolleru
- Izsekojiet transportlīdzekli pakalpojumā Google Maps, izmantojot Arduino, ESP8266 un GPS
Pārbaudiet visus ar GPS saistītos projektus šeit.
Ķēdes shēma
GPS saskarnes shēma ar AVR Atemga16 mikrokontrolleru ir šāda:
Visu sistēmu darbina 12 V līdzstrāvas adapteris, bet ķēdes darbojas ar 5 V, tāpēc strāvas padevi līdz 5 V regulē sprieguma regulators LM7805. 16x2 LCD ir konfigurēts 4 bitu režīmā, un tā tapu savienojumi ir parādīti shēmā. GPS darbina arī 5v, un tā tx ir tieši savienots ar Atmega16 mikrokontrollera Rx. Lai kontrolētu mikrokontrolleru, tiek izmantots 8MHz kristāla oscilators.
Soļi GPS saskarnei ar AVR mikrokontrolleru
- Iestatiet mikrokontrollera konfigurācijas, kas ietver oscilatora konfigurāciju.
- Iestatiet LCD vēlamo portu, ieskaitot DDR reģistru.
- Savienojiet GPS moduli ar mikrokontrolleru, izmantojot USART.
- Inicializējiet sistēmas UART ISR režīmā ar 9600 bitu pārraides ātrumu un LCD 4 bitu režīmā.
- Ņemiet divus rakstzīmju blokus atkarībā no platuma un garuma garuma.
- Saņemiet vienu rakstzīmju bitu vienlaikus un pārbaudiet, vai tas ir sācis no $.
- Ja $ ir saņemts, tad tā ir virkne, mums jāpārbauda $ GPGGA, šie 6 burti, ieskaitot $.
- Ja tas ir GPGGA, tad saņemiet visu virkni un iestatiet karodziņus.
- Pēc tam divos masīvos iegūstiet platumu un garumu ar virzieniem.
- Visbeidzot izdrukājiet platuma un garuma masīvus LCD ekrānā.
Kods Paskaidrojums
Beigās ir norādīts pilns kods ar demonstrācijas video, šeit ir izskaidrotas dažas svarīgas koda daļas.
Vispirms iekļaujiet kodā dažas nepieciešamās galvenes un pēc tam uzrakstiet MACROS bitmasku LCD un UART konfigurācijai.
#define F_CPU 8000000ulul #include #include
Tagad deklarējiet un inicializējiet dažus mainīgos un masīvus GPS virknes, platuma garuma un karodziņu glabāšanai.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char platuma; char logitude;
Pēc tam mums ir kāda LCD draivera funkcija, lai vadītu LCD.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; ja (r == 1) RSHigh; cits RSLow; ENAugsts; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; ja (r == 1) RSHigh; cits RSLow; ENAugsts; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ kavēšanās_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; par (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Pēc tam mēs inicializējām seriālo saziņu ar GPS un salīdzinājām saņemto virkni ar "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Ja saņemtā virkne ir veiksmīgi saskaņota ar GPGGA, tad galvenajā funkcijā izvelciet un parādiet atrašanās vietas platuma un garuma koordinātas:
lcdwrite (0x80,0); lcdprint ("Lat:"); sērijas izdruka ("Platums:"); par (int i = 15; i <27; i ++) { platums = buf; lcdwrite (platums, 1); sērijas rakstīšana (platums); ja (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); sērijas izdruka ("Logitude:"); par (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logaritms, 1); sērijas rakstīšana (logaritms); ja (i == 38) { lcdwrite ('', 1); i ++; } }
Tātad šādi GPS moduli var sasaistīt ar ATmega16, lai atrastu atrašanās vietas koordinātas.
Zemāk atrodiet pilnu kodu un darba video.