Kipokeaji sahihi cha GPS kwenye Arduino. Moduli ya kufanya kazi na onyesho lililounganishwa na kuratibu zilizopokelewa. Jinsi GPS inavyofanya kazi

Je, unahitaji chanzo sahihi cha wakati kutoka GPS? Makala haya yatakuonyesha jinsi ya kutumia moduli ya GPS kupata muda, tarehe na viwianishi, na jinsi ya kuzionyesha kwenye LCD kwa kutumia Arduino.

Ni nini kinachohitajika?

  • kompyuta na Arduino IDE imewekwa;
  • Arduino (tunatumia Arduino Mega);
  • Moduli ya GPS (tunatumia EM-411, wengine wanawezekana kwamba wanaunga mkono itifaki ya NMEA, kwa mfano, VK2828U7G5LF au GY-NEO6MV2);
  • bodi ya mkate, jumpers na 5 kOhm potentiometer;
  • Maktaba ya TinyGPS (kiungo hapa chini).

Utangulizi

Uundaji wa mfumo nafasi ya kimataifa, au GPS, ilianza mapema miaka ya 1970. Kila nchi (Urusi, USA, China, nk) ina yake mwenyewe mfumo mwenyewe, lakini fedha nyingi urambazaji wa satelaiti Mfumo wa Marekani unatumika duniani kote.

Kila setilaiti kwenye mfumo ina saa ya atomiki ambayo inafuatiliwa kila mara na kurekebishwa na NORAD (Kamanda wa Ulinzi wa Anga). Marekani Kaskazini) kila siku.

Kimsingi, mpokeaji hutumia saa yake kupima TOA (wakati wa kuwasili) wa nne ishara za satelaiti. Kulingana na TOA na TOT (wakati wa maambukizi), mpokeaji huhesabu maadili manne ya wakati wa kukimbia (TOF), ambayo hutofautiana kutoka kwa kila mmoja kulingana na umbali kutoka kwa satelaiti hadi kwa mpokeaji. Kisha, kutoka kwa maadili manne ya TOF, mpokeaji huhesabu nafasi yake katika nafasi ya 3D na kupotoka kwa saa yake.

Vipokezi vya GPS vya bei nafuu zaidi vina usahihi wa takriban mita 20 kwa maeneo mengi duniani. Sasa hebu tuone jinsi ya kutengeneza saa yako ya GPS kwa kutumia Arduino.

Vifaa

Moduli yangu ya GPS ina pini 6: GND, Vin, Tx, Rx na GND tena. Pini ya sita haijaunganishwa popote. Pini ya GND imeunganishwa kwenye kesi kwenye Arduino, Vin imeunganishwa kwenye basi ya +5V kwenye Arduino, Tx imeunganishwa kwa pin 10 kwenye Arduino, na pini ya Rx haijaunganishwa popote, kwani hatutatuma ujumbe wowote kwenye moduli ya GPS. . Moduli yangu husambaza data ya setilaiti kwa kutumia kiolesura cha RS-232 kwa 4800 bps, ambacho hupokelewa na Arduino kwenye pini 10.

Chini ni picha Moduli ya GPS:

Moduli ya GPS EM-411

Moduli hutuma kile kinachojulikana kama ujumbe wa NMEA. Hapa unaweza kuona mfano wa ujumbe mmoja wa NMEA na maelezo yake (dondoo kutoka maelezo ya kiufundi):

$GPGGA,161229.487,3723.2475,N,12158.3416,W,1.07,1.0,9.0,M,0000*18

Ugani wa data wa GGA
JinaMfanoVitengoMaelezo
Kitambulisho cha ujumbe$GPGGA Kichwa cha itifaki ya GGA
Wakati wa UTC161229.487 hhmmss.sss (saa za tarakimu mbili, dakika za tarakimu mbili, kisha sekunde hadi elfu)
Latitudo3723.2475
Bendera ya N/SN N - kaskazini, S - kusini
Longitude12158.3416 ddmm.mmmm (nambari mbili za kwanza ni digrii, kisha dakika hadi elfu kumi iliyo karibu)
Bendera ya E/WW E - mashariki, W - magharibi
Kiashiria cha eneo1
  • 0 - eneo halipatikani au si sahihi;
  • 1 - Hali ya GPS SPS, eneo ni sahihi;
  • 2 - GPS tofauti, hali ya SPS, eneo sahihi;
  • 3 - GPS PPS mode, eneo ni sahihi.
Idadi ya satelaiti zilizotumika07 Inatofautiana kutoka 0 hadi 12
HDOP1.0 Uharibifu wa usahihi wa usawa
Urefu ukilinganisha na usawa wa bahari9.0 mita
VitengoMmita
Tofauti ya Geoidal Tofauti kati ya WGS-84 ellipsoid ya dunia na usawa wa bahari (genoid)
VitengoMmita
Umri wa data tofauti ya GPS sekundeNull sehemu wakati DGPS haitumiki
Kitambulisho cha kituo kinachotuma masahihisho tofauti0000
Angalia jumla*18
Mwisho wa ujumbe

Data hii yote inapokelewa na Arduino kupitia pin 10. Maktaba ya TinyGPS inasoma ujumbe wa GPGGA na GPRMC (kwa maelezo ya kina kuhusu GPRMC tazama maelezo ya kiufundi).

Arduino haijaonyeshwa kwenye mchoro. Unganisha pembeni kulingana na miunganisho iliyosainiwa.


Mpango wa GPS saa kwenye arduino

Programu

Nguvu inapotumika, moduli ya GPS huchukua muda kupata eneo sahihi kutoka kwa satelaiti. Wakati eneo linapopokelewa, moduli hutuma ujumbe wa NMEA kwa Arduino. Maktaba ya TinyGPS ina kipengele cha kupata saa na tarehe kutoka kwa ujumbe wa GPRMC. Inaitwa crack_datetime() na huchukua viashiria saba kwa vigeu kama vigezo: mwaka mwaka , mwezi mwezi , siku ya mwezi siku , saa saa , dakika dakika , sekunde pili , na hundredths ya mia ya pili . Simu ya kazi inaonekana kama hii:

GPS.crack_datetime(&mwaka, &mwezi, &siku, &saa, &dakika, &pili, &hundredths);

Kupigia simu chaguo hili la kukokotoa hukurejeshea thamani sahihi katika vijiwezo mradi tu kila kitu kiko sawa na maunzi.

Ili kupata eneo lako, unaweza kupiga simu f_get_position() chaguo la kukokotoa. Kazi hii inachukua kama vigezo viashiria viwili kwa vigeu: latitudo latitudo na longitudo longitudo . Kupigia simu kipengele hiki inaonekana kama hii:

Gps.f_get_position(&latitudo, &longitudo);

Maandishi asilia programu:

#pamoja na #pamoja na #pamoja na #fafanua RXPIN 10 #fafanua TXPIN 9 #fafanua GPSBAUD 4800 #fafanua RS 2 #fafanua EN 3 #fafanua D4 4 #fafanua D5 5 #fafanua D6 6 #fafanua D7 7 TinyGPS gps; SoftwareSerial uart_gps(RXPIN, TXPIN); LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); // Vigeu vya int sekunde; int timeoffset = 1; // Mtumiaji lazima abadilishe kitengo hadi eneo la saa linalofaa. Katika mfano tunatumia zamu ya saa +1. // Tamko la kazi. getgps utupu (TinyGPS &gps); // Chaguo za kusanidi - huendesha tu wakati usanidi wa utupu umewezeshwa() ( Serial.begin(115200); // Zindua kiolesura cha serial kwa utatuzi uart_gps.begin(GPSBAUD); // Anzisha kipokea UART cha GPS lcd.begin(16,2); // tamko la LCD lcd.print("saa ya GPS"); // Ucheleweshaji wa ujumbe wa kukaribisha (1000); // Subiri sekunde moja lcd.clear(); // Futa LCD) // Kitanzi programu kuu- void loop() inaendeshwa kila wakati ( while(uart_gps.available()) ( int c = uart_gps.read(); if(gps.encode(c)) ( getgps(gps); ) ) ) /* * Chaguo hili la kukokotoa hupokea data kutoka kwa moduli ya GPS * na kuzionyesha kwenye LCD */ void getgps(TinyGPS &gps) ( int year; latitudo ya kuelea, longitudo; mwezi wa baiti, siku, saa, dakika, sekunde, mia; gps.f_get_position(&latitudo, &longitudo ); gps .crack_datetime(&mwaka, &mwezi, &siku, &saa, &dakika, &pili, &hundredths); saa = saa + timeoffset; lcd.clear();//lcd.setCursor(0, 0); lcd.print("Muda : "); ikiwa (saa<= 9) { lcd.print("0"); lcd.print(hour, DEC); } else { lcd.print(hour, DEC); } lcd.print(":"); if (minute <=9) { lcd.print("0"); lcd.print(minute, DEC); } else { lcd.print(minute, DEC); } lcd.print(":"); if (second <= 9) { lcd.print("0"); lcd.print(second, DEC); } else { lcd.print(second, DEC); } lcd.setCursor(0,1); lcd.print("Date: "); if (day <= 9) { lcd.print("0"); lcd.print(day, DEC); } else { lcd.print(day, DEC); } lcd.print("-"); if (month <= 9) { lcd.print(month, DEC); } else { lcd.print(month, DEC); } lcd.print("-"); lcd.print(year, DEC); delay(2000); lcd.clear(); lcd.print("Lat: "); lcd.print(latitude, DEC); lcd.setCursor(0,1); lcd.print("Lon: "); lcd.print(longitude, DEC); delay(2000); // Debugging purpose only. Serial.print(latitude, DEC); Serial.print(" - "); Serial.println(longitude, DEC); }

Moduli za GPS huruhusu kifaa chako kinachojiendesha kufuatilia viwianishi vyake na vigezo vyake vya kusogea. Utendaji huu ni muhimu kwa kila aina ya vifuatiliaji, kola mahiri na mikoba. Katika makala hii, tulijaribu muhtasari mfupi wa moduli za GPS na programu za kufanya kazi na GPS kwenye kompyuta. Kuunganishwa kwa Arduino kunazingatiwa kwa kutumia mfano wa moduli maarufu zaidi ya NEO 6.0

Kabla ya kuanza kuunganisha GPS kwa Arduino, unahitaji kujifunza jinsi ya kujaribu moduli yenyewe. Ili kufanya hivyo, kwa hakika tutahitaji programu ambayo inaruhusu sisi kuonyesha hali ya kifaa, idadi ya satelaiti zilizokamatwa na taarifa nyingine za mtihani. Tulijaribu kuweka pamoja programu maarufu zaidi ya kufanya kazi na GPS kwenye kompyuta.

Kituo cha U

Mpango wa u-center hutumiwa kufanya kazi na vipokezi vya GNSS kutoka U-Blox. Kwa kutumia programu hii, unaweza kupima usahihi wa nafasi, kubadilisha usanidi wa mpokeaji na kufanya uchunguzi wa jumla, kuchakata data iliyopokelewa na kuionyesha kwa wakati halisi. Mpokeaji hupokea kuratibu kwa kutumia GPS, GLONASS. Taarifa iliyopatikana inaweza kusafirishwa na kuonyeshwa katika Ramani za Google, Google Earth. Mpango huo utapata kuunda chati mbili-dimensional, histograms na aina nyingine za grafu. u-center inaweza kutumika wakati wa kufanya kazi na wapokeaji wengi.

