Daftar Isi:

Arduino GPS Logger: 3 Langkah
Arduino GPS Logger: 3 Langkah

Video: Arduino GPS Logger: 3 Langkah

Video: Arduino GPS Logger: 3 Langkah
Video: ARDUINO GPS TRACKER WITH GOOGLE MAPS 2024, Juli
Anonim
Pencatat GPS Arduino
Pencatat GPS Arduino
Pencatat GPS Arduino
Pencatat GPS Arduino

Halo kawan-kawan, Saya sangat tertarik dengan proyek-proyek kecil yang memungkinkan orang untuk benar-benar memahami lebih banyak tentang teknologi yang kita miliki setiap hari.

Proyek ini adalah tentang pelarian GPS dan logging SD. Saya belajar banyak hanya membangun hal ini.

Ada banyak gagasan yang akan Anda peroleh setelah mengikuti tutorial ini, dan lebih banyak lagi mengikuti tautan yang saya berikan untuk mempelajari topik lebih dalam.

Jadi, apa itu? Sederhana: Adalah pelacak GPS yang mencatat posisi (dengan ketinggian juga), kecepatan dan tanggal/waktu pada microSD.

Apa yang Anda perlukan:

- Arduino Nano (Saya sebenarnya menggunakan UNO untuk membuat sketsa, tetapi mereka sama saja!)- Adafruit ultimate GPS breakout- MicroSD card breakout- Alat solder (semua yang Anda perlukan untuk solder)- Universal Stripboard (Saya menggunakan a 5x7cm)- Kabel

Semua komponen tersebut cukup murah kecuali modul GPS. Itu sekitar 30-40 dolar dan merupakan bagian yang paling mahal. Bahkan satu set besi solder baru bisa lebih murah.

Ada juga pelindung Adafruit dengan modul GPS dan kartu SD bersama-sama. Jika Anda ingin menggunakannya, perlu diingat bahwa itu dibuat untuk Arduino UNO, oleh karena itu Anda memerlukan UNO dan bukan Nano. Tidak ada perbedaan dalam sketsa sekalipun.

Mari melangkah lebih jauh…

Langkah 1: Menghubungkan Komponen

Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen
Menghubungkan Komponen

Nah, setelah Anda mendapatkan komponennya, Anda harus menghubungkannya. Di sini Anda dapat menemukan skema fritzing yang cukup jelas. Namun, inilah pinoutnya juga:

Pembobolan MicroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Jika Anda menggunakan perisai ini dibangun di D10)

terobosan GPS

Vin -> 5VGnn -> GnnRx -> D2Tx -> D3

Catatan kecil tentang modul itu: Kedua bocah lelaki itu berkomunikasi melalui jalur yang berbeda dengan Arduino. GPS menggunakan Serial TTL, jenis yang sama yang kami gunakan ketika kami berkomunikasi dengan Arduino melalui Serial Monitor, itu sebabnya kami harus mendeklarasikan melalui perpustakaan serial baru (Tx dan Rx) karena GPS ingin menggunakan 9600 secara default, dan kami mau pakai juga. Modul GPS selalu dan terus-menerus mengalirkan data, jika dicolokkan. Ini adalah bagian yang sulit untuk dihadapi, karena jika kita membaca sebuah kalimat dan kemudian mencetaknya, kita bisa kehilangan yang berikutnya, itu juga diperlukan. Kita harus mengingatnya saat coding!

MicroSD berkomunikasi melalui SPI (Serial Peripheral Interface), cara lain untuk berkomunikasi dengan board. Modul semacam itu selalu menggunakan CLK pada D13, DO pada D12 dan DI pada D11. Terkadang koneksi tersebut memiliki nama yang berbeda seperti CLK = SCK atau SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (semuanya menunjukkan Master Output) dan DI = SOMI, SDI, MISO, MRST (Master Input). Akhirnya kami memiliki CS atau SS yang menunjukkan pin tempat kami mengirim apa yang ingin kami tulis di MicroSD. Jika Anda ingin menggunakan dua modul SPI yang berbeda, Anda hanya perlu membedakan pin ini untuk dapat menggunakan keduanya. Misalnya layar LCD DAN MicroSD seperti yang kita pakai. Ini harus bekerja juga menggunakan dua LCD berbeda yang terhubung ke CS yang berbeda.

Solder bagian ini bersama-sama di papan dan Anda siap untuk mengunggah sketsa!

Seperti yang Anda lihat di sketsa, saya menyolder beberapa konektor dupont female sebagai ganti komponen langsung, itu karena di masa depan saya mungkin ingin menggunakan kembali komponen atau mengubahnya.

Saya juga menyolder modul GPS dengan konektor ke arah yang salah, itu salah saya dan saya tidak mau, tetapi itu berhasil dan saya tidak ingin mengambil risiko merusaknya mencoba untuk melepaskan para bajingan kecil itu! Cukup solder dengan cara yang benar dan semuanya akan baik-baik saja!

Berikut beberapa video solder yang berguna: Panduan menyolder untuk pemulaVideo tentang desolder

Adafruit channel Youtube, banyak hal menarik disana!

Saat Anda menyolder, coba gunakan hanya jumlah logam yang Anda butuhkan, jika tidak, Anda akan berantakan. Jangan takut melakukannya, mungkin mulailah dengan sesuatu yang tidak terlalu mahal, dan daripada menyimpan barang-barang yang berbeda. Bahan yang tepat juga membuat perbedaan!

Langkah 2: Sketsa

Pertama, tentu saja, kami mengimpor perpustakaan dan membangun objek mereka untuk bekerja dengan: SPI.h adalah untuk berkomunikasi dengan modul SPI, SD adalah perpustakaan MicroSD dan Adafruit_GPS adalah perpustakaan modul GPS. SoftwareSerial.h adalah untuk membuat port serial melalui perangkat lunak. Sintaksnya adalah "mySerial(TxPin, RxPin);". Objek GPS harus diarahkan ke serial (dalam tanda kurung). Berikut tautan perpustakaan untuk pelarian GPS Adafruit, pelarian MicroSD (untuk melakukan pekerjaan bersih, Anda juga harus memformat SD dengan perangkat lunak ini dari asosiasi SD) dan Pustaka Serial Perangkat Lunak (harus disertakan dalam IDE).

CATATAN: Saya menghadapi beberapa masalah saat mencoba menambahkan banyak informasi dalam satu file atau menggunakan lebih dari dua file dalam sketsa. Saya tidak memformat SD dengan perangkat lunak itu, mungkin itu bisa menyelesaikan masalah. Juga, saya mencoba menambahkan sensor lain di perangkat, BMP280 (modul I2C), tanpa hasil. Sepertinya menggunakan modul I2C membuat sketsa menjadi gila! Saya sudah menanyakannya di forum Adafruit, tetapi saya masih tidak mendapat jawaban.

#sertakan "SPI.h"#sertakan "SD.h"#sertakan "Adafruit_GPS.h"#sertakan "SoftwareSerial.h" SoftwareSerial mySerial(3, 2); Adafruit_GPS GPS(&mySerial);

Sekarang kita membutuhkan semua variabel kita: Dua string adalah untuk membaca dua kalimat yang kita perlukan untuk menghitung sekumpulan informasi berguna dari GPS. Char adalah untuk menyimpan kalimat sebelum menguraikannya, float adalah untuk menghitung koordinat dalam derajat (GPS mengirim menggunakan koordinat dalam derajat dan menit, kita membutuhkannya dalam derajat agar dapat dibaca di google earth). ChipSelect adalah pin tempat kita mencolokkan CS dari kartu MicroSD. Dalam hal ini adalah D4, tetapi jika Anda menggunakan pelindung SD, Anda harus meletakkan D10 di sini. Variabel file adalah variabel yang akan menyimpan informasi file yang kita gunakan selama sketsa.

