Isi kandungan:

Pencatat GPS Arduino: 3 Langkah
Pencatat GPS Arduino: 3 Langkah

Video: Pencatat GPS Arduino: 3 Langkah

Video: Pencatat GPS Arduino: 3 Langkah
Video: Arduino GPS Speedometer with Analog Gauge 2024, Julai
Anonim
Pencatat GPS Arduino
Pencatat GPS Arduino
Pencatat GPS Arduino
Pencatat GPS Arduino

Hai semua, Saya sangat bersemangat untuk projek kecil yang membolehkan orang memahami lebih banyak teknologi yang kita ada setiap hari.

Projek ini adalah mengenai pelarian GPS dan pembalakan SD. Saya banyak belajar membina barang ini.

Terdapat banyak tanggapan yang akan anda perolehi berikutan tutorial ini, dan banyak lagi mengikuti pautan yang saya berikan untuk mendalami topik.

Jadi, apa itu? Mudah: Merupakan pelacak GPS yang mencatat kedudukan (dengan ketinggian juga), kelajuan dan tarikh / masa pada microSD.

Apa yang anda perlukan:

- Arduino Nano (Saya sebenarnya menggunakan UNO untuk membuat lakaran, tetapi mereka sama!) - Adafruit pelarian GPS utama- Penembusan kad MicroSD- Alat pematerian (semua yang anda perlukan untuk pematerian) - Universal Stripboard (saya gunakan 5x7cm) - Wayar

Semua komponen itu cukup murah kecuali modul GPS. Itu kira-kira 30-40 dolar dan Adakah bahagian yang paling mahal. Bahkan set besi pemateri baru boleh menelan belanja lebih sedikit.

Terdapat juga perisai Adafruit dengan GPS dan modul kad SD bersama-sama. Sekiranya anda ingin menggunakannya, ingatlah bahawa dibuat untuk Arduino UNO, oleh itu anda memerlukan UNO dan bukan Nano. Tidak ada perbezaan dalam lakaran itu.

Mari pergi lebih jauh …

Langkah 1: Menyambungkan Komponen

Menyambung Komponen
Menyambung Komponen
Menyambung Komponen
Menyambung Komponen
Menyambung Komponen
Menyambung Komponen
Menyambung Komponen
Menyambung Komponen

Nah, setelah anda mendapat komponennya, anda perlu menghubungkannya. Di sini anda dapat mencari skema fritzing yang cukup jelas. Walau bagaimanapun, ini juga:

Pelarian mikroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Sekiranya anda menggunakan perisai ini dibina dalam D10)

Pelarian GPS

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

Catatan kecil mengenai modul tersebut: Kedua-dua budak lelaki itu berkomunikasi melalui jalan yang berbeza dengan Arduino. GPS menggunakan TTL Serial, jenis yang sama seperti yang kita gunakan ketika kita berkomunikasi dengan Arduino melalui Serial Monitor, bahawa mengapa kita harus menyatakan melalui perpustakaan siri baru (Tx dan Rx) kerana GPS ingin menggunakan 9600 secara lalai, dan kami mahu menggunakannya sama ada. Modul GPS sentiasa dan sentiasa mengalirkan data, jika dipasang. Ini adalah bahagian yang sukar untuk ditangani, kerana jika kita membaca ayat dan daripada mencetaknya, kita akan kehilangan yang berikutnya, itu juga diperlukan. Kita mesti ingat semasa membuat pengekodan!

MicroSD berkomunikasi melalui SPI (Serial Peripheral Interface), cara lain untuk berkomunikasi dengan papan. Jenis modul seperti itu selalu CLK pada D13, DO pada D12 dan DI pada D11. Kadang kala sambungan tersebut mempunyai nama yang berbeza seperti CLK = SCK atau SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (semua itu menunjukkan Master Output) dan DI = SOMI, SDI, MISO, MRST (Master Input). Akhirnya kami mempunyai CS atau SS yang menunjukkan pin tempat kami menghantar apa yang ingin kami tulis dalam MicroSD. Sekiranya anda ingin menggunakan dua modul SPI yang berbeza, anda hanya perlu membezakan pin ini untuk menggunakan keduanya. Contohnya, skrin LCD DAN MicroSd seperti yang kita gunakan. Ia mesti berfungsi juga menggunakan dua LCD berbeza yang disambungkan ke CS yang berbeza.

