Dataene lagres i et regneark dataGPS.csv, hvis format samsvarer med kravene til tjenesten Google My Maps.

    Programmeringsspråk: Arduino (C++)

Videoinstruksjon

Hva trenger du

Hvordan monteres

gps-tracker.ino // bibliotek for arbeid med enheter via SPI#inkludere // bibliotek for arbeid med SD-kort#inkludere // bibliotek for arbeid med en GPS-enhet#inkludere // lag et objekt av GPS-klassen og send Serial1-objektet til det GPS gps(Serial1); // LED-pinne#define LED_PIN A0 // button pin #define BUTTON_PIN 13 // pin CS micro-sd-kort#define CHIP_SELECT_PIN 9 // tidsintervall for å skrive data til kortet#define INTERVAL 5000 // angi matrisestørrelsen for tid, dato, breddegrad og lengdegrad#define MAX_SIZE_MASS 16 // array for å lagre gjeldende tid char time[MAX_SIZE_MASS]; // rekordtilstand bool stateRec = falsk; // husker gjeldende tid lang startMillis = millis() ; void oppsett() ( // åpne serieporten for å overvåke handlinger i programmet Serial.begin(115200); // vent til den serielle portmonitoren åpnes // for å spore alle hendelser i programmet// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // åpne en seriell forbindelse med GPS-modulen Serial1.begin(115200); // sett LED til utgangsmodus pinMode(LED_PIN, OUTPUT) ; // sett knappen til påloggingsmodus pinMode(BUTTON_PIN, INPUT_PULLUP) ; // gir informasjon om initialisering til serieporten Serial.println("Initialiserer SD-kort...") ; // initialiser SD-kortet while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kort mislyktes, eller ikke til stede") ; delay(1000 ) ; ) // ut informasjon til seriell port Serial.println("Kort initialisert"); // opprett et dataFile-objekt av File-klassen for å jobbe med filer File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // hvis filen eksisterer if (datafil) ( // skriv navnet på fremtidige data til minnekortet dataFile.println("Tid, Koordinater, Hastighet"); // lukk filen dataFile.close(); Serial.println("Lagre OK"); ) else ( Serial.println ("Feil ved åpning av test.csv") ; ) ) void loop() ( // Ta opp tastetrykket if (! digitalRead(BUTTON_PIN) ) ( // endre tilstanden "opptak" / "skriver ikke" til minnekortet stateRec = ! stateRec; // endre tilstanden til indikasjons-LED digitalWrite(LED_PIN, stateRec) ; ) // hvis data kom fra GPS-modulen if (gps.available()) ( // les data og analyser gps.readParsing(); // sjekk statusen til GPS-modulen switch (gps.getState () ) ( // alt er OK tilfelle GPS_OK: Serial.println ("GPS er OK" ) ; // hvis det angitte tidsintervallet har gått if (millis() - startMillis > INTERVAL && stateRec) ( // lagre data på minnekortet lagreSD() ; // husk gjeldende tid startMillis = millis() ; ) gå i stykker ; // datafeilsak GPS_ERROR_DATA: Serial.println ("GPS-feildata" ); gå i stykker ; // ingen forbindelse med satellitter sak GPS_ERROR_SAT: Serial.println ( "GPS ingen tilkobling til satellitter") ; gå i stykker ; ) ) ) // funksjon for å lagre data på et minnekort void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // hvis filen eksisterer og har blitt åpnet if (datafil) ( // leser gjeldende tid gps.getTime(tid, MAX_SIZE_MASS); // skriv tiden til minnekortet dataFile.print(" \" " ) ; dataFile.print(tid); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(" \" " ) ; // les og skriv bredde- og lengdegradskoordinater til minnekortet dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print ("," ); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " ) ; dataFile.print ("," ); dataFile.print(gps.getSpeedKm()); dataFile.println("km/t"); dataFile.close(); Serial.println("Lagre OK"); ) else ( Serial.println ("Feil ved åpning av test.csv") ; ) )

GPS-systemet for global posisjonering har allerede blitt en del av livene våre. I dag er det vanskelig å se for seg en mobiltelefon uten innebygd GPS-modul. Dette satellittnavigasjonssystemet lar deg spore alle objekter, bestemme deres koordinater og bevegelseshastighet. Nå er GPS ikke bare tilgjengelig for selskaper som utvikler tilsvarende utstyr, men også for vanlige radioamatører som allerede bruker de populære Arduino-brettene til sitt fulle potensial. Dette materialet vil diskutere tilkobling av en miniatyr GPS-tracker til Arduino Pro Mini-kortet. PG03 MiniGPS tracker brukes som testperson.



Denne trackeren, i tillegg til direkte geografiske koordinater, viser bevegelsesretningen, tilbakelagt distanse og bevegelseshastigheten. Dessverre registrerer den ikke informasjon, så ved å koble den til Arduino kan du få tilgang til disse dataene og gjøre hva du vil med den.


Først må trackeren demonteres. Nedenfor er bilder av en demontert GPS-tracker.




Hjertet til trackeren er Venus638FLP GPS-brikken. Dens 44. pin er utgangen til UART-grensesnittet (TxD). Du kan lodde en ledning direkte til denne pinnen, eller du kan finne en testpinne på brettet som denne pinnen også er koblet til. Nedenfor er bilder av pinneplasseringene til mikrokretsen og hvordan du kobler til ønsket pinne.





La oss nå ta et kompakt Arduino Pro Mini-kort og en SD-kortmodul for å registrere NMEA-protokolldata. Tilkoblingsskjemaet for Arduino Pro Mini og SD-kortmodulen er som følger:



Koble til modulpinner for SD-kort:


GND til GND
VCC til 3,3V
MISO til pinne 12
MOSI til pinne 11
SCK til pinne 13
CS til pinne 10

Koble til GPS-tracker-pinnene:


GND til GND
Pinne 2 (Arduino) til Pinne 44 (GPS)

Det er bedre å ta strøm fra GPS-trackeren (3,7 V). Siden batteriet har lav energikapasitet, er det å foretrekke å koble til et eksternt batteri, for eksempel fra en 1400 mAh mobiltelefon, som vist på et av bildene ovenfor.


Nå må du laste ned TinyGPS-biblioteket, du trenger også et bibliotek for å jobbe med SD-kort og SoftwareSerial-biblioteket, som du finner i Arduino\libraries.



I følgende kodestykke kan du velge hvilke data du vil skrive:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Hastighet i km/t float falt = gps.f_altitude(); // +/- høyde i meter (synes å være høyde, faktisk) float fc = gps.f_course( // Kurs i grader usignert lang alder(&flat, &flon, &age; " lon "); Serial.print(" kms "); .print(fc(" elevation "); //// ////////////////////////////////////////// // ///////////////

Last opp skissen til Arduino, sett inn et SD-kort formatert i henhold til FAT32 og ha en log.txt-fil i roten. Start Serial Monitor og du vil se dataene skrives til SD-kortet.



Etter flere eksperimenter med Arduino bestemte jeg meg for å lage en enkel og ikke veldig dyr GPS-tracker med koordinater sendt via GPRS til serveren.
Brukt Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS-modul (for å sende informasjon til server), GPS-mottaker SKM53 GPS.

Alt ble kjøpt på ebay.com, for totalt rundt 1500 rubler (omtrent 500 rubler for arduino, litt mindre for GSM-modulen, litt mer for GPS).

GPS-mottaker

Først må du forstå hvordan du jobber med GPS. Den valgte modulen er en av de billigste og enkleste. Produsenten lover imidlertid et batteri for å lagre satellittdata. I følge dataarket skal en kaldstart ta 36 sekunder, men i mine forhold (10. etasje fra vinduskarmen, ingen bygninger i nærheten) tok det så mye som 20 minutter. Neste start er imidlertid allerede 2 minutter.

En viktig parameter for enheter koblet til Arduino er strømforbruk. Hvis du overbelaster Arduino-konverteren, kan den brenne ut. For mottakeren som brukes, er det maksimale strømforbruket 45mA @ 3,3v. Hvorfor spesifikasjonen skal indikere strømstyrken ved en annen spenning enn den påkrevde (5V) er for meg et mysterium. Arduino-omformeren vil imidlertid tåle 45 mA.

Forbindelse
GPS er ikke kontrollert, selv om den har en RX-pin. Til hvilket formål er ukjent. Det viktigste du kan gjøre med denne mottakeren er å lese data via NMEA-protokollen fra TX-pinnen. Nivåer - 5V, bare for Arduino, hastighet - 9600 baud. Jeg kobler VIN til VCC på arduino, GND til GND, TX til RX i den tilsvarende serien. Jeg leser dataene først manuelt, deretter bruker jeg TinyGPS-biblioteket. Overraskende nok er alt lesbart. Etter å ha byttet til Uno, måtte jeg bruke SoftwareSerial, og så begynte problemene - noen av meldingstegnene gikk tapt. Dette er ikke veldig kritisk, siden TinyGPS kutter av ugyldige meldinger, men det er ganske ubehagelig: du kan glemme 1Hz-frekvensen.

En rask merknad om SoftwareSerial: det er ingen maskinvareporter på Uno (annet enn den som er koblet til USB Serial), så du må bruke programvare. Så den kan bare motta data på en pinne der brettet støtter avbrudd. For Uno er disse 2 og 3. Dessuten kan bare én slik port motta data om gangen.

Slik ser "testbenken" ut.

GSM mottaker/sender


Nå kommer den mer interessante delen. GSM-modul - SIM900. Den støtter GSM og GPRS. Verken EDGE, eller spesielt 3G, støttes. For overføring av koordinatdata er dette sannsynligvis bra - det vil ikke være noen forsinkelser eller problemer når du bytter mellom moduser, pluss at GPRS nå er tilgjengelig nesten overalt. Men for noen mer komplekse applikasjoner er dette kanskje ikke nok.

Forbindelse
Modulen styres også via serieporten, med samme nivå - 5V. Og her vil vi trenge både RX og TX. Modulen er skjold, det vil si at den er installert på Arduino. Dessuten er den kompatibel med både mega og uno. Standardhastigheten er 115200.

Vi monterer den på Mega, og her venter den første ubehagelige overraskelsen på oss: TX-pinnen til modulen faller på den 7. pinnen til Mega. Avbrudd er ikke tilgjengelig på den 7. pinne på megaen, noe som betyr at du må koble den syvende pinne, for eksempel, til den sjette pinnen, der avbrudd er mulig. Dermed vil vi kaste bort én Arduino-nål. Vel, for en mega er det ikke veldig skummelt - tross alt er det nok pinner. Men for Uno er dette allerede mer komplisert (jeg minner deg om at det bare er 2 pinner som støtter avbrudd - 2 og 3). Som en løsning på dette problemet kan vi foreslå å ikke installere modulen på Arduino, men koble den til med ledninger. Da kan du bruke Serial1.

Etter tilkobling prøver vi å "snakke" til modulen (ikke glem å slå den på). Vi velger porthastigheten - 115200, og det er bra om alle de innebygde serielle portene (4 på mega, 1 på uno) og alle programvareportene fungerer med samme hastighet. På denne måten kan du oppnå mer stabil dataoverføring. Jeg vet ikke hvorfor, selv om jeg kan gjette.

Så vi skriver primitiv kode for å videresende data mellom serielle porter, sende atz og motta stillhet som svar. Hva har skjedd? Ah, skiller mellom store og små bokstaver. ATZ, vi klarer oss. Hurra, modulen kan høre oss. Bør du ringe oss av nysgjerrighet? ATD +7499... Fasttelefonen ringer, røyk kommer ut av arduinoen, den bærbare datamaskinen slår seg av. Arduino-omformeren brant ut. Det var en dårlig ide å mate den 19 volt, selv om det står skrevet at den kan fungere fra 6 til 20V, anbefaler de 7-12V. Dataarket for GSM-modulen sier ingen steder om strømforbruk under belastning. Vel, Mega drar til reservedelslageret. Med tung pust slår jeg på den bærbare datamaskinen, som mottok +19V via +5V-linjen fra USB. Det fungerer, og til og med USB-en ble ikke utbrent. Takk Lenovo for å beskytte oss.

Etter at omformeren brant ut, så jeg etter strømforbruk. Så, topp - 2A, typisk - 0,5A. Dette er helt klart utenfor mulighetene til Arduino-omformeren. Krever separat mat.

Programmering
Modulen gir omfattende dataoverføringsmuligheter. Starter fra taleanrop og SMS og slutter med selve GPRS. Dessuten, for sistnevnte er det mulig å utføre en HTTP-forespørsel ved å bruke AT-kommandoer. Du må sende flere, men det er verdt det: du vil egentlig ikke opprette en forespørsel manuelt. Det er et par nyanser med å åpne en dataoverføringskanal via GPRS - husker du den klassiske AT+CGDCONT=1, "IP", "apn"? Så, det samme trengs her, men litt mer utspekulert.

For å få en side på en bestemt URL, må du sende følgende kommandoer:
AT+SAPBR=1,1 //Åpen operatør (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tilkoblingstype - GPRS AT+SAPBR=3,1,"APN","internett" //APN, for Megafon - internett AT+HTTPINIT //Initialiser HTTP AT+HTTPPARA="CID",1 //Carrier ID som skal brukes. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Den faktiske nettadressen, etter sprintf med koordinater AT+HTTPACTION=0 // Be om data ved å bruke GET-metoden //vent på svar AT+HTTPTERM //stopp HTTP

Som et resultat, hvis det er en tilkobling, vil vi motta et svar fra serveren. Det vil si at vi faktisk allerede vet hvordan vi sender koordinatdata hvis serveren mottar det via GET.

Ernæring
Siden det er en dårlig idé å drive GSM-modulen fra en Arduino-omformer, som jeg fant ut, ble det besluttet å kjøpe en 12v->5v, 3A-konverter på samme ebay. Modulen liker imidlertid ikke 5V strømforsyning. La oss gå for et hack: koble 5V til pinnen som 5V kommer fra arduinoen. Da vil den innebygde omformeren til modulen (mye kraftigere enn Arduino-omformeren, MIC 29302WU) lage fra 5V det modulen trenger.

Server

Serveren skrev en primitiv - lagring av koordinater og tegning på Yandex.maps. I fremtiden er det mulig å legge til ulike funksjoner, inkludert støtte for mange brukere, "væpnet/bevæpnet" status, tilstanden til kjøretøysystemene (tenning, frontlykter, etc.), og muligens til og med kontroll av kjøretøysystemene. Selvfølgelig med passende støtte for trackeren, som jevnt blir til et fullverdig alarmsystem.

Feltprøver

Slik ser den sammensatte enheten ut, uten deksel:

Etter å ha installert strømomformeren og plassert den i etuiet fra et dødt DSL-modem, ser systemet slik ut:

Jeg loddet ledningene og fjernet flere kontakter fra Arduino-blokkene. De ser slik ut:

Jeg koblet til 12V i bilen, kjørte rundt i Moskva og fikk sporet:


Sporpunktene ligger ganske langt fra hverandre. Årsaken er at sending av data via GPRS tar relativt lang tid, og i denne tiden leses ikke koordinatene. Dette er helt klart en programmeringsfeil. Det behandles for det første ved å umiddelbart sende en pakke med koordinater over tid, og for det andre ved asynkront arbeid med GPRS-modulen.

Søketiden for satellitter i passasjersetet i en bil er et par minutter.

konklusjoner

Å lage en GPS-tracker på Arduino med egne hender er mulig, selv om det ikke er en triviell oppgave. Hovedspørsmålet nå er hvordan du skjuler enheten i bilen slik at den ikke blir utsatt for skadelige faktorer (vann, temperatur), ikke er dekket med metall (GPS og GPRS vil være skjermet) og er ikke spesielt merkbar. Foreløpig ligger den bare i kabinen og kobles til sigarettenneruttaket.

Vel, vi må også korrigere koden for et jevnere spor, selv om trackeren allerede utfører hovedoppgaven.

Brukte enheter

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900-basert GSM/GPRS-skjold
  • DC-DC 12v->5v 3A omformer

Etter flere eksperimenter med Arduino bestemte jeg meg for å lage en enkel og ikke veldig dyr GPS-tracker med koordinater sendt via GPRS til serveren.
Brukt Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS-modul (for å sende informasjon til server), GPS-mottaker SKM53 GPS.

Alt ble kjøpt på ebay.com, for totalt rundt 1500 rubler (omtrent 500 rubler for arduino, litt mindre for GSM-modulen, litt mer for GPS).

GPS-mottaker

Først må du forstå hvordan du jobber med GPS. Den valgte modulen er en av de billigste og enkleste. Produsenten lover imidlertid et batteri for å lagre satellittdata. I følge dataarket skal en kaldstart ta 36 sekunder, men i mine forhold (10. etasje fra vinduskarmen, ingen bygninger i nærheten) tok det så mye som 20 minutter. Neste start er imidlertid allerede 2 minutter.

En viktig parameter for enheter koblet til Arduino er strømforbruk. Hvis du overbelaster Arduino-konverteren, kan den brenne ut. For mottakeren som brukes, er det maksimale strømforbruket 45mA @ 3,3v. Hvorfor spesifikasjonen skal indikere strømstyrke ved en annen spenning enn den påkrevde (5V) er for meg et mysterium. Arduino-omformeren vil imidlertid tåle 45 mA.

Forbindelse

GPS er ikke kontrollert, selv om den har en RX-pin. Til hvilket formål er ukjent. Det viktigste du kan gjøre med denne mottakeren er å lese data via NMEA-protokollen fra TX-pinnen. Nivåer - 5V, bare for Arduino, hastighet - 9600 baud. Jeg kobler VIN til VCC på arduino, GND til GND, TX til RX i den tilsvarende serien. Jeg leser dataene først manuelt, deretter bruker jeg TinyGPS-biblioteket. Overraskende nok er alt lesbart. Etter å ha byttet til Uno, måtte jeg bruke SoftwareSerial, og så begynte problemene - noen av meldingstegnene gikk tapt. Dette er ikke veldig kritisk, siden TinyGPS avskjærer ugyldige meldinger, men det er ganske ubehagelig: du kan glemme 1Hz-frekvensen.

En rask merknad om SoftwareSerial: det er ingen maskinvareporter på Uno, så du må bruke programvaren. Så den kan bare motta data på en pinne som brettet støtter avbrudd på. For Uno er disse 2 og 3. Dessuten kan bare én slik port motta data om gangen.

Slik ser "testbenken" ut.


GSM mottaker/sender


Nå kommer den mer interessante delen. GSM-modul - SIM900. Den støtter GSM og GPRS. Verken EDGE, eller spesielt 3G, støttes. For overføring av koordinatdata er dette sannsynligvis bra - det vil ikke være noen forsinkelser eller problemer når du bytter mellom moduser, pluss at GPRS nå er tilgjengelig nesten overalt. Men for noen mer komplekse applikasjoner er dette kanskje ikke nok.

Forbindelse

Modulen styres også via serieporten, med samme nivå - 5V. Og her vil vi trenge både RX og TX. Modulen er skjold, det vil si at den er installert på Arduino. Dessuten er den kompatibel med både mega og uno. Standardhastigheten er 115200.

Vi monterer den på Mega, og her venter den første ubehagelige overraskelsen på oss: TX-pinnen til modulen faller på den 7. pinnen til Mega. Avbrudd er ikke tilgjengelig på den 7. pinne på megaen, noe som betyr at du må koble den syvende pinne, for eksempel, til den sjette pinnen, der avbrudd er mulig. Dermed vil vi kaste bort én Arduino-nål. Vel, for en mega er det ikke veldig skummelt - tross alt er det nok pinner. Men for Uno er dette allerede mer komplisert (jeg minner deg om at det bare er 2 pinner som støtter avbrudd - 2 og 3). Som en løsning på dette problemet kan vi foreslå å ikke installere modulen på Arduino, men koble den til med ledninger. Da kan du bruke Serial1.

Etter tilkobling prøver vi å "snakke" til modulen (ikke glem å slå den på). Vi velger porthastigheten - 115200, og det er bra om alle de innebygde serielle portene (4 på mega, 1 på uno) og alle programvareportene fungerer med samme hastighet. På denne måten kan du oppnå mer stabil dataoverføring. Jeg vet ikke hvorfor, selv om jeg kan gjette.

Så vi skriver primitiv kode for å videresende data mellom serielle porter, sende atz og motta stillhet som svar. Hva har skjedd? Ah, skiller mellom store og små bokstaver. ATZ, vi klarer oss. Hurra, modulen kan høre oss. Bør du ringe oss av nysgjerrighet? ATD +7499... Fasttelefonen ringer, røyk kommer ut av arduinoen, den bærbare datamaskinen slår seg av. Arduino-omformeren brant ut. Det var en dårlig ide å mate den 19 volt, selv om det står skrevet at den kan fungere fra 6 til 20V, anbefaler de 7-12V. Dataarket for GSM-modulen sier ingen steder om strømforbruk under belastning. Vel, Mega drar til reservedelslageret. Med tung pust slår jeg på den bærbare datamaskinen, som mottok +19V via +5V-linjen fra USB. Det fungerer, og til og med USB-en ble ikke utbrent. Takk Lenovo for å beskytte oss.


Etter at omformeren brant ut, så jeg etter strømforbruk. Så, topp - 2A, typisk - 0,5A. Dette er helt klart utenfor mulighetene til Arduino-omformeren. Krever separat mat.

Programmering

Modulen gir omfattende dataoverføringsmuligheter. Starter fra taleanrop og SMS og slutter med selve GPRS. Dessuten, for sistnevnte er det mulig å utføre en HTTP-forespørsel ved å bruke AT-kommandoer. Du må sende flere, men det er verdt det: du vil egentlig ikke opprette en forespørsel manuelt. Det er et par nyanser med å åpne en dataoverføringskanal via GPRS - husker du den klassiske AT+CGDCONT=1, "IP", "apn"? Så, det samme trengs her, men litt mer utspekulert.

For å få en side på en bestemt URL, må du sende følgende kommandoer:

AT+SAPBR=1,1 //Åpen operatør (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tilkoblingstype - GPRS AT+SAPBR=3,1,"APN","internett" //APN, for Megafon - internett AT+HTTPINIT //Initialiser HTTP AT+HTTPPARA="CID",1 //Carrier ID som skal brukes. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Den faktiske nettadressen, etter sprintf med koordinater AT+HTTPACTION=0 // Be om data ved å bruke GET-metoden //vent på svar AT+HTTPTERM //stopp HTTP

Som et resultat, hvis det er en tilkobling, vil vi motta et svar fra serveren. Det vil si at vi faktisk allerede vet hvordan vi sender koordinatdata hvis serveren mottar det via GET.

Ernæring

Siden det er en dårlig idé å drive GSM-modulen fra en Arduino-omformer, som jeg fant ut, ble det besluttet å kjøpe en 12v->5v, 3A-konverter på samme ebay. Modulen liker imidlertid ikke 5V strømforsyning. La oss gå for et hack: koble 5V til pinnen som 5V kommer fra Arduino. Da vil den innebygde omformeren til modulen (mye kraftigere enn Arduino-omformeren, MIC 29302WU) lage fra 5V det modulen trenger.

Server

Serveren skrev en primitiv - lagring av koordinater og tegning på Yandex.maps. I fremtiden er det mulig å legge til ulike funksjoner, inkludert støtte for mange brukere, "væpnet/bevæpnet" status, tilstanden til bilsystemene (tenning, frontlykter, etc.), og muligens til og med kontroll av bilsystemene. Selvfølgelig med passende støtte for trackeren, som jevnt blir til et fullverdig alarmsystem.

Feltprøver

Slik ser den sammensatte enheten ut, uten deksel:


Etter å ha installert strømomformeren og plassert den i etuiet fra et dødt DSL-modem, ser systemet slik ut:

Jeg loddet ledningene og fjernet flere kontakter fra Arduino-blokkene. De ser slik ut:

Jeg koblet til 12V i bilen, kjørte rundt i Moskva og fikk sporet:


Banen viser seg å være revet. Årsaken er at sending av data via GPRS tar relativt lang tid, og i denne tiden leses ikke koordinatene. Dette er helt klart en programmeringsfeil. Det behandles for det første ved å umiddelbart sende en pakke med koordinater over tid, og for det andre ved asynkront arbeid med GPRS-modulen.

Personlige GPS-sendere

I dag går fremgangen i et slikt tempo at enheter som tidligere var store, dyre og høyt spesialiserte raskt mister størrelse, vekt og pris, men får mange nye funksjoner.

Dette er hvordan enheter basert på GPS-teknologi nådde lommegadgets og slo seg fast der, og ga folk nye muligheter. Det er spesielt verdt å fremheve individuelle GPS-sendere.

I hovedsak er dette de samme GPS-sporerne, kun designet for bruk ikke på et kjøretøy, men av en person i hverdagen.

Avhengig av modell kan flere forskjellige enheter kombineres i ett hus. I sin enkleste form er det rett og slett en liten boks uten display, som lar deg kontrollere bevegelsene til barn, dyr eller andre gjenstander, som den er festet på.

Inni den er det en GPS-modul som bestemmer koordinatene på bakken, en GSM/GPRS-modul som overfører informasjon og mottar kontrollkommandoer, samt en strømkilde som sikrer autonom drift i lang tid.

Funksjonalitet til GPS-sendere

Etter hvert som funksjonaliteten øker, vises følgende funksjoner på enheten:


Alternativer for GPS-sendere

Avhengig av konfigurasjonen kan senderhusene variere betydelig. Ulike modeller er tilgjengelige i form av mobiltelefoner, klassiske navigatorer eller til og med armbåndsur.

Den fargerike utformingen av spesialversjoner og nyttige tillegg lar barn behandle disse enhetene ikke som "foreldrespioner", men som fasjonable og praktiske gadgets.

Som en fordel er det verdt å nevne det faktum at mange versjoner av enheten fungerer bra uten abonnementsavgifter for tjenestene til spesialiserte operatører, og all nødvendig informasjon sendes til klienten direkte via Internett eller SMS-meldinger, noe som gir betydelige besparelser. på vedlikehold av slikt utstyr.

Artikler om GPS-sporere

I denne artikkelen vil jeg vise hvordan du bruker en gsm-modul med arduino ved å bruke sim800L som eksempel. De samme instruksjonene er ganske egnet for bruk av andre gsm-moduler, for eksempel sim900, etc., fordi alle moduler fungerer på omtrent samme måte - dette er utveksling av AT-kommandoer gjennom porten.

Jeg vil vise bruken av modulen med arduino ved å bruke eksempelet på et SMS-relé, som kan brukes til å fjernstyre enheten via SMS-kommandoer. Denne kan brukes sammen med bilalarmer osv.

Modulen er koblet til Arduino via UART-grensesnittet til en seriell programvareport som opererer på 2 og 3 digitale pinner av Arduino nano.

Fungerer Arduino med GSM-moduler

For å drive modulen kreves det en spenning i området fra 3,6V til 4,2V, dette betyr at du må bruke en ekstra spenningsstabilisator, siden Arduino har en 3,3 volts stabilisator installert, som ikke er egnet for å drive modulen. , den andre grunnen til å installere en ekstra stabilisator er at GSM-modulen er alvorlig belastning, siden den har en svak sender som gir stabil kommunikasjon med mobilstasjonen. Strøm til Arduino nano leveres til VIN-pinnen - dette er en stabilisator innebygd i Arduinoen som sikrer at modulen fungerer over et bredt spenningsområde (6-10V). Relémodulen kobles i henhold til den gitte programteksten til pin 10 på Arduino nano og kan enkelt endres til en hvilken som helst annen som fungerer som en digital utgang.

Det fungerer slik: vi installerer et SIM-kort i GSM-modulen, slår på strømmen og sender en SMS med teksten "1" til SIM-kortnummeret for å slå på reléet vårt, for å slå det av sender vi en SMS med teksten "0".

#inkludere
SoftwareSerial gprsSerial(2, 3); // sett pinne 2 og 3 for programvareport
int LedPin = 10; // for relé

ugyldig oppsett()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// sette opp meldingsmottak

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
forsinkelse(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
forsinkelse(500); // forsinkelse for kommandobehandling
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
forsinkelse(700);
}

String currStr = "";
// hvis denne linjen er en melding, vil variabelen ha verdien True
boolean isStringMessage = falsk;

void loop()
{
if (!gprsSerial.available())
komme tilbake;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// hvis gjeldende linje er en melding, så...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) annet (
if (currStr.startsWith("+CMT")) (
// hvis gjeldende linje begynner med “+CMT”, så neste melding
isStringMessage = sant;
}
}
currStr = "";
) else if (‘\n’ != currSymb) (
currStr += String(currSymb);
}
}

Videoversjon av artikkelen:

Tagger: #Arduino, #SIM800L

Ditt merke:

Produkter brukt i denne artikkelen:

← GPS-logger på arduino | Reléstyring via COM-port →

GSM-skanner på RTL-SDR

| hjem| engelsk | Utvikling | FAQ |

Hovedegenskapene til skanneren

GSM-skanneren skanner nedstrøms GSM-kanaler og viser informasjon om signalnivået og om kanalen tilhører en av de tre hovedmobiloperatørene MTS, Beeline og Megafon. Basert på resultatene av arbeidet, lar skanneren deg lagre en liste over MCC-, MNC-, LAC- og CI-basestasjonsidentifikatorer for alle skannede kanaler.
En GSM-skanner kan brukes til å vurdere nivået til et GSM-signal, sammenligne signalkvaliteten til forskjellige operatører, vurdere radiodekning, når du bestemmer deg for å installere cellulære signalforsterkere og justere parametrene deres, for pedagogiske formål, etc.
Skanneren kjører under Windows og bruker en enkel og billig mottaker – RTL-SDR. Du kan lese om RTL-SDR på:
RTL-SDR (RTL2832U) og programvaredefinerte radionyheter og prosjekter,
RTL-SDR – OsmoSDR,
RTL-SDR på russisk.
RTL-SDR-parametrene bestemmer hovedegenskapene til skanneren. En GSM-skanner er selvsagt ikke en erstatning for vanlig måleutstyr.
Skanneren distribueres gratis, uten bruksbegrensninger.
Den nåværende versjonen støtter GSM 900-båndet og støtter ikke GSM 1800. Dette bestemmes av det faktum at driftsfrekvensen til RTL-SDR med R820T-tuneren er begrenset til 1760 MHz. Det er håp om at bruken av den eksperimentelle RTL-SDR-driveren vil tillate drift i minst deler av 1800 MHz-området.

Starter skanneren

Den siste versjonen av skanneren kan lastes ned fra denne lenken. Bare pakk ut filen til et passende sted og kjør gsmscan.exe.
Tidligere versjoner av skanneren, en lenke til depotet med kilder og annen informasjon knyttet til utviklingen ligger på utviklingssiden.
For at skanneren skal fungere, kreves installasjon av RTL-SDR-drivere, hvis de ikke allerede er installert, kan dette enkelt gjøres ved å bruke Zadig-programmet for å beskrive installasjonsprosedyren.

Bruke skanneren

Nedenfor er en visning av skannerprogramvinduet:

Den horisontale aksen viser GSM-kanalnummeret i form av ARFCN eller i MHz, og den vertikale aksen viser signalnivået i dBm. Høyden på linjen viser signalstyrken.

GSM-modul NEOWAY M590 kommunikasjon med Arduino

Hvis BS-identifikatorene er vellykket dekodet og de samsvarer med identifikatorene til de tre store teleoperatørene, males linjene i de tilsvarende fargene.
Nedtrekkslistene øverst på skjermen lar deg velge SDR-mottakeren, hvis flere er tilkoblet, driftsområdet GSM 900 eller GSM 1800 og måleenhetene langs den horisontale aksen ARFCN eller MHz.
Knappene lar deg lagre en rapport om skannerens drift i form av en liste over dekodede basestasjoner, slette resultatene av BS-dekoding og få informasjon om programmet.

Prinsipper og funksjoner i arbeidet.

Under drift skanner programmet driftsfrekvensområdet med et trinn på 2,0 MHz (10 GSM-kanaler) og digitaliserer signalet med en samplingsfrekvens på 2,4 MHz. Skanneprosessen består av en rask gjennomgang gjennom hele området for å måle signalstyrken og en langsom pass for å dekode BS-identifikatorene.

Ett dekodingstrinn utføres etter å ha krysset hele området for å måle effekt. I GSM 900-området oppdateres signalnivået omtrent en gang hvert 2. sekund, og en fullstendig dekodingspassering tar omtrent 1 minutt.
På grunn av den dårlige kvaliteten på signalet mottatt fra RTL-SDR, er sannsynligheten for korrekt dekoding av systeminformasjon (SI) til BS kringkastingskontrollkanalen (BCCH) ikke høy. Signalnivåsvingninger som et resultat av flerveisutbredelse reduserer også sannsynligheten for dekoding av systeminformasjon. Av disse grunner, for å få BS-identifikatorer, er det nødvendig for skanneren å akkumulere informasjon over en periode på ca. 10 minutter. Men selv i dette tilfellet gir ikke alle kanaler tilstrekkelig signalnivå og kvalitet på et gitt sted for dekoding selv av den mest ideelle mottakeren. I tillegg er ikke alle GSM-kanaler brukt til å fungere i henhold til GSM-standarden, som man kan se i figuren over, er kanaler 975 - 1000 okkupert av Megafon for å fungere i henhold til UMTS-standarden.
Under drift legger skanneren til systeminformasjon om nye dekodede kanaler til det generelle utvalget av informasjon om kanaler. Men informasjon om tidligere dekodede kanaler slettes ikke når systeminformasjon ikke dekodes på dette trinnet, og forblir i matrisen. For å slette denne informasjonen, bruk knappen for å slette BS-dekodingsresultatene.
Når du klikker på knappen Lagre rapport, lagres de akkumulerte resultatene i en tekstfil med et navn som består av navnet på programmet, datoen og klokkeslettet da dataene ble lagret. Nedenfor er et eksempel på en del av rapportfilen:
Skanneren er designet for å fungere under Windows 7, 8.1 og 10. Verket ble testet med tre eksemplarer av RTL-SDR med R820T-tuneren ble ikke testet.
En spesiell versjon av programmet er kompilert for å fungere under Windows XP, det kjører flere ganger langsommere enn standardversjonen.

Utvikling.

Skannerprogrammet leveres som det er, uten noen garantier eller ansvar. Hvis du har fornuftige ideer om hvordan du kan utvide funksjonaliteten eller forbedre ytelsen til skanneren, er vi klare til å diskutere muligheten for implementering av dem.
Du kan ta del i utviklingen av skanneren for å gjøre dette, besøk utviklingssiden.
Videreutvikling av GSM-skanneren er planlagt, eventuelt med din deltakelse.