String NMEA1;

String NMEA2; karakter c; derajat mengambang; float degSeluruh; mengambang degDec; int chipPilih = 4; File mySensorData;

Sekarang kita mendeklarasikan beberapa fungsi untuk membuat sketsa sedikit lebih elegan dan tidak berantakan:

Mereka pada dasarnya melakukan hal yang sama: membaca kalimat NMEA. clearGPS() mengabaikan tiga kalimat dan readGPS() menyimpan dua di antaranya dalam variabel.

Mari kita lihat caranya: Perulangan while mengontrol jika ada kalimat NMEA baru pada modul dan membaca aliran GPS sampai ada. Ketika ada kalimat baru, kita keluar dari while loop, di mana kalimat tersebut sebenarnya dibaca, diurai, dan disimpan dalam variabel NMEA pertama. Kami segera melakukan hal yang sama untuk yang berikutnya, karena GPS terus mengalir, tidak menunggu kami siap, kami tidak punya waktu untuk segera mencetaknya

Ini sangat penting! Jangan lakukan apa pun sebelum Anda menyimpan kedua kalimat, jika tidak kalimat kedua pada akhirnya akan rusak atau salah.

Setelah kami mendapat dua kalimat, kami mencetaknya secara serial untuk mengontrol agar berjalan dengan baik.

batal bacaGPS() {

clearGPS(); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); NMEA1=GPS.lastNMEA(); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); NMEA2=GPS.lastNMEA(); Serial.println(NMEA1); Serial.println(NMEA2); } void clearGPS() { while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA());w while(!GPS.newNMEAreceived()) { c=GPS.read(); } GPS.parse(GPS.lastNMEA()); }

Nah, sekarang kita sudah siap, kita bisa melalui setup():

Pertama: kita buka komunikasi di Serial 115200 untuk Arduino PC dan di 9600 untuk modul GPS Arduino. Kedua: kami mengirim tiga perintah ke modul GPS: yang pertama adalah menutup pembaruan antena, yang kedua hanya meminta string RMC dan GGA (kami hanya akan menggunakan yang memiliki semua informasi yang Anda perlukan dari a GPS), perintah ketiga dan terakhir adalah mengatur kecepatan pembaruan ke 1HZ, disarankan oleh Adafruit.

Setelah itu kita set pin D10 ke OUTPUT, jika, dan hanya jika, pin CS model SD Anda selain D10. Segera setelah itu, atur CS pada modul SD pada pin chipPilih.

Kami menjalankan fungsi readGPS() yang menyertakan cleanGPS().

Sekarang saatnya untuk menulis sesuatu di file! Jika file sudah ada di kartu Sd, tambahkan stempel waktu pada file tersebut. Dengan cara ini kita tidak perlu melacak sesi atau menghapus file setiap saat. Dengan stempel waktu yang ditulis dalam fungsi pengaturan, kami yakin untuk menambahkan pemisahan dalam file hanya sekali per sesi.

CATATAN: Pustaka SD cukup serius untuk membuka dan menutup file setiap saat! Ingatlah dan tutup setiap saat! Untuk mempelajari tentang perpustakaan, ikuti tautan ini.

Oke, kita benar-benar siap untuk mendapatkan inti dari bagian stream-and-log dari sketsa.

batalkan pengaturan() {

Serial.begin(115200); GPS.begin(9600); //Kirim perintah ke modul GPS GPS.sendCommand("$PGCMD, 33, 0*6D"); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); penundaan (1000); //hanya jika pin CS modul SD Anda tidak ada di pin D10

pinMode(10, OUTPUT);

SD.mulai(Pilihan chip); bacaGPS(); if (SD.exists("NMEA.txt")) { mySensorData = SD.open("NMEA.txt", FILE_WRITE); mySensorData.println(""); mySensorData.print("***"); mySensorData.print(GPS.day); mySensorData.print("."); mySensorData.print(GPS.bulan); mySensorData.print("."); mySensorData.print(GPS.tahun); mySensorData.print(" -- "); mySensorData.print(GPS.hour); mySensorData.print(":"); mySensorData.print(GPS.minute); mySensorData.print(":"); mySensorData.print(GPS.detik); mySensorData.println("***"); mySensorData.close(); } if (SD.exists("GPSData.txt")) { mySensorData = SD.open("GPSData.txt", FILE_WRITE); mySensorData.println(""); mySensorData.println(""); mySensorData.print("***"); mySensorData.print(GPS.day); mySensorData.print("."); mySensorData.print(GPS.bulan); mySensorData.print("."); mySensorData.print(GPS.tahun); mySensorData.print(" -- "); mySensorData.print(GPS.hour); mySensorData.print(":"); mySensorData.print(GPS.minute); mySensorData.print(":"); mySensorData.print(GPS.detik); mySensorData.println("***"); mySensorData.close(); }}

Sekarang kita mendapatkan inti dari sketsa.

Ini sangat sederhana, memang.

Kita akan membaca aliran GPS dengan fungsi readGPS(), daripada yang kita kontrol jika kita memiliki perbaikan yang sama dengan 1, yang berarti bahwa kita terhubung dengan satelit e. Jika kami mendapatkannya, kami akan menulis info kami di file. Di file pertama "NMEA.txt", kami hanya menulis kalimat mentah. Di file kedua, "GPDData.txt", kita menambahkan koordinat (dikonversi dengan fungsi yang kita lihat sebelumnya) dan ketinggian. Informasi tersebut cukup untuk mengkompilasi file.kml untuk membuat jalur di Google Earth. Perhatikan bahwa kami menutup file setiap kali kami membukanya untuk menulis sesuatu!

lingkaran kosong() {

bacaGPS(); // Kondisikan jika che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. if(GPS.fix==1) { //Hanya menyimpan data jika ada perbaikan mySensorData = SD.open("NMEA.txt", FILE_WRITE); //Apre il file per le frasi NMEA grezze mySensorData.println(NMEA1); //Scrive prima NMEA sul file mySensorData.println(NMEA2); //Scrive seconda NMEA sul file mySensorData.close(); //Berkas Chiude!!

mySensorData = SD.open("GPSData.txt", FILE_WRITE);

// Mengonversi dan menulis dengan longitudine convLong(); mySensorData.print(deg, 4); // Tulis koordinat file dalam file gradi sul mySensorData.print(", "); // Scrive una virgola per terpisah i dati Serial.print(deg); Serial.print(", "); // Mengonversi dan menulis la latitudine convLati(); mySensorData.print(deg, 4); // Tulis koordinat file dalam file gradi sul mySensorData.print(", "); // Scrive una virgola per terpisah i dati Serial.print(deg); Serial.print(", "); // Scrive l'altitudine mySensorData.print(GPS.altitude); mySensorData.print(" "); Serial.println(GPS.altitude); mySensorData.close(); } }

Sekarang setelah kita semua selesai, Anda dapat mengunggah sketsa, membuat perangkat, dan menikmatinya!

Perhatikan bahwa Anda perlu menggunakannya dengan borad GPS menghadap ke langit untuk mendapatkan fix=1, atau Anda dapat memasang antena eksternal ke sana.

Juga, perlu diingat bahwa jika ada perbaikan, lampu merah berkedip setiap 15 detik, jika tidak, jauh lebih cepat (setiap 2-3 detik sekali).

Jika Anda ingin mempelajari lebih lanjut tentang kalimat NMEA, ikuti saja langkah selanjutnya dari panduan ini.

Langkah 3: Kalimat NMEA dan File.kml

Perangkat dan sketsanya sudah selesai, semuanya berfungsi dengan baik. Ingatlah bahwa untuk mendapatkan perbaikan (untuk memiliki koneksi dengan satelit), breakout harus menghadap ke langit.

Lampu merah kecil berkedip setiap 15 detik saat Anda mendapatkan perbaikan

Jika Anda ingin lebih memahami kalimat NMEA, Anda bisa membaca lebih lanjut.

Dalam sketsa kami hanya menggunakan dua kalimat, GGA dan RMC. Itu hanya beberapa kalimat yang di-streaming oleh modul GPS.

Mari kita lihat apa yang ada di string itu:

$GPRMC, 123519, A, 4807.038, N, 01131.000, E, 022.4, 084.4, 230394, 003.1, W*6A

RMC = Kalimat Minimum yang Disarankan C 123519 = Fix diambil pada 12:35:19 UTC A = Status A=aktif atau V=Void 4807.038, N = Lintang 48 derajat 07.038' N 01131.000, E = Bujur 11 derajat 31.000' E 022.4 = Kecepatan di atas tanah dalam knot 084.4 = Sudut lintasan dalam derajat Benar 230394 = Tanggal - 23 Maret 1994 003.1, W = Variasi Magnetik *6A = Data checksum, selalu diawali dengan *

$GPGGA, 123519, 4807.038, N, 01131.000, E, 1, 08, 0.9, 545.4, M, 46.9, M,, *47

GGA Global Positioning System Fix Data 123519 Fix diambil pada 12:35:19 UTC 4807.038, N Latitude 48 deg 07.038' N 01131.000, E Longitude 11 deg 31.000' E 1 Fix quality: 0 = invalid; 1 = Perbaikan GPS (SPS);2 = Perbaikan DGPS; 3 = perbaikan PPS; 4 = Kinematik Waktu Nyata; 5 = RTK Apung; 6 = perkiraan (penghitungan mati) (2.3 fitur); 7 = Mode masukan manual; 8 = Modus simulasi; 08 Jumlah satelit yang dilacak 0.9 Pengenceran horizontal posisi 545.4, M Altitude, Meter, di atas permukaan laut rata-rata 46.9, M Ketinggian geoid (mean sea level) di atas WGS84 ellipsoid (bidang kosong) waktu dalam detik sejak pembaruan DGPS terakhir (bidang kosong)) Nomor ID stasiun DGPS *47 data checksum, selalu diawali dengan *