Vipengele vya programu ya U-Center:

  • Kufanya kazi na Windows;
  • Kusoma data ya NMEA, SiRF, UBX;
  • Pato la data iliyopokelewa kwa namna ya maandishi na grafu;
  • Kurekodi data na kucheza tena;
  • Udhibiti kamili wa moduli ya GPS;
  • Uwezekano wa kubadilisha usanidi wa moduli ya GPS;
  • Kuandika usanidi mpya kwa moduli;
  • Kuandika usanidi kwa faili katika umbizo la .txt;
  • Sasisho la firmware ya moduli;
  • Uwezekano wa kuanza kwa baridi, joto na moto wa moduli.

Programu inakuwezesha kutathmini utendaji wa mpokeaji, kuchambua utendaji wake na kuweka mipangilio yake. Mbali na U-Center, programu nyingine zinaweza kutumika, kwa mfano, Visual GPS, Time Tools GPS Clock na wengine.

GPS inayoonekana

Mpango huu unatumika kuonyesha data ya GPS kwa kutumia itifaki ya NMEA 0183 katika umbo la picha. Programu hukuruhusu kuandika logi ya data ya GPS kwenye faili. Kuna njia mbili za kufanya kazi katika programu - ya kwanza, Visual GPS inawasiliana na mpokeaji wa GPS, na kwa pili, Visual GPS inasoma usomaji wa NMEA kutoka kwa faili. Programu ina madirisha 4 kuu - Ubora wa Mawimbi, Urambazaji, Utafiti, Azimuth na Mwinuko.

Saa ya GPS ya Zana za Wakati

Programu hii inafanya kazi kwenye Windows na vituo vyovyote vya kazi, inakagua wakati kutoka kwa kipokeaji saa cha NMEA GPS ambacho kimeunganishwa kwenye kompyuta na hukuruhusu kusawazisha wakati kwenye PC. Taarifa kuhusu saa, tarehe, hali ya GPS iliyopokelewa kutoka kwa mpokeaji huonyeshwa. Ubaya wa programu ni kutowezekana kwa uamuzi sahihi wa wakati, kwani vifaa vya GPS havina pigo la pili kwa bandari ya serial ya kompyuta.

GPS TrimbleStudio

Programu hutumiwa kufanya kazi na kipokeaji cha Copernicus kwenye Windows. Programu inaonyesha data iliyopokelewa ya urambazaji. Viwianishi vilivyopatikana vinaweza kuchaguliwa kwenye Ramani za Google, Microsoft Visual Earth. Mipangilio yote ya kipokeaji kilichosanidiwa inaweza kuhifadhiwa katika faili ya usanidi

Fugawi

Programu inatumika kwa kupanga njia na urambazaji wa GPS wa wakati halisi. Programu hukuruhusu kurekodi na kuhifadhi njia na vidokezo kwenye ramani. Urambazaji unafanywa juu ya ardhi na juu ya maji na angani. Mpango huo unatumia aina mbalimbali za ramani za kidijitali - ramani za topografia, viwango vya NOAA RNC, nakala zilizochanganuliwa za ramani za karatasi, Ramani za Mtaa za Fugawi.

Ramani ya Dunia ya 3D

Katika mpango huu unaweza kuona dunia katika vipimo vitatu. Inatumika kama kitabu cha kumbukumbu cha kijiografia ambacho unaweza kupata habari kuhusu nchi 269 na makazi elfu thelathini, kupima kati ya pointi mbili, na kucheza rekodi za sauti.

Mapitio ya moduli za GPS za Arduino

Kuna idadi kubwa ya moduli tofauti za GPS za kufanya kazi na Arduino. Kwa msaada wao, unaweza kuamua eneo halisi (kuratibu za kijiografia, urefu juu ya usawa wa bahari), kasi ya harakati, tarehe, wakati.

Sehemu ya EM-411. Kifaa kinatokana na chip ya juu ya utendaji ya SiRF Star III, ambayo ina matumizi ya chini ya nguvu. Moduli ina kiasi kikubwa cha kumbukumbu ya kuhifadhi data ya almanac na inasaidia itifaki ya kawaida ya NMEA 0183. Wakati wa kuanza kwa baridi ni karibu sekunde 45.

VK2828U7G5LF. Moduli hii inategemea chip ya Ublox UBX-G7020-KT. Kwa msaada wake unaweza kupata kuratibu kwa kutumia GPS na GLONASS. Mpokeaji ana kumbukumbu iliyojengwa ambayo mipangilio inaweza kuhifadhiwa. Moduli ina antenna ya kauri iliyojengwa na inafanya kazi kwa kutumia itifaki ya NMEA 0183. Voltage ya ugavi wa moduli ni 3.3-5V.

GPS ya SKM53. Moja ya moduli za bei nafuu na matumizi ya chini ya sasa. Wakati wa kuanza kwa baridi kali ni takriban sekunde 36, wakati wa kuanza moto ni sekunde 1. Chaneli 66 zinatumika kuweka nafasi na chaneli 22 za ufuatiliaji. Moduli ina antena ya GPS iliyojengewa ndani; kifaa hutoa utendaji wa juu wa kusogeza chini ya hali mbalimbali za mwonekano.

Neo-6M GPS. Mpokeaji hutengenezwa na u-blox. Moduli hii hutumia teknolojia ya hivi punde ili kutoa maelezo sahihi ya eneo. Ugavi wa moduli voltage 3-5V. Mstari wa vifaa unawakilishwa na aina G, Q, M, P, V na T na sifa zao za kipekee. Wakati wa kuanza kwa baridi ni kama sekunde 27.

locosys 1513. Moduli hii inasaidia GPS, GLONASS, Galileo, QZSS, SBAS. Kulingana na Chip MediaTek MT333, ambayo ina matumizi ya chini ya nguvu, unyeti wa juu na uendeshaji imara katika hali mbalimbali. Mpokeaji ana usaidizi wa itifaki ya udhibiti wa maandishi. Wakati wa kuanza kwa baridi ni takriban sekunde 38.

Arduino GPS moduli GY-NEO6MV2

Moduli hutumia itifaki ya kawaida ya NMEA 0183 kwa mawasiliano na vipokezi vya GPS. Mpokeaji ni bodi ambayo moduli ya NEO-6M-0-001, utulivu wa voltage, kumbukumbu isiyo na tete, LED na betri ziko.

Vipimo vya moduli:

  • Ugavi wa voltage 3.3-5V;
  • Kiolesura cha UART 9600 8N1 3.3V;
  • itifaki ya NMEA;
  • Uzito wa moduli 18 g;
  • Upatikanaji wa EEPROM kwa mipangilio ya kuokoa;
  • Upatikanaji wa betri iliyojengwa;
  • Uwezekano wa kuunganisha antenna kwenye kiunganishi cha U-FL;
  • Wakati wa kuanza kwa baridi ni takriban sekunde 27, wakati wa kuanza moto ni sekunde 1;
  • Upatikanaji wa njia zaidi ya 50 za kuweka nafasi;
  • Kiwango cha upya 5 Hz;
  • Joto la kufanya kazi kutoka -40C hadi 85C.

Moduli hutumiwa sana kwa copters, kuamua nafasi ya sasa ya vitu na magari ya polepole. Viwianishi vilivyopatikana vinaweza kupakiwa kwenye Ramani za Google, Google Earth na zingine.

Baada ya kuanza kwa baridi kwa moduli, upakuaji wa almanac huanza. Wakati wa kupakia sio zaidi ya dakika 15, kulingana na hali na idadi ya satelaiti katika eneo la mwonekano.

Pinout: GND (ardhi), RX (UART data pembejeo), TX (UART data pato), Vcc - 3.3V hadi 5V umeme.

Ili kuunganisha utahitaji moduli ya GY-NEO6MV2, ubao wa Arduino, waya, na antena ya GPS. Bandika miunganisho: VCC hadi 5V, GND hadi GND, RX ili kubandika 9 kwenye Arduino, TX ili kubandika 10. Kisha Arduino inahitaji kushikamana na kompyuta kupitia USB.

Kufanya kazi, utahitaji kuunganisha maktaba kadhaa. SoftwareSerial - Inahitajika kupanua utendakazi wa maunzi ya kifaa na kushughulikia kazi ya mawasiliano ya mfululizo. Maktaba ya TinyGPS hutumiwa kubadilisha ujumbe wa NMEA kuwa umbizo rahisi kusoma.

Kuangalia uendeshaji kupitia programu ya U-Center

Kama ilivyoelezwa hapo juu, moduli imetengenezwa na u-blox, kwa hivyo mpango wa U-Center hutumiwa kusanidi mpokeaji.

Inapounganishwa kwenye UART, mpokeaji hutuma ujumbe kwa kutumia itifaki ya NMEA mara moja kwa sekunde. Kwa kutumia programu, unaweza kubinafsisha ujumbe uliotumwa.

Ili kusanidi moduli, unahitaji kuiunganisha kupitia kibadilishaji cha USB-UART(COM-UART). Unaweza kusanidi muunganisho kwa kutumia menyu ya Mpokeaji-Port. Mara tu uunganisho umeanzishwa, kiashiria cha kijani kitawaka. Mpokeaji ataanza kuanzisha miunganisho na satelaiti, baada ya hapo kuratibu za sasa, wakati na habari zingine zitaonekana kwenye skrini. Ujumbe wote huonekana kwenye dirisha la Ujumbe. Katika menyu ya Tazama - Ujumbe unaweza kuchagua ujumbe ambao utatumwa kwa kidhibiti kidogo. Kulingana na kazi iliyopo, unaweza kupunguza idadi ya ujumbe uliotumwa, ambayo itaongeza kasi ya usindikaji wa data na kuwezesha algorithm ya kuchanganua ujumbe na mtawala.

Ikiwa mawasiliano na satelaiti haijaanzishwa, unahitaji kuangalia ikiwa antenna imeunganishwa. Kisha unahitaji kuangalia voltage ya usambazaji, inapaswa kuwa 5V. Ikiwa uunganisho bado haujaanzishwa, unaweza kuweka moduli karibu na dirisha au kwenda nje kwenye eneo wazi.

Unaweza kutazama data iliyotumwa kupitia menyu ya Tazama.

Ujumbe wote huanza na alama ya $, herufi zifuatazo ni vitambulisho vya ujumbe. GP ni mfumo wa kimataifa, barua 3 zifuatazo zinaonyesha ni habari gani iliyomo.

RMC - habari ndogo zaidi ya urambazaji (wakati, tarehe, kuratibu, kasi, mwelekeo).

GGA - taarifa ya nafasi iliyonaswa. Wakati, kuratibu, urefu, hali ya eneo, idadi ya satelaiti ni kumbukumbu.

Inaangalia operesheni kupitia Arduino IDE

Unaweza pia kufanya kazi na moduli kupitia mazingira ya kawaida ya ukuzaji wa IDE ya Arduino. Baada ya kuunganisha moduli kwenye ubao, unahitaji kupakia mchoro na uangalie matokeo. Ikiwa seti isiyo ya kawaida ya wahusika inaonekana kwenye kufuatilia, unahitaji kurekebisha kasi ya interface ya Arduino na kompyuta na kasi ya interface ya moduli na mtawala.

Mchoro wa kuonyesha data ya eneo.

#pamoja na #pamoja na // kuunganisha maktaba ya GPS ya TinyGPS muhimu kwa uendeshaji; SoftwareSerial gpsSerial(8, 9); // nambari za pini ambazo moduli imeunganishwa (RX, TX) bool newdata = uongo; kuanza kwa muda mrefu bila kusainiwa; mrefu lat, lon; muda mrefu bila saini, tarehe; usanidi batili())( gpsSerial.begin(9600); // kuweka kiwango cha ubadilishaji na kipokeaji Serial.begin(9600); Serial.println("Inasubiri data ya GPS..."); ) kitanzi batili()) ( ikiwa ( millis () - anza > 1000) //weka ucheleweshaji wa sekunde moja kati ya masasisho ya data ( newdata = readgps(); ikiwa (data mpya) ( start = millis(); gps.get_position(&lat, &lon); gps. get_datetime(&date, &time); Serial.print("Lat: "); Serial.print(lat); Serial.print(" Long: "); Serial.print(lon); Serial.print(" Tarehe: ") ; Serial.print (tarehe); Serial.print(" Muda: "); Serial.println(time); )) ) // angalia upatikanaji wa data bool readgps() ( huku (gpsSerial.available()) ( int b = gpsSerial.read( ); //kuna hitilafu katika maktaba ya TinyGPS: data iliyo na \r na \n haijachakatwa if("\r" != b) ( if (gps.encode(b)) inarudi kweli ;)) kurudi uwongo;)

Baada ya msimbo kupakiwa, unahitaji kusubiri sekunde chache (wakati wa kuanza kwa baridi) ili kifaa kiweze kuamua eneo na kuanza kuonyesha kuratibu. Mara tu kifaa kinapoanza kufanya kazi, LED kwenye ubao itaangaza.

Data ya latitudo na longitudo itaonekana kwenye kichunguzi cha mlango. Tarehe na saa ya sasa ya GMT pia itarejeshwa. Unaweza kuweka eneo lako la saa wewe mwenyewe - hii inafanywa kwa mstari Serial.print(static_cast(saa+8));

Hitimisho

Kama unavyoona, kuanza kutumia GPS hakuhitaji upotoshaji wowote mgumu sana. Moduli zilizotengenezwa tayari au ngao zinazoingiliana na Arduino kupitia UART zitasaidia. Ili kufanya michoro iwe rahisi, unaweza kutumia maktaba zilizopangwa tayari. Kwa kuongeza, moduli yoyote ya GPS inaweza kujaribiwa bila Arduino kwa kuunganisha kwenye kompyuta na kutumia programu maalum. Tumetoa muhtasari wa programu maarufu zaidi katika nakala hii.

GPS ni nini?

Global Positioning System (GPS) ni mfumo wa urambazaji wa setilaiti unaojumuisha angalau setilaiti 24. GPS inafanya kazi katika hali yoyote ya hali ya hewa popote duniani saa 24 kwa siku bila usajili au ada za usakinishaji. Mfumo wa GPS ni bora kwa kuamua eneo katika miradi ya redio isiyo ya kawaida kwa kutumia Arduino.

Je, GPS inafanya kazi vipi?

Satelaiti za GPS huzunguka Dunia mara mbili kwa siku katika obiti sahihi. Kila setilaiti hutuma mawimbi ya kipekee na vigezo vya obiti vinavyoruhusu vifaa vya GPS kubainisha na kukokotoa eneo halisi la setilaiti. Vipokezi vya GPS hutumia maelezo haya na utatuzi kukokotoa eneo halisi la mtumiaji. Kimsingi, kipokezi cha GPS hupima umbali wa kila setilaiti kulingana na muda unaochukua kupokea mawimbi yanayotumwa. Wakati wa kupima umbali kutoka kwa satelaiti nyingi, mpokeaji anaweza kuamua nafasi ya mtumiaji na kuionyesha.


Ili kukokotoa nafasi yako ya 2D (latitudo na longitudo) na harakati, kipokezi cha GPS lazima kipokee mawimbi kutoka kwa angalau satelaiti 3. Kwa satelaiti 4 au zaidi, kipokezi kinaweza kubainisha nafasi yako ya 3D (latitudo, longitudo na mwinuko). Kwa kawaida, kipokezi cha GPS kitafuatilia setilaiti 8 au zaidi, lakini hii inategemea muda wa siku na mahali ulipo duniani. Mara tu msimamo wako utakapobainishwa, moduli ya GPS inaweza kukokotoa maelezo mengine kama vile kasi, umbali hadi unakoenda, n.k.


Setilaiti za GPS husambaza angalau mawimbi 2 ya redio yenye nguvu kidogo. Ishara husafiri kwa mwonekano, kumaanisha kuwa zitapita kwenye mawingu, glasi na plastiki, lakini hazitapitia vitu vingi vikali kama vile majengo na milima. Hata hivyo, wapokeaji wa kisasa ni nyeti zaidi na wanaweza kufuatilia ishara hizi ndani ya nyumba. Ishara ya GPS ina aina 3 tofauti za habari. Kwanza, kuna msimbo wa pseudo-random, yaani, msimbo wa kitambulisho unaobainisha ni setilaiti gani inayotuma taarifa. Pili, data ya ephemeris ni muhimu kuamua eneo la satelaiti na hutoa habari muhimu kuhusu hali ya satelaiti, tarehe na wakati wa sasa. Tatu, data ya almanaki, ambayo huambia kipokezi cha GPS mahali ambapo kila setilaiti ya GPS inapaswa kuwa wakati fulani wakati wa mchana, na kuonyesha maelezo ya obiti ya setilaiti hiyo na kila setilaiti nyingine kwenye mfumo.

Kuunganisha moduli ya GPS ya NEO-6m kwa Arduino

Kuongeza uwezo wa GPS kwenye mradi wa Arduino ni rahisi sana. Unahitaji tu kuunganisha moduli ya GPS, kwa mfano, NEO-6m, kwenye bodi ya Arduino. Mchoro wa uunganisho umeonyeshwa hapa chini. Kwa mapokezi bora ya ishara, ni vyema kuunganisha antenna kwenye moduli ya GPS.


Msimbo wa mwingiliano kati ya Arduino na moduli ya GPS ya NEO-6m

Ifuatayo ni msimbo (mchoro) unaokuwezesha kupokea data kutoka kwa moduli ya GPS na kuionyesha kwenye skrini ya kuonyesha ya LCD.


#pamoja na #pamoja na #pamoja na kuelea lat = 28.5458,lon = 77.1703; // tengeneza kigezo cha latitudo na longitudo SoftwareSerial gpsSerial(3,4); // mistari RX, TX LiquidCrystal lcd(A0,A1,A2,A3,A4,A5); GPS GPS ndogo; // unda usanidi wa utupu wa kitu cha GPS())( Serial.begin(9600); // mlango wa serial //Serial.println("Mawimbi ya GPS Iliyopokewa:"); gpsSerial.begin(9600); // unganisha GPS sensor lcd.begin(16,2); ) kitanzi utupu())( huku(gpsSerial.available())( // angalia data ya gps kama(gps.encode(gpsSerial.read())) // kusimbua data ya gps ( gps. f_get_position(&lat,&lon); // pata latitudo na longitudo // nafasi ya kuonyesha lcd.clear(); lcd.setCursor(1,0); lcd.print("GPS Signal"); //Serial.print( "Nafasi : "); //Serial.print("Latitudo:"); //Serial.print(lat,6); //Serial.print(";"); //Serial.print("Longitudo:" ); //Serial.println(lon,6); lcd.setCursor(1,0); lcd.print("LAT:"); lcd.setCursor(5,0); lcd.print(lat); // Chapisha mfululizo(lat); //Serial.print(" "); lcd.setCursor(0,1); lcd.print(",LON:"); lcd.setCursor(5,1); lcd.print( lon) ; ) ) Latitudo ya kamba = Kamba(lat,6); Longitudo ya kamba = Kamba(lon,6); Serial.println(latitudo+";"+longitudo); kuchelewa(1000);)

Baada ya majaribio kadhaa na Arduino, niliamua kufanya tracker rahisi na isiyo ya gharama kubwa sana ya GPS na kuratibu zilizotumwa kupitia GPRS kwa seva.
Imetumika Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS moduli (kwa kutuma taarifa kwa seva), GPS receiver SKM53 GPS.

Kila kitu kilinunuliwa kwenye ebay.com, kwa jumla ya rubles 1500 (kuhusu rubles 500 kwa arduino, kidogo kidogo kwa moduli ya GSM, kidogo zaidi kwa GPS).

Mpokeaji wa GPS

Kwanza unahitaji kuelewa jinsi ya kufanya kazi na GPS. Moduli iliyochaguliwa ni moja ya gharama nafuu na rahisi zaidi. Walakini, mtengenezaji anaahidi betri kuokoa data ya satelaiti. Kulingana na hifadhidata, kuanza kwa baridi kunapaswa kuchukua sekunde 36, hata hivyo, katika hali yangu (sakafu ya 10 kutoka kwa windowsill, hakuna majengo karibu) ilichukua kama dakika 20. Mwanzo unaofuata, hata hivyo, tayari ni dakika 2.

Kigezo muhimu cha vifaa vilivyounganishwa na Arduino ni matumizi ya nguvu. Ukipakia kigeuzi cha Arduino kupita kiasi, kinaweza kuungua. Kwa mpokeaji anayetumiwa, matumizi ya juu ya nguvu ni 45mA @ 3.3v. Kwa nini vipimo vinapaswa kuonyesha nguvu ya sasa kwenye voltage nyingine isipokuwa ile inayohitajika (5V) ni siri kwangu. Walakini, kibadilishaji cha Arduino kitahimili 45 mA.

Uhusiano
GPS haidhibitiwi, ingawa ina pini ya RX. Kwa madhumuni gani haijulikani. Jambo kuu unaloweza kufanya na mpokeaji huyu ni kusoma data kupitia itifaki ya NMEA kutoka kwa pini ya TX. Ngazi - 5V, kwa Arduino tu, kasi - 9600 baud. Ninaunganisha VIN na VCC ya arduino, GND hadi GND, TX hadi RX ya mfululizo unaolingana. Nilisoma data kwanza kwa mikono, kisha kwa kutumia maktaba ya TinyGPS. Kwa kushangaza, kila kitu kinasomeka. Baada ya kubadili Uno, nilipaswa kutumia SoftwareSerial, na kisha matatizo yakaanza - baadhi ya wahusika wa ujumbe walipotea. Hii sio muhimu sana, kwani TinyGPS hukata ujumbe batili, lakini haipendezi kabisa: unaweza kusahau kuhusu masafa ya 1Hz.

Ujumbe wa haraka kuhusu SoftwareSerial: hakuna bandari za maunzi kwenye Uno (zaidi ya ile iliyounganishwa kwa USB Serial), kwa hivyo lazima utumie programu. Kwa hivyo, inaweza tu kupokea data kwenye pini ambayo bodi inasaidia kukatiza. Kwa upande wa Uno, hizi ni 2 na 3. Zaidi ya hayo, bandari moja tu hiyo inaweza kupokea data kwa wakati mmoja.

Hivi ndivyo "benchi ya mtihani" inaonekana.

Kipokeaji/kisambazaji cha GSM


Sasa inakuja sehemu ya kuvutia zaidi. Moduli ya GSM - SIM900. Inasaidia GSM na GPRS. Wala EDGE, wala haswa 3G, hazihimiliwi. Kwa kusambaza data ya kuratibu, hii labda ni nzuri - hakutakuwa na ucheleweshaji au matatizo wakati wa kubadili kati ya modes, pamoja na GPRS sasa inapatikana karibu kila mahali. Walakini, kwa programu zingine ngumu zaidi hii inaweza kuwa haitoshi.

Uhusiano
Moduli pia inadhibitiwa kupitia bandari ya serial, na kiwango sawa - 5V. Na hapa tutahitaji RX na TX. Moduli ni ngao, ambayo ni, imewekwa kwenye Arduino. Kwa kuongeza, inaendana na mega na uno. Kasi ya chaguo-msingi ni 115200.

Tunakusanya kwenye Mega, na hapa mshangao wa kwanza usio na furaha unatungojea: pini ya TX ya moduli iko kwenye pini ya 7 ya Mega. Vikwazo hazipatikani kwenye pini ya 7 ya mega, ambayo ina maana utakuwa na kuunganisha pini ya 7, tuseme, kwa pini ya 6, ambayo usumbufu unawezekana. Kwa hivyo, tutapoteza pini moja ya Arduino. Kweli, kwa mega sio ya kutisha sana - baada ya yote, kuna pini za kutosha. Lakini kwa Uno hii tayari ni ngumu zaidi (nakukumbusha kuwa kuna pini 2 tu zinazounga mkono usumbufu - 2 na 3). Kama suluhisho la shida hii, tunaweza kupendekeza sio kusanikisha moduli kwenye Arduino, lakini kuiunganisha na waya. Basi unaweza kutumia Serial1.

Baada ya kuunganisha, tunajaribu "kuzungumza" na moduli (usisahau kuiwasha). Tunachagua kasi ya bandari - 115200, na ni nzuri ikiwa bandari zote za serial zilizojengwa (4 kwenye mega, 1 kwenye uno) na bandari zote za programu zinafanya kazi kwa kasi sawa. Kwa njia hii unaweza kufikia uhamishaji wa data thabiti zaidi. Sijui kwanini, ingawa naweza kukisia.

Kwa hivyo, tunaandika msimbo wa awali wa kusambaza data kati ya bandari za mfululizo, kutuma Atz, na kupokea ukimya katika jibu. Nini kilitokea? Ah, kesi nyeti. ATZ, tuko sawa. Hurray, moduli inaweza kutusikia. Je, unapaswa kutupa simu kwa kutaka kujua? ATD +7499... Simu ya mezani inalia, moshi unatoka kwenye arduino, kompyuta ya mkononi inazimika. Kigeuzi cha Arduino kiliwaka. Ilikuwa wazo mbaya kuilisha volts 19, ingawa imeandikwa kwamba inaweza kufanya kazi kutoka 6 hadi 20V, 7-12V inapendekezwa. Hifadhidata ya moduli ya GSM haisemi popote kuhusu matumizi ya nguvu chini ya mzigo. Naam, Mega huenda kwenye ghala la vipuri. Kwa pumzi iliyopunguzwa, ninawasha kompyuta ya mkononi, ambayo ilipokea +19V kupitia mstari wa +5V kutoka USB. Inafanya kazi, na hata USB haikuchoma. Asante Lenovo kwa kutulinda.

Baada ya kibadilishaji kuchomwa moto, nilitafuta matumizi ya sasa. Kwa hiyo, kilele - 2A, kawaida - 0.5A. Hii ni wazi zaidi ya uwezo wa kibadilishaji cha Arduino. Inahitaji chakula tofauti.

Kupanga programu
Moduli hutoa uwezo mkubwa wa kuhamisha data. Kuanzia simu za sauti na SMS na kuishia na GPRS yenyewe. Aidha, kwa mwisho inawezekana kutekeleza ombi la HTTP kwa kutumia amri za AT. Utalazimika kutuma kadhaa, lakini inafaa: hutaki kuunda ombi kwa mikono. Kuna nuances kadhaa kwa kufungua chaneli ya upitishaji data kupitia GPRS - kumbuka AT+CGDCONT=1 ya kawaida, "IP", "apn"? Kwa hiyo, kitu kimoja kinahitajika hapa, lakini ujanja zaidi kidogo.

Ili kupata ukurasa katika URL maalum, unahitaji kutuma amri zifuatazo:
AT+SAPBR=1,1 // Fungua mtoa huduma (Mtoa huduma) AT+SAPBR=3,1,"CONTYPE","GPRS" //aina ya muunganisho - GPRS AT+SAPBR=3,1,"APN","internet" //APN, kwa Megafoni - mtandao AT+HTTPINIT //Anzisha HTTP AT+HTTPPARA="CID",1 //Kitambulisho cha Mtoa huduma ili kutumia. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //URL halisi, baada ya sprintf na viwianishi AT+HTTPACTION=0 // Omba data kwa kutumia mbinu ya GET //subiri majibu AT+HTTPTERM //stop HTTP

Kama matokeo, ikiwa kuna muunganisho, tutapokea jibu kutoka kwa seva. Hiyo ni, kwa kweli, tunajua jinsi ya kutuma data ya kuratibu ikiwa seva itaipokea kupitia GET.

Lishe
Kwa kuwa kuwezesha moduli ya GSM kutoka kwa kibadilishaji cha Arduino, kama nilivyogundua, ni wazo mbaya, iliamuliwa kununua kibadilishaji cha 12v->5v, 3A kwenye ebay hiyo hiyo. Walakini, moduli haipendi usambazaji wa umeme wa 5V. Hebu tuende kwa udukuzi: unganisha 5V kwa pini ambayo 5V inatoka kwa arduino. Kisha kibadilishaji kilichojengwa cha moduli (yenye nguvu zaidi kuliko kibadilishaji cha Arduino, MIC 29302WU) kitafanya kutoka 5V kile moduli inahitaji.

Seva

Seva iliandika ya kwanza - kuhifadhi kuratibu na kuchora kwenye Yandex.maps. Katika siku zijazo, inawezekana kuongeza vipengele mbalimbali, ikiwa ni pamoja na usaidizi kwa watumiaji wengi, hali ya "silaha/silaha", hali ya mifumo ya gari (kuwasha, taa za mbele, n.k.), na ikiwezekana hata udhibiti wa mifumo ya gari. Kwa kweli, kwa msaada unaofaa kwa tracker, ambayo inabadilika vizuri kuwa mfumo kamili wa kengele.

Vipimo vya shamba

Hivi ndivyo kifaa kilichokusanyika kinavyoonekana, bila kesi:

Baada ya kusanikisha kibadilishaji cha nguvu na kuiweka kwenye kesi kutoka kwa modem ya DSL iliyokufa, mfumo unaonekana kama hii:

Niliuza waya na kuondoa anwani kadhaa kutoka kwa vizuizi vya Arduino. Wanaonekana kama hii:

Niliunganisha 12V kwenye gari, nikaendesha karibu na Moscow, na nikapata wimbo:


Pointi za wimbo ziko mbali sana kutoka kwa kila mmoja. Sababu ni kwamba kutuma data kupitia GPRS inachukua muda mrefu, na wakati huu kuratibu hazijasomwa. Hili ni kosa la programu. Inatibiwa, kwanza, kwa kutuma mara moja pakiti ya kuratibu kwa muda, na pili, kwa kufanya kazi kwa asynchronously na moduli ya GPRS.

Wakati wa kutafuta satelaiti kwenye kiti cha abiria cha gari ni dakika chache.

hitimisho

Kuunda kifuatiliaji cha GPS kwenye Arduino kwa mikono yako mwenyewe inawezekana, ingawa sio kazi ndogo. Swali kuu sasa ni jinsi ya kujificha kifaa kwenye gari ili isiweze kuathiriwa na mambo mabaya (maji, joto), haijafunikwa na chuma (GPS na GPRS itahifadhiwa) na haionekani hasa. Kwa sasa iko tu kwenye cabin na inaunganisha kwenye tundu nyepesi ya sigara.

Kweli, tunahitaji pia kusahihisha nambari kwa wimbo laini, ingawa tracker tayari hufanya kazi kuu.

Vifaa vilivyotumika

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 kulingana na GSM/GPRS Shield
  • Kigeuzi cha DC-DC 12v->5v 3A

Mfumo wa GPS wa kuweka nafasi duniani tayari umekuwa sehemu ya maisha yetu. Leo ni vigumu kufikiria simu ya mkononi bila moduli ya GPS iliyojengwa. Mfumo huu wa urambazaji wa satelaiti hukuruhusu kufuatilia vitu vyovyote, kuamua kuratibu zao na kasi ya harakati. Sasa GPS inapatikana sio tu kwa kampuni zinazounda vifaa vinavyolingana, lakini pia kwa wafadhili wa kawaida wa redio ambao tayari wanatumia bodi maarufu za Arduino kwa uwezo wao kamili. Nyenzo hii itajadili kuunganisha kifuatiliaji kidogo cha GPS kwenye ubao wa Arduino Pro Mini. Kifuatiliaji cha PG03 MiniGPS kinatumika kama somo la majaribio.



Mfuatiliaji huu, pamoja na kuratibu za moja kwa moja za kijiografia, inaonyesha mwelekeo wa harakati, umbali uliosafiri na kasi ya harakati. Kwa bahati mbaya, hairekodi habari, kwa hivyo kwa kuiunganisha kwenye Arduino, unaweza kufikia data hii na kufanya chochote unachotaka nayo.


Kwanza, tracker inahitaji kutenganishwa. Chini ni picha za kifuatiliaji cha GPS kilichotenganishwa.




Moyo wa kifuatiliaji ni chipu ya GPS ya Venus638FLP. Pini yake ya 44 ni pato la kiolesura cha UART (TxD). Unaweza kuuza waya moja kwa moja kwenye pini hii, au unaweza kupata pini ya majaribio kwenye ubao ambayo pini hii pia imeunganishwa. Chini ni picha za maeneo ya pini ya microcircuit na jinsi ya kuunganisha kwenye pini inayotakiwa.





Sasa hebu tuchukue ubao wa Arduino Pro Mini na moduli ya kadi ya SD ili kurekodi data ya itifaki ya NMEA. Mchoro wa unganisho wa Arduino Pro Mini na moduli ya kadi ya SD ni kama ifuatavyo.



Kuunganisha pini za moduli za kadi za SD:


GND hadi GND
VCC hadi 3.3V
MISO kubandika 12
MOSI kubandika 11
SCK ili kubandika 13
CS kwa kubandika 10

Kuunganisha pini za kufuatilia GPS:


GND hadi GND
Pin 2 (Arduino) hadi Pin 44 (GPS)

Ni bora kuchukua nguvu kutoka kwa tracker ya GPS (3.7 V). Kwa kuwa betri yake ina uwezo mdogo wa nishati, ni vyema kuunganisha betri ya nje, kwa mfano, kutoka kwa simu ya rununu ya 1400 mAh, kama inavyoonyeshwa kwenye moja ya picha hapo juu.


Sasa unahitaji kupakua maktaba ya TinyGPS, utahitaji pia maktaba ya kufanya kazi na kadi za SD na maktaba ya SoftwareSerial, ambayo inaweza kupatikana katika maktaba ya Arduino.



Katika kipande kifuatacho cha nambari unaweza kuchagua data ya kuandika:


gpsdump tupu(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Kasi katika km/hr kuelea falt = gps.f_altitude(); // +/- mwinuko katika mita (inaonekana kuwa mwinuko, kwa kweli) kuelea fc = gps.f_course(); // Kozi kwa digrii za umri mrefu bila kusainiwa; gps.f_get_position(&flat, &flon, &age); Serial.print(" lat "); Serial. .chapisha (gorofa, 4); Serial.print(" lon "); Serial.print(flon, 4); Serial.print(" kms "); Serial.print(fkmph); Serial.print(" course ") ; Serial .print(fc); Serial.print(" mwinuko "); Serial.println(falt); ///////////////////////// // ////////////////////////////////////////////// ///////////////

Pakia mchoro kwenye Arduino, weka kadi ya SD iliyoumbizwa kulingana na FAT32 na uwe na faili ya log.txt kwenye mzizi. Zindua Kifuatiliaji cha Ufuatiliaji na utaona data ikiandikwa kwa kadi ya SD.