- Tarvittavat komponentit
- Paikkatietojen hakeminen GPS: ltä
- Piirikaavio
- Vaiheet GPS-liitäntään AVR-mikrokontrollerilla
- Koodin selitys
GPS- moduuleja käytetään laajalti elektroniikkasovelluksissa sijainnin seuraamiseen pituus- ja leveyskoordinaattien perusteella. Ajoneuvoseurantajärjestelmä, GPS-kello, onnettomuuksien havaitsemisvaroitusjärjestelmä, liikenteen navigointi, valvontajärjestelmä jne. Ovat muutamia esimerkkejä, joissa GPS-toiminnot ovat välttämättömiä. GPS tarjoaa korkeuden, leveys-, pituus-, UTC-ajan ja monia muita tietoja sijainnista, jotka otetaan useammalta kuin yhdeltä satelliitilta. Tietojen lukemiseen GPS: stä tarvitaan mikro-ohjain, joten tässä yhteydessä GPS-moduuli liitetään AVR-mikrokontrolleriin Atmega16 ja tulostetaan pituus- ja leveysaste 16x2 LCD-näytölle.
Tarvittavat komponentit
- Atmega16 / 32
- GPS-moduuli (uBlox Neo 6M GPS)
- Pitkä johdinantenni
- 16x2 LCD
- 2.2k vastus
- 1000uf kondensaattori
- 10uF kondensaattori
- Liitäntäjohto
- LM7805
- DC Jack
- 12v DC-sovitin
- Burgstips
- PCB tai yleiskäyttöinen PCB
Ublox Neo 6M on sarjaporttimoduuli, joka tarjoaa sijaintitiedot sarjaliikenteen avulla. Siinä on neljä nastaa.
Tappi |
Kuvaus |
Vcc |
2,7 - 5 V virtalähde |
Gnd |
Maa |
TXD |
Lähetä tietoja |
RXD |
Vastaanota tietoja |
Ublox neo 6M GPS-moduuli on TTL-yhteensopiva ja sen tekniset tiedot on annettu alla.
Sieppausaika |
Viileä aloitus: 27 s, kuuma käynnistys: 1 s |
Tiedonsiirtoprotokolla |
NMEA |
Sarjaviestintä |
9600 bps, 8 databittiä, 1 pysäytysbitti, ei pariteettia eikä virtauksen ohjausta |
Käyttövirta |
45mA |
Paikkatietojen hakeminen GPS: ltä
GPS-moduuli lähettää tietoja useissa kielissä 9600 tiedonsiirtonopeudella. Jos käytämme UART-päätelaitetta, jonka siirtonopeus on 9600, voimme nähdä GPS: n vastaanottamat tiedot.
GPS-moduuli lähettää reaaliaikaisen paikannustiedot NMEA-muodossa (katso yllä oleva kuvakaappaus). NMEA-formaatti koostuu useista lauseista, joissa alla on neljä tärkeää virkettä. Lisätietoja NMEA-lauseesta ja sen datamuodosta löytyy täältä.
- $ GPGGA: Globaalin paikannusjärjestelmän korjaustiedot
- $ GPGSV: GPS-satelliitit näkyvissä
- $ GPGSA: GPS DOP ja aktiiviset satelliitit
- $ GPRMC: Suositeltu GPS / Transit-datan vähimmäistiedot
Lisätietoja GPS-tiedoista ja NMEA-merkkijonoista on täällä.
Tämä on GPS: n vastaanottama data, kun se on kytketty 9600 baudinopeudella.
$ 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
Kun käytämme GPS-moduulia minkä tahansa sijainnin seuraamiseen, tarvitsemme vain koordinaatit ja löydämme sen $ GPGGA-merkkijonosta. Ainoastaan $ GPGGA (Global Positioning System Fix Data) -merkkijonoa käytetään ohjelmissa ja muita merkkijonoja ei oteta huomioon.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2,56,1.9, M, -54,2, M,, * 74
Mitä tämä viiva tarkoittaa?
Tämän rivin merkitys on: -
1. Merkkijono alkaa aina “$” -merkillä
2. GPGGA on lyhenne sanoista Global Positioning System Fix Data
3. "," Pilkku osoittaa kahden arvon välisen eron
4. 141848.00: GMT-aika 14 (hr): 18 (min): 48 (s): 00 (ms)
5. 2237.63306, N: Leveysaste 22 (aste) 37 (minuuttia) 63306 (sek) Pohjoinen
6. 08820.86316, E: Pituusaste 088 (aste) 20 (minuuttia) 86316 (s) itään
7. 1: Korjausmäärä 0 = virheellinen data, 1 = kelvollinen data, 2 = DGPS-korjaus
8. 03: Katsottujen satelliittien lukumäärä.
9. 1.0: HDOP
10. 2.56, M: Korkeus (korkeus merenpinnan yläpuolella metreinä)
11. 1.9, M: Geoidien korkeus
12. * 74: Tarkistussumma
Joten tarvitsemme nro 5 ja nro 6 keräämään tietoja moduulin sijainnista tai sijainnista. Tässä projektissa olemme käyttäneet GPS-kirjastoa, joka tarjoaa joitain toimintoja leveys- ja pituusasteiden poimimiseksi, joten meidän ei tarvitse huolehtia siitä.
Olemme aiemmin liittäneet GPS: n muihin mikrokontrollereihin:
- Kuinka käyttää GPS: tä Arduinon kanssa
- Raspberry Pi GPS -moduulin liitäntäopetus
- GPS-moduulin ja PIC-mikrokontrollerin yhdistäminen
- Seuraa ajoneuvoa Google Mapsissa Arduinolla, ESP8266: lla ja GPS: llä
Tarkista kaikki GPS: ään liittyvät projektit täältä.
Piirikaavio
Piirikaavio GPS-liitännästä AVR Atemga16 -mikrokontrolleriin on annettu alla:
Koko järjestelmä saa virtansa 12 voltin DC-sovittimelta, mutta piirit toimivat 5 voltin jännitteellä, joten LM7805-jännitesäädin säätelee virtalähdettä 5 voltiksi. 16x2-nestekidenäyttö on konfiguroitu 4-bittisessä tilassa ja sen nastaliitännät on esitetty piirikaaviossa. GPS: n virtalähde on myös 5v ja sen tx-nasta on kytketty suoraan Atmega16-mikrokontrollerin Rx: ään. 8 MHz: n kideoskillaattoria käytetään mikro-ohjaimen kellottamiseen.
Vaiheet GPS-liitäntään AVR-mikrokontrollerilla
- Aseta mikro-ohjaimen kokoonpanot, jotka sisältävät oskillaattorin kokoonpanon.
- Aseta haluttu LCD-portti, mukaan lukien DDR-rekisteri.
- Liitä GPS-moduuli mikro-ohjaimeen USART-toiminnolla.
- Alusta järjestelmän UART ISR-tilassa 9600 baudinopeudella ja LCD 4bit-tilassa.
- Ota kaksi merkistöä leveys- ja pituuspiirin mukaan.
- Vastaanota yksi merkkibitti kerrallaan ja tarkista, aloitetaanko se dollarista.
- Jos $ vastaanotetaan, se on merkkijono, meidän on tarkistettava $ GPGGA, nämä 6 kirjainta, mukaan lukien $.
- Jos se on GPGGA, vastaanota sitten koko merkkijono ja aseta liput.
- Pura sitten leveys- ja pituusaste suuntiin kahdessa ryhmässä.
- Lopuksi tulosta leveys- ja pituusasteet LCD-näytöllä.
Koodin selitys
Täydellinen koodi esittelyvideolla annetaan lopussa, tässä selitetään joitain tärkeitä koodin osia.
Ensinnäkin sisällytä koodiin tarvittava otsikko ja kirjoita sitten MACROs bitmaskit LCD- ja UART-määrityksiä varten.
#define F_CPU 8000000ul include # include
Selvitä ja alusta nyt muuttujat ja taulukot GPS-merkkijonon, leveyspiirin ja lippujen tallentamiseksi.
char buf; haihtuva char ind, lippu, kieli vastaanotettu; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char leveysaste; char logitude;
Sen jälkeen meillä on jonkin verran LCD-ohjaintoimintoa nestekidenäytön ajamiseksi.
void lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; jos (r == 1) RSHigh; muuten RSLow; ENKorkea; _viive_ms (1); EN matala; _viive_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; jos (r == 1) RSHigh; muuten RSLow; ENKorkea; _viive_ms (1); EN matala; _viive_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ viive_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Sen jälkeen aloitimme sarjaliikenteen GPS: n kanssa ja verrattiin vastaanotettua merkkijonoa GPGGA: han:
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Jos vastaanotettu merkkijono sovitetaan onnistuneesti GPGGA: n kanssa, poimi päätoiminnossa ja näytä sijainnin leveys- ja pituuskoordinaatit:
lcdwrite (0x80,0); lcdprint ("Lat.:"); sarjaprintti ("Leveysaste:"); for (int i = 15; i <27; i ++) { leveysaste = buf; lcdwrite (leveysaste, 1); sarjakuvaus (leveysaste); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Loki:"); sarjaprintti ("Logitude:"); for (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitudi); if (i == 38) { lcdwrite ('', 1); i ++; } }
Joten GPS-moduuli voidaan liittää ATmega16: n kanssa sijaintikoordinaattien löytämiseksi.
Löydä täydellinen koodi ja toimiva video alla.