Duomenys išsaugomi skaičiuoklėje dataGPS.csv, kurios formatas atitinka paslaugos reikalavimus „Google“ mano žemėlapiai.

    Programavimo kalba: Arduino (C++)

Vaizdo instrukcija

Ko tau reikia

Kaip surinkti

gps-tracker.ino // biblioteka darbui su įrenginiais per SPI#įtraukti // biblioteka darbui su SD kortele#įtraukti // biblioteka darbui su GPS įrenginiu#įtraukti // sukurti GPS klasės objektą ir perduoti jam Serial1 objektą GPS gps (Serial1); // LED kaištis#define LED_PIN A0 // mygtuko kaištis #define BUTTON_PIN 13 // prisegti CS micro-sd kortelę#define CHIP_SELECT_PIN 9 // laiko intervalas duomenų įrašymui į kortelę#define INTERVAL 5000 // nustatykite laiko, datos, platumos ir ilgumos masyvo dydį#define MAX_SIZE_MASS 16 // masyvas dabartiniam laikui išsaugoti simbolio laikas [MAX_SIZE_MASS]; // įrašo būsena bool stateRec = false ; // prisimena dabartinį laiką ilga pradžiaMillis = millis() ; negalioja sąranka () ( // atidarykite nuoseklųjį prievadą, kad galėtumėte stebėti programos veiksmus Serial.begin(115200); // palaukite, kol atsidarys nuosekliojo prievado monitorius // kad būtų galima sekti visus programos įvykius// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // atidarykite nuoseklųjį ryšį su GPS moduliu Serial1.begin(115200); // nustatykite šviesos diodą į išvesties režimą pinMode(LED_PIN, IŠVESTIS) ; // nustatykite mygtuką į prisijungimo režimą pinMode(BUTTON_PIN, INPUT_PULLUP) ; // išveda informaciją apie inicijavimą į nuoseklųjį prievadą Serial.println("Inicijuoja SD kortelę...") ; // inicijuokite SD kortelę while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kortelė nepavyko arba jos nėra" ) ; delay(1000 ) ; ) // išveda informaciją į nuoseklųjį prievadą Serial.println("Inicijuota kortelė"); // sukurkite failų klasės objektą dataFile, kad galėtumėte dirbti su failais Failas dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // jei failas yra if (duomenų failas) ( // įrašyti būsimų duomenų pavadinimą į atminties kortelę dataFile.println("Laikas, koordinatės, greitis"); // uždarykite failą dataFile.close(); Serial.println ("Išsaugoti gerai"); ) else ( Serial.println ("Klaida atidarant test.csv" ) ; ) ) void loop() ( // Įrašykite mygtuko paspaudimą if (! digitalRead(BUTTON_PIN) ) ( // pakeisti būseną „įrašo“ / „nerašo“ į atminties kortelę stateRec = ! stateRec; // pakeisti indikatoriaus šviesos diodo būseną digitalWrite(LED_PIN, statusRec) ; ) // jei duomenys buvo gauti iš GPS modulio if (gps.available()) ( // skaityti duomenis ir analizuoti gps.readParsing(); // patikrinkite GPS modulio būseną jungiklis (gps.getState () ) ( // viskas gerai atvejis GPS_OK: Serial.println ("GPS yra gerai" ) ; // jei praėjo nurodytas laiko intervalas if (millis() - startMillis > INTERVAL && stateRec) ( // išsaugoti duomenis atminties kortelėje išsaugotiSD() ; // prisiminti dabartinį laiką startMillis = millis() ; ) pertrauka ; // duomenų klaidos atvejis GPS_ERROR_DATA: Serial.println ("GPS klaidų duomenys" ) ; pertrauka ; // nėra ryšio su palydovais atvejis GPS_ERROR_SAT: Serial.println ( „GPS neprisijungia prie palydovų“) ; pertrauka ; ) ) ) // duomenų išsaugojimo atminties kortelėje funkcija void saveSD() ( Failas dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // jei failas egzistuoja ir buvo atidarytas if (duomenų failas) ( // skaito dabartinį laiką gps.getTime(laikas, MAX_SIZE_MASS); // įrašyti laiką į atminties kortelę dataFile.print(" \" " ) ; dataFile.print(time); dataFile.print(" \" " ) ; dataFile.print ("," ) ; dataFile.print(" \" " ) ; // skaityti ir įrašyti platumos ir ilgumos koordinates į atminties kortelę 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 ("Išsaugoti gerai"); ) else ( Serial.println ("Klaida atidarant test.csv" ) ; ) )

GPS pasaulinės padėties nustatymo sistema jau tapo mūsų gyvenimo dalimi. Šiandien sunku įsivaizduoti mobilųjį telefoną be įmontuoto GPS modulio. Ši palydovinė navigacijos sistema leidžia sekti bet kokius objektus, nustatyti jų koordinates ir judėjimo greitį. Dabar GPS gali naudotis ne tik atitinkamą įrangą kuriančios įmonės, bet ir paprasti radijo mėgėjai, kurie jau išnaudoja populiariąsias Arduino plokštes. Šioje medžiagoje bus aptartas miniatiūrinio GPS sekimo įrenginio prijungimas prie Arduino Pro Mini plokštės. PG03 MiniGPS sekiklis naudojamas kaip bandomasis objektas.



Šis sekiklis, be tiesioginių geografinių koordinačių, rodo judėjimo kryptį, nuvažiuotą atstumą ir judėjimo greitį. Deja, jis neįrašo informacijos, todėl prijungę jį prie „Arduino“ galite pasiekti šiuos duomenis ir daryti su jais ką tik norite.


Pirma, sekiklį reikia išardyti. Žemiau pateikiami išardyto GPS sekiklio vaizdai.




Sekiklio širdis yra Venus638FLP GPS lustas. Jo 44-asis kaištis yra UART sąsajos (TxD) išvestis. Galite lituoti laidą tiesiai prie šio kaiščio arba galite rasti bandomąjį kaištį ant plokštės, prie kurios taip pat yra prijungtas šis kaištis. Žemiau pateikiami mikroschemos kontaktų vietų vaizdai ir kaip prisijungti prie norimo kaiščio.





Dabar paimkime kompaktišką „Arduino Pro Mini“ plokštę ir SD kortelės modulį NMEA protokolo duomenims įrašyti. „Arduino Pro Mini“ ir SD kortelės modulio prijungimo schema yra tokia:



SD kortelių prijungimo modulio kaiščiai:


GND į GND
VCC iki 3.3V
MISO prie 12 kaiščio
MOSI prie 11 kaiščio
SCK prie 13 kaiščio
CS prie 10 kaiščio

GPS sekimo kaiščių prijungimas:


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

Geriau imti maitinimą iš GPS sekiklio (3,7 V). Kadangi jo akumuliatoriaus energijos talpa yra maža, geriau prijungti išorinę bateriją, pavyzdžiui, iš 1400 mAh mobiliojo telefono, kaip parodyta vienoje iš aukščiau pateiktų paveikslėlių.


Dabar jums reikia atsisiųsti TinyGPS biblioteką, taip pat reikės bibliotekos darbui su SD kortelėmis ir SoftwareSerial bibliotekos, kurią galite rasti Arduino\libraries.



Šioje kodo dalyje galite pasirinkti, kokius duomenis rašyti:


void gpsdump(TinyGPS &gps) ( plaukioti plokščia, flon; // Platuma, Ilga plūdė fkmph = gps.f_speed_kmph(); // Greitis km/val float falt = gps.f_altitude(); // +/- aukštis virš jūros lygio metrais (atrodo, kad aukštis, tiesą sakant) float fc = gps.f_course( // Kursas laipsniais be ženklų gps.f_get_position (&flat, &flon, &age; serial.print); " lon "); Serial.print (" km " //// //////////////////////////////////////////////// /////////////////

Įkelkite eskizą į Arduino, įdėkite SD kortelę, suformatuotą pagal FAT32 ir turinčią log.txt failą šaknyje. Paleiskite Serial Monitor ir pamatysite, kad duomenys įrašomi į SD kortelę.



Po kelių eksperimentų su Arduino nusprendžiau padaryti paprastą ir ne itin brangų GPS sekiklį su koordinatėmis, siunčiamomis per GPRS į serverį.
Naudotas Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modulis (informacijos siuntimui į serverį), GPS imtuvas SKM53 GPS.

Viskas buvo pirkta ebay.com, iš viso apie 1500 rublių (apie 500 rublių už arduino, šiek tiek mažiau už GSM modulį, šiek tiek daugiau už GPS).

GPS imtuvas

Pirmiausia turite suprasti, kaip dirbti su GPS. Pasirinktas modulis yra vienas pigiausių ir paprasčiausių. Tačiau gamintojas žada bateriją, kad išsaugotų palydovinius duomenis. Pagal duomenų lapą šaltas užvedimas turėtų užtrukti 36 sekundes, tačiau mano sąlygomis (10 aukštas nuo palangės, šalia nėra pastatų) užtruko net 20 minučių. Tačiau kitas startas jau 2 min.

Svarbus prie Arduino prijungtų įrenginių parametras yra energijos suvartojimas. Jei perkrausite Arduino keitiklį, jis gali perdegti. Naudojamo imtuvo didžiausias energijos suvartojimas yra 45 mA @ 3,3 V. Kodėl specifikacijoje turėtų būti nurodytas srovės stiprumas esant kitai nei reikalaujama įtampai (5 V), man yra paslaptis. Tačiau Arduino keitiklis atlaikys 45 mA.

Ryšys
GPS nevaldomas, nors turi RX kaištį. Kokiu tikslu nežinoma. Pagrindinis dalykas, kurį galite padaryti su šiuo imtuvu, yra nuskaityti duomenis per NMEA protokolą iš TX kaiščio. Lygiai - 5V, tik Arduino, greitis - 9600 bodų. Aš jungiu VIN prie arduino VCC, GND prie GND, TX prie RX atitinkamos serijos. Pirmiausia perskaičiau duomenis rankiniu būdu, tada naudoju TinyGPS biblioteką. Keista, bet viskas skaitoma. Perėjus į Uno, turėjau naudoti SoftwareSerial, tada prasidėjo problemos – kai kurie žinutės simboliai buvo prarasti. Tai nėra labai kritiška, nes TinyGPS atkerta netinkamus pranešimus, tačiau tai gana nemalonu: galite pamiršti apie 1 Hz dažnį.

Greita pastaba apie SoftwareSerial: Uno nėra aparatinės įrangos prievadų (išskyrus prijungtą prie USB serijos), todėl turite naudoti programinę įrangą. Taigi, jis gali gauti duomenis tik iš kaiščio, kuriame plokštė palaiko pertraukimus. Uno atveju tai yra 2 ir 3. Be to, duomenis vienu metu gali priimti tik vienas toks prievadas.

Taip atrodo „bandymo stendas“.

GSM imtuvas/siųstuvas


Dabar ateina įdomesnė dalis. GSM modulis - SIM900. Jis palaiko GSM ir GPRS. Nei EDGE, nei ypač 3G nepalaikomi. Koordinačių duomenims perduoti tai turbūt gerai – perjungiant režimus nebus vėlavimų ar problemų, be to, GPRS dabar pasiekiamas beveik visur. Tačiau kai kurioms sudėtingesnėms programoms to gali nepakakti.

Ryšys
Modulis taip pat valdomas per nuoseklųjį prievadą, su tuo pačiu lygiu - 5V. O čia mums reikės ir RX, ir TX. Modulis yra ekranas, tai yra, jis įdiegtas Arduino. Be to, jis suderinamas tiek su mega, tiek su uno. Numatytasis greitis yra 115 200.

Surenkame jį ant Megos, o čia mūsų laukia pirmoji nemaloni staigmena: modulio TX kaištis krenta ant 7-ojo Megos kaiščio. Pertraukimai negalimi 7-ame mega kontakte, tai reiškia, kad turėsite prijungti 7-ąjį kaištį, tarkime, prie 6-ojo kontakto, ant kurio galimi pertraukimai. Taigi iššvaistysime vieną Arduino kaištį. Na, mega tai nėra labai baisu - juk yra pakankamai smeigtukų. Bet Uno tai jau sudėtingiau (primenu, kad yra tik 2 kaiščiai, palaikantys pertraukimus - 2 ir 3). Kaip šios problemos sprendimą galime pasiūlyti modulį ne montuoti ant Arduino, o sujungti laidais. Tada galite naudoti Serial1.

Prisijungę bandome "kalbėti" su moduliu (nepamirškite jo įjungti). Pasirenkame prievado greitį - 115200, ir gerai, jei visi įmontuoti nuoseklieji prievadai (4 ant mega, 1 ant uno) ir visi programinės įrangos prievadai veiktų vienodu greičiu. Tokiu būdu galite pasiekti stabilesnį duomenų perdavimą. Nežinau kodėl, nors galiu spėti.

Taigi, mes rašome primityvų kodą duomenų persiuntimui tarp nuosekliųjų prievadų, siunčiame atz ir atsakydami gauname tylą. Kas nutiko? Ak, skiriamos didžiosios ir mažosios raidės. ATZ, mums viskas gerai. Hurray, modulis mus girdi. Ar turėtumėte mums paskambinti iš smalsumo? ATD +7499... Suskamba laidinis telefonas, iš arduino rūko dūmai, nešiojamasis kompiuteris išsijungia. Sudegė Arduino keitiklis. Buvo negera mintis maitinti 19 voltų, nors rašoma, kad gali veikti nuo 6 iki 20V, rekomenduoja 7-12V. GSM modulio duomenų lape niekur neparašyta apie energijos suvartojimą esant apkrovai. Na, Mega eina į atsarginių dalių sandėlį. Sulaikęs kvapą įsijungiu nešiojamąjį kompiuterį, kuris per +5V liniją iš USB gavo +19V. Veikia ir net USB neišdegė. Dėkojame Lenovo, kad mus apsaugojo.

Perdegus keitikliui, ieškojau srovės suvartojimo. Taigi, didžiausias - 2A, tipiškas - 0,5A. Tai aiškiai viršija „Arduino“ keitiklio galimybes. Reikalingas atskiras maistas.

Programavimas
Modulis suteikia plačias duomenų perdavimo galimybes. Pradedant nuo balso skambučių ir SMS ir baigiant pačiu GPRS. Be to, pastariesiems galima vykdyti HTTP užklausą naudojant AT komandas. Turėsite išsiųsti keletą, bet tai verta: jūs tikrai nenorite kurti užklausos rankiniu būdu. Yra keletas niuansų, susijusių su duomenų perdavimo kanalo atidarymu per GPRS - prisimenate klasikinius AT+CGDCONT=1, „IP“, „apn“? Taigi, čia reikia to paties, tik šiek tiek gudresnio.

Norėdami gauti puslapį konkrečiu URL, turite išsiųsti šias komandas:
AT+SAPBR=1,1 //Atviras operatorius (vežėjas) AT+SAPBR=3,1"CONTYPE","GPRS" //ryšio tipas - GPRS AT+SAPBR=3,1"APN","internetas" //APN, skirtas Megafon - internetas AT+HTTPINIT //Inicijuoti HTTP AT+HTTPPARA="CID",1 //Naudojamas vežėjo ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Tikrasis URL po sprintf su koordinatėmis AT+HTTPACTION=0 // Duomenų užklausa naudojant GET metodą //laukti atsakymo AT+HTTPTERM //stop HTTP

Dėl to, jei yra ryšys, gausime atsakymą iš serverio. Tai yra, mes jau žinome, kaip siųsti koordinačių duomenis, jei serveris juos gauna per GET.

Mityba
Kadangi maitinti GSM modulį iš Arduino keitiklio, kaip išsiaiškinau, yra bloga mintis, buvo nuspręsta tame pačiame ebay pirkti 12v->5v, 3A keitiklį. Tačiau moduliui nepatinka 5V maitinimo šaltinis. Nusilaužkime: prijunkite 5 V prie kaiščio, iš kurio 5 V ateina iš arduino. Tada modulyje įmontuotas keitiklis (daug galingesnis nei Arduino keitiklis MIC 29302WU) iš 5V pagamins tai, ko reikia moduliui.

Serveris

Serveris parašė primityvų – saugojo koordinates ir piešia Yandex.maps. Ateityje galima papildyti įvairiomis funkcijomis, įskaitant daugelio vartotojų palaikymą, būseną „ginkluotas/neapginkluotas“, transporto priemonės sistemų (uždegimo, priekinių žibintų ir kt.) būseną ir galbūt net automobilio sistemų valdymą. Žinoma, su atitinkamu palaikymu sekliui, kuris sklandžiai virsta visaverte signalizacijos sistema.

Lauko bandymai

Taip atrodo surinktas įrenginys be dėklo:

Įdiegus maitinimo keitiklį ir įdėjus jį į korpusą iš mirusio DSL modemo, sistema atrodo taip:

Prilitavau laidus ir nuėmiau kelis kontaktus nuo Arduino blokų. Jie atrodo taip:

Mašinoje pajungiau 12V, apvažiavau Maskvą ir gavau trasą:


Trasos taškai yra gana toli vienas nuo kito. Priežastis ta, kad duomenų siuntimas GPRS užtrunka gana ilgai, o per tą laiką koordinatės nenuskaitomos. Tai aiškiai programavimo klaida. Ji apdorojama, pirma, iš karto siunčiant koordinačių paketą laikui bėgant, antra, asinchroniškai dirbant su GPRS moduliu.

Palydovų paieškos automobilio keleivio sėdynėje laikas yra pora minučių.

išvadas

Sukurti GPS sekiklį „Arduino“ savo rankomis įmanoma, nors tai nėra nereikšminga užduotis. Dabar pagrindinis klausimas – kaip paslėpti įrenginį automobilyje, kad jo neveiktų žalingi veiksniai (vanduo, temperatūra), jis nebūtų padengtas metalu (GPS ir GPRS bus ekranuoti) ir nebūtų itin pastebimas. Kol kas jis tiesiog guli salone ir jungiasi prie cigarečių degiklio lizdo.

Na, taip pat turime pataisyti kodą, kad būtų sklandesnis takelis, nors sekiklis jau atlieka pagrindinę užduotį.

Naudoti prietaisai

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 pagrįstas GSM/GPRS skydas
  • DC-DC 12v->5v 3A keitiklis

Po kelių eksperimentų su Arduino nusprendžiau padaryti paprastą ir ne itin brangų GPS sekiklį su koordinatėmis, siunčiamomis per GPRS į serverį.
Naudotas Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modulis (informacijos siuntimui į serverį), GPS imtuvas SKM53 GPS.

Viskas buvo pirkta ebay.com, iš viso apie 1500 rublių (apie 500 rublių už arduino, šiek tiek mažiau už GSM modulį, šiek tiek daugiau už GPS).

GPS imtuvas

Pirmiausia turite suprasti, kaip dirbti su GPS. Pasirinktas modulis yra vienas pigiausių ir paprasčiausių. Tačiau gamintojas žada bateriją, kad išsaugotų palydovinius duomenis. Pagal duomenų lapą šaltas užvedimas turėtų užtrukti 36 sekundes, tačiau mano sąlygomis (10 aukštas nuo palangės, šalia nėra pastatų) užtruko net 20 minučių. Tačiau kitas startas jau 2 min.

Svarbus prie Arduino prijungtų įrenginių parametras yra energijos suvartojimas. Jei perkrausite Arduino keitiklį, jis gali perdegti. Naudojamo imtuvo didžiausias energijos suvartojimas yra 45 mA @ 3,3 V. Kodėl specifikacijoje turėtų būti nurodytas srovės stiprumas esant kitai įtampai nei reikalaujama (5 V), man yra paslaptis. Tačiau Arduino keitiklis atlaikys 45 mA.

Ryšys

GPS nevaldomas, nors turi RX kaištį. Kokiu tikslu nežinoma. Pagrindinis dalykas, kurį galite padaryti su šiuo imtuvu, yra nuskaityti duomenis per NMEA protokolą iš TX kaiščio. Lygiai - 5V, tik Arduino, greitis - 9600 bodų. Aš jungiu VIN prie arduino VCC, GND prie GND, TX prie RX atitinkamos serijos. Pirmiausia perskaičiau duomenis rankiniu būdu, tada naudoju TinyGPS biblioteką. Keista, bet viskas skaitoma. Perėjus į Uno, turėjau naudoti SoftwareSerial, tada prasidėjo problemos – kai kurie žinutės simboliai buvo prarasti. Tai nėra labai kritiška, nes TinyGPS atkerta netinkamus pranešimus, tačiau tai gana nemalonu: galite pamiršti apie 1 Hz dažnį.

Greita pastaba apie SoftwareSerial: Uno nėra aparatinės įrangos prievadų, todėl turite naudoti programinės įrangos prievadus. Taigi, jis gali gauti duomenis tik iš kaiščio, kuriame plokštė palaiko pertraukimus. Uno atveju tai yra 2 ir 3. Be to, duomenis vienu metu gali priimti tik vienas toks prievadas.

Taip atrodo „bandymo stendas“.


GSM imtuvas/siųstuvas


Dabar ateina įdomesnė dalis. GSM modulis - SIM900. Jis palaiko GSM ir GPRS. Nei EDGE, nei ypač 3G nepalaikomi. Koordinačių duomenims perduoti tai turbūt gerai – perjungiant režimus nebus vėlavimų ar problemų, be to, GPRS dabar pasiekiamas beveik visur. Tačiau kai kurioms sudėtingesnėms programoms to gali nepakakti.

Ryšys

Modulis taip pat valdomas per nuoseklųjį prievadą, su tuo pačiu lygiu - 5V. O čia mums reikės ir RX, ir TX. Modulis yra ekranas, tai yra, jis įdiegtas Arduino. Be to, jis suderinamas tiek su mega, tiek su uno. Numatytasis greitis yra 115 200.

Surenkame jį ant Megos, o čia mūsų laukia pirmoji nemaloni staigmena: modulio TX kaištis krenta ant 7-ojo Megos kaiščio. Pertraukimai negalimi 7-ame mega kontakte, tai reiškia, kad turėsite prijungti 7-ąjį kaištį, tarkime, prie 6-ojo kontakto, ant kurio galimi pertraukimai. Taigi iššvaistysime vieną Arduino kaištį. Na, mega tai nėra labai baisu - juk yra pakankamai smeigtukų. Bet Uno tai jau sudėtingiau (primenu, kad yra tik 2 kaiščiai, palaikantys pertraukimus - 2 ir 3). Kaip šios problemos sprendimą galime pasiūlyti modulį ne montuoti ant Arduino, o sujungti laidais. Tada galite naudoti Serial1.

Prisijungę bandome "kalbėti" su moduliu (nepamirškite jo įjungti). Pasirenkame prievado greitį - 115200, ir gerai, jei visi įmontuoti nuoseklieji prievadai (4 ant mega, 1 ant uno) ir visi programinės įrangos prievadai veiktų vienodu greičiu. Tokiu būdu galite pasiekti stabilesnį duomenų perdavimą. Nežinau kodėl, nors galiu spėti.

Taigi, mes rašome primityvų kodą duomenų persiuntimui tarp nuosekliųjų prievadų, siunčiame atz ir atsakydami gauname tylą. Kas nutiko? Ak, skiriamos didžiosios ir mažosios raidės. ATZ, mums viskas gerai. Hurray, modulis mus girdi. Ar turėtumėte mums paskambinti iš smalsumo? ATD +7499... Suskamba laidinis telefonas, iš arduino rūko dūmai, nešiojamasis kompiuteris išsijungia. Sudegė Arduino keitiklis. Buvo negera mintis maitinti 19 voltų, nors rašoma, kad gali veikti nuo 6 iki 20V, rekomenduoja 7-12V. GSM modulio duomenų lape niekur neparašyta apie energijos suvartojimą esant apkrovai. Na, Mega eina į atsarginių dalių sandėlį. Sulaikęs kvapą įsijungiu nešiojamąjį kompiuterį, kuris per +5V liniją iš USB gavo +19V. Veikia ir net USB neišdegė. Dėkojame Lenovo, kad mus apsaugojo.


Perdegus keitikliui, ieškojau srovės suvartojimo. Taigi, didžiausias - 2A, tipiškas - 0,5A. Tai aiškiai viršija „Arduino“ keitiklio galimybes. Reikalingas atskiras maistas.

Programavimas

Modulis suteikia plačias duomenų perdavimo galimybes. Pradedant nuo balso skambučių ir SMS ir baigiant pačiu GPRS. Be to, pastariesiems galima vykdyti HTTP užklausą naudojant AT komandas. Turėsite išsiųsti keletą, bet tai verta: jūs tikrai nenorite kurti užklausos rankiniu būdu. Yra keletas niuansų, susijusių su duomenų perdavimo kanalo atidarymu per GPRS - prisimenate klasikinius AT+CGDCONT=1, „IP“, „apn“? Taigi, čia reikia to paties, tik šiek tiek gudresnio.

Norėdami gauti puslapį konkrečiu URL, turite išsiųsti šias komandas:

AT+SAPBR=1,1 //Atviras operatorius (vežėjas) AT+SAPBR=3,1"CONTYPE","GPRS" //ryšio tipas - GPRS AT+SAPBR=3,1"APN","internetas" //APN, skirta Megafon - internetas AT+HTTPINIT //Inicijuoti HTTP AT+HTTPPARA="CID",1 //Naudojamas vežėjo ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Tikrasis URL po sprintf su koordinatėmis AT+HTTPACTION=0 // Duomenų užklausa naudojant GET metodą //laukti atsakymo AT+HTTPTERM //stop HTTP

Dėl to, jei yra ryšys, gausime atsakymą iš serverio. Tai yra, mes jau žinome, kaip siųsti koordinačių duomenis, jei serveris juos gauna per GET.

Mityba

Kadangi maitinti GSM modulį iš Arduino keitiklio, kaip išsiaiškinau, yra bloga mintis, buvo nuspręsta tame pačiame ebay pirkti 12v->5v, 3A keitiklį. Tačiau moduliui nepatinka 5V maitinimo šaltinis. Nusilaužkime: prijunkite 5 V prie kaiščio, iš kurio 5 V ateina iš „Arduino“. Tada modulyje įmontuotas keitiklis (daug galingesnis nei Arduino keitiklis MIC 29302WU) iš 5V pagamins tai, ko reikia moduliui.

Serveris

Serveris parašė primityvų – saugojo koordinates ir piešia Yandex.maps. Ateityje galima papildyti įvairiomis funkcijomis, įskaitant daugelio vartotojų palaikymą, būseną „ginkluotas/neginkluotas“, transporto priemonės sistemų (uždegimo, priekinių žibintų ir kt.) būseną ir galbūt net automobilio sistemų valdymą. Žinoma, su atitinkamu palaikymu sekliui, kuris sklandžiai virsta visaverte signalizacijos sistema.

Lauko bandymai

Taip atrodo surinktas įrenginys be dėklo:


Įdiegus maitinimo keitiklį ir įdėjus jį į korpusą iš mirusio DSL modemo, sistema atrodo taip:

Prilitavau laidus ir nuėmiau kelis kontaktus nuo Arduino blokų. Jie atrodo taip:

Mašinoje pajungiau 12V, apvažiavau Maskvą ir gavau trasą:


Takelis pasirodo suplyšęs. Priežastis ta, kad duomenų siuntimas GPRS užtrunka gana ilgai, o per tą laiką koordinatės nenuskaitomos. Tai aiškiai programavimo klaida. Ji apdorojama, pirma, iš karto siunčiant koordinačių paketą laikui bėgant, antra, asinchroniškai dirbant su GPRS moduliu.

Asmeniniai GPS siųstuvai

Šiandien pažanga vyksta tokiu tempu, kad įrenginiai, kurie anksčiau buvo dideli, brangūs ir labai specializuoti, greitai praranda dydį, svorį ir kainą, tačiau įgyja daug naujų funkcijų.

Taip GPS technologija paremti įrenginiai pasiekė kišeninius dalykėlius ir ten tvirtai įsitaisė, suteikdami žmonėms naujų galimybių. Ypač verta išskirti atskirus GPS siųstuvus.

Iš esmės tai tie patys GPS sekėjai, tik skirti naudoti ne transporto priemonėje, o žmogui kasdieniame gyvenime.

Priklausomai nuo modelio, viename korpuse galima sujungti kelis skirtingus įrenginius. Paprasčiausia forma tai tiesiog maža dėžutė be ekrano, kuri leidžia valdyti vaikų, gyvūnų ar kai kurių kitų objektų judesius, ant kurio jis pritvirtintas.

Jo viduje yra GPS modulis, nustatantis koordinates žemėje, GSM/GPRS modulis, perduodantis informaciją ir priimantis valdymo komandas, taip pat maitinimo šaltinis, užtikrinantis autonominį darbą ilgą laiką.

GPS siųstuvų funkcionalumas

Didėjant funkcionalumui, atsiranda šios įrenginio galimybės:


GPS siųstuvų parinktys

Priklausomai nuo konfigūracijos, siųstuvo korpusai gali labai skirtis. Galimi įvairūs mobiliųjų telefonų, klasikinių navigatorių ar net rankinių laikrodžių modeliai.

Spalvingas specialių versijų dizainas ir naudingi papildymai leidžia vaikams traktuoti šiuos įrenginius ne kaip „tėvų šnipus“, o kaip madingus ir praktiškus dalykėlius.

Kaip privalumą verta paminėti tai, kad daugelis įrenginio versijų puikiai veikia be abonentinių mokesčių už specializuotų operatorių paslaugas, o visa reikalinga informacija klientui siunčiama tiesiogiai internetu arba SMS žinutėmis, o tai leidžia gerokai sutaupyti. dėl tokios įrangos priežiūros.

Straipsniai apie GPS sekiklius

Šiame straipsnyje parodysiu, kaip naudoti gsm modulį su arduino, kaip pavyzdį sim800L. Tos pačios instrukcijos yra gana tinkamos naudoti bet kokius kitus gsm modulius, pavyzdžiui, sim900 ir pan., nes visi moduliai veikia maždaug vienodai - tai yra AT komandų apsikeitimas per prievadą.

Modulio naudojimą su arduino parodysiu SMS relės pavyzdžiu, kurios pagalba galima valdyti įrenginį nuotoliniu būdu per SMS komandas. Tai gali būti naudojama kartu su automobilio signalizacija ir kt.

Modulis yra prijungtas prie Arduino per programinės įrangos nuosekliojo prievado UART sąsają, veikiančią 2 ir 3 skaitmeniniuose Arduino nano kontaktuose.

Veikia Arduino su GSM moduliais

Norint maitinti modulį, reikalinga įtampa nuo 3,6 V iki 4,2 V, tai reiškia, kad turėsite naudoti papildomą įtampos stabilizatorių, nes Arduino yra sumontuotas 3,3 voltų stabilizatorius, kuris netinka moduliui maitinti , antroji priežastis įdiegti papildomą stabilizatorių yra ta, kad GSM modulis yra labai apkrautas, nes jis turi silpną siųstuvą, užtikrinantį stabilų ryšį su korinio ryšio stotimi. Arduino nano maitinimas tiekiamas į VIN kaištį – tai į Arduino įmontuotas stabilizatorius, užtikrinantis modulio veikimą plačiame įtampos diapazone (6-10V). Relės modulis jungiamas pagal pateiktą programos tekstą prie Arduino nano 10 kaiščio ir gali būti lengvai pakeistas į bet kurį kitą, kuris veikia kaip skaitmeninis išėjimas.

Tai veikia taip: į GSM modulį įdedame SIM kortelę, įjungiame maitinimą ir siunčiame SMS su tekstu "1" į SIM kortelės numerį, kad įjungtume savo relę, norėdami ją išjungti, siunčiame SMS su tekstu "0".

#įtraukti
SoftwareSerial gprsSerial(2, 3); // nustatykite 2 ir 3 kaiščius programinės įrangos prievadui
int LedPin = 10; // estafetei

negaliojantis nustatymas ()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// pranešimų priėmimo nustatymas

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
delsimas (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
delsimas (500); // komandų apdorojimo delsa
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
delsimas(700);
}

Eilutė currStr = "";
// jei ši eilutė yra pranešimas, tada kintamasis įgis reikšmę True
loginis isStringMessage = false;

void loop ()
{
if (!gprsSerial.available())
grąžinti;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// jei dabartinė eilutė yra pranešimas, tada...
if (!currStr.compareTo("1")) (
skaitmeninis rašymas (LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite (LedPin, LOW);
}
isStringMessage = false;
) Kitas (
if (currStr.startsWith("+CMT")) (
// jei dabartinė eilutė prasideda „+CMT“, tada kitas pranešimas
isStringMessage = tiesa;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Straipsnio vaizdo versija:

Žymos: #Arduino, #SIM800L

Jūsų ženklas:

Šiame straipsnyje naudojami produktai:

← GPS registratorius arduino | Relės valdymas per COM prievadą →

GSM skaitytuvas RTL-SDR

| namai| Anglų kalba | Plėtra | DUK |

Pagrindinės skaitytuvo charakteristikos

GSM skaitytuvas nuskaito pasroviui GSM kanalus ir rodo informaciją apie signalo lygį ir ar kanalas priklauso vienam iš trijų pagrindinių korinio ryšio operatorių MTS, Beeline ir Megafon. Remiantis savo darbo rezultatais, skaitytuvas leidžia išsaugoti visų nuskaitytų kanalų MCC, MNC, LAC ir CI bazinių stočių identifikatorių sąrašą.
GSM skaitytuvu galima įvertinti GSM signalo lygį, palyginti skirtingų operatorių signalo kokybę, įvertinti radijo aprėptį, sprendžiant dėl ​​korinio signalo stiprintuvų įrengimo ir jų parametrų reguliavimo, edukaciniais tikslais ir kt.
Skaitytuvas veikia Windows sistemoje ir naudoja paprastą bei pigų imtuvą – RTL-SDR. Apie RTL-SDR galite perskaityti adresu:
RTL-SDR (RTL2832U) ir programinės įrangos apibrėžtos radijo naujienos ir projektai,
RTL-SDR – OsmoSDR,
RTL-SDR rusų kalba.
RTL-SDR parametrai nustato pagrindines skaitytuvo charakteristikas. Žinoma, GSM skaitytuvas nepakeičia įprastos matavimo įrangos.
Skaitytuvas platinamas nemokamai, be jokių naudojimo apribojimų.
Dabartinė versija palaiko GSM 900 dažnių juostą ir nepalaiko GSM 1800. Tai lemia tai, kad RTL-SDR su R820T imtuvu veikimo dažnis ribojamas iki 1760 MHz. Yra vilties, kad eksperimentinės RTL-SDR tvarkyklės naudojimas leis veikti bent dalyje 1800 MHz diapazono.

Skaitytuvo paleidimas

Naujausią skaitytuvo versiją galite atsisiųsti iš šios nuorodos. Tiesiog išpakuokite failą į patogią vietą ir paleiskite gsmscan.exe.
Ankstesnės skaitytuvo versijos, nuoroda į saugyklą su šaltiniais ir kita su kūrimu susijusi informacija yra kūrimo puslapyje.
Kad skaitytuvas veiktų, reikia įdiegti RTL-SDR tvarkykles, jei jos dar neįdiegtos, tai galima patogiai atlikti naudojant Zadig programą, aprašant diegimo procedūrą.

Skaitytuvo naudojimas

Žemiau pateikiamas skaitytuvo programos lango vaizdas:

Horizontalioje ašyje rodomas GSM kanalo numeris ARFCN arba MHz forma, o vertikalioje ašyje rodomas signalo lygis dBm. Linijos aukštis rodo signalo stiprumą.

GSM modulis NEOWAY M590 bendravimas su Arduino

Jei BS identifikatoriai buvo sėkmingai iškoduoti ir jie atitinka trijų pagrindinių telekomunikacijų operatorių identifikatorius, linijos nudažomos atitinkamomis spalvomis.
Ekrano viršuje esantys išskleidžiamieji sąrašai leidžia pasirinkti SDR imtuvą, jei yra prijungti keli, veikimo diapazoną GSM 900 arba GSM 1800 ir matavimo vienetus išilgai horizontalios ašies ARFCN arba MHz.
Mygtukai leidžia išsaugoti skaitytuvo veikimo ataskaitą iššifruotų bazinių stočių sąrašo pavidalu, išvalyti BS dekodavimo rezultatus ir gauti informaciją apie programą.

Darbo principai ir ypatumai.

Veikimo metu programa nuskaito veikimo dažnių diapazoną 2,0 MHz žingsniu (10 GSM kanalų) ir suskaitmenina signalą 2,4 MHz diskretizavimo dažniu. Nuskaitymo procesą sudaro greitas perėjimas per visą diapazoną, kad būtų išmatuotas signalo stiprumas, ir lėtas praėjimas, kad būtų iškoduoti BS identifikatoriai.

Vienas dekodavimo veiksmas atliekamas perėjus visą diapazoną galiai matuoti. Taigi GSM 900 diapazone signalo lygis atnaujinamas maždaug kartą per 2 s, o pilnas dekodavimo procesas trunka apie 1 minutę.
Dėl prastos signalo, gaunamo iš RTL-SDR, BS transliacijos valdymo kanalo (BCCH) sistemos informacijos (SI) teisingo dekodavimo tikimybė nėra didelė. Signalo lygio svyravimai, atsirandantys dėl sklidimo keliais keliais, taip pat sumažina sistemos informacijos dekodavimo tikimybę. Dėl šių priežasčių, norint gauti BS identifikatorius, skaitytuvas turi sukaupti informaciją maždaug per 10 minučių. Tačiau net ir šiuo atveju ne visi kanalai užtikrina pakankamą signalo lygį ir kokybę tam tikroje vietoje, kad jį dekoduotų net idealiausias imtuvas. Be to, ne visi GSM kanalai naudojami veikti pagal GSM standartą, kaip matyti aukščiau esančiame paveikslėlyje, 975–1000 kanalus užima „Megafon“, kad veiktų pagal UMTS standartą.
Veikimo metu skaitytuvas prideda sistemos informaciją apie naujus iššifruotus kanalus į bendrą informacijos apie kanalus masyvą. Tačiau informacija apie anksčiau dekoduotus kanalus neištrinama, kai sistemos informacija šiame žingsnyje neiššifruojama, ir lieka masyve. Norėdami išvalyti šią informaciją, naudokite mygtuką BS dekodavimo rezultatams išvalyti.
Spustelėjus mygtuką Išsaugoti ataskaitą, sukaupti rezultatai išsaugomi tekstiniame faile su pavadinimu, sudarytu iš programos pavadinimo, duomenų išsaugojimo datos ir laiko. Žemiau pateikiamas ataskaitos failo dalies pavyzdys:
Skaitytuvas skirtas dirbti su Windows 7, 8.1 ir 10. Darbas buvo išbandytas su trimis RTL-SDR kopijomis su R820T derintuvu, nebuvo išbandytas.
Sukurta speciali programos versija, skirta veikti su Windows XP, ji veikia kelis kartus lėčiau nei standartinė versija.

Plėtra.

Skaitytuvo programa pateikiama tokia, kokia yra, be jokių garantijų ar atsakomybės. Jei turite pagrįstų idėjų, kaip išplėsti skaitytuvo funkcionalumą ar pagerinti veikimą, esame pasirengę aptarti jų įgyvendinimo galimybę.
Norėdami tai padaryti, galite dalyvauti kuriant skaitytuvą, apsilankykite kūrimo puslapyje.
Planuojama toliau tobulinti GSM skaitytuvą, galbūt su Jūsų dalyvavimu.