Naredi sam GPS sledilnik, ki temelji na GY-NEO6M, je enostaven. Kratek opis okna z nastavitvami Arduino GPS sledilnik Hatire Arduino

Po več poskusih z Arduinom sem se odločil narediti preprost in ne zelo drag GPS sledilnik s koordinatami, ki jih pošilja preko GPRS na strežnik.
Rabljena Arduino Mega 2560 ( Arduino Uno), SIM900 - GSM/GPRS modul (za pošiljanje informacij na strežnik), GPS sprejemnik SKM53 GPS.

Vse je bilo kupljeno na ebay.com, skupaj približno 1500 rubljev (približno 500 rubljev za arduino, malo manj za GSM modul, malo več za GPS).

GPS sprejemnik

Najprej morate razumeti, kako delati z GPS. Izbrani modul je eden najcenejših in najpreprostejših. Vendar pa proizvajalec obljublja baterijo za shranjevanje satelitskih podatkov. Po podatkovnem listu naj bi hladen zagon trajal 36 sekund, vendar je v mojih pogojih (10. nadstropje od okenske police, v bližini ni stavb) trajalo kar 20 minut. Naslednji start pa je že 2 minuti.

Pomemben parameter naprav, povezanih z Arduino, je poraba energije. Če preobremenite pretvornik Arduino, lahko pregori. Za uporabljeni sprejemnik je največja poraba energije 45 mA pri 3,3 V. Zakaj mora specifikacija navajati jakost toka pri napetosti, ki ni zahtevana (5V), je zame uganka. Vendar bo pretvornik Arduino zdržal 45 mA.

Povezava
GPS ni krmiljen, čeprav ima RX pin. Za kakšen namen ni znano. Glavna stvar, ki jo lahko počnete s tem sprejemnikom, je branje podatkov prek protokola NMEA s pina TX. Stopnje - 5V, samo za Arduino, hitrost - 9600 baud. VIN povežem z VCC arduina, GND z GND, TX z RX ustrezne serijske številke. Podatke sem najprej prebral ročno, nato s knjižnico TinyGPS. Presenetljivo je vse berljivo. Po prehodu na Uno sem moral uporabiti SoftwareSerial, nato pa so se začele težave - nekateri znaki sporočila so bili izgubljeni. To ni zelo kritično, saj TinyGPS odreže neveljavna sporočila, je pa precej neprijetno: na frekvenco 1Hz lahko pozabite.

Hitra opomba o SoftwareSerialu: na Uno ni vrat za strojno opremo (razen tistih, ki so priključeni na USB Serial), zato morate uporabiti programsko opremo. Torej lahko sprejema le podatke na pinu, na katerem plošča podpira prekinitve. V primeru Uno sta to 2 in 3. Še več, samo ena taka vrata lahko sprejemajo podatke hkrati.

Takole izgleda "testna miza".

GSM sprejemnik/oddajnik


Zdaj pride bolj zanimiv del. GSM modul - SIM900. Podpira GSM in GPRS. Niti EDGE niti še posebej 3G nista podprta. Za prenos koordinatnih podatkov je to verjetno dobro - pri preklapljanju med načini ne bo zamud ali težav, poleg tega je GPRS zdaj na voljo skoraj povsod. Vendar pa za nekatere bolj zapletene aplikacije to morda ne bo dovolj.

Povezava
Modul se krmili tudi preko serijskega priključka, z enakim nivojem - 5V. In tukaj bomo potrebovali tako RX kot TX. Modul je ščit, to pomeni, da je nameščen na Arduino. Poleg tega je združljiv z mega in uno. Privzeta hitrost je 115200.

Sestavimo ga na Mega in tukaj nas čaka prvo neprijetno presenečenje: TX pin modula pade na 7. pin Mega. Prekinitve niso na voljo na 7. pinu mega, kar pomeni, da boš moral 7. pin povezati recimo s 6. pinom, na katerem so možne prekinitve. Tako bomo zapravili en pin Arduino. No, za mega to ni zelo strašljivo - navsezadnje je dovolj zatičev. Toda za Uno je to že bolj zapleteno (spomnim vas, da obstajata samo 2 pina, ki podpirata prekinitve - 2 in 3). Kot rešitev tega problema lahko predlagamo, da modula ne namestite na Arduino, ampak ga povežete z žicami. Potem lahko uporabite Serial1.

Po povezavi se poskušamo "pogovarjati" z modulom (ne pozabite ga vklopiti). Izberemo hitrost vrat - 115200, pri čemer je dobro, če vsa vgrajena serijska vrata (4 na mega, 1 na uno) in vsa programska vrata delujejo enako hitro. Tako lahko dosežete stabilnejši prenos podatkov. Ne vem zakaj, čeprav lahko ugibam.

Torej napišemo primitivno kodo za posredovanje podatkov med serijskimi vrati, pošljemo Atz in kot odgovor prejmemo tišino. Kaj se je zgodilo? Ah, občutljivo na velike in male črke. ATZ, v redu smo. Hura, modul nas sliši. Bi nas morali poklicati iz radovednosti? ATD +7499... Zazvoni stacionarni telefon, iz arduina se kadi, prenosnik se ugasne. Arduino pretvornik je pregorel. Slaba ideja je bila, da bi ga napajal na 19 voltov, čeprav je napisano, da lahko deluje od 6 do 20 V, priporoča se 7-12 V. Podatkovni list za GSM modul nikjer ne govori o porabi energije pod obremenitvijo. No, Mega gre v skladišče rezervnih delov. Z zadrževanim dihom prižgem prenosnik, ki je prejel +19V preko +5V linije iz USB-ja. Deluje, pa tudi USB ni pregorel. Hvala Lenovo, ker nas ščiti.

Ko je pretvornik pregorel, sem iskal trenutno porabo. Torej, vrh - 2A, tipičen - 0,5A. To očitno presega zmožnosti pretvornika Arduino. Zahteva ločeno hrano.

Programiranje
Modul zagotavlja obsežne zmogljivosti prenosa podatkov. Začenši z glasovnimi klici in SMS-i ter konča s samim GPRS. Poleg tega je za slednje možno izvesti HTTP zahteva z uporabo AT ukazov. Morali jih boste poslati več, vendar se splača: v resnici ne želite ustvariti zahteve ročno. Pri odpiranju kanala za prenos podatkov prek GPRS obstaja nekaj odtenkov - se spomnite klasičnega AT+CGDCONT=1, "IP", "apn"? Torej, tukaj je potrebna ista stvar, vendar malo bolj zvita.

Če želite pridobiti stran na določenem URL-ju, morate poslati naslednje ukaze:
AT+SAPBR=1,1 //Odprti operater (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //vrsta povezave - GPRS AT+SAPBR=3,1,"APN","internet" //APN, za Megafon - internet AT+HTTPINIT //Inicializacija HTTP AT+HTTPPARA="CID",1 //ID operaterja za uporabo. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Dejanski URL po sprintf s koordinatami AT+HTTPACTION=0 // Zahtevajte podatke z metodo GET //počakajte na odgovor AT+HTTPTERM //ustavite HTTP

Posledično, če obstaja povezava, bomo prejeli odgovor s strežnika. To pomeni, da dejansko že vemo, kako poslati podatke o koordinatah, če jih strežnik prejme prek GET.

Prehrana
Ker je napajanje GSM modula iz pretvornika Arduino, kot sem ugotovil, slaba ideja, je prišlo do nakupa pretvornika 12v->5v, 3A na istem ebayu. Vendar pa modul ne mara 5V napajanja. Gremo na kramp: priključimo 5V na pin, iz katerega prihaja 5V iz arduina. Nato bo vgrajeni pretvornik modula (veliko močnejši od pretvornika Arduino, MIC 29302WU) naredil iz 5V tisto, kar modul potrebuje.

Strežnik

Strežnik je napisal primitivno - shranjevanje koordinat in risanje na Yandex.maps. V prihodnosti je možno dodati različne funkcije, vključno s podporo za številne uporabnike, statusom »oborožen/neoborožen«, stanjem sistemov vozila (vžig, žarometi itd.) in morda celo nadzorom sistemov vozila. Seveda z ustrezno podporo za sledilnik, ki se gladko spremeni v popoln alarmni sistem.

Terenski preizkusi

Tako izgleda sestavljena naprava brez ohišja:

Po namestitvi pretvornika moči in postavitvi v ohišje iz mrtvega modema DSL je sistem videti takole:

Spajkal sem žice in odstranil več kontaktov iz blokov Arduino. Izgledajo takole:

V avtu sem priključil 12V, se vozil po Moskvi in ​​dobil skladbo:


Proge so precej oddaljene ena od druge. Razlog je v tem, da pošiljanje podatkov preko GPRS traja relativno dolgo, v tem času pa se koordinate ne preberejo. To je očitno programska napaka. Obravnava se, prvič, s takojšnjim pošiljanjem paketa koordinat skozi čas, in drugič, z asinhronim delom z modulom GPRS.

Čas iskanja satelitov na sovoznikovem sedežu avtomobila je nekaj minut.

zaključki

Ustvarjanje GPS sledilnika na Arduino z lastnimi rokami je mogoče, čeprav ni nepomembna naloga. Glavno vprašanje zdaj je, kako skriti napravo v avtomobilu, da ne bo izpostavljena škodljivim dejavnikom (voda, temperatura), ni prekrita s kovino (GPS in GPRS bosta zaščitena) in ne bo posebej opazna. Za zdaj samo leži v kabini in se priklopi na vtičnico za cigaretni vžigalnik.

No, za bolj gladko sledenje moramo popraviti tudi kodo, čeprav sledilnik že opravlja glavno nalogo.

Rabljene naprave

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • Ščit GSM/GPRS na osnovi SIM900
  • Pretvornik DC-DC 12v->5v 3A

Osebni GPS oddajniki

Danes gre napredek tako hitro, da naprave, ki so bile prej obsežne, drage in visoko specializirane, hitro izgubljajo velikost, težo in ceno, pridobivajo pa številne nove funkcije.

Tako so naprave, ki temeljijo na tehnologiji GPS, dosegle žepne pripomočke in se tam trdno naselile ter ljudem dale nove priložnosti. Posebej velja izpostaviti posamezne GPS oddajnike.

V bistvu so to isti sledilniki GPS, le da niso zasnovani za uporabo v vozilu, ampak za uporabo osebe v vsakdanjem življenju.

Odvisno od modela, več razne naprave. V najpreprostejši obliki je preprosto majhna škatla brez zaslona, ​​ki omogoča nadzor gibanja otrok, živali ali drugih predmetov, na katerem je pritrjen.

V notranjosti se nahaja GPS modul, ki določa koordinate na tleh, GSM/GPRS modul, ki oddaja informacije in sprejema krmilne ukaze, ter vir energije, ki zagotavlja dolgotrajno avtonomno delovanje.

Funkcionalnost GPS oddajnikov

Ko se funkcionalnost poveča, se pojavijo naslednje zmogljivosti naprave:


Možnosti za oddajnike GPS

Ohišja oddajnikov se lahko bistveno razlikujejo glede na konfiguracijo. Različni modeli imajo usmrtitve v obliki mobilni telefon, klasične navigatorje ali celo ročne ure.

Barvit dizajn posebnih različic in uporabni dodatki otrokom omogočajo, da teh naprav ne obravnavajo kot »starševske vohune«, temveč kot modne in praktične pripomočke.

Kot prednost velja omeniti dejstvo, da številne različice naprave zmorejo brez naročnino za storitve specializiranih operaterjev, vse potrebne informacije pa naročniku posreduje neposredno preko interneta ali SMS sporočil, kar omogoča znatne prihranke pri vzdrževanju tovrstne opreme.

Članki o GPS sledilcih

V tem članku bom pokazal, kako uporabljati gsm modul z arduinom na primeru sim800L. Ista navodila so povsem primerna za uporabo drugih modulov gsm, na primer sim900 itd., Ker vsi moduli delujejo približno na enak način - to je izmenjava ukazov AT prek vrat.

Uporabo modula z arduinom bom prikazal na primeru SMS releja, s katerim lahko upravljamo napravo na daljavo preko SMS ukazov. To se lahko uporablja v povezavi z avtomobilskimi alarmi itd.

Modul je povezan z Arduino prek vmesnika UART serijskih vrat programske opreme, ki delujejo na 2 in 3 digitalnih zatičih Arduino nano.

Delo z Arduino z GSM moduli

Za napajanje modula je potrebna napetost v razponu od 3,6 V do 4,2 V, to pomeni, da boste morali uporabiti dodaten stabilizator napetosti, saj ima Arduino nameščen stabilizator 3,3 V, ki ni primeren za napajanje modula. , drugi razlog za namestitev dodatnega stabilizatorja je ta, da je GSM modul resna obremenitev, saj ima šibek oddajnik, ki zagotavlja stabilna povezava z mobilno postajo. Napajanje za Arduino nano se napaja na VIN pin - to je stabilizator, vgrajen v Arduino, ki zagotavlja, da modul deluje v širokem območju napetosti (6-10V). Relejni modul je povezan v skladu z danim programskim besedilom na pin 10 Arduino nano in ga je mogoče enostavno zamenjati s katerimkoli drugim, ki deluje kot digitalni izhod.

Deluje takole: namestite kartico SIM v modul GSM, vklopite napajanje in pošljite SMS z besedilom "1" na številko SIM kartice za vklop našega releja, za izklop pošljemo SMS z besedilom “0”.

#vključi
SoftwareSerial gprsSerial(2, 3); // nastavite nožice 2 in 3 za vrata programske opreme
int LedPin = 10; // za rele

praznina nastavitev()
{
gprsSerial.begin(4800);
pinMode(LedPin, IZHOD);

// nastavitev sprejema sporočil

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
zamuda (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
zamuda (500); // zakasnitev za obdelavo ukaza
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
zamuda (700);
}

Niz currStr = "";
// če je ta vrstica sporočilo, bo spremenljivka prevzela vrednost True
boolean isStringMessage = false;

void loop()
{
če (!gprsSerial.available())
vrnitev;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// če je trenutna vrstica sporočilo, potem ...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, VISOKO);
) sicer če (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) drugače (
if (currStr.startsWith("+CMT")) (
// če se trenutna vrstica začne z “+CMT”, potem naslednje sporočilo
isStringMessage = res;
}
}
currStr = "";
) sicer če ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Video različica članka:

Oznake: #Arduino, #SIM800L

Vaša oznaka:

Izdelki, uporabljeni v tem članku:

← Zapisovalnik GPS na arduino | Krmiljenje releja preko COM vrat →

GSM skener na RTL-SDR

| domov| angleščina | Razvoj | Pogosta vprašanja |

Glavne značilnosti skenerja

Optični bralnik GSM skenira kanale GSM navzdol in prikaže informacije o moči signala in lastništvu kanala enega od treh glavnih operaterjev celične komunikacije MTS, Beeline in Megafon. Na podlagi rezultatov svojega dela vam skener omogoča shranjevanje seznama identifikatorjev bazne postaje MCC, MNC, LAC in CI za vse skenirane kanale.
GSM skener lahko uporabite za oceno ravni GSM signala in primerjavo kakovosti signala različnih operaterjev, ocene radijske pokritosti, pri odločanju o namestitvi ojačevalcev mobilnega signala in prilagajanju njihovih parametrov, v izobraževalne namene itd.
Skener deluje pod operacijskim sistemom Windows in uporablja preprost in poceni sprejemnik - RTL-SDR. O RTL-SDR si lahko preberete na:
RTL-SDR (RTL2832U) in programsko definirane radijske novice in projekti,
RTL-SDR – OsmoSDR,
RTL-SDR v ruščini.
Parametri RTL-SDR določajo glavne značilnosti skenerja. GSM skener seveda ni nadomestilo za običajno merilno opremo.
Optični bralnik se distribuira brezplačno, brez omejitev uporabe.
Trenutna verzija podpira pas GSM 900 in ne podpira GSM 1800. To določa dejstvo, da je delovna frekvenca RTL-SDR s sprejemnikom R820T omejena na 1760 MHz. Obstaja upanje, da bo uporaba eksperimentalnega gonilnika RTL-SDR omogočila delovanje v vsaj delu območja 1800 MHz.

Zagon optičnega bralnika

Najnovejšo različico optičnega bralnika lahko prenesete s te povezave. Samo razpakirajte datoteko na priročno mesto in zaženite gsmscan.exe.
Prejšnje različice skener, povezava do repozitorija z viri in druge informacije v zvezi z razvojem so na razvojni strani.
Za delovanje optičnega bralnika je potrebna namestitev gonilnikov RTL-SDR, če ti še niso nameščeni, lahko to priročno storite s programom Zadig, kjer je opisan postopek namestitve.

Uporaba optičnega bralnika

Spodaj je pogled na okno programa optičnega bralnika:

Na vodoravni osi je prikazana številka kanala GSM v obliki ARFCN ali v MHz, na navpični osi pa je prikazan nivo signala v dBm. Višina črte prikazuje moč signala.

GSM modul NEOWAY M590 komunikacija z Arduino

Če so bili identifikatorji BS uspešno dekodirani in ustrezajo identifikatorjem treh večjih telekomunikacijskih operaterjev, so črte pobarvane v ustrezne barve.
Spustni seznami na vrhu zaslona vam omogočajo, da izberete sprejemnik SDR, če je priključenih več, obseg GSM delo 900 ali GSM 1800 in enote vodoravne osi ARFCN ali MHz.
Gumbi vam omogočajo, da shranite poročilo o delovanju optičnega bralnika v obliki seznama dekodiranih baznih postaj, počistite rezultate dekodiranja BS in pridobite informacije o programu.

Načela in značilnosti dela.

Med delovanjem program skenira delovno frekvenčno območje s korakom 2,0 MHz (10 GSM kanalov) in digitalizira signal s frekvenco vzorčenja 2,4 MHz. Postopek skeniranja je sestavljen iz hitrega prehoda skozi celotno območje za merjenje moči signala in počasnega prehoda za dekodiranje identifikatorjev BS.

En korak dekodiranja se izvede po prečkanju celotnega območja za merjenje moči. Tako se v območju GSM 900 raven signala posodobi približno enkrat na 2 s, popoln prehod dekodiranja pa traja približno 1 minuto.
Zaradi slabe kakovosti signala, prejetega iz RTL-SDR, verjetnost pravilnega dekodiranja sistemskih informacij (SI) nadzornega kanala oddajanja BS (BCCH) ni velika. Nihanja ravni signala kot posledica večpotnega širjenja prav tako zmanjšajo verjetnost dekodiranja sistemskih informacij. Zaradi teh razlogov mora skener za pridobitev identifikatorjev BS zbirati informacije v obdobju približno 10 minut. Toda tudi v tem primeru vsi kanali ne zagotavljajo to mesto zadostna raven signala in kakovost za dekodiranje tudi z najbolj idealnim sprejemnikom. Poleg tega se za delovanje ne uporabljajo vsi kanali GSM GSM standard, kot je razvidno iz zgornje slike, kanale 975 - 1000 zaseda Megafon za delo standard UMTS.
Med delovanjem optični bralnik doda sistemske informacije o novih dekodiranih kanalih splošnemu nizu informacij o kanalih. Toda informacije o predhodno dekodiranih kanalih se ne izbrišejo, če sistemske informacije niso dekodirane v tem koraku, in ostanejo v nizu. Če želite izbrisati te informacije, uporabite gumb za brisanje rezultatov dekodiranja BS.
Ko kliknete gumb za shranjevanje poročila, se zbrani rezultati shranijo v besedilna datoteka z imenom, sestavljenim iz imena programa, datuma in časa shranjevanja podatkov. Spodaj je primer dela datoteke poročila:
Optični bralnik je zasnovan za delovanje v operacijskih sistemih Windows 7, 8.1 in 10. Delo je bilo preizkušeno s tremi kopijami RTL-SDR s sprejemnikom R820T, drugih vrst sprejemnikov nismo testirali.
Za delovanje pod Windows XP je bila prevedena posebna različica programa, ki deluje nekajkrat počasneje od standardne različice.

Razvoj.

Program optičnega bralnika je dobavljen takšen, kot je, brez kakršnega koli jamstva ali odgovornosti. Če imate razumne ideje o tem, kako razširiti funkcionalnost ali izboljšati delovanje optičnega bralnika, smo pripravljeni razpravljati o možnosti njihove izvedbe.
Lahko sodelujete pri razvoju optičnega bralnika; za to obiščite razvojno stran.
Načrtovan je nadaljnji razvoj GSM skenerja, po možnosti z vašim sodelovanjem.

Po več poskusih z Arduinom sem se odločil narediti preprost in ne zelo drag GPS sledilnik s koordinatami, ki jih pošilja preko GPRS na strežnik.
Rabljeno Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modul (za pošiljanje informacij na strežnik), GPS sprejemnik SKM53 GPS.

Vse je bilo kupljeno na ebay.com, skupaj približno 1500 rubljev (približno 500 rubljev za arduino, malo manj za GSM modul, malo več za GPS).

GPS sprejemnik

Najprej morate razumeti, kako delati z GPS. Izbrani modul je eden najcenejših in najpreprostejših. Vendar pa proizvajalec obljublja baterijo za shranjevanje satelitskih podatkov. Po podatkovnem listu naj bi hladen zagon trajal 36 sekund, vendar je v mojih pogojih (10. nadstropje od okenske police, v bližini ni stavb) trajalo kar 20 minut. Naslednji start pa je že 2 minuti.

Pomemben parameter naprav, povezanih z Arduino, je poraba energije. Če preobremenite pretvornik Arduino, lahko pregori. Za uporabljeni sprejemnik je največja poraba energije 45 mA pri 3,3 V. Zakaj mora specifikacija navajati jakost toka pri napetosti, ki ni zahtevana (5V), je zame uganka. Vendar bo pretvornik Arduino zdržal 45 mA.

Povezava

GPS ni krmiljen, čeprav ima RX pin. Za kakšen namen ni znano. Glavna stvar, ki jo lahko počnete s tem sprejemnikom, je branje podatkov prek protokola NMEA s pina TX. Stopnje - 5V, samo za Arduino, hitrost - 9600 baud. VIN povežem z VCC arduina, GND z GND, TX z RX ustrezne serijske številke. Podatke sem najprej prebral ročno, nato s knjižnico TinyGPS. Presenetljivo je vse berljivo. Po prehodu na Uno sem moral uporabiti SoftwareSerial, nato pa so se začele težave - nekateri znaki sporočila so bili izgubljeni. To ni zelo kritično, saj TinyGPS odreže neveljavna sporočila, je pa precej neprijetno: na frekvenco 1Hz lahko pozabite.

Hitra opomba o SoftwareSerialu: na Uno ni vrat za strojno opremo, zato morate uporabiti vrata za programsko opremo. Torej lahko sprejema le podatke na pinu, na katerem plošča podpira prekinitve. V primeru Uno sta to 2 in 3. Še več, samo ena taka vrata lahko sprejemajo podatke hkrati.

Takole izgleda "testna miza".


GSM sprejemnik/oddajnik


Zdaj pride bolj zanimiv del. GSM modul - SIM900. Podpira GSM in GPRS. Niti EDGE niti še posebej 3G nista podprta. Za prenos koordinatnih podatkov je to verjetno dobro - pri preklapljanju med načini ne bo zamud ali težav, poleg tega je GPRS zdaj na voljo skoraj povsod. Vendar pa za nekatere bolj zapletene aplikacije to morda ne bo dovolj.

Povezava

Modul se krmili tudi preko serijskega priključka, z enakim nivojem - 5V. In tukaj bomo potrebovali tako RX kot TX. Modul je ščit, to pomeni, da je nameščen na Arduino. Poleg tega je združljiv z mega in uno. Privzeta hitrost je 115200.

Sestavimo ga na Mega in tukaj nas čaka prvo neprijetno presenečenje: TX pin modula pade na 7. pin Mega. Prekinitve niso na voljo na 7. pinu mega, kar pomeni, da boš moral 7. pin povezati recimo s 6. pinom, na katerem so možne prekinitve. Tako bomo zapravili en pin Arduino. No, za mega to ni zelo strašljivo - navsezadnje je dovolj zatičev. Toda za Uno je to že bolj zapleteno (spomnim vas, da obstajata samo 2 pina, ki podpirata prekinitve - 2 in 3). Kot rešitev tega problema lahko predlagamo, da modula ne namestite na Arduino, ampak ga povežete z žicami. Potem lahko uporabite Serial1.

Po povezavi se poskušamo "pogovarjati" z modulom (ne pozabite ga vklopiti). Izberemo hitrost vrat - 115200, pri čemer je dobro, če vsa vgrajena serijska vrata (4 na mega, 1 na uno) in vsa programska vrata delujejo enako hitro. Tako lahko dosežete stabilnejši prenos podatkov. Ne vem zakaj, čeprav lahko ugibam.

Torej napišemo primitivno kodo za posredovanje podatkov med serijskimi vrati, pošljemo Atz in kot odgovor prejmemo tišino. Kaj se je zgodilo? Ah, občutljivo na velike in male črke. ATZ, v redu smo. Hura, modul nas sliši. Bi nas morali poklicati iz radovednosti? ATD +7499... Zazvoni stacionarni telefon, iz arduina se kadi, prenosnik se ugasne. Arduino pretvornik je pregorel. Slaba ideja je bila, da bi ga napajal na 19 voltov, čeprav je napisano, da lahko deluje od 6 do 20 V, priporoča se 7-12 V. Podatkovni list za GSM modul nikjer ne govori o porabi energije pod obremenitvijo. No, Mega gre v skladišče rezervnih delov. Z zadrževanim dihom prižgem prenosnik, ki je prejel +19V preko +5V linije iz USB-ja. Deluje, pa tudi USB ni pregorel. Hvala Lenovo, ker nas ščiti.


Ko je pretvornik pregorel, sem iskal trenutno porabo. Torej, vrh - 2A, tipičen - 0,5A. To očitno presega zmožnosti pretvornika Arduino. Zahteva ločeno hrano.

Programiranje

Modul zagotavlja obsežne zmogljivosti prenosa podatkov. Začenši z glasovnimi klici in SMS-i ter konča s samim GPRS. Poleg tega je za slednje mogoče izvesti zahtevo HTTP z uporabo ukazov AT. Morali jih boste poslati več, vendar se splača: v resnici ne želite ustvariti zahteve ročno. Pri odpiranju kanala za prenos podatkov prek GPRS obstaja nekaj odtenkov - se spomnite klasičnega AT+CGDCONT=1, "IP", "apn"? Torej, tukaj je potrebna ista stvar, vendar malo bolj zvita.

Če želite pridobiti stran na določenem URL-ju, morate poslati naslednje ukaze:

AT+SAPBR=1,1 //Odprti operater (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //vrsta povezave - GPRS AT+SAPBR=3,1,"APN","internet" //APN, za Megafon - internet AT+HTTPINIT //Inicializacija HTTP AT+HTTPPARA="CID",1 //ID operaterja za uporabo. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Dejanski URL po sprintf s koordinatami AT+HTTPACTION=0 // Zahtevajte podatke z metodo GET //počakajte na odgovor AT+HTTPTERM //ustavite HTTP

Posledično, če obstaja povezava, bomo prejeli odgovor s strežnika. To pomeni, da dejansko že vemo, kako poslati podatke o koordinatah, če jih strežnik prejme prek GET.

Prehrana

Ker je napajanje GSM modula iz pretvornika Arduino, kot sem ugotovil, slaba ideja, je prišlo do nakupa pretvornika 12v->5v, 3A na istem ebayu. Vendar pa modul ne mara 5V napajanja. Gremo na kramp: priključite 5V na pin, iz katerega prihaja 5V iz Arduina. Nato bo vgrajeni pretvornik modula (veliko močnejši od pretvornika Arduino, MIC 29302WU) naredil iz 5V tisto, kar modul potrebuje.

Strežnik

Strežnik je napisal primitivno - shranjevanje koordinat in risanje na Yandex.maps. V prihodnosti je možno dodati različne funkcije, vključno s podporo za številne uporabnike, statusom »oborožen/neoborožen«, stanjem sistemov vozila (vžig, žarometi itd.) in morda celo nadzorom sistemov vozila. Seveda z ustrezno podporo za sledilnik, ki se gladko spremeni v popoln alarmni sistem.

Terenski preizkusi

Tako izgleda sestavljena naprava brez ohišja:


Po namestitvi pretvornika moči in postavitvi v ohišje iz mrtvega modema DSL je sistem videti takole:

Spajkal sem žice in odstranil več kontaktov iz blokov Arduino. Izgledajo takole:

V avtu sem priključil 12V, se vozil po Moskvi in ​​dobil skladbo:


Proga se izkaže za raztrgano. Razlog je v tem, da pošiljanje podatkov preko GPRS traja relativno dolgo, v tem času pa se koordinate ne preberejo. To je očitno programska napaka. Obravnava se, prvič, s takojšnjim pošiljanjem paketa koordinat skozi čas, in drugič, z asinhronim delom z modulom GPRS.

Diagram projekta:

Pozdravljeni prijatelji, nad našimi glavami leti veliko različnih vesoljskih plovil. Med njimi je približno 90 izjemno uporabnih navigacijskih satelitov ameriškega sistema GPS, ruskega GLONASS, evropskega Galileo in kitajskega BeiDou. In danes bomo ujeli njihov signal.

Najprej malo teorije: satelitski navigacijski sistem je mreža vesoljskih plovil, ki letijo po predhodno znanih poteh in natančno opazujejo svojo orbito in trajektorijo ali se nahajajo na znani stacionarni točki v geostacionarni ali geosinhroni orbiti. Sateliti letijo v povprečju na višini približno 20 tisoč kilometrov in vsak je ultra natančna atomska ura, ki ves čas oddaja svoj čas celotnemu planetu. Trenutni čas.

Radijski signal, ki se širi s svetlobno hitrostjo, doseže Zemljo z zakasnitvijo od 60 do 90 milisekund, to je odvisno od oddaljenosti satelita. Če poznate natančno lokacijo vira radijskega signala glede na časovno zakasnitev njegovega širjenja, lahko ugotovite natančno razdaljo do satelita. In potem lahko s triangulacijo razdalj do več znanih predmetov ugotovite, kje ste v vesolju.

Predstavljajte si, da je ta modra krogla naš planet. Nad njim letijo trije sateliti na višini 20 tisoč kilometrov. Pri merjenju razdalje do prvega boste prejeli informacijo, da ste nekje na tem krogu - za zdaj to ni preveč informativno. Signal drugega satelita bo razjasnil vašo lokacijo do dveh presečišč brez sklicevanja na nadmorsko višino. Signal tretjega navigacijskega satelita bo pokazal višino teh točk nad površjem in formalno rešil navigacijsko enačbo ter zmanjšal vašo lokacijo na dve možni lokaciji. V resnici ima ena od teh koordinat neverjetne lastnosti in je zavržena, kar popolnoma reši problem. Signal s četrtega satelita naredi isto – že nedvoumno natančno reši navigacijsko enačbo.

Merjenje razdalj do vsakega naslednjega satelita poveča natančnost pozicioniranja in se danes giblje od 1 do 3 metre pri standardni vidnosti približno 10 navigacijskih satelitov.

Teorijo smo uredili, pojdimo k praksi. Danes se različni navigacijski moduli prodajajo ločeno. Najpreprostejši in najstarejši podpirajo le signale ameriškega opazovalnega sistema GPS, v povprečju 5-7 satelitov. Naprednejši moduli lahko sprejemajo tudi signale iz ruske konstelacije GLONASS, s čimer se skupno število opazovanih satelitov poveča za povprečno dvakrat. V prodaji so tudi moduli v kombinaciji s kompasom, ki služijo za natančno navigacijo in vzdrževanje smeri.

Na zaslonu mojega telefona so vidni sateliti različnih navigacijskih sistemov. Krogi so GPS, trikotniki GLONASS, zvezde pa kitajski BeiDou. Torej moj telefon podpira tri različne navigacijski sistemi in združevanje signalov iz njih poveča natančnost določanja lokacije. Zdaj je nad mojo glavo 28 satelitov, signal pa je na voljo samo s 7. To je. moj telefon že vnaprej ve, kje je kateri satelit. In manjkajoči signal 21 satelitov pomeni, da so izven vidnega polja. Navigacijski signal je zelo šibek, od besede VASCHE, se skoraj ne odbija, blokira ga teren, zgradbe, streha avtomobila - vsaka kovina nad glavo ali ob strani. Tudi sneg, ki pada zunaj okna, moti dober sprejem.

Za izvedbo projekta boste potrebovali številne elektronske module: programabilno platformo Arduino Nano, zaslon OLED 128 x 32 točk (povezan je prek vodila I2C), modul GPS za povezavo prek UART, kateri koli litijeva baterija z zmogljivostjo nad 200 miliamperov, zaščitno-polnilnim modulom za litij in ojačevalnim pretvornikom za pridobivanje 5 voltov. Tukaj imam tri različne vrste, vsaka bo ustrezala. Načrtoval sem tudi uporabo barvne RGB LED za označevanje stanja, vendar sem to opustil, ko je projekt napredoval.

Zaslon povežemo z Arduinom in naletimo na prvo težavo. Standardna knjižnica Zaslon OLED zavzema 20 kB, kar je 70 % pomnilnika mikrokontrolerja in praktično ne pušča prostora za program. Prej sem sestavljal višinomer in se soočil z dejstvom, da vsaka nova vrstica kode povzroči prepolnitev pomnilnika in mikrokrmilnik med delovanjem zamrzne. Zato bom uporabil veliko več lahka knjižnica. Ne dela z grafiko in prikazuje samo besedilo na OLED zaslonu, zavzame pa le 1 KB pomnilnika.

Posebej priklopim GPS modul na matično ploščo in vidim prve navigacijske podatke - signal iz vesolja je bil ujet in obdelan. Zdaj prikazujem informacije na zaslonu. Razred! Vidi 4 satelite, zdaj 3 in spet 4, že 5! Za boljši sprejem GPS modul visi zunaj okna na žici.

Med razvojem projekta sem uporabil GPS module različni tipi. Preprost GPS in kombinirani GPS z Glonass. Za preverjanje stabilnosti delovanja smo morali opraviti vrsto večurnih poskusov. Izkazalo se je, da moduli delujejo, vendar z programske knjižnice Moral sem se poigrati. Poskusil več različne knjižnice, TinyGPS+ pa je bil edini, ki je deloval z vsemi moduli GPS hkrati.

Na splošno knjižnica razčleni protokol NMEA; preprosto razčleni podatke, ki jih modul GPS izpljune dvakrat na sekundo. Tako je videti neobdelan tok podatkov.

Posledično vam moja vdelana programska oprema omogoča povezavo skoraj vseh modulov GPS prek UART s protokolom za prenos podatkov NMEA. Pravzaprav je to večina modulov, ki imajo zatiče RX in TX. Priporočam, da vzamete modul GPS iz Glonass, vidi več satelitov, zato je njegova natančnost večja. Povezave do vseh komponent in modulov so v opisu tega videa.

Testna plošča je pokazala polno funkcionalnost sistema, zdaj lahko vse sestavite v strojni opremi. Za napajanje bom uporabil litijevo baterijo, ki bo priključena na zaščitno ploščo s polnjenjem. Na tej plošči spodnji upor R3 nastavi polnilni tok baterije, privzeto je 1 amper, to je veliko za majhne baterije, zato je treba upor zamenjati. Na zaslonu vidite ploščo z vrednostmi upora za različne polnilne tokove. Če ima vaša baterija kapaciteto 500 miliamper ur, morate nastaviti polnilni tok, ki ni višji od te vrednosti. Tisti. lahko nastavite 200 ali 300 miliamperov in ne presežete 500.

Nato je treba povečati napetost, zaslon in GPS modul se napajata s 5 volti. To bomo storili s pomočjo pretvornika ojačevalne napetosti. Ti so običajno nameščeni v power bankih za dvig napetosti s 3,7 na 5 voltov. Uporabil bom majhen zeleni modul, ki lahko oddaja do 300 mA in je več kot dovolj za ta projekt.

Posodobil sem vdelano programsko opremo, zdaj pri nalaganju glavni zaslon prikazuje trenutni točen čas s satelitov, število vidnih satelitov in trenutno hitrost sledilnika, skače, ker je prišlo do napake pri določanju lokacije. Ko pritisnete gumb, se zaslon spremeni. Tukaj sta prikazani trenutna vrednost hitrosti in največja vrednost za obdobje opazovanja. Na drugem zaslonu je trenutna razdalja do ničelne točke, največja zabeležena razdalja od nje in števec kilometrov.

Izmerim velikosti vseh modulov in jih poskušam razporediti čim bolj kompaktno. Toda ne glede na to, koliko sem se trudil, tanek zaslon ni ustrezal širokemu. GPS sprejemnik ohm Zato sem se odločil zamenjati zaslon z drugim OLED 128x64 slikovnih pik. Zaradi tega je bolj ergonomičen in omogoča večji gumb. Zasloni OLED so popolnoma združljivi in ​​zahtevajo minimalno popravljanje kode, zato bo vdelana programska oprema na voljo za obe različici naprave z majhnim in velikim zaslonom.

Shema sestavljanja je preprosta. Zaslon morate povezati z vodilom I2C, to sta pina A4 in A5, modul gps je povezan s serijskimi vrati programske opreme na pinih D3 in D4. Gumb na zatiču D7. Napajanje baterije prek zaščitni modul povlecite ga na stikalo, nato na ojačevalni pretvornik in priključite Arduino na 5 voltov.

Za priročno postavitev komponent bom uporabil zeleno mizo 7 x 3 centimetre. Da zaslon ne visi na konektorju, ga namestim na plastična stojala s 5 mm distančniki. Med zaslonom in gumbom bo sprejemnik GPS. Na zadnji strani plošče bo krmilnik Arduino, baterija in zaščitna plošča. Baterija bo uporabljala tanko litijevo 350 miliamperov, če se ne motim, se te uporabljajo v elektronskih cigaretah, ampak kot sem rekel, lahko uporabite katero koli litijevo baterijo.

Vse skupaj še enkrat premerim, premerim in pripravim dizajn ohišja za tisk na 3D printer. Dobesedno 15 minut na spletni strani TinkerCAD in projekt je pripravljen za tiskanje. Datoteko prenesem na bliskovni pogon, jo zaženem in gremo. Čas tiskanja je približno 40 minut, to je prvo vzorčno telo za preizkušanje postavitve modulov.

Plošča in gumb sta se prilegala, zaslon pa je bil dobesedno milimeter kratek in notranje stojalo je bilo v napoto. In tako se vse prilega in je nameščeno na svoje mesto. Super, uredim projekt in natisnem končna različica oranžno ohišje. Po končanem tiskanju morate mizi dati čas, da se ohladi in šele nato odtrgati del, takrat bo sprednja stran gladka in se ne bo premikala.

Odlomim in očistim pritrdilni rob plastike. Ker sem uporabil ABS plastiko, je predmet naknadne obdelave z acetonom. Nanašam ga s čopičem, sloji se dodatno zlepijo, telo pa se utrdi in pridobi sijaj.

Plošča se popolnoma prilega notranjosti ohišja, pritrdilni elementi so poravnani, gumb se ne drži. Na eni strani je luknja za Arduino Nano konektor, na drugi strani pa za polnjenje baterije. Izkazalo se je, da je malo ožji, zato ga razširim s skalpelom.

Polnilna plošča ima ob robovih izbokline, ki preprečujejo poglabljanje konektorja, zato jih obrusim z iglo. Zdaj je tabla dobro na svojem mestu.

IN splošni pogled naprava bo izgledala takole. Ohišje se nahaja na vrhu. Pod njim bo mikro stikalo, miza z zaslonom, GPS modul in gumb. Ob strani je tudi povečevalni pretvornik moči.

Posebej za stikalo sem v ohišju s skalpelom izrezal luknjo, nad gumbom. Vgrajen je v telo in ne bo motil.

Čas je za spajkanje. Prvi kontakt zaslona spajkam na ploščo, poskusim - vse je pravilno in lahko spajkate preostale tri kontakte. Zdaj gumb. In ne pozabite očistiti fluksa s čopičem. Spajkam žice na zaščitni modul baterije.

Pri povezovanju bodite pozorni na barvo žic. Napačne barve občasno prihajajo iz Kitajske. V tem primeru sem se odločil odspajkati konektor in spajkati žice neposredno za boljši stik. Postopek je zapleten in zahteva natančnost in previdnost pri spajkanju. Poleg tega napolnim kontakte z vročim lepilom, kar bo zaščitilo tire in žico pred nenamernim izvlečenjem. Celoten GPS modul takoj stlačimo v termoskrč, to ni potrebno, bo pa dodatno zaščitilo pred mehanske poškodbe in kratkega stika, ko je nameščen na plošči za izdelavo.

Ojačevalni pretvornik tudi ovijemo v termoskrč. Za pritrditev modulov uporabljam dvostranski trak. Pri namestitvi plošče se je izkazalo, da ni dovolj prostora za žice, zato sem v sredino izvrtal luknje in skoznje spravil napajalne žice.

Mimogrede, priporočam kul akumulatorski vrtalnik. Deluje na eno samo baterijo 18650 in omogoča hitro vrtanje podobnih lukenj na ploščah in v ohišjih. Prej sem moral za takšno delo vzeti Dremel iz ohišja in ga priključiti v električno vtičnico, zdaj pa imam vedno ta sveder pri roki.

Zgornji del plošče je sestavljen, žice so navojne in zdaj morate namestiti stikalo. Da bi to naredili, odgriznemo dodatne noge na njem, samo dve sta potrebni za napajanje in prekinitev napajanja. Nanje prispajkamo žico in kot običajno vse skupaj toplotno skrčimo. Nato lahko stikalo namestite na svoje mesto in ga napolnite z vročim lepilom. Zdaj bo priročno vklopiti in izklopiti sledilnik.

Ploščo namestim v ohišje in jo pritrdim s štirimi majhnimi vijaki. Na nosilcih ohišja so že predvidene ustrezne luknje. Ko sem odstranil zaščitno folijo z zaslona, ​​sem opazil veliko režo med zaslonom in ohišjem. Zato sem od neke elektronike vzel kos prozorne embalaže in iz nje izrezal steklo, ki ustreza velikosti okna. In ga z acetonom prilepil na plastiko ohišja.

Montažo izvajamo po shemi, tukaj ni nobenih težav ali odtenkov. Samo bodite pozorni, plus na plus, minus na minus. Stikalo priključimo neposredno na izhod polnilnega modula. To bo izklopilo celotno napajalno vezje in preprečilo praznjenje baterije.

Po spajkanju vseh žic na module prekrijte spodnjo ploščo z modrim električnim trakom. Krmilnik Arduino s polnjenjem bo zgoraj, brez izolacije pa obstaja možnost kratkega stika.

Spajkam zaščitni modul in ga pritrdim na mesto z vročim lepilom.

Pomečkam kontakte baterije in na hitro spajkam žico, da ne pregrejem baterije. Na eni in na drugi strani. Po tem se morate povezati mikro USB kabel in napajanje zaščitnega modula, bo to aktiviralo njegovo delovanje.

Končano, zdaj morate naložiti vdelano programsko opremo. Arduino povežemo z računalnikom, pojdimo na stran projekta, povezava do nje je v opisu videa. Prenesite arhiv, razpakirajte datoteke, namestite knjižnice, odprite zahtevano različico vdelane programske opreme za zaslon z 32 ali 64 točkami in jo naložite v krmilnik. Prvič je vse delovalo! Podatki iz GPS palice. kul!

Namestim krmilnik na svoje mesto, prižgem avtonomno napajanje... iiiiiiiii... nič. LED za napajanje na Arduinu sveti, vendar se zaslon ne vklopi. In tako se je zgodil trindet, katerega razloga še vedno ne vem. Potreboval sem kar nekaj ur dela, da je sledilnik začel delovati avtonomno iz vgrajene baterije.

Sprva sem mislil, da je kriv majhen pospeševalni pretvornik. Toda preverjanje z multimetrom je pokazalo stabilnih 5 voltov. Nato sem priključil avtonomni napajalni modul, ki mi je ostal od drugega projekta, zgrajen je na velikem ojačevalnem pretvorniku - in glej ga zlomka, sledilnik se je zagnal, vendar je po nekaj sekundah zamrznil.

Na njem sem napolnil baterijo in postavil sledilnik na okno, da je lovil satelite. Tri minute pozneje je ujel signal 4 satelitov in določil lokacijo. No, to pomeni, da deluje in se ga verjetno da sestaviti? Menjamo ojačevalni pretvornik, očitno mali zelo ropota od napajalnika.

Za to sem moral popolnoma razstaviti sledilnik, odspajkati vse žice in ga znova sestaviti. Novi napajalni modul bo stal na istem mestu kot stari, le eno stojalo je bilo treba odstraniti, da se prilega pod zaslon.

To je to, žice sem zvil v pletenice, da se izognem motnjam. Aaa... ta baraba se ni spet prižgala. Natančneje, vklopil se je in takoj zamrznil z artefakti na zaslonu. Toliko ur dela in vse za nič. Zamenjava pretvornika ni pomagala.

Poskušal sem namestiti kondenzatorje na napajalnik - nič ni pomagalo. Sledilnik ni hotel delovati avtonomno, tako iz ojačevalnih pretvornikov kot iz laboratorijskega napajanja - zamrznil je ali se sploh ni vklopil. Toda hkrati je odlično deloval iz priključka Arduino USB.

Z metodo zaporednega izklopa sem lahko ugotovil, da je za to kriv zaslon OLED - vendar še vedno ne razumem, zakaj. Rešitev se je našla nenadoma. Med naslednjim preverjanjem avtonomnega napajanja sem pomotoma priključil 5 voltov na VIN pin. Ugotavljam, da ta pin! ne! zasnovan za napajanje 5 voltov in zahteva napetost od 7 do 12 voltov.

Toda kljub temu se je sledilnik takoj zagnal in začel delovati stabilno. Tisti. Izkazalo se je, da majhen stabilizator ni bil vir težave, temveč nekaj drugega.

Hkrati sem se odločil preveriti trenutno porabo. Od 5 voltov je sledilnik porabil približno 70 miliamperov. In iz 4 voltov prek ojačevalnega pretvornika se je izkazalo, da je približno 110 miliamperov. Tako bo moja mala 350 miliamperska baterija zdržala tri ure življenjska doba baterije. In še nisem optimiziral napajanja, lahko izklopiš LED diode, ki so vedno prižgane in še vedno varčuješ z baterijo.

Sledilnik je začel delovati popolnoma stabilno, pustil sem ga na oknu in po nekaj minutah je ujel 4 satelite. Super

Če mi želite pomagati razumeti razlog za nenavadno vedenje Arduina, je tukaj uvod:

1 – Sledilnik deluje, če se napaja preko USB priključka Arduino.

2 – Sledilnik zamrzne in se ne vklopi, če ga napajate prek priključka Arduino 5 V tako, da nanj priključite 5 voltov iz katerega koli vira napajanja.

3 – Sledilnik zamrzne in se ne vklopi, če je nanj priključenih 7 voltov ali več prek zatiča VIN Arduino.

4 – Sledilnik deluje, če se napaja z nestandardnimi 5 volti prek istega VIN priključka.

Končana naprava je univerzalni avtonomni merilnik hitrosti, merilnik razdalje, kilometrski števec in satelitska točna ura v enem ohišju.

Na glavnem zaslonu po nalaganju sta na vrhu prikazana trenutni čas in datum v Greenwichu, druga vrstica je trenutna hitrost 0,3 kilometra na uro in največja vrednost hitrosti, ki je bila zabeležena od trenutka vklopa - 26 kilometrov na uro. Na tretji liniji je trenutna razdalja do ničelne točke 530 metrov, največja dosežena razdalja od vklopa pa 580 metrov. V četrti vrstici števec kilometrov kaže 923 metrov in število uporabljenih satelitov.

Znaki v spodnji vrstici so količina podatkov, prejetih iz modula GPS.

Ob kratkem pritisku na gumb se spremeni prikaz na zaslonu, ob daljšem pritisku pa si sledilnik zapomni trenutno lokacijo kot ničelno referenčno točko za meritve razdalje. Drugi zaslon prikazuje trenutno in največjo hitrost. Tretji zaslon vsebuje podatke o razdalji do ničelne točke. Četrti zaslon je števec kilometrov. Peta zemljepisna širina in dolžina.

Števec kilometrov in največje vrednosti lahko ponastavite tako, da dolgo pritisnete gumb na zaslonu s temi parametri. Tisti. pojdite na števec kilometrov in držite pritisnjen gumb, da ga ponastavite.

Pojdimo k testiranju. Zdaj sledilnik vidi 12 satelitov. Nastavil sem trenutno ničelno točko in ponastavil števec kilometrov na nič. Enako naredim na avtomobilskem števcu kilometrov. Po prevoženih 1,2 kilometra po merilniku hitrosti avtomobila sem na GPS sledilniku videl enakih 1205 metrov. Trenutna razdalja do ničelne točke v ravni liniji je 0,93 kilometra. In po zemljevidu je teh istih 930 metrov, zaenkrat je vse točno.

Odločil sem se za merjenje daljše razdalje. Spet sem ponastavil odčitke na ničlo na sledilniku in avtu. Po prevoženih 8,4 kilometrih sem na sledilniku ugotovil, da je razdalja krajša - le 7974 metrov. V tem primeru je trenutna razdalja do ničelne točke 4930 metrov. Preverimo na zemljevidu, izkaže se zelo natančno, istih 4.930 metrov. Ni jasno, zakaj potem števec kilometrov laže na 400 metrih in kateri števec laže, na avtu ali GPS.

V redu, čas je za tiskanje zadnji pokrov in bomo ponovno testirali. zapiram. Teža končne naprave se je izkazala za 55 gramov, veliko, a ne kritično - na koncu vam bom pokazal, kako jo zmanjšati.

Prišel sem na drsališče in se odločil izmeriti hitrost hokejista. Prekleto, še vedno mora odstraniti pokrove za hitrost. Rezultat je bila velika hitrost, kot "ruska raketa" - 5 kilometrov na uro. Hodila sem, in to vse zato, ker je strop na drsališču izoliran z odsevnimi folijami, ki preprečujejo mraz. Obstaja signal s satelitov, vendar ni točen.

Naredimo še zadnji test z mobilni telefon. Telefon vidi 7 satelitov, sledilnik pa 9. Začnem beležiti in ponastavim števec kilometrov na sledilniku. No... gremo. Po prevoženih treh kilometrih sta telefon in sledilnik pokazala enake vrednosti na števcu kilometrov. 3017 proti 3021 metrim je super rezultat, take natančnosti nisem pričakoval.

Toda števec kilometrov se je motil, kar 12 tisoč kilometrov. Ni kislo. Prej, ko sem odpravljal napake v programu, sem že naletel na takšno napako in sledilnik je bil takoj premaknjen 7 tisoč kilometrov. Ko sem prišel domov, sem v Googlu ustvaril točko z ničelno zemljepisno širino in dolžino. Izkazalo se je, da se nahaja v Atlantskem oceanu, nedaleč od obale Gane. Ko sem izmeril razdaljo od njega do moje lokacije, sem dobil istih 7 tisoč kilometrov. Izkazalo se je, da modul GPS včasih preskoči ničle vzdolž koordinat. To je mogoče enostavno popraviti z dodajanjem samo enega pogoja v programsko kodo. In te napake med testi niso opazili.

Mislim, da se je sledilnik izkazal za super; to je moja prva izkušnja neposrednega dela z moduli GPS. Zakaj je to potrebno? Tak sledilnik lahko služi kot avtonomni merilnik hitrosti ali neodvisen odometer. Postavite ga lahko na kolo, avto, igračo ali kvadrokopter. Omogoča tudi merjenje razdalje v ravni črti do dane točke, pri čemer so shranjene ničelne vrednosti obstojni pomnilnik. Zapomni si največjo doseženo hitrost in vrednosti razdalje. Vse to počne avtonomno in ni odvisno od nikogar drugega kot od satelitov. In seveda, to je točna ura. Potrebujem ga za merjenje največje hitrosti in največje oddaljenosti od predmetov. Tako je, zaslonu morate dodati več višine, da izmerite, kako visoko se dvignete!

Pogovorimo se o tem, kako lahko zmanjšate težo; najlažji način za to je, da sledilnik sestavite na platformo Arduino Pro Mini na 3,3 volta. Potem ne boste potrebovali ojačevalnega pretvornika, namesto tega bo majhna linearna žica pri 3,3 volta, GPS modul deluje brez težav pri tej napetosti, na zaslonu pa boste morali zaobiti stabilizator moči.

No, takoj bom odgovoril na vprašanje: ali je mogoče dodati GSM modul in nadzorovati sledilnik prek SMS-a? Ja lahko. Za to boste morali poleg samega modula v programsko kodo dodati še obdelavo SMS ukazov in to naj bo ločen projekt.

To je to za danes, če vam je bil ta video všeč, potem sem prepričan, da vam bo všeč in delite povezavo do videa s prijatelji.

Hvala za ogled, srečno vsem in se vidimo v novih videih! Adijo!

Podatki se shranijo v preglednico dataGPS.csv, katere format ustreza zahtevam storitve. Google Moji zemljevidi.

    Programski jezik: Arduino (C++)

Video navodila

Kaj rabiš

Kako sestaviti

gps-tracker.ino // knjižnica za delo z napravami prek SPI#vključi // knjižnica za delo s kartico SD#vključi // knjižnica za delo z GPS napravo#vključi // ustvarite objekt razreda GPS in mu posredujte objekt Serial1 GPS GPS (Serial1); // LED zatič#define LED_PIN A0 // pin gumba #define BUTTON_PIN 13 // pripnite kartico CS micro-sd#define CHIP_SELECT_PIN 9 // časovni interval za zapisovanje podatkov na kartico#define INTERVAL 5000 // nastavite velikost polja za čas, datum, zemljepisno širino in dolžino#define MAX_SIZE_MASS 16 // polje za shranjevanje trenutnega časačas char [MAX_SIZE_MASS]; // stanje zapisa bool stateRec = false; // zapomni si trenutni čas long startMillis = millis() ; void setup() ( // odprite serijska vrata za spremljanje dejanj v programu Serial.begin(115200); // počakajte, da se monitor odpre serijska vrata // za sledenje vsem dogodkom v programu// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // odprite serijsko povezavo z modulom GPS Serial1.begin(115200); // nastavite LED na izhodni način pinMode(LED_PIN, IZHOD) ; // nastavite gumb na način prijave pinMode(BUTTON_PIN, INPUT_PULLUP) ; // izhod informacij o inicializaciji v serijska vrata Serial.println("Inicializacija kartice SD ...") ; // inicializacija kartice SD while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kartica ni uspela ali ni prisotna") ; delay(1000) ; ) // izhodne informacije v serijska vrata Serial.println("Inicializirana kartica"); // ustvari objekt dataFile razreda File za delo z datotekami Datoteka dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // če datoteka obstajače (podatkovna datoteka) ( // zapišite ime prihodnjih podatkov na pomnilniško kartico dataFile.println("Čas, koordinate, hitrost" ); // zaprite datoteko dataFile.close(); Serial.println("Shrani v redu"); ) else ( Serial.println ("Napaka pri odpiranju test.csv" ) ; ) ) void loop() ( // Posnemite pritisk gumba if (! digitalRead(BUTTON_PIN) ) ( // spremenite stanje "snemanje" / "ne piše" na pomnilniško kartico stanjeRec =! stateRec; // spremenite stanje LED indikatorja digitalWrite(LED_PIN, stateRec) ; ) // če podatki prihajajo iz modula GPSče (gps.available()) ( // branje podatkov in razčlenjevanje gps.readParsing(); // preverite stanje GPS modula switch (gps.getState () ) ( // vse je OK case GPS_OK: Serial.println ("GPS je OK" ) ); // če je določeni časovni interval potekel if (millis() - startMillis > INTERVAL && stateRec) ( // shrani podatke na pomnilniško kartico shraniSD(); // zapomni si trenutni čas startMillis = millis() ; ) odmor ; // primer podatkovne napake GPS_ERROR_DATA: Serial.println("GPS podatki o napakah" ); odmor ; // brez povezave s sateliti case GPS_ERROR_SAT: Serial.println ( "GPS ni povezave s sateliti") ; odmor ; ) ) ) // funkcija za shranjevanje podatkov na pomnilniško kartico void saveSD() (Datoteka dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // če datoteka obstaja in je bila odprtače (podatkovna datoteka) ( // bere trenutni čas gps.getTime(čas, MAX_SIZE_MASS); // zapis časa na pomnilniško kartico dataFile.print(" \" " ) ; dataFile.print(čas); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(" \" " ) ; // branje in pisanje koordinat zemljepisne širine in dolžine na pomnilniško kartico dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print ("," ); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(gps.getSpeedKm()); dataFile.println("km/h"); dataFile.close(); Serial.println("Shrani v redu"); ) else ( Serial.println ("Napaka pri odpiranju test.csv" ) ; ) )