Satura rādītājs:

Arduino GPS reģistrētājs: 3 soļi
Arduino GPS reģistrētājs: 3 soļi

Video: Arduino GPS reģistrētājs: 3 soļi

Video: Arduino GPS reģistrētājs: 3 soļi
Video: Amazing arduino project 2024, Jūlijs
Anonim
Arduino GPS reģistrētājs
Arduino GPS reģistrētājs
Arduino GPS reģistrētājs
Arduino GPS reģistrētājs

Sveiki puiši, Es esmu ļoti aizraujošs maziem projektiem, kas ļauj cilvēkiem patiesībā izprast daudz vairāk tehnoloģiju, kas mums ir ikdienā.

Šis projekts ir par GPS izlaušanos un SD reģistrēšanu. Es tikai daudz ko iemācījos, tikai veidojot šīs lietas.

Ir daudz priekšstatu, ko jūs iegūsit, sekojot šai apmācībai, un vēl daudz vairāk, sekojot manis sniegtajai saitei, lai padziļinātu tēmas.

Tātad, kas tas ir? Vienkāršs: tas ir GPS izsekotājs, kas reģistrē pozīcijas (arī ar augstumu), ātrumu un datumu/laiku microSD kartē.

Kas jums būs nepieciešams:

- Arduino Nano (es faktiski izmantoju UNO, lai izveidotu skici, bet tie ir vienādi!)- Adafruit gala GPS izlaušanās- MicroSD kartes sadalījums- lodēšanas rīki (viss, kas jums nepieciešams lodēšanai)- universāls sloksnes dēlis (es izmantoju a 5x7cm)- Vadi

Visas šīs sastāvdaļas ir diezgan lētas, izņemot GPS moduli. Tas ir aptuveni 30-40 dolāri, un tā ir visdārgākā daļa. Pat jauns lodāmura komplekts varētu maksāt mazāk.

Pastāv arī Adafruit vairogs ar GPS un SD kartes moduļiem kopā. Ja vēlaties to izmantot, paturiet prātā, ka tas ir paredzēts Arduino UNO, tāpēc jums būs nepieciešams UNO, nevis Nano. Tomēr skicē nav atšķirību.

Ejam tālāk…

1. darbība: komponentu savienošana

Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas
Savienojuma sastāvdaļas

Pēc komponentu iegūšanas jums tie būs jāpievieno. Šeit jūs varat atrast diezgan skaidras fritēšanas shēmas. Tomēr šeit ir arī norāde:

MicroSD izlaušanās

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (ja izmantojat vairogu, tas ir iebūvēts D10)

GPS izlaušanās

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

Nelielas piezīmes par šiem moduļiem: Šie divi mazie zēni sazinās ar Arduino pa dažādiem ceļiem. GPS izmanto tādu pašu TTL sēriju, kādu mēs izmantojam, sazinoties ar Arduino, izmantojot seriālo monitoru, tāpēc mums bibliotēkā ir jādeklarē jauna sērija (Tx un Rx), jo GPS pēc noklusējuma vēlas izmantot 9600, un arī gribu to izmantot. GPS modulis vienmēr un nepārtraukti straumē datus, ja tas ir pievienots. Šī ir sarežģītā daļa, kas jārisina, jo, lasot teikumu un pēc tam to izdrukājot, mēs varam zaudēt nākamo, kas arī ir vajadzīgs. Mums tas jāpatur prātā, kodējot!

MicroSD sazinās, izmantojot SPI (Serial Peripheral Interface), kas ir vēl viens veids, kā sazināties ar valdi. Šāda veida moduļi vienmēr izmanto CLK uz D13, DO uz D12 un DI uz D11. Dažreiz šiem savienojumiem ir atšķirīgs nosaukums, piemēram, CLK = SCK vai SCLK (sērijas pulkstenis), DO = DOUT, SIMO, SDO, SO, MTSR (visi tie norāda galveno izeju) un DI = SOMI, SDI, MISO, MRST (galvenā ieeja). Visbeidzot, mums ir CS vai SS, kas norāda tapu, uz kuru mēs nosūtām to, ko vēlamies ierakstīt MicroSD. Ja vēlaties izmantot divus dažādus SPI moduļus, jums vienkārši ir jānošķir šī tapa, lai tos varētu izmantot abus. Piemēram, LCD ekrāns UN tāds MicroSd disks, kādu mēs izmantojam. Tam vajadzētu darboties arī, izmantojot divus dažādus LCD, kas savienoti ar dažādiem CS.

Lodējiet šīs daļas kopā uz tāfeles, un jūs esat gatavs augšupielādēt skici!

Kā redzams skicē, es lodēju dažus dupont sieviešu savienotājus tiešās sastāvdaļas vietā, tas ir tāpēc, ka nākotnē es varētu vēlēties atkārtoti izmantot komponentu vai to mainīt.

Es arī lodēju GPS moduli ar savienotājiem nepareizā virzienā, tā bija mana vaina, un es negribēju, bet tas darbojas, un es nevēlos riskēt to salauzt, mēģinot atkausēt šos mazos neliešus! Vienkārši lodējiet pareizā veidā, un viss būs kārtībā!

Šeit ir daži noderīgi lodēšanas video: Lodēšanas ceļvedis iesācējiem Video par atkausētāju

Adafruit Youtube kanāls, tur ir daudz interesantu lietu!

Lodējot, mēģiniet izmantot tikai nepieciešamo metāla daudzumu, pretējā gadījumā jūs darīsit putru. Nebaidieties to darīt, varbūt sāciet ar kaut ko ne tik dārgu, un turpiniet pielodēt dažādas lietas. Arī pareizais materiāls rada atšķirību!

2. solis: skice

Pirmkārt, protams, mēs importējam bibliotēku un veidojam to objektus, ar kuriem strādāt: SPI.h ir paredzēts saziņai ar SPI moduļiem, SD ir MicroSD bibliotēka un Adafruit_GPS ir GPS moduļa bibliotēka. SoftwareSerial.h ir paredzēts seriālā porta izveidei, izmantojot programmatūru. Sintakse ir "mySerial (TxPin, RxPin);". GPS objekts ir jānorāda uz sēriju (iekavās). Šeit ir bibliotēku saites uz Adafruit GPS izlaušanos, MicroSD pārtraukumu (lai veiktu tīru darbu, jums arī jāformatē SD ar šo programmatūru no SD asociācijas) un Programmatūras sērijas bibliotēka (tai jābūt iekļautai IDE).

PIEZĪME. Es saskāros ar kādu problēmu, mēģinot pievienot daudz informācijas vienā failā vai skicē izmantot vairāk nekā divus failus. Es neformatēju SD ar šo programmatūru, varbūt tas varētu atrisināt problēmu. Turklāt bez jebkādiem panākumiem es mēģināju ierīcē pievienot vēl vienu sensoru - BMP280 (I2C modulis). Šķiet, ka I2C moduļa izmantošana padara skici traku! Es jau par to runāju Adafruit forumā, bet joprojām nesaņēmu atbildi.

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

Tagad mums ir vajadzīgi visi mūsu mainīgie: Abas virknes ir paredzētas divu teikumu lasīšanai, kas mums jāaprēķina no GPS noderīgas informācijas. Ogles ir paredzētas teikumiem pirms to parsēšanas, pludiņi ir paredzēti koordinātu aprēķināšanai grādos (GPS sūta lietošanas koordinātas grādos un minūtēs, mums tās ir vajadzīgas grādos, lai lasītu Google Earth). ChipSelect ir tapa, kurā mēs pievienojam MicroSD kartes CS. Šajā gadījumā ir D4, bet, ja izmantojat SD vairogu, jums šeit būs jāievieto D10. Failu mainīgais ir tas, kurš apkopos informāciju par failu, kuru mēs izmantojam skices laikā.

Virkne NMEA1;

Virkne NMEA2; char c; pludiņš deg; pludiņš degWhole; pludiņš degDec; int chipSelect = 4; Fails mySensorData;

Tagad mēs paziņojam pāris funkcijas, lai padarītu skici nedaudz elegantāku un mazāk netīru:

Viņi principā dara to pašu: lasa NMEA teikumus. clearGPS () ignorē trīs teikumus, un readGPS () divus no tiem saglabā mainīgajos.

Redzēsim, kā: kamēr cilpa kontrolē, vai modulī ir jauni NMEA teikumi, un tiek lasīta GPS straume, līdz tā ir. Kad ir jauns teikums, mēs esam ārpus cikla cikla, kur teikums faktiski tiek nolasīts, parsēts un iekļauts pirmajos NMEA mainīgajos. Mēs nekavējoties darām to pašu arī nākamajā, jo GPS nepārtraukti straumē, tas negaida, kad mēs būsim gatavi, mums nebija laika to uzreiz izdrukāt

Tas ir ļoti svarīgi! Nedariet neko pirms abu teikumu uzkrāšanas, pretējā gadījumā otrais galu galā būtu bojāts vai vienkārši nepareizs.

Kad esam saņēmuši divus teikumus, mēs tos izdrukājam sērijā, lai kontrolētu, kas notiek labi.

void readGPS () {

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 ()); }

Tagad, kad esam gatavi, mēs varam veikt iestatīšanu ():

Pirmkārt: mēs atveram saziņu sērijā 115200 Arduino personālajam datoram un 9600 GPS modulim Arduino. Otrkārt: mēs nosūtām trīs komandas uz GPS moduli: pirmā ir izslēgt antenas atjaunināšanu, otrā ir paredzēta tikai RMC un GGA virkņu pieprasīšanai (mēs izmantosim tikai tās, kurās ir visa informācija, kas jums jebkad būtu nepieciešama) GPS), trešā un pēdējā komanda ir iestatīt atjaunināšanas ātrumu uz 1 Hz, kā to ierosināja Adafruit.

Pēc tam mēs iestatām tapu D10 uz OUTPUT, ja un tikai tad, ja jūsu SD modeļa CS tapa nav D10. Tūlīt pēc tam iestatiet CS uz mikroshēmas SD moduļa.

Mēs palaižam funkcijas readGPS (), kas ietver cleanGPS ().

Tagad ir pienācis laiks kaut ko ierakstīt failos! Ja fails jau ir SD kartē, pievienojiet tiem laika zīmogu. Tādā veidā mums katru reizi nav jāseko līdzi sesijām vai jāizdzēš faili. Ja iestatīšanas funkcijā ir ierakstīts laika zīmogs, mēs noteikti pievienosim atdalīšanu failos tikai vienu reizi sesijas laikā.

PIEZĪME: SD bibliotēka katru reizi nopietni domā atvērt un aizvērt failu! Paturiet to prātā un aizveriet to katru reizi! Lai uzzinātu par bibliotēku, sekojiet šai saitei.

Labi, mēs patiešām esam gatavi iegūt skices straumes un žurnāla daļas kodolu.

void setup () {

Serial.begin (115200); GPS.sākt (9600); // Sūtīt komandas uz GPS moduli GPS.sendCommand ("$ PGCMD, 33, 0*6D"); GPS.sendCommand (PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand (PMTK_SET_NMEA_UPDATE_1HZ); kavēšanās (1000); // tikai tad, ja SD moduļa CS tapa nav uz tapas D10

pinMode (10, OUTPUT);

SD.begin (chipSelect); readGPS (); ja (SD.eksistē ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.diena); mySensorData.print ("."); mySensorData.print (GPS.mēnesis); mySensorData.print ("."); mySensorData.print (GPS.gads); mySensorData.print (" -"); mySensorData.print (GPS.stunda); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundes); mySensorData.println ("***"); mySensorData.close (); } ja (SD.eksistē ("GPSData.txt")) {mySensorData = SD.open ("GPSData.txt", FILE_WRITE); mySensorData.println (""); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.diena); mySensorData.print ("."); mySensorData.print (GPS.mēnesis); mySensorData.print ("."); mySensorData.print (GPS.gads); mySensorData.print (" -"); mySensorData.print (GPS.stunda); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.sekundes); mySensorData.println ("***"); mySensorData.close (); }}

Tagad mēs iegūstam skices kodolu.

Tas ir super vienkārši, patiešām.

Mēs lasīsim GPS straumi, izmantojot funkciju readGPS (), nekā kontrolēsim, ja labojums ir vienāds ar 1, t nozīmē, ka esam savienoti ar satelītu. Ja mēs to sapratīsim, mēs ierakstīsim savu informāciju failos. Pirmajā failā "NMEA.txt" mēs rakstām tikai neapstrādātus teikumus. Otrajā failā "GPDData.txt" mēs pievienojam koordinātas (konvertētas ar iepriekš redzētajām funkcijām) un augstumu. Ar šo informāciju pietiek, lai apkopotu.kml failu, lai izveidotu ceļu programmā Google Earth. Ņemiet vērā, ka mēs aizveram failus katru reizi, kad to atvērām, lai kaut ko uzrakstītu!

