Orodha ya maudhui:

Arduino GPS Logger: 3 Hatua
Arduino GPS Logger: 3 Hatua

Video: Arduino GPS Logger: 3 Hatua

Video: Arduino GPS Logger: 3 Hatua
Video: 🛰 GPS TRACKER С ОТПРАВКОЙ ДАННЫХ НА СЕРВЕР. АВТОНОМНЫЙ GPS НА ARDUINO. СВОИМИ РУКАМИ. 2024, Julai
Anonim
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger
Arduino GPS Logger

Hamjambo, Ninatoka nje kwa miradi midogo ambayo inaruhusu watu kuelewa kwa kweli teknolojia ambayo tunayo kila siku.

Mradi huu ni kuhusu kuzuka kwa GPS na uvunaji wa SD. Nilijifunza mengi tu kujenga vitu hivi.

Kuna maoni mengi ambayo utapata kufuata mafunzo haya, na zaidi kufuata kiunga ninachotoa ili kupata undani wa mada.

Kwa hivyo, ni nini hiyo? Rahisi: Je! Tracker ya GPS ambayo huweka nafasi (na urefu pia), kasi na tarehe / saa kwenye microSD.

Nini utahitaji:

- Arduino Nano (kwa kweli nilitumia UNO kujenga mchoro, lakini ni sawa tu!) - Adafruit mwisho kuzuka kwa GPS- kuzuka kwa kadi ya MicroSD- Zana za kugandisha (kila kitu utahitaji kwa solder) - Universal Stripboard (nilitumia (5x7cm) - waya

Sehemu hizo zote ni za bei rahisi isipokuwa moduli ya GPS. Hiyo ni kama dola 30-40 na ndio sehemu ya gharama kubwa zaidi. Hata seti mpya ya chuma ya kuuza inaweza gharama kidogo.

Ipo pia ngao ya Adafruit na moduli za kadi za GPS na SD pamoja. Ikiwa unataka kuitumia, kumbuka kuwa imetengenezwa kwa Arduino UNO, kwa hivyo utahitaji UNO na sio Nano. Hakuna tofauti katika mchoro ingawa.

Twende mbali…

Hatua ya 1: Kuunganisha Vipengele

Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele
Kuunganisha Vipengele

Kweli, baada ya kupata vifaa, utahitaji kuziunganisha. Hapa unaweza kupata hesabu za kuchora ambazo ni wazi. Walakini, inaangazia pinout pia:

Kuzuka kwa MicroSD

5V -> 5VGND -> GnnCLK -> D13DO -> D12DI -> D11CS -> D4 (Ikiwa unatumia ngao hii imejengwa katika D10)

Kuzuka kwa GPS

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

Vidokezo vidogo juu ya moduli hiyo: Wale wavulana wawili wadogo wanawasiliana kupitia njia tofauti na Arduino. GPS hutumia TTL Serial, aina ile ile tunayotumia wakati tunawasiliana na Arduino kupitia Serial Monitor, kwamba kwanini tunapaswa kutangaza kupitia maktaba safu mpya (Tx na Rx) kwa sababu GPS inataka kutumia 9600 kwa msingi, na sisi unataka kutumia pia. Moduli ya GPS huwa na kusambaza data kila wakati, ikiwa imechomekwa. Hii ndio sehemu ngumu kushughulikia, kwa sababu ikiwa tunasoma sentensi na kuliko kuichapisha, tunaweza kupoteza inayofuata, ambayo inahitajika pia. Lazima tuiweke akilini wakati wa kuweka alama!

MicroSD inawasiliana kupitia SPI (Interface ya Peripheral Interface), njia nyingine ya kuwasiliana na bodi. Aina hizo za matumizi ya moduli siku zote CLK kwenye D13, DO kwenye D12 na DI kwenye D11. Wakati mwingine miunganisho hiyo ina jina tofauti kama CLK = SCK au SCLK (Serial Clock), DO = DOUT, SIMO, SDO, SO, MTSR (zote zinaonyesha Master Output) na DI = SOMI, SDI, MISO, MRST (Master Input). Mwishowe tuna CS au SS ambayo inaonyesha pini ambapo tunatuma kile tunachotaka kuandika katika MicroSD. Ikiwa unataka kutumia moduli mbili tofauti za SPI, lazima utofautishe pini hii ili kuzitumia zote mbili. Kwa mfano, skrini ya LCD NA MicroSd kama ile tunayotumia. Inapaswa kufanya kazi pia kutumia LCD mbili tofauti zilizounganishwa na CS tofauti.

Weka sehemu hizi pamoja kwenye ubao na wewe uko tayari kupakia mchoro!

Kama unavyoona kwenye mchoro, nilichanganya viunganishi vya kike vya dupont badala ya sehemu ya moja kwa moja, hiyo ni kwa sababu katika siku zijazo ningependa nitumie kutumia tena sehemu hiyo au kubadilisha moja.

Niliuza pia moduli ya GPS na viunganishi katika mwelekeo usiofaa, hilo lilikuwa kosa langu na sikutaka, lakini inafanya kazi na sitaki kuhatarisha kuivunja nikijaribu kuwaangusha wale watoto wachafu! Solder tu kwa njia sahihi na yote yatakuwa sawa!

Hapa kuna video muhimu ya solder: Mwongozo wa Soldering kwa Kompyuta Video kuhusu desolder

Kituo cha Youtube cha Adafruit, vitu vingi vya kupendeza hapo!

Unapotengeneza, jaribu kutumia tu chuma unachohitaji, vinginevyo utafanya fujo. Usiogope kuifanya, labda anza na kitu kisicho ghali sana, na kuliko kuweka vitu tofauti tofauti. Nyenzo sahihi hufanya pia tofauti!

Hatua ya 2: Mchoro

Kwanza, kwa kweli, tunaingiza maktaba na tunaunda vitu vyao kufanya kazi na: SPI.h ni ya kuwasiliana na moduli za SPI, SD ni maktaba ya MicroSD na Adafruit_GPS ni maktaba ya moduli ya GPS. SoftwareSerial.h ni kwa kuunda bandari ya serial kupitia programu. Syntax ni "mySerial (TxPin, RxPin);". Kitu cha GPS kinahitaji kuonyeshwa kwa serial (kwenye mabano). Hapa kuna viungo vya maktaba za kuzuka kwa Adafruit GPS, kuzuka kwa MicroSD (kufanya kazi safi unapaswa pia kuunda SD na programu hii kutoka kwa chama cha SD) na Maktaba ya serial ya Programu (inapaswa kuingizwa katika IDE).

KUMBUKA: Nilikabiliwa na shida wakati wa kujaribu kuongezea habari nyingi katika faili moja au kutumia faili zaidi ya mbili kwenye mchoro. Sikufomati SD na programu hiyo, labda hiyo inaweza kutatua shida. Pia, nilijaribu kuongeza sensorer nyingine kwenye kifaa, BMP280 (moduli ya I2C), bila mafanikio yoyote. Inaonekana kama kutumia moduli ya I2C hufanya mchoro uende wazimu! Nilikuwa tayari nikiliuliza juu ya jukwaa la Adafruit, lakini bado sikupata jibu.

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

Sasa tunahitaji anuwai zetu zote: Kamba hizi mbili ni za kusoma sentensi mbili ambazo tunahitaji kuhesabu kundi la habari muhimu kutoka kwa GPS. Char ni ya hisa ya sentensi kabla ya kuzichanganua, kuelea ni kwa kuhesabu kuratibu kwa digrii (GPS tuma kuratibu za matumizi kwa digrii na dakika, tunahitaji kwa digrii ili usome katika google dunia). Chip Chagua ni pini ambapo tunaziba CS ya kadi ya MicroSD. Katika kesi hii ni D4, lakini ikiwa unatumia ngao ya SD, itabidi uweke D10 hapa. Tofauti ya faili ndiye atakayehifadhi habari ya faili tunayotumia wakati wa mchoro.

Kamba NMEA1;

Kamba ya NMEA2; char c; kuelea deg; kuelea degWhole; kuelea degDec; int chip Chagua = 4; Faili mySensorData;

Sasa tunatangaza kazi kadhaa za kufanya mchoro kuwa wa kifahari zaidi na usiokuwa wa fujo:

Wanafanya kimsingi sawa: kusoma sentensi za NMEA. clearGPS () inapuuza sentensi tatu na kusomaGPS () inaokoa mbili kati yao katika anuwai.

Wacha tuone jinsi: Kitanzi cha wakati kinadhibiti ikiwa kuna sentensi mpya za NMEA kwenye moduli na kusoma mkondo wa GPS hadi iwepo. Wakati sentensi mpya iko, tuko nje ya kitanzi, ambapo sentensi inasomwa kweli, imechanganuliwa na kuwekwa katika vigeuzi vya kwanza vya NMEA. Mara moja tunafanya vivyo hivyo kwa ijayo, kwa sababu GPS inapita kila wakati, haitusubiri tuwe tayari, hatuna wakati wa kuichapisha mara moja

Hii ni muhimu sana! Usifanye chochote kabla ya kuhifadhi sentensi zote mbili, vinginevyo ya pili mwishowe itaharibiwa au vibaya tu.

Baada ya kupata sentensi mbili, tunazichapisha kwenye safu kudhibiti ambayo inaenda vizuri.

batili kusomaGPS () {

waziGPS (); wakati (! GPS.newNMEA Imepokelewa ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA1 = GPS.lastNMEA (); wakati (! GPS.newNMEA Imepokelewa ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); NMEA2 = GPS.lastNMEA (); Serial.println (NMEA1); Serial.println (NMEA2); } batili clearGPS () {wakati (! GPS.newNMEA Imepokelewa ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); wakati (! GPS.newNMEA Imepokelewa ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); w wakati (! GPS.newNMEA imepokelewa ()) {c = GPS.read (); } GPS.parse (GPS.lastNMEA ()); }

Kweli, sasa kwa kuwa sisi wote tumewekwa, tunaweza kupitia usanidi ():

Kwanza: tunafungua mawasiliano kwenye Serial 115200 ya Arduino PC na 9600 kwa moduli ya GPS Arduino. Pili: tunatuma maagizo matatu kwa moduli ya GPS: ya kwanza ni kufunga sasisho la antenna juu, ya pili ni kwa kuuliza tu kamba ya RMC na GGA (tutatumia zile tu, ambazo zina habari zote ambazo utahitaji kutoka GPS), amri ya tatu na ya mwisho ni kuweka kiwango cha sasisho kuwa 1HZ, iliyopendekezwa na Adafruit.

Baada ya hapo tunaweka pini D10 kwa OUTPUT, ikiwa, na ikiwa tu, pini ya CS ya modeli yako ya SD ni nyingine isipokuwa D10. Mara baada ya hapo, se set CS kwenye moduli ya SD kwenye chip Chagua pini.

Tunaendesha kazi kusomaGPS () ambazo ni pamoja na cleanGPS ().

Sasa ni wakati wa kuandika kitu kwenye faili! Ikiwa faili tayari iko kwenye kadi ya Sd, ongeza muhuri juu yao. Kwa njia hii sio lazima tufuatilie vipindi au kufuta faili kila wakati. Kwa muhuri wa wakati ulioandikwa ndani ya kazi ya usanidi, tuna hakika kuongeza tu kujitenga kwenye faili mara moja tu kwa kila kikao.

KUMBUKA: Maktaba ya SD ni mbaya sana juu ya kufungua na kufunga faili kila wakati! Weka akilini na uifunge kila wakati! Ili kujifunza kuhusu maktaba fuata kiunga hiki.

Sawa, tumejipanga kupata msingi wa sehemu ya mkondo-na-kumbukumbu ya mchoro.

usanidi batili () {

Serial. Kuanza (115200); Kuanza GPS (9600); // Tuma amri kwa moduli ya GPS GPS.sendCommand ("$ PGCMD, 33, 0 * 6D"); Tuma Agizo la GPS (PMTK_SET_NMEA_OUTPUT_RMCGGA); Tuma Agizo la GPS (PMTK_SET_NMEA_UPDATE_1HZ); kuchelewesha (1000); // tu ikiwa pini ya CS ya moduli yako ya SD haiko kwenye pini D10

pinMode (10, OUTPUT);

Anza SD (chip Chagua); somaGPS (); ikiwa (SD. ipo ("NMEA.txt")) {mySensorData = SD.open ("NMEA.txt", FILE_WRITE); mySensorData.println (""); mySensorData.print ("***"); mySensorData.print (GPS.day); mySensorData.print ("."); mySensorData.print (GPS.mwezi); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print ("-"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData. karibu (); } ikiwa (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.mwezi); mySensorData.print ("."); mySensorData.print (GPS.year); mySensorData.print ("-"); mySensorData.print (GPS.hour); mySensorData.print (":"); mySensorData.print (GPS.minute); mySensorData.print (":"); mySensorData.print (GPS.seconds); mySensorData.println ("***"); mySensorData. karibu (); }}

Sasa tunapata msingi wa mchoro.

Ni rahisi sana, kweli.

Tutasoma mkondo wa GPS na kazi ya kusomaGPS (), kuliko tunavyodhibiti ikiwa tuna urekebishaji sawa na 1, kofia inamaanisha kuwa tumeunganishwa na satelaiti e. Ikiwa tumeipata, tutaandika maandishi yetu kwenye faili. Katika faili ya kwanza "NMEA.txt", tunaandika sentensi mbichi tu. Katika faili ya pili, "GPDData.txt", tunaongeza viwianishi (vilivyobadilishwa na kazi tulizoziona hapo awali) na urefu. Habari hizo zinatosha kukusanya faili ya.kml kuunda njia kwenye Google Earth. Kumbuka kuwa tunafunga faili kila wakati tulipofungua ili tuandike kitu!

kitanzi batili () {

somaGPS (); // Condizione ikiwa che controlla se l'antenna ha segnale. Se si, procede con la scrittura dei dati. ikiwa (GPS.fix == 1) {// Hifadhi data tu ikiwa tutatengeneza mySensorData = SD.open ("NMEA.txt", FILE_WRITE); // Apre il file per le frasi NMEA grezze mySensorData.println (NMEA1); // Scrive prima NMEA sul faili mySensorData.println (NMEA2); // Scrive seconda NMEA sul faili mySensorData. karibu (); // Faili ya Chiude !!

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

// Kubadilisha e scrive la longitudine convLong (); mySensorData.print (deg, 4); // Scrive le uratibu katika faili ya gradi sul mySensorData.print (","); // Scrive una virgola kwa separare na tarehe Serial.print (deg); Serial.print (","); // Kubadilisha e scrive la latitudine convLati (); mySensorData.print (deg, 4); // Scrive le uratibu katika faili ya gradi sul mySensorData.print (","); // Scrive una virgola kwa separare na tarehe Serial.print (deg); Serial.print (","); // Scrive laltaltine mySensorData.print (GPS. Urefu); mySensorData.print (""); Serial.println (GPS. Urefu); mySensorData. karibu (); }}

Sasa kwa kuwa tumekwisha kumaliza, unaweza kupakia mchoro, jenga kifaa na ufurahie!

Kumbuka kuwa unahitaji kuitumia na borad ya GPS inayoangalia angani ili kupata fix = 1, au unaweza kuziba antenna ya nje kwake.

Pia, kumbuka kwamba ikiwa utatengeneza, taa nyekundu inaangaza kila sekunde 15, ikiwa sio, haraka sana (mara moja kila sekunde 2-3).

Ikiwa unataka kujifunza kitu zaidi juu ya sentensi za NMEA, fuata tu hatua inayofuata ya mwongozo huu.

Hatua ya 3: Sentensi za NMEA na Faili ya.kml

Kifaa na mchoro umekamilika, zinafanya kazi vizuri. Kumbuka kwamba kupata suluhisho (kuwa na unganisho na satelaiti) kuzuka kunapaswa kukabili angani.

Taa nyekundu kidogo inaangaza kila sekunde 15 wakati uliporekebisha

Ikiwa unataka kuelewa vizuri sentensi za NMEA, unaweza kusoma zaidi.

Katika mchoro tunatumia sentensi mbili tu, GGA na RMC. Ni sentensi kadhaa tu ambazo moduli ya GPS inapita.

Wacha tuone kilicho kwenye kamba hizo:

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

RMC = Ilipendekezwa Kima cha chini cha sentensi C 123519 = Ratiba iliyochukuliwa saa 12:35:19 UTC A = Hali A = hai au V = Utupu 4807.038, N = Latitudo 48 deg 07.038 'N 01131.000, E = Longitude 11 deg 31.000' E 022.4 = Kasi juu ya ardhi kwenye fundo

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

Mfumo wa Uwekaji Nafasi wa GGA Rekebisha Takwimu 123519 Kurekebisha iliyochukuliwa saa 12:35:19 UTC 4807.038, N Latitude 48 deg 07.038 'N 01131.000, E Longitude 11 deg 31.000' E 1 Kurekebisha ubora: 0 = batili; 1 = Kurekebisha GPS (SPS); 2 = Kurekebisha DGPS; 3 = Kurekebisha PPS; 4 = Halisi ya Kinematic; 5 = Kuelea RTK; 6 = inakadiriwa (hesabu iliyokufa) (kipengele cha 2.3); 7 = Njia ya kuingiza mwongozo; 8 = Njia ya kuiga; 08 Idadi ya setilaiti zinazofuatiliwa 0.9 Kupunguza usawa wa nafasi 545.4, M Urefu, Mita, juu ya maana ya usawa wa bahari 46.9, M Urefu wa geoid (maana ya usawa wa bahari) juu ya WGS84 ellipsoid (uwanja tupu) wakati kwa sekunde tangu sasisho la mwisho la DGPS (uwanja tupu Nambari ya kitambulisho cha kituo cha DGPS * 47 data ya checksum, daima huanza na *

Kama unavyoona, kuna habari zaidi kwamba unahitaji nini hapo. Kutumia maktaba ya Adafruit, unaweza kupiga baadhi yao, kama GPS.latitude au GPS.lat (latitude na lat hemisphere), au GPS.day/month/year/hour/minute/seconds/milliseconds …… Angalia Adafruit tovuti kujua kitu zaidi. Sio wazi sana, lakini kufuata vidokezo kadhaa katika mwongozo wa moduli za GPS, unaweza kupata kile unachohitaji.

Nini tunaweza kufanya na faili ambazo tumepata? Rahisi: tengeneza faili ya kml kuonyesha njia kwenye Google Earth. Ili kuifanya, nakala tu / pita nambari utakayopata kufuatia kiunga hiki (chini ya aya ya Njia), weka kuratibu zako kutoka kwa faili ya GPDData.txt kati ya vitambulisho, hifadhi faili na ugani wa.kml na upakie kwenye Google Earth.

KUMBUKA: Lugha ya ghafi ya.kml ni rahisi, ikiwa tayari unajua lugha ya markup ni nini, weka wakati wako kusoma kiunga kilichopita na nyaraka ndani, inavutia sana!

Kutumia kml ni juu ya kujua lebo na hoja zake. Nilipata mwongozo tu kutoka Google, ile niliyounganisha hapo awali na sehemu muhimu ni kufafanua mtindo kati ya vitambulisho na kuiita na ishara # wakati wa kuandika kuratibu ni wakati.

Faili niliyoongeza katika sehemu hii ni.kml ambayo unaweza kubandika tu kuratibu zako. kumbuka kubandika na syntax hii: longitudo, latitudo, urefu

Ilipendekeza: