- Gerekli Bileşenler
- GPS'den Konum Verilerini Alma
- Devre şeması
- AVR Mikrodenetleyici ile Arayüz GPS Arayüzü Adımları
- Kod Açıklama
GPS modülleri, elektronik uygulamalarda enlem ve boylam koordinatlarına göre konumu izlemek için yaygın olarak kullanılmaktadır. Araç takip sistemi, GPS Saati, Kaza Algılama Uyarı Sistemi, trafik navigasyonu, gözetleme sistemi vb. GPS işlevselliğinin gerekli olduğu örneklerden birkaçıdır. GPS, birden fazla uydudan alınan Rakım, Enlem, Boylam, UTC saati ve belirli konumla ilgili diğer birçok bilgiyi sağlar. GPS'ten veri okumak için bir mikro denetleyiciye ihtiyaç vardır, bu nedenle burada GPS modülünü AVR mikro denetleyici Atmega16 ile arabirim oluşturuyor ve 16x2 LCD ekranda enlem ve boylamı yazdırıyoruz.
Gerekli Bileşenler
- Atmega16 / 32
- GPS modülü (uBlox Neo 6M GPS)
- Uzun telli Anten
- 16x2 LCD
- 2.2k Direnç
- 1000 uf Kapasitör
- 10 uF kapasitör
- Bağlantı teli
- LM7805
- DC Jakı
- 12v DC Adaptör
- Burgstips
- PCB veya Genel Amaçlı PCB
Ublox Neo 6M, seri iletişim yoluyla konum ayrıntılarını sağlayan bir seri GPS modülüdür. Dört pimi vardır.
Toplu iğne |
Açıklama |
Vcc |
2.7 - 5V güç kaynağı |
Gnd |
Zemin |
TXD |
Veri ilet |
RXD |
Veri almak |
Ublox neo 6M GPS modülü TTL uyumludur ve özellikleri aşağıda verilmiştir.
Yakalama zamanı |
Soğuk başlangıç: 27sn, Sıcak başlangıç: 1sn |
İletişim protokolü |
NMEA |
Seri iletişim |
9600bps, 8 veri biti, 1 durdurma biti, eşlik yok ve akış kontrolü yok |
İşletim akımı |
45mA |
GPS'den Konum Verilerini Alma
GPS Modülü, verileri 9600 Baud Hızında birden çok dizide iletir. 9600 Baud hızına sahip bir UART terminali kullanırsak, GPS tarafından alınan verileri görebiliriz.
GPS modülü, Gerçek Zamanlı izleme konum verilerini NMEA formatında gönderir (yukarıdaki ekran görüntüsüne bakın). NMEA formatı, aşağıda dört önemli cümlenin verildiği birkaç cümleden oluşur. NMEA cümlesi ve veri formatı hakkında daha fazla ayrıntı burada bulunabilir.
- $ GPGGA: Küresel Konumlandırma Sistemi Verileri Düzeltme
- $ GPGSV: Görünümdeki GPS uyduları
- $ GPGSA: GPS DOP ve aktif uydular
- $ GPRMC: Önerilen minimum belirli GPS / Transit verileri
GPS verileri ve NMEA dizeleri hakkında buradan daha fazla bilgi edinin.
Bu, 9600 baud hızında bağlandığında GPS tarafından alınan verilerdir.
$ 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
Herhangi bir konumu izlemek için GPS modülünü kullandığımızda , yalnızca koordinatlara ihtiyacımız var ve bunu $ GPGGA dizesinde bulabiliriz. Yalnızca $ GPGGA (Global Positioning System Fix Data) String çoğunlukla programlarda kullanılır ve diğer dizeler göz ardı edilir.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
Bu satırın anlamı nedir?
Bu satırın anlamı: -
1. Dize her zaman "$" işaretiyle başlar
2. GPGGA, Global Positioning System Fix Data anlamına gelir
3. "," Virgül, iki değer arasındaki ayrımı gösterir
4. 141848.00: GMT saati olarak 14 (saat): 18 (dakika): 48 (sn): 00 (ms)
5. 2237.63306, N: Enlem 22 (derece) 37 (dakika) 63306 (sn) Kuzey
6. 08820.86316, E: Boylam 088 (derece) 20 (dakika) 86316 (sn) Doğu
7. 1: Miktarı Düzelt 0 = geçersiz veri, 1 = geçerli veri, 2 = DGPS düzeltmesi
8. 03: Halihazırda görüntülenen uyduların sayısı.
9. 1.0: HDOP
10. 2.56, M: Rakım (Metre cinsinden deniz seviyesinden yükseklik)
11. 1.9, M: Geoids yüksekliği
12. * 74: sağlama toplamı
Bu nedenle, modül konumu veya bulunduğu yer hakkında bilgi toplamak için No. 5 ve No. 6'ya ihtiyacımız var. Bu projede, enlem ve boylamı çıkarmak için bazı işlevler sağlayan bir GPS Kitaplığı kullandık, bu yüzden endişelenmemize gerek yok.
Daha önce GPS ile diğer mikro denetleyiciler arasında arayüz oluşturduk:
- Arduino ile GPS Nasıl Kullanılır
- Raspberry Pi GPS Modülü Arayüz Eğitimi
- GPS Modülünü PIC Mikrodenetleyiciyle Arayüz
- Arduino, ESP8266 ve GPS kullanarak Google Haritalar'da Bir Aracı Takip Edin
GPS ile ilgili tüm projeleri buradan kontrol edin.
Devre şeması
AVR Atemga16 mikrodenetleyici ile GPS arabirimi için devre şeması aşağıda verilmiştir:
Tüm sistem bir 12v DC Adaptör ile çalıştırılır, ancak devreler 5v üzerinde çalışır, böylece güç kaynağı LM7805 voltaj regülatörü tarafından 5v olarak düzenlenir. 16x2 LCD, 4 bit modunda yapılandırılır ve pin bağlantıları devre şemasında gösterilir. GPS ayrıca 5v ile beslenir ve tx pini doğrudan Atmega16 mikrodenetleyicisinin Rx'ine bağlıdır. Mikrodenetleyiciyi çalıştırmak için 8MHz kristal osilatör kullanılır.
AVR Mikrodenetleyici ile Arayüz GPS Arayüzü Adımları
- Osilatör konfigürasyonunu içeren mikrodenetleyicinin konfigürasyonlarını ayarlayın.
- DDR kaydı dahil LCD için İstenen bağlantı noktasını ayarlayın.
- GPS modülünü USART kullanarak mikro denetleyiciye bağlayın.
- ISR modunda, 9600 baud hızı ve LCD 4 bit modunda LCD ile sistem UART'ı başlatın.
- Enlem Uzunluğu ve Boylam'a bağlı olarak iki karakter dizisi alın.
- Her seferinde bir karakter biti alın ve $ 'dan başlatılıp başlatılmadığını kontrol edin.
- $ Alınırsa o bir dizedir, $ GPGGA'yı kontrol etmemiz gerekir, bu 6 harf $ dahil.
- GPGGA ise, tam dizeyi alın ve bayrakları ayarlayın.
- Ardından iki dizideki yönlerle enlem ve boylamı çıkarın.
- Son olarak enlem ve boylam dizilerini LCD'de yazdırın.
Kod Açıklama
Sonunda bir Demonstration videosu ile birlikte eksiksiz kod verilmiştir, burada kodun bazı önemli kısımları açıklanmıştır.
Her şeyden önce koda gerekli bazı başlıkları ekleyin ve ardından LCD ve UART yapılandırması için bit maskesinin MACROS'unu yazın.
#define F_CPU 8000000ul #include #include
Şimdi GPS dizesini, enlem boylamını ve bayrakları depolamak için bazı değişkenleri ve dizileri bildirin ve başlatın.
char buf; uçucu karakter ind, bayrak, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; karakter enlemi; char logitude;
Bundan sonra, LCD'yi çalıştırmak için bazı LCD Sürücü işlevimiz var.
geçersiz lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; eğer (r == 1) RSYüksek; başka RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; eğer (r == 1) RSYüksek; başka RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ gecikme_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; for (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Bundan sonra GPS ile seri iletişimi başlattık ve alınan diziyi "GPGGA" ile karşılaştırdık:
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Şimdi, alınan dizge GPGGA ile başarılı bir şekilde eşleştirilirse, ana işlevde konumun enlem ve boylam koordinatını ayıklayın ve görüntüleyin:
lcdwrite (0x80,0); lcdprint ("Enlem:"); serialprint ("Latitude:"); için (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (enlem, 1); serialwrite (enlem); eğer (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Günlük:"); serialprint ("Logitude:"); for (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); eğer (i == 38) { lcdwrite ('', 1); i ++; } }
Bu yüzden nasıl bir GPS modülü ATmega16 arabirim olabilir konum koordinatlarını bulmak için.
Aşağıda tam kodu ve çalışma videosunu bulun.