- Komponen yang Dibutuhkan:
- Diagram Sirkuit dan Penjelasan: -
- Mendapatkan Data Lokasi dari GPS:
- Langkah-langkah untuk Menghubungkan GPS dengan Mikrokontroler PIC: -
- Penjelasan Kode:
GPS adalah kependekan dari Global Positioning System. Ini adalah sistem yang menyediakan Ketinggian, Garis Lintang, Garis Bujur, waktu UTC dan banyak lagi informasi yang akurat, yang diambil dari 2, 3, 4 atau lebih satelit. Untuk membaca data dari GPS, kita membutuhkan Mikrokontroler dan GPS sudah terhubung dengan Arduino dan Raspberry Pi.
Kami telah memilih modul GPS G7020 yang dibuat oleh U-blox. Kami akan menerima Bujur dan Lintang dari posisi tertentu dari satelit dan akan menampilkannya pada LCD Karakter 16x2. Jadi disini kita akan menghubungkan GPS dengan mikrokontroler PIC16F877A oleh microchip.
Komponen yang Dibutuhkan:
- Pic16F877A - paket PDIP40
- Papan Roti
- Pilih-3
- Adaptor 5V
- LCD JHD162A
- Modul GPS uBLOX-G7020
- Kabel untuk menghubungkan periferal.
- Resistor 4,7k
- 10k pot
- Kristal 20mHz
- 2 buah kapasitor keramik 33pF
Diagram Sirkuit dan Penjelasan: -
LCD karakter 16x2 terhubung melintasi mikrokontroler PIC16F877A, di mana RB0, RB1, RB2 dihubungkan masing-masing ke pin LCD yaitu RS, R / W, dan E. RB4, RB5, RB6 dan RB7 terhubung melintasi 4 pin LCD D4, D5, D6, D7. LCD terhubung dalam mode 4bit atau mode nibble. Pelajari lebih lanjut tentang antarmuka LCD dengan Mikrokontroler PIC.
Osilator kristal 20MHz dengan dua kapasitor keramik 33pF terhubung melalui pin OSC1 dan OSC2. Ini akan memberikan frekuensi clock 20 MHz konstan ke mikrokontroler.
uBlox-G7020 modul GPS, menerima dan mengirimkan data menggunakan UART. PIC16F877A terdiri dari satu driver USART di dalam chip, kami akan menerima data dari modul GPS oleh USART, sehingga koneksi silang akan dibuat dari pin mikrokontroler Rx ke pin Tx GPS dan pin USART Receive yang terhubung melintasi pin Transmit GPS.
UBlox-G7020 memiliki kode 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 tempat memotong roti.
Mendapatkan Data Lokasi dari GPS:
Mari kita lihat bagaimana antarmuka GPS menggunakan USART dan lihat hasilnya pada LCD karakter 16x2.
Modul akan mengirimkan data dalam beberapa string pada Kecepatan Baud 9600. Jika kita menggunakan terminal UART dengan kecepatan Baud 9600, kita akan melihat data yang diterima oleh GPS.
Modul GPS mengirimkan data posisi pelacakan waktu nyata dalam format NMEA (lihat gambar di atas). Format NMEA terdiri dari beberapa kalimat, di mana empat kalimat penting diberikan di bawah ini. Lebih detail tentang kalimat NMEA dan format datanya dapat ditemukan di sini.
- $ GPGGA: Data Perbaikan Sistem Pemosisian Global
- $ GPGSV: Satelit GPS sedang dilihat
- $ GPGSA: GPS DOP dan satelit aktif
- $ GPRMC: Data GPS / Transit spesifik minimum yang disarankan
Pelajari lebih lanjut tentang data GPS dan string NMEA di sini.
Ini adalah data yang diterima oleh GPS saat terhubung 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
Saat kami menggunakan modul GPS untuk melacak lokasi mana pun, kami hanya membutuhkan koordinat dan kami dapat menemukannya dalam string $ GPGGA. Hanya String $ GPGGA (Global Positioning System Fix Data) yang sebagian besar digunakan dalam program dan string lain diabaikan.
$ GPGGA, 141848,00,2237.63306, N, 08820.86316, E, 1,03,2.56,1,9, M, -54,2, M`` * 74
Apa arti baris itu?
Arti dari baris itu adalah: -
1. String selalu dimulai 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 (detik): 00 (ms)
5. 2237.63306, N: Lintang 22 (derajat) 37 (menit) 63306 (detik) Utara
6. 08820.86316, E: Longitude 088 (derajat) 20 (menit) 86316 (detik) East
7. 1: Perbaiki Kuantitas 0 = data tidak valid, 1 = data valid, 2 = perbaikan DGPS
8. 03: Jumlah satelit yang saat ini dilihat.
9. 1.0: HDOP
10. 2.56, M: Ketinggian (Tinggi di atas permukaan laut dalam meter)
11. 1.9, M: Tinggi geoids
12. * 74: checksum
Jadi kita membutuhkan No. 5 dan No. 6 untuk mengumpulkan informasi tentang lokasi modul atau, di mana lokasinya.
Langkah-langkah untuk Menghubungkan GPS dengan Mikrokontroler PIC: -
- Atur konfigurasi mikrokontroler yang meliputi konfigurasi Osilator.
- Atur port yang diinginkan untuk LCD termasuk register TRIS.
- Hubungkan modul GPS ke mikrokontroler menggunakan USART.
- Inisialisasi USART sistem dalam mode penerimaan terus menerus, dengan 9600 baud rate dan LCD dengan mode 4bit.
- Ambil dua larik karakter tergantung pada Panjang Lintang dan Bujur.
- Terima satu karakter sedikit demi sedikit dan periksa apakah itu dimulai dari $ atau tidak.
- Jika $ Receive maka itu adalah string, kita perlu memeriksa GPGGA, 5 huruf ini dan koma.
- Jika GPGGA, maka kita akan melewatkan waktu, dan mencari Lintang dan Bujur, Kami akan menyimpan Lintang dan Bujur dalam dua karakter array sampai N (Utara) dan E (Timur) tidak diterima.
- Kami akan mencetak array di LCD.
- Hapus array.
Penjelasan Kode:
Mari kita lihat kode baris demi baris. Beberapa baris pertama adalah untuk mengatur bit konfigurasi yang dijelaskan di tutorial sebelumnya jadi saya melewatkannya untuk saat ini. Kode lengkap diberikan di akhir tutorial ini.
Lima baris ini digunakan untuk memasukkan file header perpustakaan, lcd.h dan eusart.h masing-masing untuk LCD dan USART. Dan xc.h untuk file header mikrokontroler.
#include
Dalam fungsi void main () , system_init () ; fungsi digunakan untuk menginisialisasi LCD dan USART.
Kosongkan utama (kosong) { TRISB = 0x00; // Menetapkan sebagai keluaran system_init ();
The lcd_init (); dan EUSART_Intialize (); dipanggil dari dua perpustakaan lcd.h dan eusart.h
batal system_init (batal) { lcd_init (); // Ini akan menginisialisasi lcd EUSART1_Initialize (); // Ini akan menginisialisasi Eusart }
Dalam loop sementara kita memutuskan string GPGGA untuk mendapatkan koordinat Bujur dan Lintang. Kami menerima satu bit pada satu waktu dan membandingkannya dengan karakter individual yang ada dalam string GPGGA.
Kami memecahkan kode yang akan kami dapatkan: -
incomer_data = EUSART1_Read (); // Periksa string '$ GPGGA,' / * ------------------------------ Langkah demi langkah untuk menemukan baris GPGGA- --------------------------- * / if (incomer_data == '$') {// Pernyataan pertama dari data GPS dimulai dengan $ sign incomer_data = EUSART1_Read (); // Jika yang pertama jika benar maka tahap berikutnya jika (incomer_data == 'G') { incomer_data = EUSART1_Read (); jika (incomer_data == 'P'); { incomer_data = EUSART1_Read (); if (incomer_data == 'G'); { incomer_data = EUSART1_Read (); jika (incomer_data == 'G') { incomer_data = EUSART1_Read (); jika (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// pertama, diterima incomer_data = EUSART1_Read (); // Pada tahap ini Pemeriksaan terakhir dilakukan, GPGGA ditemukan.
Dengan menggunakan kode ini kami melewatkan waktu UTC.
while (incomer_data! = ',') {// melewatkan Waktu GMT incomer_data = EUSART1_Read (); }
Kode ini untuk menyimpan data Garis Lintang dan Garis Bujur dalam larik karakter.
incomer_data = EUSART1_Read (); latitude = incomer_data; sementara (incomer_data! = ',') { untuk (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); latitude = incomer_data; // Simpan data Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { untuk (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); longitude = incomer_data; // Simpan data Bujur } }
Dan akhirnya kami telah mencetak bujur dan lintang pada LCD.
array_count = 0; lcd_com (0x80); // Garis LCD satu pilihan sementara (jumlah_ray <12) {// Larik data Lintang adalah 11 digit lcd_data (garis lintang); // Cetak data_count array ++; } jumlah_rarik = 0; lcd_com (0xC0); // Lcd line two selection while (array_count <13) {// Array of Longitude data is 12 digit lcd_data (longitude); // Cetak data Longitude array_count ++; }
Ini adalah bagaimana kita dapat menghubungkan modul GPS dengan Mikrokontroler PIC untuk mendapatkan Latitude dan longitude dari lokasi saat ini.
Kode lengkap dan file header diberikan di bawah ini.