Seperti yang Anda lihat, ada lebih banyak informasi yang Anda butuhkan di sana. Menggunakan perpustakaan Adafruit, Anda dapat memanggil beberapa di antaranya, seperti GPS.latitude atau GPS.lat (lintang dan belahan bumi lat), atau GPS.day/month/year/hour/minute/seconds/milliseconds… Lihatlah Adafruit situs web untuk mengetahui sesuatu yang lebih. Tidak begitu jelas, tetapi mengikuti beberapa petunjuk dalam panduan modul GPS, Anda dapat menemukan apa yang Anda butuhkan.

Apa yang bisa kita lakukan dengan file yang kita punya? Mudah: kompilasi file kml untuk menunjukkan jalur di Google Earth. Untuk melakukannya, cukup salin/tempel kode yang akan Anda temukan berikut tautan ini (di bawah paragraf Path), letakkan koordinat Anda dari file GPDData.txt di antara tag, simpan file dengan ekstensi.kml dan muat di Google Earth.

CATATAN: Bahasa markup.kml sederhana, jika Anda sudah tahu apa itu bahasa markup, luangkan waktu Anda untuk membaca tautan dan dokumentasi sebelumnya di dalamnya, itu benar-benar menarik!

Menggunakan kml adalah tentang mengetahui tag dan argumennya. Saya hanya menemukan panduan dari Google, yang saya tautkan sebelumnya dan yang terpenting adalah menentukan gaya antara tag dan menyebutnya dengan tanda # ketika saatnya untuk menulis koordinat.

File yang saya tambahkan di bagian ini adalah.kml di mana Anda bisa menempelkan koordinat Anda. ingat untuk menempel dengan sintaks ini: bujur, lintang, ketinggian

Direkomendasikan: