- Komponen Diperlukan
- Mendapatkan Data Lokasi dari GPS
- Diagram Sirkuit
- Langkah-langkah untuk Menghubungkan GPS dengan Mikrokontroler AVR
- Penjelasan Kode
Modul GPS banyak digunakan dalam aplikasi elektronik untuk melacak lokasi berdasarkan koordinat bujur dan lintang. Sistem pelacakan kendaraan, Jam GPS, Sistem Peringatan Deteksi Kecelakaan, navigasi lalu lintas, sistem pengawasan, dll. Adalah beberapa contoh di mana fungsi GPS sangat penting. GPS menyediakan Ketinggian, Garis Lintang, Garis Bujur, waktu UTC dan banyak informasi lainnya tentang lokasi tertentu, yang diambil dari lebih dari satu satelit. Untuk membaca data dari GPS diperlukan mikrokontroler maka disini kita menghubungkan modul GPS dengan mikrokontroler AVR Atmega16 dan mencetak bujur dan lintang pada layar LCD 16x2.
Komponen Diperlukan
- Atmega16 / 32
- Modul GPS (uBlox Neo 6M GPS)
- Antena kabel panjang
- LCD 16x2
- 2.2k Resistor
- Kapasitor 1000uf
- Kapasitor 10uF
- Menghubungkan kabel
- LM7805
- Jack DC
- Adaptor 12v DC
- Burgstips
- PCB atau PCB Tujuan Umum
Ublox Neo 6M adalah modul GPS serial yang memberikan detail lokasi melalui komunikasi serial. Ini memiliki empat pin.
Pin |
Deskripsi |
Vcc |
2,7 - catu daya 5V |
Gnd |
Tanah |
TXD |
Mengirimkan Data |
RXD |
Terima Data |
Modul GPS Ublox neo 6M kompatibel dengan TTL dan spesifikasinya diberikan di bawah ini.
Tangkap waktu |
Cool start: 27s, Hot start: 1s |
Protokol komunikasi |
NMEA |
Komunikasi serial |
9600bps, 8 bit data, 1 stop bit, tanpa paritas dan tanpa kontrol aliran |
Operasi saat ini |
45mA |
Mendapatkan Data Lokasi dari GPS
Modul GPS akan mengirimkan data dalam beberapa string dengan Kecepatan 9600 Baud. Jika kita menggunakan terminal UART dengan kecepatan Baud 9600, kita dapat 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. Dalam proyek ini kami telah menggunakan Perpustakaan GPS yang menyediakan beberapa fungsi untuk mengekstrak garis lintang dan garis bujur sehingga kami tidak perlu khawatir tentang itu.
Kami sebelumnya memiliki antarmuka GPS dengan mikrokontroler lain:
- Cara Menggunakan GPS dengan Arduino
- Tutorial Antarmuka Modul GPS Raspberry Pi
- Antarmuka Modul GPS dengan Mikrokontroler PIC
- Lacak Kendaraan di Google Maps menggunakan Arduino, ESP8266 & GPS
Periksa semua proyek terkait GPS di sini.
Diagram Sirkuit
Diagram rangkaian untuk antarmuka GPS dengan mikrokontroler AVR Atemga16 adalah sebagai berikut:
Seluruh sistem ditenagai oleh Adaptor DC 12v, tetapi rangkaian bekerja pada 5v sehingga catu daya diatur ke 5v oleh pengatur tegangan LM7805. LCD 16x2 dikonfigurasikan dalam mode 4-bit dan koneksi pinnya ditunjukkan pada diagram sirkuit. GPS juga didukung oleh 5v dan pin tx-nya langsung terhubung ke Rx mikrokontroler Atmega16. Osilator kristal 8MHz digunakan untuk mengatur jam mikrokontroler.
Langkah-langkah untuk Menghubungkan GPS dengan Mikrokontroler AVR
- Atur konfigurasi mikrokontroler yang meliputi konfigurasi Osilator.
- Atur port yang diinginkan untuk LCD termasuk register DDR.
- Hubungkan modul GPS ke mikrokontroler menggunakan USART.
- Inisialisasi UART sistem dalam mode ISR, dengan 9600 baud rate dan LCD dalam 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 $ diterima maka itu adalah string, kita perlu memeriksa $ GPGGA, 6 huruf ini termasuk $.
- Jika GPGGA, maka terima string lengkap dan setel bendera.
- Kemudian ekstrak lintang dan bujur dengan arah dalam dua larik.
- Terakhir, cetak array garis lintang dan bujur di LCD.
Penjelasan Kode
Kode lengkap dengan video Demonstrasi diberikan di akhir, di sini beberapa bagian penting dari kode dijelaskan.
Pertama-tama masukkan beberapa header yang diperlukan dalam kode dan kemudian tulis MACROS dari bitmask untuk konfigurasi LCD dan UART.
#define F_CPU 8000000ul #include #include
Sekarang deklarasikan dan inisialisasi beberapa variabel dan array untuk menyimpan string GPS, garis bujur lintang dan bendera.
char buf; volatile char ind, flag, stringReceived; char gpgga = {'$', 'G', 'P', 'G', 'G', 'A'}; lintang char; logitude amal;
Setelah itu kita memiliki beberapa fungsi Driver LCD untuk menggerakkan LCD.
kosongkan lcdwrite (karakter ch, karakter r) { LCDPORT = ch & 0xF0; RWLow; jika (r == 1) RSHigh; lain RSLow; TINGGI; _delay_ms (1); ENLow; _delay_ms (1); LCDPORT = ch << 4 & 0xF0; RWLow; jika (r == 1) RSHigh; lain RSLow; TINGGI; _delay_ms (1); ENLow; _delay_ms (1); } void lcdprint (char * str) { while (* str) { lcdwrite (* str ++, DATA); // __ penundaan_ms (20); } } void lcdbegin () { char lcdcmd = {0x02,0x28,0x0E, 0x06,0x01}; untuk (int i = 0; i <5; i ++) lcdwrite (lcdcmd, CMD); }
Setelah itu kami menginisialisasi komunikasi serial dengan GPS dan membandingkan string yang diterima dengan "GPGGA":
void serialbegin () { UCSRC = (1 << URSEL) - (1 << UCSZ0) - (1 << UCSZ1); UBRRH = (BAUD_PRESCALE >> 8); UBRRL = BAUD_PRESCALE; UCSRB = (1 <
Sekarang jika string yang diterima berhasil dicocokkan dengan GPGGA maka dalam fungsi utama ekstrak dan tampilkan koordinat lintang dan bujur dari lokasi:
lcdwrite (0x80,0); lcdprint ("Lat:"); serialprint ("Lintang:"); untuk (int i = 15; i <27; i ++) { latitude = buf; lcdwrite (latitude, 1); serialwrite (latitude); jika (i == 24) { lcdwrite ('', 1); i ++; } } serialprintln (""); lcdwrite (192,0); lcdprint ("Log:"); serialprint ("Logitude:"); untuk (int i = 29; i <41; i ++) { logitude = buf; lcdwrite (logitude, 1); serialwrite (logitude); jika (i == 38) { lcdwrite ('', 1); i ++; } }
Jadi beginilah modul GPS dapat dihubungkan dengan ATmega16 untuk menemukan koordinat lokasi.
Temukan kode lengkap dan video kerja di bawah ini.