- Komponen Diperlukan
- Mendapatkan Data Lokasi dari GPS
- Rajah Litar
- Langkah-langkah untuk Memadankan GPS dengan AVR Microcontroller
- Penjelasan Kod
Modul GPS banyak digunakan dalam aplikasi elektronik untuk mengesan lokasi berdasarkan koordinat garis bujur dan garis lintang. Sistem penjejakan kenderaan, Jam GPS, Sistem Makluman Pengesanan Kemalangan, navigasi lalu lintas, sistem pengawasan dan lain-lain adalah beberapa contoh di mana fungsi GPS penting. GPS menyediakan Ketinggian, Lintang, Bujur, waktu UTC dan banyak maklumat lain mengenai lokasi tertentu, yang diambil dari lebih dari satu satelit. Untuk membaca data dari GPS, mikrokontroler diperlukan jadi di sini kita sedang menghubungkan modul GPS dengan mikrokontroler AVR Atmega16 dan mencetak garis bujur dan garis lintang pada paparan LCD 16x2.
Komponen Diperlukan
- Atmega16 / 32
- Modul GPS (GPS uBlox Neo 6M)
- Antena wayar panjang
- LCD 16x2
- Perintang 2.2k
- Kapasitor 1000uf
- Kapasitor 10uF
- Menyambung wayar
- LM7805
- Jack DC
- Penyesuai DC 12v
- Burgstips
- PCB atau PCB Tujuan Umum
Ublox Neo 6M adalah modul GPS bersiri yang memberikan perincian lokasi melalui komunikasi bersiri. Ia mempunyai empat pin.
Sematkan |
Penerangan |
Vcc |
2.7 - Bekalan kuasa 5V |
Gnd |
Tanah |
TXD |
Hantar Data |
RXD |
Terima Data |
Modul GPS Ublox neo 6M serasi dengan TTL dan spesifikasinya diberikan di bawah.
Tangkap masa |
Permulaan sejuk: 27s, Permulaan panas: 1s |
Protokol komunikasi |
NMEA |
Komunikasi bersiri |
9600bps, 8 bit data, 1 bit berhenti, tanpa pariti dan tiada kawalan aliran |
Semasa operasi |
45mA |
Mendapatkan Data Lokasi dari GPS
Modul GPS akan menghantar data dalam pelbagai rentetan pada 9600 Baud Rate. Sekiranya kita menggunakan terminal UART dengan kadar 9600 Baud, kita dapat melihat data yang diterima oleh GPS.
Modul GPS menghantar data kedudukan penjejakan Realtime dalam format NMEA (lihat tangkapan skrin di atas). Format NMEA terdiri daripada beberapa ayat, di mana empat ayat penting diberikan di bawah. Maklumat lebih terperinci mengenai ayat NMEA dan format datanya boleh didapati di sini.
- $ GPGGA: Memperbaiki Data Sistem Penentududukan Global
- $ GPGSV: Satelit GPS dilihat
- $ GPGSA: GPS DOP dan satelit aktif
- $ GPRMC: Data GPS / Transit minimum minimum yang disyorkan
Ketahui lebih lanjut mengenai data GPS dan rentetan NMEA di sini.
Ini adalah data yang diterima oleh GPS ketika disambungkan pada 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,,,,,,,,,, 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
Apabila kita menggunakan modul GPS untuk mengesan lokasi mana pun, kita hanya memerlukan koordinat dan kita boleh mendapatkannya dalam rentetan $ GPGGA. String $ GPGGA (Global Positioning System Fix Data) hanya digunakan dalam program dan rentetan lain diabaikan.
$ GPGGA, 141848.00,2237.63306, N, 08820.86316, E, 1,03,2.56,1.9, M, -54.2, M,, * 74
Apakah maksud garis itu?
Maksud garis itu adalah: -
1. String selalu dimulakan dengan tanda "$"
2. GPGGA adalah singkatan dari Global Positioning System Fix Data
3. "," Koma menunjukkan pemisahan antara dua nilai
4. 141848.00: Waktu GMT sebagai 14 (jam): 18 (min): 48 (saat): 00 (ms)
5. 2237.63306, N: Lintang 22 (darjah) 37 (minit) 63306 (saat) Utara
6. 08820.86316, E: Bujur 088 (darjah) 20 (minit) 86316 (saat) Timur
7. 1: Perbaiki Kuantiti 0 = data tidak sah, 1 = data yang sah, 2 = Perbaikan DGPS
8. 03: Bilangan satelit yang dilihat sekarang.
9. 1.0: HDOP
10. 2.56, M: Ketinggian (Ketinggian di atas permukaan laut dalam meter)
11. 1.9, M: Ketinggian Geoid
12. * 74: checksum
Oleh itu, kita memerlukan No. 5 dan No.6 untuk mengumpulkan maklumat mengenai lokasi modul atau, di mana ia berada. Dalam projek ini kami telah menggunakan Perpustakaan GPS yang menyediakan beberapa fungsi untuk mengekstrak garis lintang dan garis bujur sehingga kami tidak perlu risau.
Kami sebelum ini mempunyai antara muka GPS dengan mikrokontroler lain:
- Cara Menggunakan GPS dengan Arduino
- Tutorial Antaramuka Modul GPS Raspberry Pi
- Modul GPS antara muka dengan PIC Microcontroller
- Jejaki Kenderaan di Peta Google menggunakan Arduino, ESP8266 & GPS
Lihat semua projek berkaitan GPS di sini.
Rajah Litar
Gambarajah litar untuk antara muka GPS dengan mikrokontroler AVR Atemga16 diberikan di bawah:
Seluruh sistem dikuasakan oleh Adaptor DC 12v, tetapi litar berfungsi pada 5v sehingga bekalan kuasa diatur hingga 5v oleh pengatur voltan LM7805. LCD 16x2 dikonfigurasikan dalam mod 4-bit dan sambungan pinnya ditunjukkan dalam rajah litar. GPS juga dikuasakan oleh 5v dan pin txnya disambungkan secara langsung ke mikrokontroler Rx of Atmega16. Pengayun kristal 8MHz digunakan untuk mengawal mikrokontroler.
Langkah-langkah untuk Memadankan GPS dengan AVR Microcontroller
- Tetapkan konfigurasi mikrokontroler yang merangkumi konfigurasi Oscillator.
- Tetapkan port yang diinginkan untuk LCD termasuk daftar DDR.
- Sambungkan modul GPS ke mikrokontroler menggunakan USART.
- Memulakan sistem UART dalam mod ISR, dengan 9600 baud rate dan LCD dalam mod 4bit.
- Ambil dua susunan aksara bergantung pada Panjang Lintang dan Bujur.
- Terima satu watak sedikit demi sedikit dan periksa sama ada ia bermula dari $ atau tidak.
- Sekiranya $ diterima maka itu adalah rentetan, kita perlu memeriksa $ GPGGA, 6 huruf ini termasuk $.
- Sekiranya ia adalah GPGGA, maka terima rentetan lengkap dan tetapkan bendera.
- Kemudian keluarkan garis lintang dan garis bujur dengan arah dalam dua tatasusunan.
- Akhirnya cetak susunan garis lintang dan garis bujur dalam LCD.
Penjelasan Kod
Kod lengkap dengan video Demonstrasi diberikan di akhir, berikut dijelaskan beberapa bahagian penting kod.
Pertama sekali masukkan beberapa tajuk yang diperlukan dalam kod dan kemudian tulis MACROS bitmask untuk konfigurasi LCD dan UART.
# menentukan F_CPU 8000000ul #include #include
Sekarang nyatakan dan mulakan beberapa pemboleh ubah dan susunan untuk menyimpan rentetan GPS, garis bujur lintang dan bendera.
char buf; char ind yang tidak menentu, bendera, taliDiterima; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; garis lintang char; kebiasaan char;
Selepas itu kita mempunyai beberapa fungsi Pemacu LCD untuk memacu LCD.
batal lcdwrite (char ch, char r) { LCDPORT = ch & 0xF0; RWLow; jika (r == 1) RSHigh; lain-lain RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; jika (r == 1) RSHigh; lain-lain RSLow; ENHigh; _delay_ms (1); ENLow; _delay_ms (1); } batal lcdprint (char * str) { sementara (* str) { lcdwrite (* str ++, DATA); // __ kelewatan_ms (20); } } batal lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; untuk (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Selepas itu kami memulakan komunikasi bersiri dengan GPS dan membandingkan rentetan yang diterima dengan "GPGGA":
batal serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Sekarang jika tali yang diterima berjaya dipadankan dengan GPGGA maka dalam ekstrak fungsi utama dan tunjukkan koordinat garis lintang dan garis bujur lokasi:
lcdwrite (0x80,0); lcdprint ("Lat:"); cap bersiri ("Latitud:"); untuk (int i = 15; i <27; i ++) { latitud = buf; lcdwrite (garis lintang, 1); bersiri (latitud); jika (i == 24) { lcdwrite ('', 1); saya ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); cap bersiri ("Logitude:"); untuk (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitud, 1); bersiri (logitud); jika (i == 38) { lcdwrite ('', 1); saya ++; } }
Jadi ini adalah bagaimana modul GPS dapat dihubungkan dengan ATmega16 untuk mencari koordinat lokasi.
Cari kod lengkap dan video kerja di bawah.