- Būtini komponentai
- Vietos duomenų gavimas iš GPS
- Grandinės schema
- Žingsniai į GPS sąsają su AVR mikrovaldikliu
- Kodo paaiškinimas
GPS moduliai yra plačiai naudojami elektronikos programose, siekiant nustatyti vietą pagal ilgumos ir platumos koordinates. Transporto priemonės stebėjimo sistema, GPS laikrodis, avarijų aptikimo perspėjimo sistema, eismo navigacija, stebėjimo sistema ir kt. Yra keletas pavyzdžių, kai GPS funkcijos yra būtinos. GPS pateikia aukštį, platumą, ilgumą, UTC laiką ir daug kitos informacijos apie konkrečią vietą, kuri yra paimta iš daugiau nei vieno palydovo. Norint nuskaityti duomenis iš GPS, reikalingas mikrovaldiklis, todėl čia susiejame GPS modulį su AVR mikrovaldikliu „Atmega16“ ir atspausdiname ilgumą ir platumą 16x2 LCD ekrane.
Būtini komponentai
- Atmega16 / 32
- GPS modulis („uBlox Neo 6M GPS“)
- Ilgo laido antena
- 16x2 LCD ekranas
- 2.2k rezistorius
- 1000uf kondensatorius
- 10uF kondensatorius
- Jungiamasis laidas
- LM7805
- DC Džekas
- 12v nuolatinės srovės adapteris
- „Burgstips“
- PCB arba bendrosios paskirties PCB
„Ublox Neo 6M“ yra nuoseklus GPS modulis, teikiantis išsamią vietą informaciją nuosekliai perduodant. Jis turi keturis kaiščius.
Smeigtukas |
apibūdinimas |
Vcc |
2,7 - 5 V maitinimo šaltinis |
Gnd |
Žemė |
TXD |
Perduoti duomenis |
RXD |
Gauti duomenis |
„Ublox neo 6M“ GPS modulis yra suderinamas su TTL ir jo specifikacijos pateikiamos žemiau.
Fiksavimo laikas |
Šaunus startas: 27s, karštas startas: 1s |
Ryšio protokolas |
NMEA |
Serijinis bendravimas |
9600 bps, 8 duomenų bitai, 1 stabdymo bitas, nėra pariteto ir srauto valdymo |
Veikimo srovė |
45mA |
Vietos duomenų gavimas iš GPS
GPS modulis duomenis perduos keliomis eilėmis 9600 perdavimo sparta. Jei naudosime UART terminalą su 9600 perdavimo sparta, galime pamatyti GPS gautus duomenis.
GPS modulis siunčia realaus laiko stebėjimo padėties duomenis NMEA formatu (žr. Ekrano kopiją aukščiau). NMEA formatas susideda iš kelių sakinių, kuriuose žemiau pateikiami keturi svarbūs sakiniai. Daugiau informacijos apie NMEA sakinį ir jo duomenų formatą galite rasti čia.
- $ GPGGA: visuotinės padėties nustatymo sistemos taisymo duomenys
- $ GPGSV: matomi GPS palydovai
- $ GPGSA: GPS DOP ir aktyvūs palydovai
- $ GPRMC: rekomenduojami minimalūs konkretūs GPS / tranzito duomenys
Sužinokite daugiau apie GPS duomenis ir NMEA eilutes čia.
Tai yra duomenys, kuriuos GPS gauna prisijungus 9600 baudų greičiu.
$ 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
Kai mes naudojame GPS modulį bet kuriai vietai stebėti, mums reikia tik koordinačių ir tai galime rasti $ GPGGA eilutėje. Tik $ GPGGA (Global Positioning System Fix Data) eilutės dažniausiai naudojamos programose, o kitos eilutės nepaisomos.
$ GPGGA, 141848.00, 2337.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54,2, M,, * 74
Kokia tos linijos prasmė?
Tos linijos reikšmė yra: -
1. Stygos visada prasideda „$“ ženklu
2. GPGGA reiškia „Global Positioning System Fix Data“
3. „,“ Kablelis nurodo dviejų reikšmių atskyrimą
4. 141848.00 val.: GMT laikas kaip 14 (val.): 18 (min.): 48 (sek.): 00 (ms)
5. 2237.63306, N: 22 platuma (laipsnis) 37 (minutės) 63306 (sek) šiaurė
6. 08820.86316, E: 088 ilguma (laipsnis) 20 (minutės) 86316 (sek) rytai
7. 1: Fix Quantity 0 = neteisingi duomenys, 1 = galiojantys duomenys, 2 = DGPS taisymai
8. 03: Šiuo metu peržiūrėtų palydovų skaičius.
9. 1.0: HDOP
10. 2.56, M: aukštis (aukštis virš jūros lygio metrais)
11. 1.9, M: geoidų aukštis
12. * 74: kontrolinė suma
Taigi mums reikia Nr. 5 ir Nr. 6, kad surinktume informaciją apie modulio vietą arba, kur ji yra. Šiame projekte mes panaudojome GPS biblioteką, teikiančią kai kurias funkcijas, kad gautume platumą ir ilgumą, kad mums nereikėtų dėl to jaudintis.
Anksčiau mes sąsajome GPS su kitais mikrovaldikliais:
- Kaip naudotis GPS su „Arduino“
- „Raspberry Pi“ GPS modulio sąsajos pamoka
- Sąsajos GPS modulis su PIC mikrovaldikliu
- Stebėkite transporto priemonę „Google“ žemėlapiuose naudodami „Arduino“, ESP8266 ir GPS
Čia patikrinkite visus su GPS susijusius projektus.
Grandinės schema
Žemiau pateikiama GPS sąsajos su AVR Atemga16 mikrovaldikliu schema:
Visą sistemą maitina 12v nuolatinės srovės adapteris, tačiau grandinės veikia esant 5v įtampai, todėl maitinimo šaltinį iki 5v reguliuoja LM7805 įtampos reguliatorius. 16x2 skystųjų kristalų ekranas sukonfigūruotas 4 bitų režimu, o jo kaiščių jungtys parodytos grandinės schemoje. GPS taip pat maitina 5v, o jo tx kaištis yra tiesiogiai prijungtas prie „Atmega16“ mikrovaldiklio Rx. Mikrovaldikliui valdyti naudojamas 8MHz kristalinis osciliatorius.
Žingsniai į GPS sąsają su AVR mikrovaldikliu
- Nustatykite mikrovaldiklio konfigūracijas, į kurias įeina osciliatoriaus konfigūracija.
- Nustatykite norimą LCD prievadą, įskaitant DDR registrą.
- Naudodami USART, prijunkite GPS modulį prie mikrovaldiklio.
- Inicializuokite sistemos UART ISR režimu, naudodami 9600 perdavimo spartą ir LCD 4 bitų režimu.
- Paimkite du simbolių masyvus, atsižvelgiant į platumos ir ilgumos ilgį.
- Gaukite po vieną simbolio bitą vienu metu ir patikrinkite, ar jis prasideda nuo $, ar ne.
- Jei gaunama $, tai yra eilutė, turime patikrinti $ GPGGA, šias 6 raides, įskaitant $.
- Jei tai GPGGA, gaukite visą eilutę ir nustatykite vėliavas.
- Tada išimkite platumą ir ilgumą su kryptimis dviem masyvais.
- Galiausiai išspausdinkite platumos ir ilgumos matricas LCD ekrane.
Kodo paaiškinimas
Pabaigoje pateikiamas visas kodas su demonstraciniu vaizdo įrašu, čia paaiškinamos kai kurios svarbios kodo dalys.
Visų pirma į kodą įtraukite reikiamą antraštę, tada parašykite „LCD“ ir „UART“ konfigūracijos bitmasko MAKROS.
#define F_CPU 8000000ulul #include #include
Dabar deklaruokite ir inicializuokite keletą kintamųjų ir masyvų, skirtų GPS eilutėms, platumos ilgumai ir vėliavoms saugoti.
char buf; nepastovi char ind, flag, stringPagavo; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; char platuma; char logistika;
Po to mes turime tam tikrą LCD tvarkyklės funkciją, kad galėtume valdyti LCD.
negaliojantis lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; „RWLow“; jei (r == 1) RSHigh; dar RSLow; Aukšta; _delay_ms (1); EN Žemas; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; „RWLow“; jei (r == 1) RSHigh; dar RSLow; Aukšta; _delay_ms (1); EN Žemas; _delay_ms (1); } negaliojantis lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ delsa_ms (20); } } negalioja lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; už (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Po to mes inicijavome nuoseklų ryšį su GPS ir palyginome gautą eilutę su "GPGGA":
negaliojantis serijos pradžia () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Dabar, jei gauta eilutė sėkmingai suderinta su GPGGA, tada pagrindinėje funkcijoje ištraukite ir parodykite vietos platumos ir ilgumos koordinates:
lcdwrite (0x80,0); lcdprint ("lot.:"); serijos atspaudas („Platuma:“); už (int i = 15; i <27; i ++) { platuma = buf; lcdwrite (platuma, 1); serijinis rašymas (platuma); if (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Prisijungti:"); serijos atspaudas („Logitude:“); už (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitudė, 1); serialwrite (logitudė); if (i == 38) { lcdwrite ('', 1); i ++; } }
Taigi taip galima susieti GPS modulį su „ATmega16“ ir rasti vietos koordinates.
Žemiau rasite visą kodą ir veikiantį vaizdo įrašą.