Lako je napraviti sam GPS uređaj za praćenje temeljen na GY-NEO6M. Kratak opis prozora postavki Arduino GPS trackera Hatire Arduino

Nakon nekoliko eksperimenata s Arduinom, odlučio sam napraviti jednostavan i ne baš skup GPS tracker s koordinatama koje se putem GPRS-a šalju na server.
Rabljeni Arduino Mega 2560 ( Arduino Uno), SIM900 - GSM/GPRS modul (za slanje informacija na server), GPS prijemnik SKM53 GPS.

Sve je kupljeno na ebay.com, ukupno oko 1500 rubalja (oko 500 rubalja za arduino, malo manje za GSM modul, malo više za GPS).

GPS prijemnik

Prvo morate razumjeti kako raditi s GPS-om. Odabrani modul je jedan od najjeftinijih i najjednostavnijih. Međutim, proizvođač obećava bateriju za spremanje satelitskih podataka. Prema podatkovnoj tablici, hladno pokretanje trebalo bi trajati 36 sekundi, međutim, u mojim uvjetima (10. kat od prozorske daske, nema zgrada u blizini) trebalo je čak 20 minuta. Međutim, sljedeći start je već 2 minute.

Važan parametar uređaja spojenih na Arduino je potrošnja energije. Ako preopteretite Arduino pretvarač, može pregorjeti. Za prijemnik koji se koristi, maksimalna potrošnja energije je 45 mA pri 3,3 v. Zašto bi specifikacija trebala naznačiti jakost struje pri naponu različitom od potrebnog (5V) za mene je misterij. Međutim, Arduino pretvarač će izdržati 45 mA.

Veza
GPS nije kontroliran, iako ima RX pin. U koju svrhu nije poznato. Glavna stvar koju možete učiniti s ovim prijemnikom je čitanje podataka putem NMEA protokola s TX pina. Razine - 5V, samo za Arduino, brzina - 9600 bauda. Spajam VIN na VCC arduina, GND na GND, TX na RX odgovarajućeg serijskog uređaja. Podatke sam prvo čitao ručno, a zatim pomoću knjižnice TinyGPS. Začudo, sve je čitljivo. Nakon prelaska na Uno, morao sam koristiti SoftwareSerial, a onda su počeli problemi - izgubili su se neki od znakova u poruci. Ovo nije previše kritično, jer TinyGPS reže nevažeće poruke, ali je prilično neugodno: možete zaboraviti na frekvenciju od 1 Hz.

Kratka napomena o SoftwareSerialu: nema hardverskih priključaka na Unu (osim onog spojenog na USB Serial), tako da morate koristiti softver. Dakle, može primati podatke samo na pinu na kojem ploča podržava prekide. U slučaju Unoa, to su 2 i 3. Štoviše, samo jedan takav port može primati podatke u isto vrijeme.

Ovako izgleda "testni štand".

GSM prijemnik/odašiljač


Sada dolazi zanimljiviji dio. GSM modul - SIM900. Podržava GSM i GPRS. Ni EDGE, a posebno 3G, nisu podržani. Za prijenos koordinatnih podataka, ovo je vjerojatno dobro - neće biti kašnjenja ili problema pri prebacivanju između načina, plus GPRS je sada dostupan gotovo posvuda. Međutim, za neke složenije primjene to možda neće biti dovoljno.

Veza
Modul se također kontrolira preko serijskog porta, s istom razinom - 5V. I ovdje će nam trebati i RX i TX. Modul je shield, odnosno instaliran je na Arduinu. Štoviše, kompatibilan je s mega i uno. Zadana brzina je 115200.

Sastavljamo ga na Megi, a ovdje nas čeka prvo neugodno iznenađenje: TX pin modula pada na 7. pin Mege. Prekidi nisu dostupni na 7. pinu mege, što znači da ćete morati spojiti 7. pin, recimo, na 6. pin, na kojem su mogući prekidi. Tako ćemo potrošiti jedan Arduino pin. Pa, za mega nije baš strašno - na kraju krajeva, ima dovoljno igala. Ali za Uno ovo je već kompliciranije (podsjećam vas da postoje samo 2 pina koji podržavaju prekide - 2 i 3). Kao rješenje ovog problema, možemo predložiti da se modul ne instalira na Arduino, već da se poveže žicama. Tada možete koristiti Serial1.

Nakon povezivanja pokušavamo "razgovarati" s modulom (ne zaboravite ga uključiti). Odaberemo brzinu porta - 115200, a dobro je da svi ugrađeni serijski portovi (4 na mega, 1 na uno) i svi softverski portovi rade istom brzinom. Na taj način možete postići stabilniji prijenos podataka. Ne znam zašto, iako mogu nagađati.

Dakle, pišemo primitivni kod za prosljeđivanje podataka između serijskih portova, šaljemo atz i primamo šutnju kao odgovor. Što se dogodilo? Ah, velika i mala slova. ATZ, sve je u redu. Hura, modul nas čuje. Trebate li nas nazvati iz znatiželje? ATD +7499... Zvoni fiksni telefon, iz arduina izlazi dim, laptop se gasi. Arduino pretvarač je pregorio. Bilo je loše napajati ga 19 volti, iako je napisano da može raditi od 6 do 20 V, preporučuje se 7-12 V. Podatkovna tablica za GSM modul nigdje ne govori o potrošnji energije pod opterećenjem. Pa Mega ide u skladište rezervnih dijelova. Zaustavljenog daha uključujem laptop koji je preko +5V linije s USB-a dobio +19V. Radi, a čak ni USB nije pregorio. Hvala Lenu što nas štiti.

Nakon što je pretvarač pregorio, tražio sam trenutnu potrošnju. Dakle, vrh - 2A, tipičan - 0,5A. To očito nadilazi mogućnosti Arduino pretvarača. Zahtijeva odvojenu hranu.

Programiranje
Modul pruža opsežne mogućnosti prijenosa podataka. Počevši od glasovnih poziva i SMS-a pa sve do samog GPRS-a. Štoviše, za potonje je moguće izvesti HTTP zahtjev pomoću AT naredbi. Morat ćete poslati nekoliko, ali isplati se: zapravo ne želite ručno izraditi zahtjev. Postoji nekoliko nijansi s otvaranjem kanala za prijenos podataka putem GPRS-a - sjećate se klasičnog AT+CGDCONT=1, “IP”, “apn”? Dakle, ovdje je potrebna ista stvar, ali malo lukavije.

Da biste dobili stranicu na određenom URL-u, trebate poslati sljedeće naredbe:
AT+SAPBR=1,1 //Otvoreni operater (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tip veze - GPRS AT+SAPBR=3,1,"APN","internet" //APN, za Megafon - internet AT+HTTPINIT //Inicijaliziraj HTTP AT+HTTPPARA="CID",1 //ID operatera za korištenje. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Stvarni URL, nakon sprintf s koordinatama AT+HTTPACTION=0 // Zatražite podatke koristeći GET metodu //pričekajte odgovor AT+HTTPTERM //zaustavite HTTP

Kao rezultat toga, ako postoji veza, dobit ćemo odgovor od poslužitelja. To jest, zapravo, već znamo kako poslati podatke o koordinatama ako ih poslužitelj primi putem GET-a.

Prehrana
Kako je napajanje GSM modula iz Arduino pretvarača, kako sam saznao, loša ideja, odlučeno je da se na istom ebay-u kupi 12v->5v, 3A pretvarač. Međutim, modul ne voli 5V napajanje. Idemo hakirati: spojite 5V na pin s kojeg dolazi 5V iz arduina. Tada će ugrađeni pretvarač modula (puno jači od Arduino pretvarača, MIC 29302WU) od 5V napraviti ono što modulu treba.

poslužitelj

Poslužitelj je napisao primitivni - pohranjivanje koordinata i crtanje na Yandex.maps. U budućnosti je moguće dodati razne značajke, uključujući podršku za mnoge korisnike, status "naoružan/nenaoružan", stanje sustava vozila (paljenje, prednja svjetla, itd.), a možda čak i kontrolu sustava vozila. Naravno, uz odgovarajuću podršku za tracker, koji se glatko pretvara u punopravni alarmni sustav.

Terenska ispitivanja

Ovako izgleda sklopljeni uređaj, bez kućišta:

Nakon instaliranja pretvarača struje i stavljanja u kućište s mrtvog DSL modema, sustav izgleda ovako:

Zalemio sam žice i uklonio nekoliko kontakata iz Arduino blokova. Izgledaju ovako:

Spojio sam 12V u autu, vozio se po Moskvi i dobio stazu:


Točke staze su prilično udaljene jedna od druge. Razlog je što slanje podataka putem GPRS-a traje relativno dugo, a za to vrijeme se ne očitavaju koordinate. Ovo je očito programska pogreška. Tretira se, prvo, trenutnim slanjem paketa koordinata tijekom vremena, a drugo, asinkronim radom s GPRS modulom.

Vrijeme traženja satelita na suvozačkom sjedalu automobila je nekoliko minuta.

zaključke

Stvaranje GPS trackera na Arduinu vlastitim rukama je moguće, iako nije trivijalan zadatak. Glavno pitanje sada je kako sakriti uređaj u automobilu tako da ne bude izložen štetnim čimbenicima (voda, temperatura), da nije prekriven metalom (GPS i GPRS će biti zaštićeni) i da nije posebno uočljiv. Za sada samo leži u kabini i spaja se na utičnicu za upaljač.

Pa, također moramo ispraviti kod za glatkiju stazu, iako tracker već obavlja glavni zadatak.

Rabljeni uređaji

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • GSM/GPRS štit temeljen na SIM900
  • DC-DC 12v->5v 3A pretvarač

Osobni GPS odašiljači

Danas napredak ide tolikom brzinom da uređaji koji su prije bili glomazni, skupi i visoko specijalizirani brzo gube veličinu, težinu i cijenu, ali dobivaju mnoge nove funkcije.

Tako su uređaji koji se temelje na GPS tehnologiji stigli do džepnih gadgeta i tamo se čvrsto smjestili, dajući ljudima nove mogućnosti. Posebno vrijedi istaknuti pojedinačne GPS odašiljače.

U biti, to su isti GPS trackeri, samo dizajnirani za korištenje ne na vozilu, već od strane osobe u svakodnevnom životu.

Ovisno o modelu, nekoliko razne uređaje. U svom najjednostavnijem obliku, to je jednostavno mala kutija bez zaslona, ​​koja omogućuje kontrolu kretanja djece, životinja ili nekih drugih predmeta, na kojem je fiksiran.

Unutra se nalazi GPS modul, koji određuje koordinate na zemlji, GSM/GPRS modul koji odašilje informacije i prima upravljačke naredbe, kao i izvor napajanja koji osigurava autonomni rad tijekom dugog vremena.

Funkcionalnost GPS odašiljača

Kako se funkcionalnost povećava, pojavljuju se sljedeće mogućnosti uređaja:


Opcije za GPS odašiljače

Ovisno o konfiguraciji, kućišta odašiljača mogu se značajno razlikovati. Razni modeli imati izvršenja u obrascu Mobiteli, klasične navigatore ili čak ručne satove.

Šareni dizajn posebnih verzija i korisni dodaci omogućuju djeci da ove uređaje tretiraju ne kao "roditeljske špijune", već kao moderne i praktične naprave.

Kao prednost vrijedi spomenuti činjenicu da mnoge verzije uređaja mogu bez njega pretplatu za usluge specijaliziranih operatera, a sve potrebne informacije klijentu se šalju izravno putem interneta ili SMS poruka, što omogućuje značajne uštede na održavanju takve opreme.

Članci o GPS trackerima

U ovom ću članku pokazati kako koristiti gsm modul s arduinom koristeći sim800L kao primjer. Iste upute su sasvim prikladne za korištenje bilo kojeg drugog gsm modula, na primjer, sim900 itd., Jer svi moduli rade na približno isti način - to je razmjena AT naredbi kroz port.

Prikazat ću korištenje modula s arduinom na primjeru SMS releja, koji se može koristiti za upravljanje uređajem na daljinu putem SMS naredbi. Ovo se može koristiti u kombinaciji s auto alarmima itd.

Modul je povezan s Arduinom preko UART sučelja softverskog serijskog porta koji radi na 2 i 3 digitalna pina Arduino nano.

Rad s Arduinom s GSM modulima

Za napajanje modula potreban je napon u rasponu od 3,6V do 4,2V, što znači da ćete morati koristiti dodatni stabilizator napona, jer Arduino ima instaliran stabilizator od 3,3 volta, koji nije prikladan za napajanje modula , drugi razlog za ugradnju dodatnog stabilizatora je taj što je GSM modul ozbiljno opterećenje, budući da ima slab odašiljač koji pruža stabilna veza s mobilnom stanicom. Napajanje za Arduino nano dovodi se do VIN pina - to je stabilizator ugrađen u Arduino koji osigurava rad modula u širokom rasponu napona (6-10V). Relejni modul se spaja prema zadanom programskom tekstu na pin 10 Arduino nano i lako se može promijeniti na bilo koji drugi koji radi kao digitalni izlaz.

Radi ovako: instalirajte SIM karticu u GSM modul, uključite napajanje i pošaljite SMS s tekstom "1" na broj SIM kartice da bismo uključili naš relej, da bismo ga isključili šaljemo SMS s tekstom “0”.

#uključi
SoftwareSerial gprsSerial(2, 3); // postavite pinove 2 i 3 za softverski port
int LedPin = 10; // za relej

void setup()
{
gprsSerial.begin(4800);
pinMode(LedPin, IZLAZ);

// postavljanje prijema poruka

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
kašnjenje (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
kašnjenje (500); // odgoda za obradu naredbi
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
kašnjenje (700);
}

String currStr = "";
// ako je ovaj redak poruka, tada će varijabla imati vrijednost True
boolean isStringMessage = false;

void petlja()
{
if (!gprsSerial.available())
povratak;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// ako je trenutni redak poruka, onda...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, VISOKO);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) inače (
if (currStr.startsWith("+CMT")) (
// ako trenutni redak počinje s “+CMT”, onda sljedeća poruka
isStringMessage = istina;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Video verzija članka:

Oznake: #Arduino, #SIM800L

Vaša oznaka:

Proizvodi korišteni u ovom članku:

← GPS zapisivač na arduinu | Kontrola releja preko COM porta →

GSM skener na RTL-SDR

| Dom| engleski | Razvoj | FAQ |

Glavne karakteristike skenera

GSM skener skenira GSM downlink kanale i prikazuje informacije o snazi ​​signala i vlasništvu kanala jednog od tri glavna operatera mobilne komunikacije MTS, Beeline i Megafon. Na temelju rezultata rada, skener vam omogućuje spremanje popisa identifikatora bazne stanice MCC, MNC, LAC i CI za sve skenirane kanale.
GSM skener se može koristiti za procjenu razine GSM signala i usporedbu kvalitete signala različitih operatera, procjene radijske pokrivenosti, prilikom odlučivanja o instaliranju pojačala mobilnog signala i podešavanja njihovih parametara, u obrazovne svrhe itd.
Skener radi pod Windowsima i koristi jednostavan i jeftin prijemnik - RTL-SDR. O RTL-SDR možete pročitati na:
RTL-SDR (RTL2832U) i softverski definirane radijske vijesti i projekti,
RTL-SDR – OsmoSDR,
RTL-SDR na ruskom.
Parametri RTL-SDR određuju glavne karakteristike skenera. Naravno, GSM skener nije zamjena za normalnu mjernu opremu.
Skener se distribuira besplatno, bez ikakvih ograničenja u korištenju.
Trenutna verzija podržava pojas GSM 900 i ne podržava GSM 1800. To je određeno činjenicom da je radna frekvencija RTL-SDR-a s tunerom R820T ograničena na 1760 MHz. Postoji nada da će uporaba eksperimentalnog RTL-SDR drajvera omogućiti rad u barem dijelu raspona od 1800 MHz.

Pokretanje skenera

Najnoviju verziju skenera možete preuzeti na ovoj poveznici. Samo raspakirajte datoteku na prikladno mjesto i pokrenite gsmscan.exe.
Prethodne verzije skener, poveznica na repozitorij s izvorima i druge informacije vezane uz razvoj nalaze se na stranici za razvoj.
Za rad skenera potrebna je instalacija RTL-SDR drajvera; ako oni već nisu instalirani, to se može jednostavno učiniti pomoću programa Zadig koji opisuje postupak instalacije.

Korištenje skenera

Ispod je prikaz prozora programa skenera:

Vodoravna os prikazuje broj GSM kanala u obliku ARFCN ili u MHz, a okomita os prikazuje razinu signala u dBm. Visina linije pokazuje snagu signala.

GSM modul NEOWAY M590 komunikacija sa Arduinom

Ako su BS identifikatori uspješno dekodirani i odgovaraju identifikatorima tri glavna telekom operatera, crte su obojene u odgovarajuće boje.
Padajući popisi na vrhu zaslona omogućuju vam odabir SDR prijamnika, ako ih je nekoliko spojenih, domet GSM rad 900 ili GSM 1800 i jedinice horizontalne osi ARFCN ili MHz.
Gumbi vam omogućuju spremanje izvješća o radu skenera u obliku popisa dekodiranih baznih stanica, brisanje rezultata BS dekodiranja i dobivanje informacija o programu.

Načela i značajke rada.

Tijekom rada program skenira područje radne frekvencije s korakom od 2,0 MHz (10 GSM kanala) i digitalizira signal s frekvencijom uzorkovanja od 2,4 MHz. Proces skeniranja sastoji se od brzog prolaska kroz cijeli raspon za mjerenje jačine signala i sporog prolaska za dekodiranje BS identifikatora.

Jedan korak dekodiranja izvodi se nakon prelaženja cijelog raspona radi mjerenja snage. Stoga se u rasponu GSM 900 razina signala ažurira otprilike jednom svake 2 s, a kompletan prolaz dekodiranja traje oko 1 minute.
Zbog loše kvalitete signala primljenog od RTL-SDR-a, vjerojatnost ispravnog dekodiranja sistemskih informacija (SI) BS kanala za kontrolu emitiranja (BCCH) nije velika. Fluktuacije razine signala kao rezultat višestaznog širenja također smanjuju vjerojatnost dekodiranja sistemskih informacija. Iz tih razloga, za dobivanje BS identifikatora, potrebno je da skener akumulira informacije u razdoblju od oko 10 minuta. Ali čak ni u ovom slučaju ne pružaju svi kanali ovo mjesto dovoljna razina signala i kvaliteta za dekodiranje čak i najidealnijim prijamnikom. Osim toga, ne koriste se svi GSM kanali za rad GSM standard, kao što se može vidjeti na gornjoj slici, kanali 975 - 1000 su zauzeti od strane Megafona za rad na UMTS standard.
Tijekom rada, skener dodaje sistemske informacije o novim dekodiranim kanalima općem nizu informacija o kanalima. No informacije o prethodno dekodiranim kanalima ne brišu se kada se informacije o sustavu ne dekodiraju u ovom koraku i ostaju u nizu. Za brisanje ovih informacija, koristite gumb za brisanje rezultata BS dekodiranja.
Kada kliknete na gumb za spremanje izvješća, akumulirani rezultati se spremaju u tekstualna datoteka s nazivom koji se sastoji od naziva programa, datuma i vremena kada su podaci spremljeni. Ispod je primjer dijela datoteke izvješća:
Skener je dizajniran za rad pod Windows 7, 8.1 i 10. Rad je testiran s tri primjerka RTL-SDR s R820T tunerom, ostale vrste tunera nisu testirane.
Posebna verzija programa je kompajlirana za rad pod Windows XP, radi nekoliko puta sporije od standardne verzije.

Razvoj.

Program skenera isporučuje se takav kakav jest, bez ikakvih jamstava ili odgovornosti. Ako imate razumne ideje o tome kako proširiti funkcionalnost ili poboljšati performanse skenera, spremni smo razgovarati o mogućnosti njihove implementacije.
Možete sudjelovati u razvoju skenera; za to posjetite stranicu za razvoj.
U planu je daljnji razvoj GSM skenera, moguće uz Vaše sudjelovanje.

Nakon nekoliko eksperimenata s Arduinom, odlučio sam napraviti jednostavan i ne baš skup GPS tracker s koordinatama koje se putem GPRS-a šalju na server.
Rabljeni Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modul (za slanje informacija na server), GPS prijemnik SKM53 GPS.

Sve je kupljeno na ebay.com, ukupno oko 1500 rubalja (oko 500 rubalja za arduino, malo manje za GSM modul, malo više za GPS).

GPS prijemnik

Prvo morate razumjeti kako raditi s GPS-om. Odabrani modul je jedan od najjeftinijih i najjednostavnijih. Međutim, proizvođač obećava bateriju za spremanje satelitskih podataka. Prema podatkovnoj tablici, hladno pokretanje trebalo bi trajati 36 sekundi, međutim, u mojim uvjetima (10. kat od prozorske daske, nema zgrada u blizini) trebalo je čak 20 minuta. Međutim, sljedeći start je već 2 minute.

Važan parametar uređaja spojenih na Arduino je potrošnja energije. Ako preopteretite Arduino pretvarač, može pregorjeti. Za prijemnik koji se koristi, maksimalna potrošnja energije je 45 mA pri 3,3 v. Zašto bi specifikacija trebala naznačiti jakost struje pri naponu različitom od potrebnog (5V) za mene je misterij. Međutim, Arduino pretvarač će izdržati 45 mA.

Veza

GPS nije kontroliran, iako ima RX pin. U koju svrhu nije poznato. Glavna stvar koju možete učiniti s ovim prijemnikom je čitanje podataka putem NMEA protokola s TX pina. Razine - 5V, samo za Arduino, brzina - 9600 bauda. Spajam VIN na VCC arduina, GND na GND, TX na RX odgovarajućeg serijskog uređaja. Podatke sam prvo čitao ručno, a zatim pomoću knjižnice TinyGPS. Začudo, sve je čitljivo. Nakon prelaska na Uno, morao sam koristiti SoftwareSerial, a onda su počeli problemi - izgubili su se neki od znakova u poruci. Ovo nije previše kritično, jer TinyGPS reže nevažeće poruke, ali je prilično neugodno: možete zaboraviti na frekvenciju od 1 Hz.

Kratka napomena o SoftwareSerialu: na Unu nema hardverskih priključaka, pa morate koristiti softverski. Dakle, može primati podatke samo na pinu na kojem ploča podržava prekide. U slučaju Unoa, to su 2 i 3. Štoviše, samo jedan takav port može primati podatke u isto vrijeme.

Ovako izgleda "testni štand".


GSM prijemnik/odašiljač


Sada dolazi zanimljiviji dio. GSM modul - SIM900. Podržava GSM i GPRS. Ni EDGE, a posebno 3G, nisu podržani. Za prijenos koordinatnih podataka, ovo je vjerojatno dobro - neće biti kašnjenja ili problema pri prebacivanju između načina, plus GPRS je sada dostupan gotovo posvuda. Međutim, za neke složenije primjene to možda neće biti dovoljno.

Veza

Modul se također kontrolira preko serijskog porta, s istom razinom - 5V. I ovdje će nam trebati i RX i TX. Modul je shield, odnosno instaliran je na Arduinu. Štoviše, kompatibilan je s mega i uno. Zadana brzina je 115200.

Sastavljamo ga na Megi, a ovdje nas čeka prvo neugodno iznenađenje: TX pin modula pada na 7. pin Mege. Prekidi nisu dostupni na 7. pinu mege, što znači da ćete morati spojiti 7. pin, recimo, na 6. pin, na kojem su mogući prekidi. Tako ćemo potrošiti jedan Arduino pin. Pa, za mega nije baš strašno - na kraju krajeva, ima dovoljno igala. Ali za Uno ovo je već kompliciranije (podsjećam vas da postoje samo 2 pina koji podržavaju prekide - 2 i 3). Kao rješenje ovog problema, možemo predložiti da se modul ne instalira na Arduino, već da se poveže žicama. Tada možete koristiti Serial1.

Nakon povezivanja pokušavamo "razgovarati" s modulom (ne zaboravite ga uključiti). Odaberemo brzinu porta - 115200, a dobro je da svi ugrađeni serijski portovi (4 na mega, 1 na uno) i svi softverski portovi rade istom brzinom. Na taj način možete postići stabilniji prijenos podataka. Ne znam zašto, iako mogu nagađati.

Dakle, pišemo primitivni kod za prosljeđivanje podataka između serijskih portova, šaljemo atz i primamo šutnju kao odgovor. Što se dogodilo? Ah, velika i mala slova. ATZ, sve je u redu. Hura, modul nas čuje. Trebate li nas nazvati iz znatiželje? ATD +7499... Zvoni fiksni telefon, iz arduina izlazi dim, laptop se gasi. Arduino pretvarač je pregorio. Bilo je loše napajati ga 19 volti, iako je napisano da može raditi od 6 do 20 V, preporučuje se 7-12 V. Podatkovna tablica za GSM modul nigdje ne govori o potrošnji energije pod opterećenjem. Pa Mega ide u skladište rezervnih dijelova. Zaustavljenog daha uključujem laptop koji je preko +5V linije s USB-a dobio +19V. Radi, a čak ni USB nije pregorio. Hvala Lenu što nas štiti.


Nakon što je pretvarač pregorio, tražio sam trenutnu potrošnju. Dakle, vrh - 2A, tipičan - 0,5A. To očito nadilazi mogućnosti Arduino pretvarača. Zahtijeva odvojenu hranu.

Programiranje

Modul pruža opsežne mogućnosti prijenosa podataka. Počevši od glasovnih poziva i SMS-a pa sve do samog GPRS-a. Štoviše, za potonje je moguće izvršiti HTTP zahtjev pomoću AT naredbi. Morat ćete poslati nekoliko, ali isplati se: zapravo ne želite ručno izraditi zahtjev. Postoji nekoliko nijansi s otvaranjem kanala za prijenos podataka putem GPRS-a - sjećate se klasičnog AT+CGDCONT=1, “IP”, “apn”? Dakle, ovdje je potrebna ista stvar, ali malo lukavije.

Da biste dobili stranicu na određenom URL-u, trebate poslati sljedeće naredbe:

AT+SAPBR=1,1 //Otvoreni operater (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tip veze - GPRS AT+SAPBR=3,1,"APN","internet" //APN, za Megafon - internet AT+HTTPINIT //Inicijaliziraj HTTP AT+HTTPPARA="CID",1 //ID operatera za korištenje. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Stvarni URL, nakon sprintf s koordinatama AT+HTTPACTION=0 // Zatražite podatke koristeći GET metodu //pričekajte odgovor AT+HTTPTERM //zaustavite HTTP

Kao rezultat toga, ako postoji veza, dobit ćemo odgovor od poslužitelja. To jest, zapravo, već znamo kako poslati podatke o koordinatama ako ih poslužitelj primi putem GET-a.

Prehrana

Kako je napajanje GSM modula iz Arduino pretvarača, kako sam saznao, loša ideja, odlučeno je da se na istom ebay-u kupi 12v->5v, 3A pretvarač. Međutim, modul ne voli 5V napajanje. Idemo hakirati: spojite 5V na pin s kojeg dolazi 5V iz Arduina. Tada će ugrađeni pretvarač modula (puno jači od Arduino pretvarača, MIC 29302WU) od 5V napraviti ono što modulu treba.

poslužitelj

Poslužitelj je napisao primitivni - pohranjivanje koordinata i crtanje na Yandex.maps. U budućnosti je moguće dodati razne značajke, uključujući podršku za mnoge korisnike, status "naoružan/nenaoružan", stanje sustava vozila (paljenje, prednja svjetla, itd.), a možda čak i kontrolu sustava vozila. Naravno, uz odgovarajuću podršku za tracker, koji se glatko pretvara u punopravni alarmni sustav.

Terenska ispitivanja

Ovako izgleda sklopljeni uređaj, bez kućišta:


Nakon instaliranja pretvarača struje i stavljanja u kućište s mrtvog DSL modema, sustav izgleda ovako:

Zalemio sam žice i uklonio nekoliko kontakata iz Arduino blokova. Izgledaju ovako:

Spojio sam 12V u autu, vozio se po Moskvi i dobio stazu:


Staza se ispostavlja poderanom. Razlog je što slanje podataka putem GPRS-a traje relativno dugo, a za to vrijeme se ne očitavaju koordinate. Ovo je očito programska pogreška. Tretira se, prvo, trenutnim slanjem paketa koordinata tijekom vremena, a drugo, asinkronim radom s GPRS modulom.

Dijagram projekta:

Pozdrav prijatelji, imamo veliki broj različitih svemirskih letjelica koje lete iznad naših glava. Među njima je oko 90 iznimno korisnih navigacijskih satelita američkog GPS sustava, ruskog GLONASS, europskog Galilea i kineskog BeiDoua. I danas ćemo uhvatiti njihov signal.

Prvo, malo teorije: satelitski navigacijski sustav je mreža svemirskih letjelica koje lete duž prethodno poznatih ruta, točno promatrajući svoju orbitu i putanju, ili se nalaze na poznatoj stacionarnoj točki u geostacionarnoj ili geosinkronoj orbiti. Sateliti u prosjeku lete na visini od oko 20 tisuća kilometara, a svaki je ultraprecizan atomski sat koji neprekidno emitira svoje vrijeme cijelom planetu. Trenutno vrijeme.

Radiosignal koji se širi brzinom svjetlosti dolazi do Zemlje s kašnjenjem od 60 do 90 milisekundi, što ovisi o udaljenosti satelita. Znajući točnu lokaciju izvora radio signala prema vremenskom kašnjenju njegovog širenja, možete saznati točnu udaljenost do satelita. A zatim, triangulacijom udaljenosti do nekoliko poznatih objekata, možete saznati gdje se nalazite u svemiru.

Zamislite da je ova plava kugla naš planet. Tri satelita lete iznad njega na visini od 20 tisuća kilometara. Prilikom mjerenja udaljenosti do prvog dobit ćete informaciju da se nalazite negdje na ovom krugu - za sada to nije previše informativno. Signal drugog satelita razjasnit će vašu lokaciju na dvije sjecišne točke bez obzira na nadmorsku visinu. Signal trećeg navigacijskog satelita pokazat će visinu tih točaka iznad površine i formalno riješiti navigacijsku jednadžbu, svodeći vašu lokaciju na dvije moguće lokacije. U stvarnosti, jedna od tih koordinata ima nevjerojatne karakteristike i odbacuje se, potpuno rješavajući problem. Signal s četvrtog satelita čini istu stvar - već nedvosmisleno točno rješava navigacijsku jednadžbu.

Mjerenjem udaljenosti do svakog sljedećeg satelita povećava se točnost pozicioniranja koja se danas kreće od 1 do 3 metra uz standardnu ​​vidljivost od 10-ak navigacijskih satelita.

Teoriju smo sredili, idemo na praksu. Danas se različiti navigacijski moduli prodaju zasebno. Najjednostavniji i najstariji podržavaju samo signale američkog GPS promatračkog sustava, u prosjeku 5-7 satelita. Napredniji moduli također mogu primati signale iz ruske konstelacije GLONASS, povećavajući ukupan broj promatranih satelita u prosjeku dva puta. U prodaji su i moduli koji su u kombinaciji s kompasom, služe za preciznu navigaciju i održavanje kursa.

Na ekranu mog telefona vidljivi su sateliti različitih navigacijskih sustava. Krugovi su GPS, trokuti GLONASS, a zvijezde kineski BeiDou. Dakle, moj telefon podržava tri različita navigacijski sustavi a kombiniranjem signala s njih povećava se točnost određivanja lokacije. Sada je iznad moje glave 28 satelita, a signal je dostupan sa samo 7. Tj. moj telefon već unaprijed zna gdje je koji satelit. Nedostatak signala s 21 satelita znači da su izvan vidnog polja. Signal navigacije je jako slab, od riječi VASCHE, gotovo da se i ne reflektira, blokira ga teren, zgrade, krov automobila - bilo koji metal iznad glave ili sa strane. Čak i snijeg koji pada izvan prozora ometa dobar prijem.

Za provedbu projekta trebat će vam niz elektroničkih modula: programabilna platforma Arduino Nano, OLED zaslon 128 x 32 točke (povezan je preko I2C sabirnice), GPS modul za povezivanje putem UART-a, bilo koji litijska baterija s kapacitetom iznad 200 miliampera, modulom zaštitnog punjenja za litij i pojačivačem za dobivanje 5 volti. Ovdje imam tri različite vrste, bilo koja će poslužiti. Također sam planirao koristiti RGB LED u boji za označavanje statusa, ali sam to napustio kako je projekt napredovao.

Spojimo ekran na Arduino i naiđemo na prvu poteškoću. Standardna knjižnica OLED ekran zauzima 20 kB, što je 70% memorije mikrokontrolera i ne ostavlja praktički nikakav prostor za program. Prethodno sam sastavljao visinomjer i suočio se s činjenicom da svaka nova linija koda dovodi do prelivanja memorije i mikrokontroler se smrzava tijekom rada. Stoga ću koristiti mnogo više svjetlo knjižnica. Ne radi s grafikom i prikazuje samo tekst na OLED ekranu, a zauzima samo 1 KB memorije.

Posebno spajam GPS modul na matičnu ploču i vidim prve navigacijske podatke - signal iz svemira je uhvaćen i obrađen. Sada prikazujem informacije na ekranu. Klasa! Vidi 4 satelita, sada 3, pa opet 4, već 5! Za bolji GPS prijem, modul visi izvan prozora na žici.

Tijekom razvoja projekta koristio sam GPS module različiti tipovi. Jednostavan GPS i kombinirani GPS s Glonassom. Morali smo provesti niz višesatnih eksperimenata kako bismo provjerili stabilnost rada. Pokazalo se da moduli rade, ali sa softverske biblioteke Morao sam petljati. Pokušao nekoliko različite knjižnice, a TinyGPS+ je bio jedini koji je radio sa svim GPS modulima odjednom.

Općenito, biblioteka analizira NMEA protokol; ona jednostavno analizira podatke koje GPS modul izbacuje dvaput u sekundi. Ovako izgleda neobrađeni tok podataka.

Kao rezultat toga, moj firmware vam omogućuje povezivanje gotovo bilo kojeg GPS modula putem UART-a s NMEA protokolom za prijenos podataka. Zapravo, ovo je većina modula koji imaju RX i TX pinove. Preporučujem da uzmete GPS modul iz Glonassa, on vidi više satelita, pa je njegova točnost veća. Linkovi na sve komponente i module nalaze se u opisu ovog videa.

Breadboard je pokazao punu funkcionalnost sustava, sada možete sastaviti sve u hardveru. Kao napajanje koristit ću litijsku bateriju, spojit će se na zaštitnu ploču s punjenjem. Na ovoj ploči donji otpornik R3 postavlja struju punjenja baterije, zadana vrijednost je 1 amper, to je puno za male baterije, pa je otpornik potrebno zamijeniti. Na ekranu vidite pločicu s vrijednostima otpornika za različite struje punjenja. Ako vaša baterija ima kapacitet od 500 miliamper sati, tada morate postaviti struju punjenja koja nije veća od ove vrijednosti. Oni. možete postaviti 200 ili 300 miliampera, a ne prekoračiti 500.

Zatim je potrebno povećati napon; zaslon i GPS modul napajaju se s 5 volti. Učinit ćemo to pomoću pretvarača pojačanog napona. Oni se obično ugrađuju u power bankove kako bi podigli napon s 3,7 na 5 volti. Koristit ću mali zeleni modul, može dati do 300 mA i više je nego dovoljan za ovaj projekt.

Ažurirao sam firmware, sada pri učitavanju glavni zaslon prikazuje trenutno točno vrijeme sa satelita, broj vidljivih satelita i trenutnu brzinu trackera, skače jer postoji greška u određivanju lokacije. Kada pritisnete gumb, zaslon se mijenja. Ovdje se prikazuju trenutna vrijednost brzine i maksimalna vrijednost za razdoblje promatranja. Na drugom ekranu nalazi se trenutna udaljenost do nulte točke, najveća zabilježena udaljenost od nje i brojač kilometara.

Mjerim veličine svih modula i pokušavam ih složiti što kompaktnije. Ali koliko god sam se trudio, tanki zaslon nije pristajao uz široki. GPS prijemnik ohm Stoga sam odlučio zamijeniti zaslon s drugim OLED 128x64 piksela. To ga čini ergonomičnijim i omogućuje veći gumb. OLED zasloni su potpuno kompatibilni i zahtijevaju minimalnu korekciju koda, tako da će firmware biti dostupan za obje verzije uređaja s malim zaslonom i velikim.

Dijagram montaže je jednostavan. Morate spojiti ekran na I2C sabirnicu, to su pinovi A4 i A5, gps modul je spojen na softverski serijski port na pinovima D3 i D4. Tipka na pinu D7. Napajanje baterije putem zaštitni modul povucite ga do prekidača, zatim do pretvarača pojačanja i spojite Arduino na 5 volti.

Za praktično postavljanje komponenti koristit ću zelenu matičnu ploču 7 puta 3 centimetra. Kako ekran ne bi visio na konektoru, postavljam ga na plastične stalke s odstojnicima od 5 mm. Između zaslona i gumba nalazit će se GPS prijemnik. Sa stražnje strane ploče nalazit će se Arduino kontroler, baterija i zaštitna ploča. Baterija će koristiti tanku litijsku bateriju od 350 miliampera, ako se ne varam, ona se koristi u elektroničkim cigaretama, ali kao što sam rekao, možete koristiti bilo koju litijevu bateriju.

Ponovno sve izmjerim, izmjerim i pripremim nacrt kućišta za ispis na 3D printeru. Doslovno 15 minuta na web stranici TinkerCAD i projekt je spreman za ispis. Prebacim datoteku na flash disk, pokrenem je i idemo. Vrijeme ispisa je oko 40 minuta, ovo je prvo tijelo za viziranje za isprobavanje postavljanja modula.

Ploča i tipka su stali na svoje mjesto, ali ekran je bio doslovno milimetar kraći, a interno postolje je smetalo. I tako sve sjeda i postavlja se na svoje mjesto. Super, uredim projekt i ispišem završna verzija narančasto kućište. Nakon završetka ispisa, stolu morate dati vremena da se ohladi i tek tada otkinuti dio, tada će prednja strana biti glatka i neće se pomicati.

Odlomim i očistim pričvrsni rub plastike. Budući da sam koristio ABS plastiku, podliježe naknadnoj obradi acetonom. Nanosim ga kistom, slojevi se dodatno lijepe, a tijelo postaje jače i poprima sjaj.

Ploča savršeno pristaje unutar kućišta, pričvršćivači su poravnati, gumb se ne lijepi. Na jednom kraju je rupa za Arduino Nano konektor, a na drugoj strani za punjenje baterije. Ispalo mi je malo uže pa ga skalpelom proširim.

Ploča za punjenje ima izbočine po rubovima, one sprječavaju produbljivanje konektora, pa ih brusim iglenom turpijom. Sada je ploča dobro na svom mjestu.

U opći pogled uređaj će izgledati ovako. Kućište se nalazi na vrhu. Ispod njega će se nalaziti mikro prekidač, matična ploča sa ekranom, GPS modul i tipka. Sa strane se nalazi i pojačani pretvarač snage.

Posebno za prekidač sam skalpelom izrezao rupu na kućištu, iznad tipke. Uvučen je u tijelo i neće smetati.

Vrijeme je za lemljenje. Zalemio sam prvi kontakt ekrana na ploču, isprobao - sve je ispravno i možete zalemiti preostala tri kontakta. Sada gumb. I svakako očistite fluks četkom. Zalemio sam žice na zaštitni modul baterije.

Prilikom spajanja svakako obratite pozornost na boju žica. Pogrešne boje povremeno dolaze iz Kine. U ovom sam slučaju odlučio odlemiti konektor i izravno zalemiti žice bolji kontakt. Postupak je složen i zahtijeva preciznost i pažljivost pri lemljenju. Dodatno, punim kontakte vrućim ljepilom, to će zaštititi staze i žicu od slučajnog izvlačenja. I odmah trpamo cijeli GPS modul u termoskupljajuće sredstvo; to nije potrebno, ali će dodatno zaštititi od mehanička oštećenja i kratki spojevi kada se montiraju na matičnu ploču.

Pogonski pretvarač također omotamo termoskupljajućim materijalom. Za pričvršćivanje modula koristim dvostranu traku. Prilikom postavljanja ploče pokazalo se da nema dovoljno mjesta za žice, pa sam izbušio rupe u sredini i kroz njih provukao žice za napajanje.

Usput, preporučujem cool bežičnu bušilicu. Radi na jednoj bateriji 18650 i omogućuje vam brzo bušenje sličnih rupa na pločama i kućištima. Prije sam za takav rad morao izvaditi Dremel iz kućišta i uključiti ga u utičnicu, ali sada uvijek imam ovu bušilicu pri ruci.

Gornji dio ploče je sastavljen, žice su navučene i sada trebate instalirati prekidač. Da bismo to učinili, odgrizemo dodatne noge na njemu; samo dvije su potrebne za napajanje i prekid napajanja. Na njih lemimo žicu i kao i obično sve termoskupljamo. Zatim možete instalirati prekidač na njegovo mjesto i napuniti ga vrućim ljepilom. Sada će biti zgodno uključiti i isključiti tracker.

Instaliram ploču u kućište i pričvrstim je s četiri mala vijka. Odgovarajuće rupe su već predviđene na nosačima kućišta. Kada sam skinuo zaštitnu foliju sa ekrana, primijetio sam veliki razmak između ekrana i kućišta. Stoga sam uzeo komad prozirne ambalaže od neke elektronike i iz nje izrezao staklo kako bi odgovaralo veličini prozora. I zalijepio ga acetonom za plastiku kućišta.

Montažu provodimo prema shemi, ovdje nema poteškoća ili nijansi. Samo pazi, plus na plus, minus na minus. Prekidač spajamo izravno na izlaz modula za punjenje. Ovo će isključiti cijeli strujni krug i spriječiti pražnjenje baterije.

Nakon lemljenja svih žica na module, pokrijte donju ploču plavom električnom trakom. Arduino kontroler s punjenjem će biti na vrhu, a bez izolacije postoji mogućnost kratkog spoja.

Zalemio sam zaštitni modul i pričvrstio ga na mjesto vrućim ljepilom.

Gubim kontakte baterije i brzo zalemim žicu na njih da ne pregrijem bateriju. S jedne i s druge strane. Nakon ovoga morate se spojiti mikro USB kabel i napajanje zaštitnog modula, to će aktivirati njegov rad.

Gotovo, sada morate prenijeti firmware. Povezujemo Arduino s računalom, idemo na stranicu projekta, poveznica na nju je u opisu videa. Preuzmite arhivu, raspakirajte datoteke, instalirajte biblioteke, otvorite potrebnu verziju firmvera za zaslon od 32 ili 64 točke i učitajte je u upravljač. Sve je radilo prvi put! Podaci s GPS šipke. cool!

Instaliram kontroler na njegovo mjesto, uključim autonomno napajanje... iiiiiiiii... ništa. LED za napajanje na Arduinu je uključen, ali se ekran ne uključuje. I tako se desio trindet, čiji razlog još uvijek ne znam. Trebalo mi je nekoliko sati rada da natjeram tracker da radi autonomno od ugrađene baterije.

Isprva sam mislio da je mali pojačani pretvarač struje krivac. Ali provjera multimetrom pokazala je stabilnih 5 volti. Zatim sam spojio autonomni modul napajanja koji mi je ostao iz drugog projekta, izgrađen je na velikom pretvaraču pojačanja - i gle čuda, tracker se pokrenuo, ali se zamrznuo nakon nekoliko sekundi.

Na njemu sam napunio bateriju i stavio tracker na prozor da hvata satelite. Tri minute kasnije uhvatio je signal s 4 satelita i odredio lokaciju. Pa, to znači da radi i vjerojatno se može sastaviti? Mijenjamo boost pretvarač, očito mali stvara puno buke od napajanja.

Da bih to učinio, morao sam potpuno rastaviti tracker, odlemiti sve žice i ponovno ga sastaviti. Novi napojni modul nalazit će se na istom mjestu kao i stari, samo je trebalo ukloniti jedno postolje kako bi stalo ispod ekrana.

To je to, uvrnuo sam žice u pletenice da izbjegnem smetnje. Aaand... ovaj gad se nije opet upalio. Točnije, upalio se i odmah zamrznuo s artefaktima na ekranu. Toliko sati rada i sve nizašto. Zamjena pretvarača nije pomogla.

Pokušao sam instalirati kondenzatore na napajanje - ništa nije pomoglo. Tragač je odbio raditi autonomno, kako od pretvarača pojačanja, tako i od laboratorijskog napajanja - zamrznuo se ili se uopće nije uključio. Ali u isto vrijeme savršeno je radio s Arduino USB konektorom.

Koristeći metodu sekvencijalnog isključivanja, uspio sam otkriti da je za to kriv OLED zaslon - ali još uvijek ne razumijem zašto. Rješenje je pronađeno iznenada. Tijekom sljedeće provjere autonomnog napajanja, slučajno sam priključio 5 volti na VIN pin. Napominjem da ovaj pin! Ne! dizajniran za napajanje od 5 volti i zahtijeva napon od 7 do 12 volti.

No, unatoč tome, tracker se odmah pokrenuo i počeo raditi stabilno. Oni. Ispostavilo se da mali stabilizator nije bio izvor problema, nego nešto drugo.

Istovremeno sam odlučio provjeriti trenutnu potrošnju. Od 5 volti tracker je trošio oko 70 miliampera. A od 4 volta preko pretvarača pojačanja ispalo je oko 110 miliampera. Tako će moja mala baterija od 350 miliampera trajati tri sata život baterije. I još nisam optimizirao napajanje, možete isključiti LED diode koje su uvijek uključene i još uvijek štedite bateriju.

Tragač je počeo raditi potpuno stabilno, ostavio sam ga na prozoru i nakon par minuta uhvatio je 4 satelita. Sjajno

Ako ste zainteresirani da mi pomognete razumjeti razlog za čudno ponašanje Arduina, evo uvoda:

1 – Tragač radi ako se napaja preko Arduino USB konektora.

2 – Tragač se smrzava i ne uključuje ako ga napajate preko Arduino 5V pina primjenom 5 volti iz bilo kojeg izvora napajanja.

3 – Tragač se zamrzava i ne uključuje ako se na njega priključi 7 volti ili više preko Arduino VIN pina.

4 – Tragač radi ako se napaja s nestandardnih 5 volti preko istog VIN pina.

Gotov uređaj je univerzalni autonomni brzinomjer, daljinomjer, odometar i satelitski točni sat u jednom kućištu.

Na glavnom ekranu nakon učitavanja, na vrhu se prikazuje trenutno vrijeme i datum u Greenwichu, drugi red je trenutna brzina od 0,3 kilometra na sat i maksimalna vrijednost brzine koja je zabilježena od trenutka kada je uključen - 26 kilometara na sat. Na trećoj liniji trenutna udaljenost do nulte točke je 530 metara, a maksimalna udaljenost koja je postignuta od uključenja je 580 metara. U četvrtoj liniji odometar pokazuje 923 metra i broj korištenih satelita.

Donji redak znakova je količina podataka primljenih od GPS modula.

Kratkim pritiskom tipke mijenja se prikaz na zaslonu, a dugotrajnim držanjem tracker pamti trenutnu lokaciju kao nultu referentnu točku za mjerenje udaljenosti. Drugi zaslon prikazuje trenutnu i maksimalnu brzinu. Treći ekran sadrži informacije o udaljenosti do nulte točke. Četvrti zaslon je brojač kilometara. Peta geografska širina i dužina.

Možete resetirati odometar i maksimalne vrijednosti dugim pritiskom na gumb na zaslonu s ovim parametrima. Oni. idite na brojač kilometara i držite pritisnutu tipku da biste ga resetirali.

Prijeđimo na testiranje. Sada tracker vidi 12 satelita. Postavljam trenutnu nultu točku i vraćam brojač kilometara na nulu. Istu stvar radim na brojaču kilometara automobila. Nakon što sam prešao 1,2 kilometra prema brzinomjeru automobila, vidio sam istih 1205 metara na GPS trackeru. Trenutna udaljenost do nulte točke u ravnoj liniji je 0,93 kilometara. A po karti, tih istih 930 metara, zasad je sve točno.

Odlučio sam izmjeriti veću udaljenost. Opet sam resetirao očitanja na nulu na trackeru i autu. Nakon prijeđenih 8,4 kilometra, na trackeru sam ustanovio da je udaljenost kraća - samo 7974 metra. U ovom slučaju trenutna udaljenost do nulte točke je 4930 metara. Provjerimo na karti, pokazalo se vrlo točno, istih 4.930 metara. Nije jasno, ali zašto onda odometar laže na 400 metara i koji odometar laže, na autu ili GPS-u.

U redu, vrijeme je za ispis stražnji poklopac i ponovno ćemo testirati. zatvaram. Težina gotovog uređaja ispala je 55 grama, puno, ali ne kritično - na kraju ću vam pokazati kako je smanjiti.

Stigao sam na klizalište i odlučio izmjeriti brzinu hokejaša. K vragu, još mora maknuti pokrivače zbog brzine. Rezultat je bila žestoka brzina, poput "ruske rakete" - 5 kilometara na sat. Hodao sam, a sve zato što je strop na klizalištu izoliran reflektirajućom folijom da ne prođe hladnoća. Ima signala sa satelita, ali nije točan.

Napravimo posljednji test s mobitel. Telefon vidi 7 satelita, a tracker 9. Počinjem logirati i resetiram brojač kilometara na trackeru. Pa... idemo. Nakon vožnje od tri kilometra, telefon i tracker pokazivali su identične vrijednosti na brojaču kilometara. 3017 naspram 3021 metar je super rezultat, nisam očekivao takvu točnost.

No, brojač kilometara je zalutao, čak 12 tisuća kilometara. Nije kiselo. Prije toga, prilikom otklanjanja pogrešaka programa, već sam naišao na takav kvar i tracker je odmah premješten 7 tisuća kilometara. Kad sam došao kući, napravio sam točku u Googleu s nultom zemljopisnom širinom i dužinom. Ispostavilo se da se nalazi u Atlantskom oceanu, nedaleko od obale Gane. Izmjerivši udaljenost od njega do moje lokacije, dobio sam tih istih 7 tisuća kilometara. Ispada da GPS modul ponekad preskače nule duž koordinata. To se lako može popraviti dodavanjem samo jednog uvjeta u programski kod. I ovaj problem nije primijećen tijekom testiranja.

Mislim da je tracker ispao sjajan; ovo je moje prvo iskustvo izravnog rada s GPS modulima. Zašto je to potrebno? Takav tracker može poslužiti kao autonomni brzinomjer ili neovisni odometar. Može se postaviti na bicikl, auto, igračku ili kvadrokopter. Također vam omogućuje mjerenje udaljenosti u ravnoj liniji do zadane točke, pohranjuju se nulte vrijednosti trajna memorija. Pamti maksimalnu postignutu brzinu i vrijednosti udaljenosti. Sve to radi autonomno i ne ovisi ni o kome osim o satelitima. I naravno, ovo je točan sat. Treba mi za mjerenje maksimalne brzine i maksimalne udaljenosti od objekata. Tako je, trebate dodati veću visinu na zaslon kako biste izmjerili koliko visoko se dižete!

Razgovarajmo o tome kako možete smanjiti težinu; najlakši način da to učinite je sastavljanjem tragača na platformu Arduino Pro Mini na 3,3 volta. Tada vam neće trebati pretvarač pojačanja, umjesto toga bit će mali linearni priključak na 3,3 volta, GPS modul radi bez problema na ovom naponu, a na zaslonu ćete morati zaobići stabilizator snage.

Pa, odmah ću odgovoriti na pitanje: je li moguće dodati GSM modul i kontrolirati tracker putem SMS-a? Da, možete. Za to ćete osim samog modula morati dodati i obradu SMS naredbi u programski kod i to bi trebao biti zaseban projekt.

To je to za danas, ako vam se svidio ovaj video, onda sam siguran da će vam se svidjeti i podijelite link na video sa svojim prijateljima.

Hvala na gledanju, sretno svima i vidimo se u novim videima! Doviđenja!

Podaci se spremaju u proračunsku tablicu dataGPS.csv, čiji format odgovara zahtjevima usluge Google Moje karte.

    Programski jezik: Arduino (C++)

Video upute

Što trebaš

Kako sastaviti

gps-tracker.ino // biblioteka za rad s uređajima preko SPI#uključi // biblioteka za rad sa SD karticom#uključi // knjižnica za rad s GPS uređajem#uključi // kreirati objekt GPS klase i proslijediti mu objekt Serial1 GPS GPS (Serial1) ; // LED igla#define LED_PIN A0 // pin gumba #define BUTTON_PIN 13 // pričvrstite CS micro-sd karticu#define CHIP_SELECT_PIN 9 // vremenski interval za upisivanje podataka na karticu#definiraj INTERVAL 5000 // postavite veličinu polja za vrijeme, datum, zemljopisnu širinu i dužinu#define MAX_SIZE_MASS 16 // niz za pohranu trenutnog vremena char vrijeme [MAX_SIZE_MASS]; // stanje zapisa bool stateRec = false; // pamti trenutno vrijeme dugi početakMillis = millis() ; void setup() ( // otvori serijski port za praćenje radnji u programu Serial.begin(115200); // pričekajte dok se monitor ne otvori serijski priključak // kako bismo pratili sve događaje u programu// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // otvorite serijsku vezu s GPS modulom Serial1.begin(115200); // postavite LED na izlazni mod pinMode(LED_PIN, IZLAZ) ; // postavite gumb na način prijave pinMode(BUTTON_PIN, INPUT_PULLUP) ; // izlaz informacija o inicijalizaciji na serijski port Serial.println("Inicijalizacija SD kartice...") ; // inicijalizirati SD karticu while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kartica nije uspjela ili nije prisutna") ; delay(1000) ; ) // izlaz informacija na serijski port Serial.println("Inicijalizirana kartica"); // kreirati dataFile objekt klase File za rad s datotekama Datoteka dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ako datoteka postoji if (datoteka) ( // zapišite naziv budućih podataka na memorijsku karticu dataFile.println("Vrijeme, koordinate, brzina" ) ; // zatvori datoteku dataFile.close(); Serial.println("Spremi u redu"); ) else ( Serial.println ("Pogreška pri otvaranju test.csv" ) ; ) ) void loop() ( // Snimite pritisak na gumb if (! digitalRead(BUTTON_PIN) ) ( // promijenite stanje "snimanje" / "ne piše" na memorijsku karticu stanjeRec = ! stanjeRec; // promjena stanja LED indikatora digitalWrite(LED_PIN, stateRec) ; ) // ako podaci dolaze iz GPS modula if (gps.available()) ( // čitati podatke i analizirati gps.readParsing(); // provjerite status GPS modula switch (gps.getState () ) ( // sve je OK case GPS_OK: Serial.println ("GPS je OK" ) ); // ako je navedeni vremenski interval prošao if (millis() - startMillis > INTERVAL && stateRec) ( // spremanje podataka na memorijsku karticu spremiSD() ; // zapamtiti trenutno vrijeme startMillis = millis() ; ) pauza ; // slučaj pogreške podataka GPS_ERROR_DATA: Serial.println("GPS podaci o pogrešci" ); pauza ; // nema veze sa satelitima case GPS_ERROR_SAT: Serial.println ( "GPS nema veze sa satelitima") ; pauza ; ) ) ) // funkcija za spremanje podataka na memorijsku karticu void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ako datoteka postoji i ako je otvorena if (datoteka) ( // čita trenutno vrijeme gps.getTime(vrijeme, MAX_SIZE_MASS); // zapis vremena na memorijsku karticu dataFile.print(" \" " ) ; dataFile.print(vrijeme); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(" \" " ) ; // čitanje i pisanje koordinata zemljopisne širine i dužine na memorijsku karticu 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("Spremi u redu"); ) else ( Serial.println ("Pogreška pri otvaranju test.csv" ) ; ) )