void loop () {

readGPS (); // Condizione if che controlla se l'antenna ha segnale. Se si, procedur con la scrittura dei dati. if (GPS.fix == 1) {// Saglabājiet datus tikai tad, ja mums ir labojums mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per le frasi NMEA grezze mySensorData.println (NMEA1); // Skrivējiet primāro NMEA sul failu mySensorData.println (NMEA2); // Skrūvēt otro NMEA sul failu mySensorData.close (); // Chiude fails !!

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

// Pārvērst e izveicīgo la longitudine convLong (); mySensorData.print (deg, 4); // Noskaidrojiet koordinātu pakāpeniskā failā mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Converte e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Noskaidrojiet koordinātu pakāpeniskā failā mySensorData.print (","); // Scrive una virgola per separare i dati Serial.print (deg); Serial.print (","); // Scrive l'altitudine mySensorData.print (GPS.altitude); mySensorData.print (""); Serial.println (GPS.augstums); mySensorData.close (); }}

Tagad, kad viss ir paveikts, varat augšupielādēt skici, izveidot ierīci un izbaudīt to!

Ņemiet vērā, ka jums tas jāizmanto ar GPS boradu, kas vērsts pret debesīm, lai iegūtu labojumu = 1, vai arī varat pievienot tai ārēju antenu.

Ņemiet vērā arī to, ka, ja ir labojums, sarkanā gaisma mirgo ik pēc 15 sekundēm, ja nē, tad daudz ātrāk (reizi 2-3 sekundēs).

Ja vēlaties uzzināt kaut ko vairāk par NMEA teikumiem, vienkārši izpildiet šīs rokasgrāmatas nākamo soli.

3. darbība: NMEA teikumi un.kml fails

Ierīce un skice ir pabeigta, tie darbojas labi. Paturiet prātā, ka, lai panāktu labojumu (lai būtu savienojums ar satelītiem), izlaušanai vajadzētu būt vērstai pret debesīm.

Mazā sarkanā lampiņa mirgo ik pēc 15 sekundēm, kad esat saņēmis labojumu

Ja vēlaties labāk izprast NMEA teikumus, varat lasīt tālāk.

Skicē mēs izmantojam tikai divus teikumus - GGA un RMC. Tie ir tikai daži teikumi, ko straumē GPS modulis.

Apskatīsim, kas ir šajā virknē:

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

RMC = Ieteicamais minimālais teikums C 123519 = Labojums 12:35:19 UTC A = Statuss A = aktīvs vai V = nav spēkā 4807.038, N = Platums 48 grādi 07.038 'N 01131.000, E = Garums 11 gr. 31.000' E 022.4 = Ātrums virs zemes mezglos 084.4 = sliežu ceļa leņķis grādos True 230394 = datums - 1994. gada 23. marts 003.1, W = magnētiskās variācijas *6A = kontrolsummas dati vienmēr sākas ar *

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

GGA globālās pozicionēšanas sistēmas fiksētie dati 123519 Labojums uzņemts 12:35:19 UTC 4807.038, N Platums 48 grādi 07.038 'N 01131.000, E Garums 11 grādi 31.000' E 1 Labojuma kvalitāte: 0 = nederīga; 1 = GPS labojums (SPS); 2 = DGPS labojums; 3 = PPS labojums; 4 = reālā laika kinemātika; 5 = pludiņš RTK; 6 = aprēķināts (mirušo aprēķins) (2.3. Iezīme); 7 = manuālās ievades režīms; 8 = simulācijas režīms; 08 Izsekoto satelītu skaits 0,9 Horizontālais atšķaidījums pozīcijā 545,4, M Augstums, Metri, virs vidējā jūras līmeņa 46,9, M Ģeoīda augstums (vidējais jūras līmenis) virs WGS84 elipsoīda (tukšs lauks) laiks sekundēs kopš pēdējā DGPS atjauninājuma (tukšs lauks)) DGPS stacijas ID numurs *47 kontrolsummas dati, vienmēr sākas ar *

Kā redzat, tur ir daudz vairāk informācijas par to, kas jums nepieciešams. Izmantojot Adafruit bibliotēku, varat piezvanīt dažiem no tiem, piemēram, GPS.latitude vai GPS.lat (platums un platuma puslode) vai GPS.day/month/year/hour/minute/seconds/milliseconds… Ieskatieties Adafruit vietni, lai uzzinātu kaut ko vairāk. Nav tik skaidrs, bet, ievērojot dažus padomus GPS moduļu rokasgrāmatā, jūs varētu atrast vajadzīgo.

Ko mēs varam darīt ar failiem, kas mums ir? Vienkārši: apkopojiet kml failu, lai parādītu ceļu pakalpojumā Google Earth. Lai to izdarītu, vienkārši nokopējiet/palaidiet garām kodu, ko atradīsit, izmantojot šo saiti (zem rindkopas Ceļš), ievietojiet koordinātas no faila GPDData.txt starp tagiem, saglabājiet failu ar paplašinājumu.kml un ielādējiet to Google Zeme.

PIEZĪME.. Kml iezīmēšanas valoda ir vienkārša, ja jūs jau zināt, kas ir iezīmēšanas valoda, veltiet laiku, lai izlasītu iepriekšējo saiti un dokumentāciju, tā patiesībā ir interesanta!

Izmantojot kml, ir jāzina tā tagi un argumenti. Es atradu tikai Google ceļvedi, kuru es jau iepriekš saistīju, un būtiskākais ir definēt stilu starp tagiem un nosaukt to ar # zīmi, kad ir laiks rakstīt koordinātas.

Šajā sadaļā pievienotais fails ir.kml, kurā varat vienkārši ielīmēt savas koordinātas. paturiet prātā, lai ielīmētu ar šo sintaksi: garums, platums, augstums

Ieteicams: