- Komponen yang Diperlukan:
- Rajah dan Penjelasan Litar: -
- Mendapatkan Data Lokasi dari GPS:
- Langkah-langkah untuk Memasukkan GPS dengan PIC Microcontroller:
- Penjelasan Kod:
GPS adalah bentuk ringkas Sistem Penentududukan Global. Ini adalah sistem yang memberikan Ketinggian, Lintang, Bujur, waktu UTC yang tepat dan banyak lagi maklumat, yang diambil dari satelit 2, 3, 4 atau lebih. Untuk membaca data dari GPS, kami memerlukan beberapa Mikrokontroler dan kami sudah menghubungkan GPS dengan Arduino dan dengan Raspberry Pi.
Kami telah memilih modul GPS G7020 yang dibuat oleh U-blox. Kami akan menerima Bujur dan garis lintang kedudukan tertentu dari satelit dan akan memaparkan yang sama pada LCD Karakter 16x2. Oleh itu, di sini kita akan menghubungkan GPS dengan mikrokontroler PIC16F877A oleh mikrocip.
Komponen yang Diperlukan:
- Pakej Pic16F877A - PDIP40
- Papan Roti
- Pickit-3
- Penyesuai 5V
- LCD JHD162A
- Modul GPS uBLOX-G7020
- Wayar untuk menyambungkan periferal.
- 4.7k Perintang
- 10k periuk
- Kristal 20mHz
- Kapasitor seramik 2 pcs 33pF
Rajah dan Penjelasan Litar: -
LCD watak 16x2 disambungkan di mikrokontroler PIC16F877A, di mana RB0, RB1, RB2 disambungkan masing-masing ke pin LCD yang RS, R / W, dan E. RB4, RB5, RB6 dan RB7 disambungkan di 4 pin LCD D4, D5, D6, D7. LCD disambungkan dalam mod 4bit atau mod menggigit. Ketahui lebih lanjut mengenai menghubungkan LCD dengan PIC Microcontroller.
Pengayun kristal 20MHz dengan dua kapasitor seramik 33pF yang dihubungkan merentasi pin OSC1 dan OSC2. Ia akan memberikan frekuensi jam 20 MHz berterusan kepada mikrokontroler.
Modul GPS uBlox-G7020, terima dan hantar data menggunakan UART. PIC16F877A terdiri daripada satu pemacu USART di dalam cip, kami akan menerima data dari modul GPS oleh USART, jadi sambungan silang akan dibuat dari pin Rx mikrokontroler ke pin Tx GPS dan pin Terima USART yang disambungkan di pin Transmit GPS.
UBlox-G7020 mempunyai kod warna untuk pin. Pin Positif atau 5V berwarna Merah, pin Negatif atau GND berwarna Hitam dan pin Transmit berwarna Biru.
Saya telah menghubungkan semua ini di papan roti.
Mendapatkan Data Lokasi dari GPS:
Mari lihat bagaimana menginterface GPS menggunakan USART dan melihat hasilnya dalam LCD 16x2 watak.
Modul akan menghantar data dalam pelbagai rentetan pada 9600 Baud Rate. Sekiranya kita menggunakan terminal UART dengan kadar 9600 Baud, kita akan melihat data yang diterima oleh GPS.
Modul GPS menghantar data kedudukan penjejakan Masa Nyata 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.
Langkah-langkah untuk Memasukkan GPS dengan PIC Microcontroller:
- Tetapkan konfigurasi mikrokontroler yang merangkumi konfigurasi Oscillator.
- Tetapkan port yang diinginkan untuk LCD termasuk daftar TRIS.
- Sambungkan modul GPS ke mikrokontroler menggunakan USART.
- Memulakan sistem USART dalam mod penerimaan berterusan, dengan kadar baud 9600 dan LCD dengan 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 $ Terima maka ia adalah rentetan, kita perlu memeriksa GPGGA, 5 huruf ini dan koma.
- Sekiranya ia adalah GPGGA, maka kita akan melangkau masa, dan mencari Lintang dan Bujur, Kami akan menyimpan Lintang dan Bujur dalam dua aksara watak sehingga N (Utara) dan E (Timur) tidak diterima.
- Kami akan mencetak susunan dalam LCD.
- Kosongkan tatasusunan.
Penjelasan Kod:
Mari lihat kod baris demi baris. Beberapa baris pertama adalah untuk menetapkan bit konfigurasi yang telah dijelaskan dalam tutorial sebelumnya jadi saya melewatkannya buat masa ini. Kod yang lengkap diberikan pada akhir tutorial ini.
Lima baris digunakan untuk termasuk fail header perpustakaan, lcd.h dan eusart.h adalah untuk LCD dan USART masing-masing. Dan xc.h adalah untuk fail tajuk mikrokontroler.
#sertakan
Dalam fungsi utama () tidak sah , system_init () ; fungsi digunakan untuk menginisialisasi LCD dan USART.
Kekosongan utama (kekosongan) { TRISB = 0x00; // Tetapkan sebagai output system_init ();
The lcd_init (); dan EUSART_Intialize (); dipanggil dari dua perpustakaan lcd.h dan eusart.h
void system_init (void) { lcd_init (); // Ini akan menginisialisasi lcd EUSART1_Initialize (); // Ini akan memulakan Eusart }
Dalam loop sementara kita memecahkan rentetan GPGGA untuk mendapatkan koordinat Longitud dan Lintang. Kami menerima sedikit demi sedikit dan membandingkannya dengan watak individu yang terdapat dalam rentetan GPGGA.
Kami melanggar kod yang akan kami perolehi: -
incomer_data = EUSART1_Baca (); // Periksa rentetan '$ GPGGA,' / * ------------------------------ Langkah demi langkah mencari garis GPGGA- --------------------------- * / if (incomer_data == '$') {// Pernyataan pertama data GPS bermula dengan $ sign incomer_data = EUSART1_Read (); // Sekiranya yang pertama jika menjadi kenyataan maka fasa seterusnya jika (incomer_data == 'G') { incomer_data = EUSART1_Read (); jika (incomer_data == 'P'); { incomer_data = EUSART1_Read (); jika (incomer_data == 'G'); { incomer_data = EUSART1_Read (); jika (incomer_data == 'G') { incomer_data = EUSART1_Read (); jika (incomer_data == 'A') { incomer_data = EUSART1_Read (); jika (incomer_data == ',') {// pertama, diterima incomer_data = EUSART1_Baca (); // Pada peringkat ini Pemeriksaan akhir dilakukan, GPGGA dijumpai.
Dengan menggunakan kod ini, kita melangkau masa UTC.
sementara (incomer_data! = ',') {// melangkau masa GMT incomer_data = EUSART1_Read (); }
Kod ini adalah untuk menyimpan data Lintang dan Bujur dalam susunan watak.
incomer_data = EUSART1_Baca (); garis lintang = incomer_data; sementara (incomer_data! = ',') { untuk (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); garis lintang = incomer_data; // Simpan data Latitud } incomer_data = EUSART1_Read (); if (incomer_data == ',') { untuk (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); garis bujur = incomer_data; // Simpan data Longitud } }
Dan akhirnya kami mencetak garis bujur dan garis lintang pada LCD.
susun_kira = 0; lcd_com (0x80); // Pilihan LCD satu baris sementara (array_count <12) {// Array of Latitude data 11 digit lcd_data (garis lintang); // Cetak array data Latitude_count ++; } array_count = 0; lcd_com (0xC0); // Lcd baris dua pilihan sementara (array_count <13) {// Array of Longitude data adalah 12 digit lcd_data (longitud); // Cetak array data Longitud_kiraan ++; }
Ini adalah bagaimana kita dapat menginterface modul GPS dengan PIC Microcontroller untuk mendapatkan Lintang dan garis bujur lokasi semasa.
Fail kod dan tajuk lengkap diberikan di bawah.