Selesaikan bahagian ini bersama-sama di papan dan anda sudah bersedia untuk memuat naik lakaran!

Seperti yang anda lihat dalam lakaran, saya menyolder beberapa penyambung wanita dupont sebagai ganti komponen langsung, kerana pada masa akan datang saya mungkin ingin menggunakan semula komponen tersebut atau menukarnya.

Saya juga menyolder modul GPS dengan penyambung ke arah yang salah, itu salah saya dan saya tidak mahu, tetapi ia berfungsi dan saya tidak mahu mengambil risiko untuk memecahkannya dengan mencabul bajingan kecil itu! Solder dengan cara yang betul dan semuanya akan baik-baik saja!

Berikut adalah beberapa video solder yang berguna: Panduan pematerian untuk pemula Video mengenai pematrian

Salurkan Youtube saluran, banyak perkara menarik di sana!

Apabila anda menyolder, cubalah menggunakan jumlah logam yang anda perlukan, jika tidak, anda akan melakukan kekacauan. Jangan takut untuk melakukannya, mungkin mulakan dengan sesuatu yang tidak begitu mahal, dan daripada menyimpan barang yang berbeza. Bahan yang betul membuat perbezaan!

Langkah 2: Lakaran

Pertama, tentu saja, kami mengimport perpustakaan dan membina 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 bersiri melalui perisian. Sintaksnya adalah "mySerial (TxPin, RxPin);". Objek GPS perlu diarahkan ke siri (dalam kurungan). Berikut adalah pautan perpustakaan untuk pelarian GPS Adafruit, pelarian MicroSD (untuk melakukan pekerjaan yang bersih, anda juga harus memformat SD dengan perisian ini dari persatuan SD) dan Perpustakaan Serial Perisian (ia harus disertakan dalam IDE).

CATATAN: Saya menghadapi beberapa masalah ketika cuba menambahkan banyak maklumat dalam satu fail atau menggunakan lebih daripada dua fail dalam lakaran. Saya tidak memformat SD dengan perisian itu, mungkin itu dapat menyelesaikan masalahnya. Juga, saya cuba menambahkan sensor lain dalam peranti, BMP280 (modul I2C), tanpa kejayaan. Sepertinya menggunakan modul I2C menjadikan lakaran menjadi gila! Saya sudah mengetahuinya di forum Adafruit, tetapi saya masih belum mendapat jawapan.

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

Sekarang kita memerlukan semua pemboleh ubah kita: Dua rentetan adalah untuk membaca dua ayat yang kita perlukan untuk mengira banyak maklumat berguna dari GPS. Arang adalah untuk menyimpan ayat sebelum menghuraikannya, apungan adalah untuk mengira koordinat dalam darjah (GPS menggunakan koordinat penggunaan dalam darjah dan minit, kami memerlukannya dalam darjah untuk membiarkan bacaan di google earth). ChipSelect adalah pin di mana kita memasang CS kad MicroSD. Dalam kes ini adalah D4, tetapi jika anda menggunakan perisai SD, anda harus meletakkan D10 di sini. Pembolehubah fail adalah orang yang akan menyimpan maklumat fail yang kami gunakan semasa membuat lakaran.

Rentetan NMEA1;

Rentetan NMEA2; char c; float deg; apungan degWhole; apungan degDec; int chipSelect = 4; Fail mySensorData;

Sekarang kami menyatakan beberapa fungsi untuk membuat lakaran menjadi lebih elegan dan tidak kemas:

Pada dasarnya mereka melakukan perkara yang sama: membaca ayat NMEA. clearGPS () mengabaikan tiga ayat dan readGPS () menyimpan dua daripadanya dalam pemboleh ubah.

Mari lihat bagaimana: Gelung sementara sedang mengawal jika terdapat ayat NMEA baru pada modul dan membaca aliran GPS sehingga ada. Apabila ayat baru ada, kita akan keluar sementara, di mana ayat itu betul-betul dibaca, dihuraikan dan disimpan dalam pemboleh ubah NMEA pertama. Kami segera melakukan perkara yang sama untuk yang berikutnya, kerana GPS sentiasa streaming, tidak menunggu kami siap, kami tidak sempat mencetaknya dengan segera

Ini sangat penting! Jangan buat apa-apa sebelum anda menyimpan kedua-dua ayat, jika tidak, yang kedua akhirnya akan rosak atau salah.

Setelah mendapat dua ayat, kami mencetaknya dalam siri untuk mengawal keadaan yang baik.

batal bacaGPS () {

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

Nah, sekarang kita sudah siap, kita dapat melalui penyiapan ():

Pertama: kami membuka komunikasi pada Serial 115200 untuk Arduino PC dan pada 9600 untuk modul GPS Arduino. Kedua: kami menghantar tiga arahan ke modul GPS: yang pertama adalah untuk menutup kemas kini antena, yang kedua adalah hanya meminta rentetan RMC dan GGA (kami hanya akan menggunakan mereka, yang mempunyai semua maklumat yang anda perlukan dari GPS), perintah ketiga dan terakhir adalah menetapkan kadar kemas kini ke 1HZ, yang disarankan oleh Adafruit.

Selepas itu kami menetapkan pin D10 ke OUTPUT, jika, dan hanya jika, pin CS modele SD anda selain D10. Segera setelah itu, tetapkan CS pada modul SD pada pin chipSelect.

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

Sekarang masanya untuk menulis sesuatu dalam fail! Sekiranya fail sudah ada di kad Sd, tambahkan cap waktu pada mereka. Dengan cara ini kita tidak perlu melacak sesi atau menghapus fail setiap masa. Dengan cap waktu yang ditulis dalam fungsi penyediaan, kami pasti hanya menambahkan pemisahan dalam fail hanya sekali setiap sesi.

CATATAN: Perpustakaan SD cukup serius untuk membuka dan menutup fail setiap masa! Ingatlah dan tutup setiap masa! Untuk mengetahui mengenai perpustakaan ikuti pautan ini.

Ok, kita betul-betul bersedia untuk mendapatkan inti dari bahagian aliran-dan-log lakaran.

batal persediaan () {

Serial.begin (115200); GPS.begin (9600); // Hantar arahan ke modul GPS GPS.sendCommand ("$ PGCMD, 33, 0 * 6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); kelewatan (1000); // hanya jika pin CS modul SD anda tidak terdapat pada pin D10

pinMode (10, OUTPUT);

SD.begin (chipSelect); bacaGPS (); jika (SD.exists ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.month); mySensorData.print ("."); mySensorData.print (GPS.tahun); mySensorData.print ("-"); mySensorData.print (GPS.jam); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData.close (); } jika (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.month); mySensorData.print ("."); mySensorData.print (GPS.tahun); mySensorData.print ("-"); mySensorData.print (GPS.jam); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData.close (); }}

Sekarang kita mendapat inti lakaran.

Memang sangat mudah.

Kita akan membaca aliran GPS dengan fungsi readGPS (), daripada yang kita kendalikan jika kita mempunyai pembetulan sama dengan 1, t bermaksud kita dihubungkan dengan satelit e. Sekiranya kami mendapatnya, kami akan menulis maklumat kami dalam fail. Dalam fail pertama "NMEA.txt", kami hanya menulis ayat mentah. Dalam fail kedua, "GPDData.txt", kita menambahkan koordinat (ditukar dengan fungsi yang kita lihat sebelumnya) dan ketinggian. Maklumat tersebut cukup untuk menyusun fail.kml untuk membuat jalan di Google Earth. Perhatikan bahawa kami menutup fail setiap kali kami membukanya untuk menulis sesuatu!

gelung kosong () {

bacaGPS (); // Condizione jika che Controlla se l'antenna ha segnale. Se si, prosedur con la scrittura dei dati. if (GPS.fix == 1) {// Hanya simpan data jika kita mempunyai perbaikan mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul file mySensorData.println (NMEA2); // Scrive seconda NMEA sul file mySensorData.close (); // Fail Chiude !!

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

// Converte e scrive la longitudine convLong (); mySensorData.print (deg, 4); // Scrive le koordinat dalam fail gradi sul mySensorData.print (","); // Pergi una virgola per separare i dati Serial.print (deg); Cetakan bersiri (","); // Converte e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Scrive le koordinat dalam fail gradi sul mySensorData.print (","); // Pergi una virgola per separare i dati Serial.print (deg); Cetakan bersiri (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.altitude); mySensorData.close (); }}

Setelah selesai, anda boleh memuat naik lakaran, membina peranti dan menikmatinya!

Perhatikan bahawa anda perlu menggunakannya dengan borad GPS menghadap ke langit untuk mendapatkan perbaikan = 1, atau anda boleh memasang antena luaran padanya.

Juga, ingat bahawa jika ada perbaikan, lampu merah berkedip setiap 15 saat, jika tidak, jauh lebih cepat (sekali setiap 2-3 saat).

Sekiranya anda ingin mengetahui lebih banyak perkara mengenai ayat NMEA, ikuti langkah seterusnya panduan ini.

Langkah 3: Kalimat NMEA dan Fail.kml

Peranti dan lakarannya lengkap, semuanya berfungsi dengan baik. Perlu diingat bahawa untuk mendapatkan penyelesaian (untuk mempunyai hubungan dengan satelit) pelarian harus menghadap ke langit.

Lampu merah kecil akan berkelip setiap 15 saat apabila anda mendapat pembetulan

Sekiranya anda ingin memahami ayat NMEA dengan lebih baik, anda boleh membaca lebih lanjut.

Dalam lakaran kami hanya menggunakan dua ayat, GGA dan RMC. Ini hanya beberapa ayat yang sedang disiarkan oleh modul GPS.

Mari lihat apa yang terdapat dalam rentetan itu:

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

RMC = Kalimat minimum yang disyorkan C 123519 = Pembetulan yang diambil pada 12:35:19 UTC A = Status A = aktif atau V = Kekosongan 4807.038, N = Lintang 48 deg 07.038 'N 01131.000, E = Bujur 11 darjah 31.000' E 022.4 = Kelajuan di atas tanah dalam simpul 084.4 = Sudut lintasan dalam darjah Benar 230394 = Tarikh - 23 Mac 1994 003.1, W = Variasi Magnetik * 6A = Data checksum, selalu bermula 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 Betulkan kualiti: 0 = tidak sah; 1 = Pembaikan GPS (SPS); 2 = Pembaikan DGPS; 3 = Pembaikan PPS; 4 = Kinematik Masa Sebenar; 5 = Terapung RTK; 6 = dianggarkan (perhitungan mati) (ciri 2.3); 7 = Mod input manual; 8 = Mod simulasi; 08 Bilangan satelit yang dilacak 0.9 Pencairan mendatar kedudukan 545.4, Ketinggian M, Meter, di atas permukaan laut rata-rata 46.9, M Ketinggian geoid (permukaan laut rata-rata) di atas elipsoid (medan kosong) WGS84 masa dalam beberapa saat sejak kemas kini DGPS terakhir (medan kosong) Nombor ID stesen DGPS * 47 data checksum, selalu bermula dengan *

Seperti yang anda lihat, terdapat lebih banyak maklumat yang anda perlukan di sana. Dengan menggunakan perpustakaan Adafruit, anda dapat memanggil beberapa dari mereka, seperti GPS.latitude atau GPS.lat (latitud dan lat hemisphere), atau GPS.day/month/year/hour/minute/seconds/milliseconds… Lihat Adafruit laman web untuk mengetahui sesuatu yang lebih. Tidak begitu jelas, tetapi mengikuti beberapa petunjuk dalam panduan modul GPS, anda dapat menemui apa yang anda perlukan.

Apa yang boleh kita lakukan dengan fail yang kita ada? Mudah: menyusun fail kml untuk menunjukkan jalan di Google Earth. Untuk melakukannya, salin / lalui kod yang anda akan dapati mengikuti pautan ini (di bawah Path path), masukkan koordinat anda dari fail GPDData.txt di antara tag, simpan fail dengan sambungan.kml dan muatkan pada Dunia Google.

CATATAN: Bahasa markup.kml mudah, jika anda sudah tahu apa itu bahasa markup, simpan masa anda untuk membaca pautan dan dokumentasi sebelumnya di dalamnya, sebenarnya menarik!

Menggunakan kml adalah untuk mengetahui tanda dan hujahnya. Saya hanya menjumpai panduan dari Google, yang saya pautkan sebelumnya dan bahagian pentingnya adalah untuk menentukan gaya antara teg dan memanggilnya dengan tanda # apabila tiba masanya untuk menulis koordinat.

Fail yang saya tambahkan di bahagian ini adalah.kml di mana anda hanya boleh menampal koordinat anda. ingat untuk menampal dengan sintaks ini: garis bujur, garis lintang, ketinggian

Disyorkan: