Andmed salvestatakse tabelina dataGPS.csv, mille vorming vastab teenuse nõuetele Google'i Minu kaardid.

    Programmeerimiskeel: Arduino (C++)

Video juhendamine

Mida sa vajad

Kuidas kokku panna

gps-tracker.ino // teek SPI kaudu seadmetega töötamiseks#kaasa // raamatukogu SD-kaardiga töötamiseks#kaasa // teek GPS-seadmega töötamiseks#kaasa // looge GPS-klassi objekt ja edastage sellele objekt Serial1 GPS gps (Serial1) ; // LED pin#define LED_PIN A0 // nupu viik #define BUTTON_PIN 13 // kinnitage CS-i micro-sd-kaart#define CHIP_SELECT_PIN 9 // andmete kaardile kirjutamise ajavahemik#define INTERVAL 5000 // määrake massiivi suurus kellaaja, kuupäeva, laius- ja pikkuskraadi jaoks#define MAX_SIZE_MASS 16 // massiiv praeguse kellaaja salvestamiseks char time [MAX_SIZE_MASS]; // kirje olek bool stateRec = false ; // jätab praeguse aja meelde pikk algusMillis = millis() ; void setup() ( // avage jadaport, et jälgida programmi toiminguid Serial.begin(115200); // oodake, kuni jadapordi monitor avaneb // et jälgida kõiki programmi sündmusi// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // jadaühenduse avamine GPS-mooduliga Serial1.begin(115200); // seadke LED väljundrežiimile pinMode(LED_PIN, VÄLJUND) ; // seadke nupp sisselogimisrežiimi pinMode(BUTTON_PIN, INPUT_PULLUP) ; // väljastab jadaporti lähtestamise teabe Serial.println("SD-kaardi lähtestamine...") ; // lähtestage SD-kaart while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kaart ebaõnnestus või puudub" ) ; delay(1000 ) ; ) // väljastab teavet jadaporti Serial.println("Kaart on lähtestatud"); // looge failidega töötamiseks klassist File objekt dataFile Fail dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // kui fail on olemas if (andmefail) ( // kirjutage mälukaardile tulevaste andmete nimi dataFile.println("Aeg, koordinaadid, kiirus"); // sulgege fail dataFile.close(); Serial.println("Salvesta OK"); ) else ( Serial.println ("Viga test.csv avamisel" ) ; ) ) void loop() ( // Salvestage nupuvajutus if (! digitalRead(BUTTON_PIN) ) ( // muutke mälukaardile olekut "salvestamine" / "ei kirjuta". stateRec = ! stateRec; // indikaator-LED oleku muutmine digitalWrite(LED_PIN, olekRec) ; ) // kui andmed tulid GPS-moodulist if (gps.available()) ( // loe andmeid ja sõelu gps.readParsing(); // kontrollige GPS-mooduli olekut switch (gps.getState () ) ( // kõik on OK case GPS_OK: Serial.println ("GPS on OK" ) ; // kui määratud ajavahemik on möödas if (millis() - startMillis > INTERVAL && stateRec) ( // andmete salvestamine mälukaardile salvestaSD() ; // mäleta praegust kellaaega startMillis = millis() ; ) vaheaeg ; // andmevea juhtum GPS_ERROR_DATA: Serial.println ("GPS-i veaandmed" ) ; murda ; // puudub ühendus satelliitidega juhtum GPS_ERROR_SAT: Serial.println ( "GPS ei ühendu satelliitidega") ; murda ; ) ) ) // andmete mälukaardile salvestamise funktsioon void saveSD() ( Fail dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // kui fail on olemas ja see on avatud if (andmefail) ( // loeb praegust kellaaega gps.getTime(aeg, MAX_SIZE_MASS); // kirjutage aeg mälukaardile dataFile.print(" \" " ) ; andmefail.print(aeg); dataFile.print(" \" " ) ; dataFile.print ("," ) ; dataFile.print(" \" " ) ; // lugeda ja kirjutada mälukaardile laius- ja pikkuskraadi koordinaate 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("Salvesta OK"); ) else ( Serial.println ("Viga test.csv avamisel" ) ; ) )

Globaalne GPS-positsioneerimissüsteem on juba saanud meie elu osaks. Tänapäeval on raske ette kujutada mobiiltelefoni ilma sisseehitatud GPS-moodulita. See satelliitnavigatsioonisüsteem võimaldab teil jälgida kõiki objekte, määrata nende koordinaadid ja liikumiskiirus. Nüüd on GPS saadaval mitte ainult vastavaid seadmeid arendavatele ettevõtetele, vaid ka tavalistele raadioamatööridele, kes juba kasutavad populaarseid Arduino plaate täiel rinnal. Selles materjalis käsitletakse miniatuurse GPS-jälgija ühendamist Arduino Pro Mini tahvliga. Katsealusena kasutatakse PG03 MiniGPS jälgijat.



See jälgija näitab lisaks otsestele geograafilistele koordinaatidele liikumissuunda, läbitud vahemaad ja liikumiskiirust. Kahjuks ei salvesta see teavet, nii et ühendades selle Arduinoga, pääsete neile andmetele juurde ja saate nendega teha, mida soovite.


Esiteks tuleb jälgija lahti võtta. Allpool on lahti võetud GPS-jälgija pildid.




Jälgija südameks on Venus638FLP GPS-kiip. Selle 44. pin on UART-liidese (TxD) väljund. Võite jootma traadi otse selle tihvti külge või leiate plaadilt testtihvti, millega see kontakt on samuti ühendatud. Allpool on pildid mikrolülituse tihvtide asukohtadest ja sellest, kuidas soovitud kontaktiga ühendada.





Võtame nüüd kompaktse Arduino Pro Mini plaadi ja SD-kaardi mooduli NMEA protokolli andmete salvestamiseks. Arduino Pro Mini ja SD-kaardi mooduli ühendusskeem on järgmine:



SD-kaartide mooduli kontaktid:


GND kuni GND
VCC kuni 3,3 V
MISO tihvtile 12
MOSI tihvti 11 külge
SCK tihvti 13 külge
CS 10

GPS-jälgija kontaktide ühendamine:


GND kuni GND
Pin 2 (Arduino) viik 44 (GPS)

Parem on võtta toide GPS-jälgijalt (3,7 V). Kuna selle aku energiamaht on väike, on eelistatav ühendada väline aku, näiteks 1400 mAh mobiiltelefonist, nagu on näidatud ühel ülaloleval pildil.


Nüüd peate alla laadima TinyGPS-i raamatukogu, vajate ka SD-kaartidega töötamiseks teeki ja SoftwareSeriali teeki, mille leiate Arduino\libraries.



Järgmises kooditükis saate valida, milliseid andmeid kirjutada:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Kiirus km/h float falt = gps.f_altitude(); // +/- kõrgus meetrites (tegelikult näib olevat kõrgus) float fc = gps.f_course( // Kursus kraadides unsigned long age(&flat, &flon, &age;); " lon "); //// //////////////////////////////////////////////// /////////////////

Laadi sketš üles Arduinosse, sisesta FAT32 järgi vormindatud SD-kaart, mille juurus on log.txt fail. Käivitage Serial Monitor ja näete, et andmed kirjutatakse SD-kaardile.



Pärast mitmeid katsetusi Arduinoga otsustasin teha lihtsa ja mitte väga kalli GPS-jälgija, mille koordinaadid saadetakse GPRS-i kaudu serverisse.
Kasutatud Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS moodul (info saatmiseks serverisse), GPS vastuvõtja SKM53 GPS.

Kõik sai ostetud ebay.com-ist, kokku umbes 1500 rubla eest (u 500 rubla arduino, natuke vähem GSM moodul, natuke rohkem GPS).

GPS vastuvõtja

Kõigepealt peate mõistma, kuidas GPS-iga töötada. Valitud moodul on üks odavamaid ja lihtsamaid. Satelliidiandmete säästmiseks lubab tootja aga akut. Külmkäivitus peaks andmelehe järgi kestma 36 sekundit, aga minu tingimustes (10. korrus aknalauast, hooneid lähedal ei ole) kulus selleks lausa 20 minutit. Järgmine start on aga juba 2 minutit.

Arduinoga ühendatud seadmete oluline parameeter on energiatarve. Kui koormate Arduino muundurit üle, võib see läbi põleda. Kasutatava vastuvõtja puhul on maksimaalne voolutarve 45mA @ 3,3v. Miks spetsifikatsioon peaks näitama voolutugevust muul pingel kui nõutav (5V), on minu jaoks mõistatus. Arduino muundur peab aga vastu 45 mA.

Ühendus
GPS-i ei juhita, kuigi sellel on RX-viik. Mis eesmärgil, pole teada. Peamine asi, mida selle vastuvõtjaga teha saate, on lugeda andmeid NMEA protokolli kaudu TX-pistikust. Tasemed - 5V, ainult Arduino jaoks, kiirus - 9600 baudi. Ühendan VIN-i arduino VCC-ga, GND-i GND-ga, TX-i vastava jada RX-iga. Lugesin andmed esmalt käsitsi, seejärel kasutasin TinyGPS-i teeki. Üllataval kombel on kõik loetav. Pärast Unole üleminekut pidin kasutama SoftwareSeriali ja siis algasid probleemid – osa sõnumite märke läks kaduma. See pole eriti kriitiline, kuna TinyGPS lõikab kehtetud sõnumid ära, kuid see on üsna ebameeldiv: võite unustada 1 Hz sageduse.

Kiire märkus SoftwareSeriali kohta: Unol pole riistvaraporte (peale selle, mis on ühendatud USB Serialiga), seega peate kasutama tarkvara. Seega saab see andmeid vastu võtta ainult kontakti kohta, millel plaat toetab katkestusi. Uno puhul on need 2 ja 3. Pealegi saab andmeid korraga vastu võtta vaid üks selline port.

Selline näeb välja "katsestend".

GSM vastuvõtja/saatja


Nüüd tuleb huvitavam osa. GSM-moodul - SIM900. See toetab GSM-i ja GPRS-i. Ei toetata ei EDGE-d ega eriti 3G-d. Koordinaatandmete edastamiseks on see ilmselt hea - režiimide vahetamisel ei teki viivitusi ega probleeme, lisaks on GPRS nüüd saadaval peaaegu kõikjal. Mõne keerukama rakenduse puhul ei pruugi sellest siiski piisata.

Ühendus
Moodulit juhitakse ka jadapordi kaudu, sama tasemega - 5V. Ja siin vajame nii RX-i kui ka TX-i. Moodul on varjestatud, see tähendab, et see on installitud Arduinosse. Lisaks ühildub see nii mega kui ka uno-ga. Vaikimisi on kiirus 115 200.

Panime selle kokku Megal ja siin ootab meid esimene ebameeldiv üllatus: mooduli TX-tihvt langeb Mega 7. kontaktile. Katkestused pole mega 7. kontakti jaoks saadaval, mis tähendab, et peate ühendama 7. viigu näiteks 6. viiguga, millel on katkestused võimalikud. Seega raiskame ühe Arduino tihvti. Noh, mega jaoks pole see väga hirmutav - lõppude lõpuks on tihvte piisavalt. Aga Uno jaoks on see juba keerulisem (tuletan meelde, et katkestusi toetavaid kontakte on ainult 2 - 2 ja 3). Selle probleemi lahendamiseks saame soovitada moodulit mitte paigaldada Arduinole, vaid ühendada see juhtmetega. Seejärel saate kasutada Serial1.

Pärast ühendamist proovime mooduliga "vestelda" (ärge unustage seda sisse lülitada). Valime pordi kiiruseks - 115200 ja on hea, kui kõik sisseehitatud jadapordid (4 mega, 1 uno) ja kõik tarkvara pordid töötavad sama kiirusega. Nii saate saavutada stabiilsema andmeedastuse. Ma ei tea miks, kuigi võin arvata.

Seega kirjutame primitiivse koodi andmete edastamiseks jadaportide vahel, saadame atz ja võtame vastuseks vastu vaikuse. Mis on juhtunud? Ah, tõstutundlik. ATZ, kõik on korras. Hurraa, moodul kuuleb meid. Kas peaksite uudishimust meile helistama? ATD +7499... Lauatelefon heliseb, arduinost tuleb suitsu, sülearvuti lülitub välja. Arduino muundur põles läbi. Halb mõte oli 19 volti toita, kuigi kirjas on, et võib töötada 6-20V, soovitavad 7-12V. GSM-mooduli andmelehel pole kuskil kirjas koormuse all tarbitava energia kohta. Noh, Mega läheb varuosade lattu. Lülitan hinge kinni hoides sisse sülearvuti, mis sai USB-st +5V liini kaudu +19V. See töötab ja isegi USB ei põlenud läbi. Täname Lenovot meid kaitsmast.

Pärast konverteri läbipõlemist otsisin voolutarbimist. Niisiis, tipp - 2A, tüüpiline - 0,5A. See ületab selgelt Arduino muunduri võimalused. Nõuab eraldi toitu.

Programmeerimine
Moodul pakub ulatuslikke andmeedastusvõimalusi. Alustades häälkõnedest ja SMS-idest ning lõpetades GPRS-i endaga. Veelgi enam, viimase jaoks on võimalik AT-käskude abil täita HTTP-päring. Peate saatma mitu, kuid see on seda väärt: te ei soovi tegelikult taotlust käsitsi luua. GPRS-i kaudu andmeedastuskanali avamisel on paar nüanssi – mäletate klassikalist AT+CGDCONT=1, “IP”, “apn”? Nii et siin on vaja sama asja, aga veidi kavalamat.

Kindla URL-iga lehe saamiseks peate saatma järgmised käsud:
AT+SAPBR=1,1 //Avatud operaator (operaator) AT+SAPBR=3,1"CONTYPE","GPRS" //ühenduse tüüp - GPRS AT+SAPBR=3,1"APN","internet" //APN, Megafoni jaoks - internet AT+HTTPINIT //Initsialiseeri HTTP AT+HTTPPARA="CID",1 //Kasutamiseks kasutatava operaatori ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Tegelik URL pärast sprintf-i koordinaatidega AT+HTTPACTION=0 // Taotlege andmeid GET-meetodiga //oodake vastust AT+HTTPTERM //peata HTTP

Selle tulemusena saame ühenduse olemasolul serverilt vastuse. See tähendab, et tegelikult me ​​juba teame, kuidas koordinaatandmeid saata, kui server saab need GET-i kaudu.

Toitumine
Kuna GSM mooduli toide Arduino konverterist, nagu ma teada sain, on halb mõte, siis otsustati sealtsamast ebayst osta 12v->5v, 3A muundur. Moodulile aga ei meeldi 5V toide. Lähme häkkima: ühendage 5V tihvtiga, millest 5V tuleb arduinost. Siis teeb mooduli sisseehitatud muundur (palju võimsam kui Arduino muundur, MIC 29302WU) 5V-st selle, mida moodul vajab.

Server

Server kirjutas primitiivse - koordinaatide salvestamine ja joonistamine Yandex.mapsis. Tulevikus on võimalik lisada erinevaid funktsioone, sealhulgas paljude kasutajate tugi, "relvastatud/relvamata" olek, sõiduki süsteemide olek (süüde, esituled jne) ja võimalik, et isegi sõidukisüsteemide juhtimine. Muidugi koos vastava toega jälgijale, mis muutub sujuvalt täieõiguslikuks häiresüsteemiks.

Välikatsed

Selline näeb kokkupandud seade ilma korpuseta välja:

Pärast toitemuunduri paigaldamist ja surnud DSL-modemi korpusesse asetamist näeb süsteem välja järgmine:

Jootsin juhtmed ja eemaldasin Arduino plokkidelt mitu kontakti. Need näevad välja sellised:

Ühendasin autosse 12V, sõitsin Moskvas ringi ja sain raja kätte:


Rajapunktid on üksteisest üsna kaugel. Põhjus on selles, et andmete saatmine GPRS-i kaudu võtab suhteliselt kaua aega ja selle aja jooksul koordinaate ei loeta. See on selgelt programmeerimisviga. Seda töödeldakse esiteks kohe koordinaatide paketi saatmisega aja jooksul ja teiseks GPRS-mooduliga asünkroonselt töötades.

Auto kõrvalistmel satelliitide otsimise aeg on paar minutit.

järeldused

Oma kätega Arduino GPS-jälgija loomine on võimalik, kuigi mitte tühine ülesanne. Peamine küsimus on praegu selles, kuidas seadet autosse peita nii, et see ei puutuks kokku kahjulike teguritega (vesi, temperatuur), ei oleks metalliga kaetud (GPS ja GPRS saavad varjestatud) ega oleks eriti märgatav. Praegu asub see lihtsalt salongis ja ühendub sigaretisüütaja pesaga.

Noh, sujuvama raja jaoks peame ka koodi parandama, kuigi jälgija täidab juba põhiülesande.

Kasutatud seadmed

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 põhinev GSM/GPRS kilp
  • DC-DC 12v->5v 3A muundur

Pärast mitmeid katsetusi Arduinoga otsustasin teha lihtsa ja mitte väga kalli GPS-jälgija, mille koordinaadid saadetakse GPRS-i kaudu serverisse.
Kasutatud Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS moodul (info saatmiseks serverisse), GPS vastuvõtja SKM53 GPS.

Kõik sai ostetud ebay.com-ist, kokku umbes 1500 rubla eest (u 500 rubla arduino, natuke vähem GSM moodul, natuke rohkem GPS).

GPS vastuvõtja

Kõigepealt peate mõistma, kuidas GPS-iga töötada. Valitud moodul on üks odavamaid ja lihtsamaid. Satelliidiandmete säästmiseks lubab tootja aga akut. Külmkäivitus peaks andmelehe järgi kestma 36 sekundit, aga minu tingimustes (10. korrus aknalauast, hooneid lähedal ei ole) kulus selleks lausa 20 minutit. Järgmine start on aga juba 2 minutit.

Arduinoga ühendatud seadmete oluline parameeter on energiatarve. Kui koormate Arduino muundurit üle, võib see läbi põleda. Kasutatava vastuvõtja puhul on maksimaalne voolutarve 45mA @ 3,3v. Miks spetsifikatsioon peaks näitama voolutugevust muul pingel kui nõutav (5V), on minu jaoks mõistatus. Arduino muundur peab aga vastu 45 mA.

Ühendus

GPS-i ei juhita, kuigi sellel on RX-viik. Mis eesmärgil, pole teada. Peamine asi, mida selle vastuvõtjaga teha saate, on lugeda andmeid NMEA protokolli kaudu TX-pistikust. Tasemed - 5V, ainult Arduino jaoks, kiirus - 9600 baudi. Ühendan VIN-i arduino VCC-ga, GND-i GND-ga, TX-i vastava jada RX-iga. Lugesin andmed esmalt käsitsi, seejärel kasutasin TinyGPS-i teeki. Üllataval kombel on kõik loetav. Pärast Unole üleminekut pidin kasutama SoftwareSeriali ja siis algasid probleemid – osa sõnumite märke läks kaduma. See pole eriti kriitiline, kuna TinyGPS lõikab kehtetud sõnumid ära, kuid see on üsna ebameeldiv: võite unustada 1 Hz sageduse.

Kiire märkus SoftwareSeriali kohta: Unol pole riistvaraporte, seega peate kasutama tarkvara porti. Seega saab see andmeid vastu võtta ainult kontakti kohta, millel plaat toetab katkestusi. Uno puhul on need 2 ja 3. Pealegi saab andmeid korraga vastu võtta vaid üks selline port.

Selline näeb välja "katsestend".


GSM vastuvõtja/saatja


Nüüd tuleb huvitavam osa. GSM-moodul - SIM900. See toetab GSM-i ja GPRS-i. Ei toetata ei EDGE-d ega eriti 3G-d. Koordinaatandmete edastamiseks on see ilmselt hea - režiimide vahetamisel ei teki viivitusi ega probleeme, lisaks on GPRS nüüd saadaval peaaegu kõikjal. Mõne keerukama rakenduse puhul ei pruugi sellest siiski piisata.

Ühendus

Moodulit juhitakse ka jadapordi kaudu, sama tasemega - 5V. Ja siin vajame nii RX-i kui ka TX-i. Moodul on varjestatud, see tähendab, et see on installitud Arduinosse. Lisaks ühildub see nii mega kui ka uno-ga. Vaikimisi on kiirus 115 200.

Panime selle kokku Megal ja siin ootab meid esimene ebameeldiv üllatus: mooduli TX-tihvt langeb Mega 7. kontaktile. Katkestused pole mega 7. kontakti jaoks saadaval, mis tähendab, et peate ühendama 7. viigu näiteks 6. viiguga, millel on katkestused võimalikud. Seega raiskame ühe Arduino tihvti. Noh, mega jaoks pole see väga hirmutav - lõppude lõpuks on tihvte piisavalt. Aga Uno jaoks on see juba keerulisem (tuletan meelde, et katkestusi toetavaid kontakte on ainult 2 - 2 ja 3). Selle probleemi lahendamiseks saame soovitada moodulit mitte paigaldada Arduinole, vaid ühendada see juhtmetega. Seejärel saate kasutada Serial1.

Pärast ühendamist proovime mooduliga "vestelda" (ärge unustage seda sisse lülitada). Valime pordi kiiruseks - 115200 ja on hea, kui kõik sisseehitatud jadapordid (4 mega, 1 uno) ja kõik tarkvara pordid töötavad sama kiirusega. Nii saate saavutada stabiilsema andmeedastuse. Ma ei tea miks, kuigi võin arvata.

Seega kirjutame primitiivse koodi andmete edastamiseks jadaportide vahel, saadame atz ja võtame vastuseks vastu vaikuse. Mis on juhtunud? Ah, tõstutundlik. ATZ, kõik on korras. Hurraa, moodul kuuleb meid. Kas peaksite uudishimust meile helistama? ATD +7499... Lauatelefon heliseb, arduinost tuleb suitsu, sülearvuti lülitub välja. Arduino muundur põles läbi. Halb mõte oli 19 volti toita, kuigi kirjas on, et võib töötada 6-20V, soovitavad 7-12V. GSM-mooduli andmelehel pole kuskil kirjas koormuse all tarbitava energia kohta. Noh, Mega läheb varuosade lattu. Lülitan hinge kinni hoides sisse sülearvuti, mis sai USB-st +5V liini kaudu +19V. See töötab ja isegi USB ei põlenud läbi. Täname Lenovot meid kaitsmast.


Pärast konverteri läbipõlemist otsisin voolutarbimist. Niisiis, tipp - 2A, tüüpiline - 0,5A. See ületab selgelt Arduino muunduri võimalused. Nõuab eraldi toitu.

Programmeerimine

Moodul pakub ulatuslikke andmeedastusvõimalusi. Alustades häälkõnedest ja SMS-idest ning lõpetades GPRS-i endaga. Veelgi enam, viimase jaoks on võimalik AT-käskude abil täita HTTP-päring. Peate saatma mitu, kuid see on seda väärt: te ei soovi tegelikult taotlust käsitsi luua. GPRS-i kaudu andmeedastuskanali avamisel on paar nüanssi – mäletate klassikalist AT+CGDCONT=1, “IP”, “apn”? Nii et siin on vaja sama asja, aga veidi kavalamat.

Kindla URL-iga lehe saamiseks peate saatma järgmised käsud:

AT+SAPBR=1,1 //Avatud operaator (operaator) AT+SAPBR=3,1"CONTYPE","GPRS" //ühenduse tüüp - GPRS AT+SAPBR=3,1"APN","internet" //APN, Megafoni jaoks - internet AT+HTTPINIT //Initsialiseeri HTTP AT+HTTPPARA="CID",1 //Kasutamiseks kasutatava operaatori ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Tegelik URL pärast sprintf-i koordinaatidega AT+HTTPACTION=0 // Taotlege andmeid GET-meetodiga //oodake vastust AT+HTTPTERM //peata HTTP

Selle tulemusena saame ühenduse olemasolul serverilt vastuse. See tähendab, et tegelikult me ​​juba teame, kuidas koordinaatandmeid saata, kui server saab need GET-i kaudu.

Toitumine

Kuna GSM mooduli toide Arduino konverterist, nagu ma teada sain, on halb mõte, siis otsustati sealtsamast ebayst osta 12v->5v, 3A muundur. Moodulile aga ei meeldi 5V toide. Lähme häkkima: ühendage 5 V kontaktiga, millest 5 V Arduinost tuleb. Siis teeb mooduli sisseehitatud muundur (palju võimsam kui Arduino muundur, MIC 29302WU) 5V-st selle, mida moodul vajab.

Server

Server kirjutas primitiivse - koordinaatide salvestamine ja joonistamine Yandex.mapsis. Tulevikus on võimalik lisada erinevaid funktsioone, sealhulgas paljude kasutajate tugi, "relvastatud/relvamata" olek, sõiduki süsteemide olek (süüde, esituled jne) ja võimalusel isegi sõidukisüsteemide juhtimine. Muidugi koos vastava toega jälgijale, mis muutub sujuvalt täieõiguslikuks häiresüsteemiks.

Välikatsed

Selline näeb kokkupandud seade ilma korpuseta välja:


Pärast toitemuunduri paigaldamist ja surnud DSL-modemi korpusesse asetamist näeb süsteem välja järgmine:

Jootsin juhtmed ja eemaldasin Arduino plokkidelt mitu kontakti. Need näevad välja sellised:

Ühendasin autosse 12V, sõitsin Moskvas ringi ja sain raja kätte:


Rada osutub rebenenud. Põhjus on selles, et andmete saatmine GPRS-i kaudu võtab suhteliselt kaua aega ja selle aja jooksul koordinaate ei loeta. See on selgelt programmeerimisviga. Seda töödeldakse esiteks kohe koordinaatide paketi saatmisega aja jooksul ja teiseks GPRS-mooduliga asünkroonselt töötades.

Personaalsed GPS saatjad

Tänapäeval kulgeb areng sellises tempos, et varem mahukad, kallid ja väga spetsialiseerunud seadmed kaotavad kiiresti oma suuruse, kaalu ja hinna, kuid saavad juurde palju uusi funktsioone.

Nii jõudsid GPS-tehnoloogial põhinevad seadmed taskuvidinateni ja asusid seal kindlalt elama, andes inimestele uusi võimalusi. Eriti tasub esile tõsta üksikuid GPS-saatjaid.

Sisuliselt on need samad GPS-jälgijad, mis on mõeldud kasutamiseks mitte sõidukis, vaid inimesele igapäevaelus.

Olenevalt mudelist saab ühte korpusesse kombineerida mitu erinevat seadet. Kõige lihtsamal kujul on tegemist lihtsalt väikese ekraanita karbiga, mis võimaldab juhtida laste, loomade või mõne muu objekti liikumist, millele see on kinnitatud.

Selle sees on GPS-moodul, mis määrab maapinnal koordinaate, GSM/GPRS-moodul, mis edastab teavet ja võtab vastu juhtimiskäsklusi, samuti toiteallikas, mis tagab autonoomse töö pikaks ajaks.

GPS-saatjate funktsionaalsus

Funktsionaalsuse suurenedes ilmuvad seadme järgmised võimalused:


GPS-saatjate valikud

Sõltuvalt konfiguratsioonist võivad saatja korpused oluliselt erineda. Saadaval on erinevad mudelid mobiiltelefonide, klassikaliste navigaatorite või isegi käekelladena.

Eriversioonide värvikas disain ja kasulikud täiendused võimaldavad lastel käsitleda neid seadmeid mitte kui "vanemate spioonisid", vaid kui moekaid ja praktilisi vidinaid.

Eelisena tasub mainida asjaolu, et paljud seadme versioonid töötavad hästi ilma spetsialiseeritud operaatorite teenuste liitumistasudeta ning kogu vajalik teave saadetakse kliendile otse Interneti või SMS-ide kaudu, mis võimaldab oluliselt kokku hoida. selliste seadmete hoolduse kohta.

Artiklid GPS-jälgijate kohta

Selles artiklis näitan, kuidas kasutada gsm-moodulit arduinoga, kasutades näitena sim800L. Samad juhised sobivad üsna hästi ka muude gsm-moodulite, näiteks sim900 jne kasutamiseks, kuna kõik moodulid töötavad ligikaudu ühtemoodi - see on AT-käskude vahetamine pordi kaudu.

Mooduli kasutamist arduinoga näitan SMS-relee näitel, millega saab seadet SMS-käskude kaudu kaugjuhtida. Seda saab kasutada koos autoalarmidega jne.

Moodul on Arduinoga ühendatud tarkvara jadapordi UART-liidese kaudu, mis töötab Arduino nano 2 ja 3 digitaalsel viigul.

Töötab Arduino GSM moodulitega

Mooduli toiteks on vaja pinget vahemikus 3,6 V kuni 4,2 V, see tähendab, et peate kasutama täiendavat pingestabilisaatorit, kuna Arduinosse on paigaldatud 3,3 V stabilisaator, mis ei sobi mooduli toiteks. , teine ​​põhjus täiendava stabilisaatori paigaldamiseks on see, et GSM-moodul on tõsine koormus, kuna sellel on nõrk saatja, mis tagab mobiilsidejaamaga stabiilse side. Arduino nano toide antakse VIN-viigule – see on Arduinosse sisseehitatud stabilisaator, mis tagab mooduli töö laias pingevahemikus (6-10V). Releemoodul ühendatakse vastavalt etteantud programmitekstile Arduino nano kontaktiga 10 ja seda saab hõlpsasti vahetada mis tahes muu digitaalväljundina töötava vastu.

See toimib nii: paigaldame GSM-moodulisse SIM-kaardi, lülitame toite sisse ja saadame oma relee sisselülitamiseks SMS-i tekstiga "1" SIM-kaardi numbrile, selle väljalülitamiseks saadame SMS-i. tekstiga "0".

#kaasa
SoftwareSerial gprsSerial(2, 3); // määrake tarkvarapordi jaoks viigid 2 ja 3
int LedPin = 10; // relee jaoks

tühine seadistus ()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// sõnumi vastuvõtu seadistamine

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
viivitus(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
viivitus(500); // käskude töötlemise viivitus
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
viivitus(700);
}

String currStr = "";
// kui see rida on teade, võtab muutuja väärtuse True
tõeväärtus isStringMessage = väär;

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

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// kui praegune rida on sõnum, siis...
if (!currStr.compareTo("1")) (
digitaalne kirjutamine (LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite (LedPin, LOW);
}
isStringMessage = false;
) muidu (
if (currStr.startsWith("+CMT")) (
// kui praegune rida algab tähega "+CMT", siis järgmine teade
isStringMessage = tõene;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Artikli videoversioon:

Sildid: #Arduino, #SIM800L

Sinu märk:

Selles artiklis kasutatud tooted:

← GPS logija arduino | Relee juhtimine COM-pordi kaudu →

GSM-skanner RTL-SDR-is

| Kodu| inglise keel | Arendus | KKK |

Skanneri peamised omadused

GSM-skanner skannib allavoolu GSM-kanaleid ja kuvab teavet signaali taseme ja selle kohta, kas kanal kuulub ühele kolmest peamisest mobiilsideoperaatorist MTS, Beeline ja Megafon. Skanner võimaldab oma töö tulemuste põhjal salvestada kõigi skannitud kanalite MCC, MNC, LAC ja CI tugijaama identifikaatorite loendi.
GSM-skannerit saab kasutada GSM-signaali taseme hindamiseks, erinevate operaatorite signaalide kvaliteedi võrdlemiseks, raadiolevi hindamiseks mobiilside signaalivõimendite paigaldamise ja nende parameetrite reguleerimise otsustamisel, hariduslikel eesmärkidel jne.
Skänner töötab Windowsi all ja kasutab lihtsat ja odavat vastuvõtjat – RTL-SDR. RTL-SDR-i kohta saate lugeda aadressilt:
RTL-SDR (RTL2832U) ja tarkvaraga määratletud raadiouudised ja projektid,
RTL-SDR – OsmoSDR,
RTL-SDR vene keeles.
RTL-SDR parameetrid määravad skanneri peamised omadused. Loomulikult ei asenda GSM-skanner tavalisi mõõteseadmeid.
Skannerit levitatakse tasuta, ilma kasutuspiiranguteta.
Praegune versioon toetab sagedust GSM 900 ja ei toeta GSM 1800. Selle määrab asjaolu, et RTL-SDR-i töösagedus koos R820T tuuneriga on piiratud 1760 MHz-ga. On lootust, et eksperimentaalse RTL-SDR draiveri kasutamine võimaldab töötada vähemalt osaliselt 1800 MHz vahemikus.

Skänneri käivitamine

Skanneri uusima versiooni saab alla laadida sellelt lingilt. Lihtsalt pakkige fail lahti sobivasse kohta ja käivitage fail gsmscan.exe.
Arenduslehel asuvad skanneri varasemad versioonid, link repositooriumile koos allikatega ja muu arendusega seotud info.
Skänneri töötamiseks on vajalik RTL-SDR-draiverite installimine, kui neid pole veel installitud, saab seda mugavalt teha Zadigi programmi abil, et kirjeldada installiprotseduuri.

Skanneri kasutamine

Allpool on skanneriprogrammi akna vaade:

Horisontaalteljel kuvatakse GSM-kanali number ARFCN või MHz kujul ja vertikaaltelg näitab signaali taset dBm-des. Joone kõrgus näitab signaali tugevust.

GSM moodul NEOWAY M590 side Arduinoga

Kui BS-i identifikaatorid on edukalt dekodeeritud ja need vastavad kolme suurema sideoperaatori identifikaatoritele, värvitakse read vastavates värvides.
Ekraani ülaosas olevad ripploendid võimaldavad valida SDR-vastuvõtja, kui mitu on ühendatud, töövahemiku GSM 900 või GSM 1800 ja mõõtühikuid piki horisontaaltelge ARFCN või MHz.
Nupud võimaldavad salvestada skanneri töö kohta aruande dekodeeritud tugijaamade loendi kujul, kustutada BS-i dekodeerimise tulemused ja hankida teavet programmi kohta.

Töö põhimõtted ja omadused.

Töötamise ajal skaneerib programm töösagedusvahemikku sammuga 2,0 MHz (10 GSM kanalit) ja digiteerib signaali diskreetimissagedusega 2,4 MHz. Skannimisprotsess koosneb kogu vahemiku kiirest läbimisest signaali tugevuse mõõtmiseks ja aeglasest läbimisest BS-i identifikaatorite dekodeerimiseks.

Pärast kogu võimsuse mõõtmise vahemiku läbimist tehakse üks dekodeerimise samm. Seega uuendatakse GSM 900 vahemikus signaali taset ligikaudu üks kord iga 2 sekundi järel ja täielik dekodeerimise läbimine võtab aega umbes 1 minut.
RTL-SDR-ist vastuvõetud signaali halva kvaliteedi tõttu ei ole BS leviedastusjuhtimiskanali (BCCH) süsteemiteabe (SI) korrektse dekodeerimise tõenäosus suur. Signaalitaseme kõikumine mitme tee levimise tagajärjel vähendab ka süsteemi teabe dekodeerimise tõenäosust. Nendel põhjustel on BS-i identifikaatorite saamiseks vaja, et skanner koguks teavet umbes 10 minuti jooksul. Kuid isegi sel juhul ei taga kõik kanalid antud asukohas piisavat signaalitaset ja -kvaliteeti dekodeerimiseks isegi kõige ideaalsema vastuvõtja poolt. Lisaks ei kasutata kõiki GSM-i kanaleid GSM-standardi järgi töötamiseks, nagu on näha ülaltoodud jooniselt, Megafon hõivab kanalid 975–1000, et töötada vastavalt UMTS-standardile.
Töötamise ajal lisab skanner kanalite üldisele teabemassiivile süsteemiteavet uute dekodeeritud kanalite kohta. Kuid teavet varem dekodeeritud kanalite kohta ei kustutata, kui süsteemiteavet selles etapis ei dekodeerita, ja see jääb massiivi. Selle teabe kustutamiseks kasutage nuppu BS dekodeerimise tulemuste kustutamiseks.
Kui klõpsate nupul Salvesta aruanne, salvestatakse kogutud tulemused tekstifaili nimega, mis koosneb programmi nimest, andmete salvestamise kuupäevast ja kellaajast. Allpool on näide aruandefaili osast:
Skanner on loodud töötama operatsioonisüsteemides Windows 7, 8.1 ja 10. Tööd testiti kolme RTL-SDR koopiaga koos R820T tuuneriga, muud tüüpi tuunereid ei testitud.
Programmi spetsiaalne versioon on kompileeritud töötama Windows XP all, see töötab mitu korda aeglasemalt kui standardversioon.

Areng.

Skanneriprogramm tarnitakse sellisel kujul, ilma garantiide ja vastutuseta. Kui teil on mõistlikke ideid, kuidas skanneri funktsionaalsust laiendada või jõudlust parandada, oleme valmis arutama nende rakendamise võimalust.
Selleks saate osaleda skanneri arendamisel, külastage arenduslehte.
Plaanis on GSM-skanneri edasiarendus, võimalusel teie osalusel.