Uradi sam GPS tracker baziran na GY-NEO6M je jednostavan. Kratak opis Arduino GPS trackera Hatire Arduino prozor postavki

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

Sve je kupljeno na ebay.com, za ukupno oko 1500 rubalja (oko 500 rubalja za arduino, nešto 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 uštedu satelitskih podataka. Prema podacima, hladni start bi trebao trajati 36 sekundi, međutim, u mojim uslovima (10. sprat od prozorske daske, nema zgrada u blizini) trebalo je čak 20 minuta. Sljedeći početak je, međutim, već za 2 minute.

Važan parametar uređaja povezanih na Arduino je potrošnja energije. Ako preopterećujete Arduino konvertor, može izgorjeti. Za korišćeni prijemnik, maksimalna potrošnja energije je 45mA pri 3.3v. Zašto bi specifikacija trebala naznačiti jačinu struje na naponu različitom od potrebnog (5V) za mene je misterija. Međutim, Arduino pretvarač će izdržati 45 mA.

Veza
GPS se ne kontroliše, 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 sa TX pina. Nivoi - 5V, samo za Arduino, brzina - 9600 bauda. Povezujem VIN na VCC arduina, GND na GND, TX na RX odgovarajućeg serijskog. Podatke prvo čitam ručno, a zatim koristeći TinyGPS biblioteku. Začudo, sve je čitljivo. Nakon prelaska na Uno, morao sam koristiti SoftwareSerial, a onda su počeli problemi - neki znakovi poruke su izgubljeni. Ovo nije jako kritično, jer TinyGPS odsijeca nevažeće poruke, ali je prilično neugodno: možete zaboraviti na frekvenciju od 1Hz.

Kratka napomena o SoftwareSerial-u: na Uno-u nema hardverskih portova (osim onog koji je povezan na USB Serial), tako da morate koristiti softver. Dakle, može primati podatke samo na pin na kojem ploča podržava prekide. U slučaju Uno, to su 2 i 3. Štaviše, samo jedan takav port može primati podatke u isto vrijeme.

Ovako izgleda "testna klupa".

GSM prijemnik/predajnik


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 vjerovatno dobro - neće biti kašnjenja ili problema prilikom prebacivanja između načina rada, plus GPRS je sada dostupan gotovo svuda. Međutim, za neke složenije aplikacije to možda neće biti dovoljno.

Veza
Modul se takođe kontroliše preko serijskog porta, sa istim nivoom - 5V. I ovdje će nam trebati i RX i TX. Modul je shield, odnosno instaliran je na Arduino. Štaviše, kompatibilan je i sa mega i uno. Zadana brzina je 115200.

Sastavljamo ga na Megi, i tu nas čeka prvo neprijatno iznenađenje: TX pin modula pada na 7. pin Mege. Prekidi nisu dostupni na 7. pinu mega, š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 to nije strašno - na kraju krajeva, ima dovoljno iglica. Ali za Uno je ovo već komplikovanije (podsjećam 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). Odabiremo 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 ovaj način možete postići stabilniji prijenos podataka. Ne znam zašto, mada mogu da pretpostavim.

Dakle, pišemo primitivni kod za prosljeđivanje podataka između serijskih portova, šaljemo Atz i primamo tišinu kao odgovor. Šta se desilo? Ah, velika i mala slova. ATZ, dobro smo. Ura, modul nas može čuti. Da li biste nas trebali nazvati iz radoznalosti? ATD +7499... Zvoni fiksni telefon, dim iz arduina, laptop se gasi. Arduino pretvarač je izgorio. Bila je loša ideja hraniti ga na 19 volti, iako piše da može raditi od 6 do 20V, preporučljivo je 7-12V. Datasheet za GSM modul nigdje ne govori o potrošnji energije pod opterećenjem. Pa, Mega ide u magacin rezervnih delova. Zadržavajući dah, uključujem laptop koji je preko +5V linije sa USB-a primao +19V. Radi, čak ni USB nije pregorio. Hvala Lenovo što nas štiti.

Nakon što je konverter pregorio, tražio sam trenutnu potrošnju. Dakle, vrh - 2A, tipičan - 0,5A. Ovo očigledno prevazilazi mogućnosti Arduino pretvarača. Zahteva odvojenu hranu.

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

Da biste dobili stranicu na određenom URL-u, trebate poslati sljedeće komande:
AT+SAPBR=1,1 //Otvoreni operater (Nosilac) 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+HTTPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Stvarni URL, nakon sprintf sa koordinatama AT+HTTPACTION=0 // Zatražite podatke koristeći GET metodu //čekaj odgovor AT+HTTPTERM //zaustavi HTTP

Kao rezultat toga, ako postoji veza, mi ćemo dobiti odgovor od servera. To jest, mi već znamo kako poslati podatke o koordinatama ako ih server primi putem GET-a.

Ishrana
Kako je napajanje GSM modula iz Arduino konvertera, kako sam saznao, loša ideja, odlučeno je da se na istom ebayu kupi 12v->5v, 3A konvertor. Međutim, modul ne voli napajanje od 5V. Idemo na hak: spojite 5V na pin iz kojeg dolazi 5V iz arduina. Tada će ugrađeni pretvarač modula (mnogo moćniji od Arduino pretvarača, MIC 29302WU) napraviti od 5V ono što je potrebno modulu.

Server

Server je napisao primitivni - pohranjivanje koordinata i crtanje na Yandex.mapama. U budućnosti je moguće dodati različite funkcije, uključujući podršku za mnoge korisnike, status „naoružan/nenaoružan“, stanje sistema vozila (paljenje, farovi, itd.), a moguće čak i kontrolu sistema vozila. Naravno, uz odgovarajuću podršku za tracker, koji se glatko pretvara u punopravni alarmni sistem.

Terenski testovi

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

Nakon što instalirate pretvarač napajanja i stavite ga u kućište sa mrtvog DSL modema, sistem izgleda ovako:

Zalemio sam žice i uklonio nekoliko kontakata sa Arduino blokova. izgledaju ovako:

Priključio sam 12V u autu, vozio se po Moskvi i dobio stazu:


Tačke staze su prilično udaljene jedna od druge. Razlog je taj što slanje podataka putem GPRS-a traje relativno dugo, a za to vrijeme koordinate se ne čitaju. Ovo je očigledno greška u programiranju. Tretira se, prvo, trenutnim slanjem paketa koordinata tokom vremena, i drugo, asinhronim radom sa GPRS modulom.

Vrijeme traženja satelita na suvozačevom sjedištu automobila je nekoliko minuta.

zaključci

Izrada GPS trackera na Arduinu vlastitim rukama je moguća, iako nije trivijalan zadatak. Sada je glavno pitanje kako sakriti uređaj u automobilu da ne bude izložen štetnim faktorima (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 baziran na SIM900
  • DC-DC 12v->5v 3A pretvarač

Lični GPS predajnici

Danas se napredak odvija takvim tempom da uređaji koji su ranije bili glomazni, skupi i visoko specijalizirani brzo gube veličinu, težinu i cijenu, ali dobijaju mnoge nove funkcije.

Tako su uređaji bazirani na GPS tehnologiji stigli do džepnih uređaja i tamo se čvrsto nastanili, dajući ljudima nove mogućnosti. Posebno je vrijedno istaknuti pojedinačne GPS predajnike.

U suštini, ovo su isti GPS tragači, samo dizajnirani za upotrebu ne na vozilu, već od strane osobe u svakodnevnom životu.

Ovisno o modelu, nekoliko razni uređaji. U svom najjednostavnijem obliku, to je jednostavno mala kutija bez displeja, koja omogućava vam kontrolu kretanja djece, životinja ili nekih drugih predmeta, na kojoj je fiksiran.

Unutar se nalazi GPS modul, koji određuje koordinate na zemlji, GSM/GPRS modul koji prenosi informacije i prima kontrolne komande, kao i izvor napajanja koji osigurava autonoman rad na duže vrijeme.

Funkcionalnost GPS predajnika

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


Opcije za GPS predajnike

Ovisno o konfiguraciji, kućišta predajnika mogu se značajno razlikovati. Razni modeli imaju izvršenja u formi mobiteli, klasični navigatori ili čak ručni satovi.

Šareni dizajn posebnih verzija i korisnih dodataka omogućavaju djeci da ove uređaje tretiraju ne kao "roditeljske špijune", već kao moderne i praktične sprave.

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

Članci o GPS trackerima

U ovom članku ću pokazati kako koristiti gsm modul sa arduinom koristeći sim800L kao primjer. Iste upute su sasvim prikladne za korištenje bilo kojih drugih gsm modula, na primjer, sim900, itd., jer svi moduli rade na približno isti način - to je razmjena AT naredbi preko porta.

Prikazat ću upotrebu modula sa arduinom na primjeru SMS releja, koji se može koristiti za daljinsko upravljanje uređajem putem SMS komandi. Ovo se može koristiti u kombinaciji sa auto alarmima, itd.

Modul je povezan na Arduino preko UART interfejsa softverskog serijskog porta koji radi na 2 i 3 digitalna pina Arduino nano.

Rad sa Arduinom sa 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, budući da Arduino ima instaliran stabilizator od 3,3V, koji nije pogodan za napajanje modula , drugi razlog za ugradnju dodatnog stabilizatora je to što je GSM modul ozbiljno opterećen, budući da ima slab predajnik koji obezbeđuje stabilna veza sa stanicom. Napajanje za Arduino nano se dovodi do VIN pina - ovo je stabilizator ugrađen u Arduino koji osigurava da modul radi u širokom rasponu napona (6-10V). Relejni modul je povezan prema datom tekstu programa na pin 10 Arduino nano i može se lako 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 sa tekstom "1" na broj SIM kartice da bismo uključili naš relej, da ga isključimo šaljemo SMS sa tekstom “0”.

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

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

// postavljanje prijema poruke

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); // kašnjenje za obradu naredbi
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
kašnjenje (700);
}

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

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

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

Video verzija članka:

Oznake: #Arduino, #SIM800L

Vaša ocjena:

Proizvodi korišteni u ovom članku:

← GPS loger 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 jačini signala i vlasništvu kanala jednog od tri glavna operatera celularne komunikacije MTS, Beeline i Megafon. Na osnovu rezultata svog rada, skener vam omogućava da sačuvate listu identifikatora bazne stanice MCC, MNC, LAC i CI za sve skenirane kanale.
GSM skener se može koristiti za procjenu nivoa GSM signala i upoređivanje kvaliteta signala različiti operateri, procjene radio pokrivenosti, prilikom odlučivanja o ugradnji pojačivača ćelijskog signala i prilagođavanju njihovih parametara, u obrazovne svrhe itd.
Skener radi pod Windowsom i koristi jednostavan i jeftin prijemnik - RTL-SDR. O RTL-SDR-u možete pročitati na:
RTL-SDR (RTL2832U) i softverski definirane radio vijesti i projekti,
RTL-SDR – OsmoSDR,
RTL-SDR na ruskom.
RTL-SDR parametri 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 GSM 900 opseg i ne podržava GSM 1800. Ovo je određeno činjenicom da je radna frekvencija RTL-SDR-a sa R820T tjunerom ograničena na 1760 MHz. Postoji nada da će korištenje eksperimentalnog RTL-SDR drajvera omogućiti rad u barem dijelu opsega od 1800 MHz.

Pokretanje skenera

Najnoviju verziju skenera možete preuzeti sa ovog linka. Samo raspakirajte datoteku na pogodnu lokaciju i pokrenite gsmscan.exe.
Prethodne verzije skener, link do repozitorija sa izvorima i druge informacije vezane za razvoj nalaze se na razvojnoj stranici.
Da bi skener radio, potrebna je instalacija RTL-SDR drajvera; ako oni već nisu instalirani, to se može jednostavno učiniti pomoću programa Zadig za opis postupka instalacije.

Korištenje skenera

Ispod je prikaz prozora programa skenera:

Horizontalna osa prikazuje broj GSM kanala u obliku ARFCN ili u MHz, a vertikalna osa prikazuje nivo signala u dBm. Visina linije pokazuje jačinu signala.

GSM modul NEOWAY M590 komunikacija sa Arduinom

Ako su BS identifikatori uspješno dekodirani i odgovaraju identifikatorima tri glavna telekom operatera, linije su obojene u odgovarajuće boje.
Padajuće liste na vrhu ekrana vam omogućavaju da odaberete SDR prijemnik, ako je nekoliko povezanih, domet GSM rad 900 ili GSM 1800 i jedinice horizontalne ose ARFCN ili MHz.
Tasteri vam omogućavaju da sačuvate izveštaj o radu skenera u obliku liste dekodiranih baznih stanica, obrišete rezultate BS dekodiranja i dobijete informacije o programu.

Principi i karakteristike rada.

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

Jedan korak dekodiranja se izvodi nakon prelaska cijelog raspona za mjerenje snage. Dakle, u opsegu GSM 900, nivo signala se ažurira otprilike jednom u 2 s, a kompletan prolaz dekodiranja traje oko 1 minut.
Zbog lošeg kvaliteta signala primljenog od RTL-SDR-a, vjerovatnoća ispravnog dekodiranja sistemskih informacija (SI) BS kontrolnog kanala emitovanja (BCCH) nije velika. Fluktuacije nivoa signala kao rezultat višestrukog širenja također smanjuju vjerovatnoću dekodiranja informacija sistema. Iz ovih razloga, za dobijanje BS identifikatora, potrebno je da skener akumulira informacije u periodu od oko 10 minuta. Ali čak i u ovom slučaju, ne pružaju svi kanali ovo mjesto dovoljan nivo i kvalitet signala za dekodiranje čak i od strane najidealnijeg prijemnika. 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.
Tokom rada, skener dodaje sistemske informacije o novim dekodiranim kanalima opštem nizu informacija o kanalima. Ali informacije o prethodno dekodiranim kanalima se ne brišu kada se sistemske informacije ne dekodiraju u ovom koraku i ostaju u nizu. Da obrišete ove informacije, koristite dugme za brisanje rezultata BS dekodiranja.
Kada kliknete na dugme za spremanje izvještaja, akumulirani rezultati se pohranjuju u tekstualnu datoteku sa imenom sastavljenim od naziva programa, datuma i vremena kada su podaci pohranjeni. Ispod je primjer dijela datoteke izvještaja:
Skener je dizajniran za rad pod Windows 7, 8.1 i 10. Rad je testiran sa tri kopije RTL-SDR sa tjunerom R820T, ostali tipovi tjunera nisu testirani.
Posebna verzija programa je kompajlirana za rad pod Windows XP-om, radi nekoliko puta sporije od standardne verzije.

Razvoj.

Program skenera se isporučuje kakav jeste, bez ikakvih garancija ili odgovornosti. Ukoliko imate razumne ideje kako proširiti funkcionalnost ili poboljšati performanse skenera, spremni smo da razgovaramo o mogućnostima njihove implementacije.
Možete učestvovati u razvoju skenera; da biste to učinili, posjetite stranicu za razvoj.
Planiran je dalji razvoj GSM skenera, eventualno uz Vaše učešće.

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

Sve je kupljeno na ebay.com, za ukupno oko 1500 rubalja (oko 500 rubalja za arduino, nešto 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 uštedu satelitskih podataka. Prema podacima, hladni start bi trebao trajati 36 sekundi, međutim, u mojim uslovima (10. sprat od prozorske daske, nema zgrada u blizini) trebalo je čak 20 minuta. Sljedeći početak je, međutim, već za 2 minute.

Važan parametar uređaja povezanih na Arduino je potrošnja energije. Ako preopterećujete Arduino konvertor, može izgorjeti. Za korišćeni prijemnik, maksimalna potrošnja energije je 45mA pri 3.3v. Zašto bi specifikacija trebala naznačiti jačinu struje na naponu različitom od potrebnog (5V) za mene je misterija. Međutim, Arduino pretvarač će izdržati 45 mA.

Veza

GPS se ne kontroliše, 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 sa TX pina. Nivoi - 5V, samo za Arduino, brzina - 9600 bauda. Povezujem VIN na VCC arduina, GND na GND, TX na RX odgovarajućeg serijskog. Podatke prvo čitam ručno, a zatim koristeći TinyGPS biblioteku. Začudo, sve je čitljivo. Nakon prelaska na Uno, morao sam koristiti SoftwareSerial, a onda su počeli problemi - neki znakovi poruke su izgubljeni. Ovo nije jako kritično, jer TinyGPS odsijeca nevažeće poruke, ali je prilično neugodno: možete zaboraviti na frekvenciju od 1Hz.

Kratka napomena o SoftwareSerial-u: na Uno-u nema hardverskih portova, tako da morate koristiti softverski. Dakle, može primati podatke samo na pin na kojem ploča podržava prekide. U slučaju Uno, to su 2 i 3. Štaviše, samo jedan takav port može primati podatke u isto vrijeme.

Ovako izgleda "testna klupa".


GSM prijemnik/predajnik


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 vjerovatno dobro - neće biti kašnjenja ili problema prilikom prebacivanja između načina rada, plus GPRS je sada dostupan gotovo svuda. Međutim, za neke složenije aplikacije to možda neće biti dovoljno.

Veza

Modul se takođe kontroliše preko serijskog porta, sa istim nivoom - 5V. I ovdje će nam trebati i RX i TX. Modul je shield, odnosno instaliran je na Arduino. Štaviše, kompatibilan je i sa mega i uno. Zadana brzina je 115200.

Sastavljamo ga na Megi, i tu nas čeka prvo neprijatno iznenađenje: TX pin modula pada na 7. pin Mege. Prekidi nisu dostupni na 7. pinu mega, š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 to nije strašno - na kraju krajeva, ima dovoljno iglica. Ali za Uno je ovo već komplikovanije (podsjećam 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). Odabiremo 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 ovaj način možete postići stabilniji prijenos podataka. Ne znam zašto, mada mogu da pretpostavim.

Dakle, pišemo primitivni kod za prosljeđivanje podataka između serijskih portova, šaljemo Atz i primamo tišinu kao odgovor. Šta se desilo? Ah, velika i mala slova. ATZ, dobro smo. Ura, modul nas može čuti. Da li biste nas trebali nazvati iz radoznalosti? ATD +7499... Zvoni fiksni telefon, dim iz arduina, laptop se gasi. Arduino pretvarač je izgorio. Bila je loša ideja hraniti ga na 19 volti, iako piše da može raditi od 6 do 20V, preporučljivo je 7-12V. Datasheet za GSM modul nigdje ne govori o potrošnji energije pod opterećenjem. Pa, Mega ide u magacin rezervnih delova. Zadržavajući dah, uključujem laptop koji je preko +5V linije sa USB-a primao +19V. Radi, čak ni USB nije pregorio. Hvala Lenovo što nas štiti.


Nakon što je konverter pregorio, tražio sam trenutnu potrošnju. Dakle, vrh - 2A, tipičan - 0,5A. Ovo očigledno prevazilazi mogućnosti Arduino pretvarača. Zahteva odvojenu hranu.

Programiranje

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

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

AT+SAPBR=1,1 //Otvoreni operater (Nosilac) 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+HTTPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Stvarni URL, nakon sprintf sa koordinatama AT+HTTPACTION=0 // Zatražite podatke koristeći GET metodu //čekaj odgovor AT+HTTPTERM //zaustavi HTTP

Kao rezultat toga, ako postoji veza, mi ćemo dobiti odgovor od servera. To jest, mi već znamo kako poslati podatke o koordinatama ako ih server primi putem GET-a.

Ishrana

Kako je napajanje GSM modula iz Arduino konvertera, kako sam saznao, loša ideja, odlučeno je da se na istom ebayu kupi 12v->5v, 3A konvertor. Međutim, modul ne voli napajanje od 5V. Idemo na hak: spojite 5V na pin iz kojeg dolazi 5V iz Arduina. Tada će ugrađeni pretvarač modula (mnogo moćniji od Arduino pretvarača, MIC 29302WU) napraviti od 5V ono što je potrebno modulu.

Server

Server je napisao primitivni - pohranjivanje koordinata i crtanje na Yandex.mapama. U budućnosti je moguće dodati različite funkcije, uključujući podršku za mnoge korisnike, status „naoružan/nenaoružan“, stanje sistema vozila (paljenje, farovi, itd.), a moguće čak i kontrolu sistema vozila. Naravno, uz odgovarajuću podršku za tracker, koji se glatko pretvara u punopravni alarmni sistem.

Terenski testovi

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


Nakon što instalirate pretvarač napajanja i stavite ga u kućište sa mrtvog DSL modema, sistem izgleda ovako:

Zalemio sam žice i uklonio nekoliko kontakata sa Arduino blokova. izgledaju ovako:

Priključio sam 12V u autu, vozio se po Moskvi i dobio stazu:


Ispostavilo se da je staza pokidana. Razlog je taj što slanje podataka putem GPRS-a traje relativno dugo, a za to vrijeme koordinate se ne čitaju. Ovo je očigledno greška u programiranju. Tretira se, prvo, trenutnim slanjem paketa koordinata tokom vremena, i drugo, asinhronim radom sa GPRS modulom.

Dijagram projekta:

Zdravo prijatelji, imamo veliki broj različitih svemirskih letelica koje lete iznad naših glava. Među njima je oko 90 izuzetno korisnih navigacionih satelita američkog GPS sistema, ruskog GLONASS-a, evropskog Galilea i kineskog BeiDoua. A danas ćemo uhvatiti njihov signal.

Prvo, malo teorije: Satelitski navigacioni sistem je mreža svemirskih letelica koje lete duž ranije poznatih ruta, precizno posmatrajući svoju orbitu i putanju, ili se nalaze u poznatoj stacionarnoj tački u geostacionarnoj ili geosinhronoj orbiti. Sateliti u prosjeku lete na visini od oko 20 hiljada kilometara, a svaki je ultraprecizan atomski sat koji neprekidno emituje svoje vrijeme cijeloj planeti. trenutno vrijeme.

Radio signal koji se širi brzinom svjetlosti stiže do Zemlje sa kašnjenjem od 60 do 90 milisekundi, što ovisi o udaljenosti satelita. Znajući tačnu lokaciju izvora radio signala po vremenskom kašnjenju njegovog širenja, možete saznati tačnu udaljenost do satelita. A onda, triangulacijom udaljenosti do nekoliko poznatih objekata, možete saznati gdje se nalazite u svemiru.

Zamislite da je ova plava lopta naša planeta. Iznad njega lete tri satelita na visini od 20 hiljada kilometara. Prilikom mjerenja udaljenosti do prve, dobit ćete informaciju da ste negdje u ovom krugu - za sada to nije baš informativno. Signal sa drugog satelita razjasnit će vašu lokaciju do dvije točke ukrštanja bez obzira na visinu. Signal s trećeg navigacijskog satelita će ukazati na visinu ovih tač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 ovih koordinata ima nevjerovatne karakteristike i odbacuje se, potpuno rješavajući problem. Signal sa četvrtog satelita radi istu stvar - već nedvosmisleno precizno rješava navigacijsku jednačinu.

Mjerenje udaljenosti do svakog sljedećeg satelita povećava preciznost pozicioniranja i danas se kreće od 1 do 3 metra uz standardnu ​​vidljivost od oko 10 navigacijskih satelita.

Sredili smo teoriju, idemo na praksu. Danas se različiti navigacijski moduli prodaju zasebno. Najjednostavniji i najstariji podržavaju samo signale američkog GPS sistema za posmatranje, u prosjeku 5-7 satelita. Napredniji moduli takođe mogu primati signale iz ruske GLONASS konstelacije, povećavajući ukupan broj posmatranih satelita u proseku dva puta. U prodaji su i moduli koji se kombinuju sa kompasom, služe za tačnu navigaciju i održavanje kursa.

Sateliti različitih navigacionih sistema su vidljivi na ekranu mog telefona. Krugovi su GPS, trouglovi su GLONASS, a zvijezde su kineski BeiDou. Dakle, moj telefon podržava tri različita navigacioni sistemi i kombinovanjem signala iz njih, povećava se tačnost određivanja lokacije. Sada je iznad moje glave 28 satelita, a signal je dostupan samo sa 7. To jest. moj telefon već unaprijed zna gdje se nalazi svaki satelit. A signal koji nedostaje sa 21 satelita znači da su van vidnog polja. Navigacijski signal je vrlo slab, od riječi VASCHE, skoro da se ne reflektuje, blokiran je terenom, zgradama, krovom automobila - bilo kojim metalom iznad glave ili sa strane. Čak i snijeg koji pada izvan prozora ometa dobar prijem.

Za implementaciju projekta trebat će vam niz elektronskih modula: programabilna platforma Arduino Nano, OLED ekran 128 sa 32 tačke (povezan je preko I2C magistrale), GPS modul za povezivanje putem UART-a, bilo koji litijumska baterija sa kapacitetom iznad 200 miliampera, zaštitnim modulom za punjenje za litijum i pojačivačem za dobijanje 5 volti. Ovdje imam tri različita tipa, svaka će odgovarati. Takođe sam planirao da koristim RGB LED u boji za označavanje statusa, ali sam to odustao kako je projekat napredovao.

Povezujemo ekran na Arduino i nailazimo na prvu poteškoću. Standard Library OLED ekran zauzima 20 kB, što je 70% memorije mikrokontrolera i praktično ne ostavlja prostora za program. Ranije sam sastavljao visinomjer i suočio se s činjenicom da svaka nova linija koda dovodi do prelijevanja memorije i da se mikrokontroler zamrzava tokom rada. Stoga ću koristiti mnogo više biblioteka svetlosti. Ne radi sa grafikom i prikazuje samo tekst na OLED ekranu, a zauzima samo 1 KB memorije.

Zasebno 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, i opet 4, već 5! Za bolji GPS prijem, modul visi izvan prozora na žici.

Tokom razvoja projekta koristio sam GPS module različite vrste. Jednostavan GPS i kombinovani GPS sa Glonasom. Morali smo provesti niz višesatnih eksperimenata kako bismo provjerili stabilnost rada. Ispostavilo se da moduli rade, ali sa softverske biblioteke Morao sam da petljam. Probao nekoliko različite biblioteke, a TinyGPS+ je bio jedini koji je radio sa svim GPS modulima odjednom.

U principu, biblioteka analizira NMEA protokol; jednostavno analizira podatke koje GPS modul izbacuje dva puta u sekundi. Ovako izgleda neprerađeni tok podataka.

Kao rezultat toga, moj firmver vam omogućava da povežete gotovo svaki GPS modul preko 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 od Glonassa, on vidi više satelita, pa je njegova preciznost veća. Linkovi na sve komponente i module nalaze se u opisu ovog videa.

Matična ploča je pokazala punu funkcionalnost sistema, sada možete sve sklopiti u hardveru. Za napajanje ću koristiti litijumsku bateriju koja će biti povezana na zaštitnu ploču sa punjenjem. Na ovoj ploči donji otpornik R3 postavlja struju punjenja baterije, zadana vrijednost je 1 amper, ovo je puno za male baterije, pa je potrebno zamijeniti otpornik. Na ekranu vidite ploču sa 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. One. možete podesiti 200 ili 300 miliampera i ne prelaziti 500.

Zatim je potrebno povećati napon; ekran i GPS modul se napajaju od 5 volti. To ćemo učiniti pomoću pretvarača pojačanog napona. Oni se obično ugrađuju u power bankove kako bi se povećao napon sa 3,7 na 5 volti. Koristit ću mali zeleni modul, može proizvesti do 300mA i više je nego dovoljno za ovaj projekat.

Ažurirao sam firmware, sada pri učitavanju na glavnom ekranu se prikazuje trenutno tačno vrijeme sa satelita, broj vidljivih satelita i trenutna brzina trekera, skače jer je došlo do greške u određivanju lokacije. Kada pritisnete dugme, ekran se menja. Ovdje se prikazuje trenutna vrijednost brzine i maksimalna vrijednost za period posmatranja. Na drugom ekranu se nalazi trenutna udaljenost do nulte tačke, maksimalna zabilježena udaljenost od nje i odometar.

Izmjerim veličine svih modula i trudim se da ih rasporedim što je moguće kompaktnije. Ali koliko god se trudio, tanki ekran se nije uklapao sa širokim. GPS prijemnik ohm Stoga sam odlučio zamijeniti ekran drugim OLED 128x64 piksela. To ga čini ergonomičnijim i omogućava veće dugme. OLED ekrani su potpuno kompatibilni i zahtijevaju minimalnu korekciju koda, tako da će firmver biti dostupan za obje verzije uređaja sa malim ekranom i velikim ekranom.

Dijagram montaže je jednostavan. Ekran morate spojiti na I2C magistralu, to su pinovi A4 i A5, gps modul je spojen na softverski serijski port na pinovima D3 i D4. Dugme na pin D7. Napajanje baterije preko zaštitni modul prevucite ga do prekidača, zatim do pojačanog pretvarača i povežite Arduino na 5 volti.

Za praktično postavljanje komponenti koristit ću zelenu ploču 7 x 3 centimetra. Da ekran ne bi visio na konektoru, postavljam ga na plastična postolja sa odstojnicima od 5 mm. Između ekrana i dugmeta biće GPS prijemnik. Na stražnjoj strani ploče nalazit će se Arduino kontroler, baterija i zaštitna ploča. Baterija će koristiti tanke litijumske 350 miliampera, ako se ne varam, one se koriste u elektronskim cigaretama, ali kao što sam rekao, možete koristiti bilo koju litijumsku bateriju.

Ponovo sve izmjerim, izmjerim i pripremim dizajn kućišta za štampu na 3D štampaču. Bukvalno 15 minuta na TinkerCAD web stranici i projekat je spreman za štampanje. Prebacujem fajl na fleš disk, pokrećem ga i krećemo. Vrijeme štampanja je oko 40 minuta, ovo je prvo nišansko tijelo za isprobavanje postavljanja modula.

Ploča i dugme su stali na svoje mesto, ali ekran je bio bukvalno milimetar kratak, a interno postolje je smetalo. I tako sve stane i montira se na svoje mjesto. Odlično, uredim projekat i štampam konačna verzija narandžasto kućište. Nakon završetka štampanja, 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 ivicu za pričvršćivanje plastike. Pošto sam koristio ABS plastiku, ona je podložna naknadnoj obradi acetonom. Nanosim ga kistom, slojevi se dodatno sljube, a tijelo postaje jače i dobiva sjaj.

Ploča se savršeno uklapa u kućište, pričvršćivači su poravnati, dugme se ne lijepi. Na jednom kraju se nalazi rupa za Arduino Nano konektor, a na drugoj strani za punjenje baterije. Ispostavilo se da je malo uži, pa sam ga proširio skalpelom.

Ploča za punjenje ima izbočine po ivicama, onemogućavaju produbljivanje konektora, pa ih izbrusim turpijom. Sada je tabla na svom mestu.

IN opšti 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 dugme. Sa strane se nalazi i pojačani pretvarač snage.

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

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

Prilikom povezivanja obratite pažnju na boju žica. Netačne boje povremeno dolaze iz Kine. U ovom slučaju, odlučio sam da odlemim konektor i direktno zalemim žice bolji kontakt. Postupak je složen i zahtijeva preciznost i pažnju prilikom lemljenja. Dodatno, kontakte punim vrućim ljepilom, to će zaštititi staze i žicu od slučajnog izvlačenja. I odmah uguramo cijeli GPS modul u termoskupljač, to nije potrebno, ali će dodatno zaštititi od mehaničko oštećenje i kratki spoj kada se montira na matičnu ploču.

Također umotavamo pojačani pretvarač u termoskupljajući materijal. 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 tamo provukao žice za napajanje.

Usput, preporučujem cool akumulatorsku bušilicu. Radi na jednu bateriju 18650 i omogućava brzo bušenje sličnih rupa na daskama i kućištima. Ranije sam za takav rad morao Dremel izvaditi iz kućišta i uključiti ga u utičnicu, ali sada uvijek imam ova bušilica pri ruci.

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

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

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

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

Zalemim zaštitni modul i pričvrstim ga vrućim ljepilom.

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

Gotovo, sada morate učitati firmver. Povezujemo Arduino sa računarom, idemo na stranicu projekta, link do njega nalazi se u opisu videa. Preuzmite arhivu, raspakujte datoteke, instalirajte biblioteke, otvorite potrebnu verziju firmvera za ekran od 32 ili 64 tačke i učitajte ga u kontroler. Sve je funkcionisalo prvi put! Podaci sa GPS štapa. Cool!

Ugradim kontroler na njegovo mjesto, uključim autonomno napajanje... iiiiiiiii... ništa. LED za napajanje na Arduinu je uključen, ali ekran se ne uključuje. I tako je došlo do trindeta, razlog za koji još ne znam. Trebalo mi je nekoliko sati rada da natjeram tracker da radi autonomno iz ugrađene baterije.

Isprva sam mislio da je krivac mali konvertor za pojačavanje snage. Ali provjera multimetrom pokazala je stabilnih 5 volti. Zatim sam spojio autonomni modul napajanja koji mi je ostao od drugog projekta, izgrađen je na velikom pojačanom pretvaraču - i eto, tracker se pokrenuo, ali se zamrznuo nakon nekoliko sekundi.

Napunio sam bateriju na njemu i stavio tracker na prozor da uhvati satelite. Tri minute kasnije, uhvatio je signal sa 4 satelita i odredio lokaciju. Pa, to znači da radi i vjerovatno se može sklopiti? Mijenjamo pojačani pretvarač, očito mali pravi veliku buku iz napajanja.

Da bih to učinio, morao sam potpuno rastaviti tracker, odlemiti sve žice i ponovo ga sastaviti. Novi modul napajanja će se nalaziti na istom mestu kao i stari, samo je jedno postolje moralo da se ukloni da bi stalo ispod ekrana.

To je to, uvrnuo sam žice u pigtailove da izbjegnem smetnje. Aaa... ovo kopile se više nije upalilo. Tačnije, uključio se i odmah zaledio s artefaktima na ekranu. Toliko sati rada i sve uzalud. Zamjena pretvarača nije pomogla.

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

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

Ali ipak, tracker se odmah pokrenuo i počeo stabilno raditi. One. Ispostavilo se da mali stabilizator nije izvor problema, već 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 kroz pojačani pretvarač ispostavilo se da je oko 110 miliampera. Tako će moja mala baterija od 350 miliampera trajati tri sata trajanje baterije. I još nisam optimizirao napajanje, možete isključiti LED diode koje su uvijek uključene i još uvijek štedite bateriju.

Traker je počeo raditi potpuno stabilno, ostavio sam ga na prozoru i nakon nekoliko minuta uhvatio je 4 satelita. Odlično

Ako ste zainteresovani da mi pomognete da razumem razlog čudnog ponašanja Arduina, evo uvoda:

1 – Traker radi ako se napaja preko Arduino USB konektora.

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

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

4 – Traker radi ako se napaja sa nestandardnih 5 volti preko istog VIN pina.

Gotovi uređaj je univerzalni autonomni brzinomjer, daljinomjer, odometar i satelitski sat sa preciznim vremenom u jednom kućištu.

Na glavnom ekranu nakon učitavanja, trenutno vrijeme i datum u Greenwichu su prikazani na vrhu, u drugom redu 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 tačke je 530 metara, a maksimalna udaljenost koja je postignuta od uključivanja je 580 metara. U četvrtom redu, kilometraža pokazuje 923 metra i broj korištenih satelita.

Donja linija znakova je količina podataka primljenih od GPS modula.

Kada kratko pritisnete dugme, ekran se menja, a kada ga držite duže vreme, uređaj za praćenje pamti trenutnu lokaciju kao nultu referentnu tačku za merenje udaljenosti. Drugi ekran prikazuje trenutnu i maksimalnu brzinu. Treći ekran sadrži informacije o udaljenosti do nulte tačke. Četvrti ekran je odometar. Peta geografska širina i dužina.

Možete resetirati brojač kilometara i maksimalne vrijednosti dugim pritiskom na dugme na ekranu sa ovim parametrima. One. idite na brojač kilometara i držite pritisnuto dugme da ga resetujete.

Pređimo na testiranje. Sada uređaj za praćenje vidi 12 satelita. Postavio sam trenutnu nultu tačku i resetirao odometar na nulu. Istu stvar radim i na kilometraži automobila. Prešavši 1,2 kilometra prema brzinomjeru automobila, vidio sam istih 1205 metara na GPS trackeru. Trenutna udaljenost do nulte tačke u pravoj liniji je 0,93 kilometra. A po karti tih istih 930 metara, zasad je sve tačno.

Odlučio sam da izmjerim veću udaljenost. Opet sam resetirao očitavanja na nulu na trackeru i autu. Prešavši 8,4 kilometra, na tragaču sam otkrio da je udaljenost manja - samo 7974 metra. U ovom slučaju, trenutna udaljenost do nulte tačke je 4.930 metara. Provjerimo to na mapi, ispostavilo se vrlo precizno, istih 4.930 metara. Nije jasno, ali zašto onda odometar leži na 400 metara i koji odometar leži, na autu ili GPS-u.

U redu, vrijeme je za štampanje zadnji poklopac i ponovo ćemo testirati. Zatvaram. Ispostavilo se da je težina gotovog uređaja 55 grama, puno, ali nije kritično - na kraju ću vam pokazati kako je smanjiti.

Stigao sam na klizalište i odlučio da izmjerim brzinu hokejaša. Prokletstvo, još uvijek mora skinuti poklopce radi brzine. Rezultat je bila žestoka brzina, poput "ruske rakete" - 5 kilometara na sat. Prošetao sam, a sve zbog toga što je plafon na klizalištu izolovan reflektujućom folijom da ne bude hladno. Postoji signal sa satelita, ali nije tačan.

Hajde da uradimo poslednji test sa mobilni telefon. Telefon vidi 7 satelita, a tragač 9. Počinjem da bilježim i resetujem odometar na trackeru. Pa... idemo. Nakon tri kilometra vožnje, telefon i tracker su pokazali identične vrijednosti na brojaču kilometara. 3017 naspram 3021 metar je super rezultat, nisam očekivao takvu preciznost.

No, brojač kilometara je pokvario, čak 12 hiljada kilometara. Nije kiselo. Ranije, prilikom otklanjanja grešaka u programu, već sam naišao na takvu grešku i tragač je odmah pomaknut 7 hiljada kilometara. Kada sam stigao kući, napravio sam tačku u Google-u sa nultom zemljopisnom širinom i dužinom. Ispostavilo se da se nalazi u Atlantskom okeanu, nedaleko od obale Gane. Izmjerivši udaljenost od njega do moje lokacije, dobio sam tih istih 7 hiljada kilometara. Ispostavilo se da GPS modul ponekad preskače nule duž koordinata. Ovo se lako može popraviti dodavanjem samo jednog uslova u programski kod. I ovaj kvar nije uočen tokom testova.

Mislim da je tracker ispao sjajan; ovo je moje prvo iskustvo rada direktno sa GPS modulima. Zašto je to potrebno? Takav tragač može poslužiti kao autonomni brzinomjer ili neovisni mjerač kilometara. Može se postaviti na bicikl, automobil, igračku ili kvadrokopter. Također vam omogućava mjerenje udaljenosti u pravoj liniji do određene tačke, u kojoj se pohranjuju nulte vrijednosti trajna memorija. Pamti maksimalnu postignutu brzinu i vrijednosti udaljenosti. Sve to radi autonomno i ne ovisi ni o kome drugom osim o satelitima. I naravno, ovo je tačan sat. Treba mi za mjerenje maksimalne brzine i maksimalne udaljenosti od objekata. Tako je, morate dodati više visine na ekran da biste izmjerili koliko visoko se dižete!

Hajde da razgovaramo o tome kako možete smanjiti težinu; najlakši način da to učinite je sastavljanjem trackera na platformu Arduino Pro Mini na 3,3 volta. Tada vam neće trebati pojačivač, umjesto toga će biti mali linearni stub na 3,3 volta, GPS modul radi bez problema na ovom naponu, a na ekranu ćete morati zaobići stabilizator napajanja.

Pa, odmah ću odgovoriti na pitanje: da li je moguće dodati GSM modul i kontrolirati tracker putem SMS-a? Da, možeš. Da biste to učinili, pored samog modula, morat ćete dodati i obradu SMS naredbi u programski kod i to bi trebao biti poseban projekt.

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

Hvala na gledanju, sretno svima i vidimo se u novim videima! Ćao ćao!

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

    Programski jezik: Arduino (C++)

Video uputstvo

Sta ti treba

Kako sastaviti

gps-tracker.ino // biblioteka za rad sa uređajima preko SPI#include // biblioteka za rad sa SD karticom#include // biblioteka za rad sa GPS uređajem#include // kreiramo objekat klase GPS i prosljeđujemo mu objekt Serial1 GPS GPS (Serial1) ; // LED pin#define LED_PIN A0 // pin dugmeta #define BUTTON_PIN 13 // pin CS micro-sd karticu#define CHIP_SELECT_PIN 9 // vremenski interval za upisivanje podataka na karticu#define INTERVAL 5000 // postavlja veličinu niza za vrijeme, datum, geografsku širinu i dužinu#define MAX_SIZE_MASS 16 // niz za pohranjivanje trenutnog vremena vrijeme char[MAX_SIZE_MASS]; // stanje zapisa bool stateRec = lažno; // pamti trenutno vrijeme long startMillis = millis() ; void setup() ( // otvara serijski port za praćenje radnji u programu Serial.begin(115200); // sačekajte dok se monitor ne otvori serijski port // za praćenje svih događaja u programu// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // otvaramo serijsku vezu sa GPS modulom Serial1.begin(115200); // postaviti LED na izlazni mod pinMode(LED_PIN, OUTPUT) ; // postaviti dugme na način za prijavu pinMode(BUTTON_PIN, INPUT_PULLUP) ; // izlazne informacije 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" ) ; kašnjenje (1000 ) ; ) // izlazne informacije na serijski port Serial.println("Kartica je inicijalizovana"); // kreiramo objekt dataFile klase File za rad s datotekama Datoteka dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ako datoteka postoji if (datoteka podataka) ( // upišite naziv budućih podataka na memorijsku karticu dataFile.println("Vrijeme, koordinate, brzina" ) ; // zatvorite datoteku dataFile.close(); Serial.println("Sačuvaj OK"); ) else ( Serial.println ("Greška pri otvaranju test.csv" ) ; ) ) void loop() ( // Snimite pritisak na dugme if (! digitalRead(BUTTON_PIN) ) ( // promijenite stanje "snimanje" / "ne upisuje" na memorijsku karticu stateRec = ! stateRec; // mijenjamo stanje LED indikatora digitalWrite(LED_PIN, stateRec) ; ) // ako su podaci došli iz GPS modula if (gps.available()) ( // čitanje podataka i raščlanjivanje gps.readParsing(); // provjeriti status GPS modula switch (gps.getState () ) ( // sve je u redu case GPS_OK: Serial.println ("GPS je u redu" ) ; // ako je specificirani vremenski interval prošao if (millis() - startMillis > INTERVAL && stateRec) ( // pohraniti podatke na memorijsku karticu saveSD() ; // zapamtite trenutno vrijeme startMillis = millis() ; ) break ; // slučaj greške u podacima GPS_ERROR_DATA: Serial.println("GPS podaci o grešci" ); prekid ; // nema veze sa satelitima case GPS_ERROR_SAT: Serial.println ( "GPS nema veze sa satelitima") ; break ; ) ) ) // funkcija za spremanje podataka na memorijsku karticu void saveSD() (Datoteka dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ako datoteka postoji i otvorena je if (datoteka podataka) ( // čita trenutno vrijeme gps.getTime(vrijeme, MAX_SIZE_MASS); // upisuje vrijeme na memorijsku karticu dataFile.print(" \" " ) ; dataFile.print(vrijeme); dataFile.print(" \" " ) ; dataFile.print ("," ) ; dataFile.print(" \" " ) ; // čitanje i pisanje koordinata š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("Sačuvaj OK"); ) else ( Serial.println ("Greška pri otvaranju test.csv" ) ; ) )