Gjør-det-selv GPS-tracker basert på GY-NEO6M er enkelt. Kort beskrivelse av Arduino GPS tracker Hatire Arduino innstillingsvindu

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 serveren), 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, kun 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 "prøvestanden" 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 fra arduinoen, den bærbare datamaskinen slår seg av. Arduino-omformeren brant ut. Det var en dårlig idé å mate den 19 volt, selv om det står skrevet at den kan fungere fra 6 til 20V, anbefales 7-12V. Dataarket for GSM-modulen sier ingen steder om strømforbruk under belastning. Vel, Mega går 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 HTTP-forespørsel ved hjelp av 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

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, flere ulike enheter. 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å.

Inne ligger den GPS-modul, som bestemmer koordinater 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 for enheten:


Alternativer for GPS-sendere

Avhengig av konfigurasjonen kan senderhusene variere betydelig. Ulike modeller ha henrettelser i form mobil, 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 kan klare seg uten abonnementsavgift for tjenester 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.

Jobber med 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 forbindelse med en mobilstasjon. 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: installer et SIM-kort i GSM-modulen, slå på strømmen og send en SMS med teksten "1" til nummeret SIM-kort 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 = false;

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 GSM-nedlinkkanaler og viser informasjon om signalstyrke og kanaleierskap til en av de tre hovedoperatørene mobilkommunikasjon MTS, Beeline og Megafon. Basert på resultatene av arbeidet, lar skanneren deg lagre en liste over identifikatorer basestasjoner MCC, MNC, LAC og CI for alle skannede kanaler.
En GSM-skanner kan brukes til å evaluere GSM-signalnivået og sammenligne signalkvalitet forskjellige operatører, vurderinger av radiodekning, når du bestemmer deg for å installere mobilsignalforsterkere og justere parametrene deres, for utdanningsformå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.
Gjeldende versjon 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 skanner, en lenke til depotet med kilder og annen informasjon knyttet til utviklingen er 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.
Nedtrekkslister øverst på skjermen lar deg velge en SDR-mottaker, hvis flere er tilkoblet, rekkevidde GSM-arbeid 900 eller GSM 1800 og horisontale akseenheter 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. Skanningsprosessen består av en rask passering 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 dette stedet tilstrekkelig signalnivå og kvalitet for dekoding selv av den mest ideelle mottakeren. I tillegg brukes ikke alle GSM-kanaler til å operere over GSM standard, som kan sees i figuren ovenfor, er kanalene 975 - 1000 okkupert av Megafon for å jobbe med UMTS-standard.
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å lagre rapport-knappen, lagres de akkumulerte resultatene i 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 kopier av RTL-SDR med R820T-tuneren, andre typer tunere 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.

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, kun 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, så du må bruke programvaren. 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 "prøvestanden" 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 fra arduinoen, den bærbare datamaskinen slår seg av. Arduino-omformeren brant ut. Det var en dårlig idé å mate den 19 volt, selv om det står skrevet at den kan fungere fra 6 til 20V, anbefales 7-12V. Dataarket for GSM-modulen sier ingen steder om strømforbruk under belastning. Vel, Mega går 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 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:


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.

Prosjektdiagram:

Hei venner, vi har et stort antall forskjellige romfartøyer som flyr over hodene våre. Blant dem er omtrent 90 ekstremt nyttige navigasjonssatellitter fra det amerikanske GPS-systemet, russiske GLONASS, europeiske Galileo og kinesiske BeiDou. Og i dag vil vi fange et signal fra dem.

Først en liten teori: Et satellittnavigasjonssystem er et nettverk av romfartøyer som flyr langs tidligere kjente ruter, nøyaktig observerer deres bane og bane, eller som befinner seg på et kjent stasjonært punkt i en geostasjonær eller geosynkron bane. Satellitter flyr i gjennomsnitt i en høyde på omtrent 20 tusen kilometer, og hver av dem er en ultra-nøyaktig atomklokke som kontinuerlig sender tiden sin til hele planeten. nåværende tid.

Et radiosignal som forplanter seg med lysets hastighet når jorden med en forsinkelse på 60 til 90 millisekunder, dette avhenger av avstanden til satellitten. Når du kjenner den nøyaktige plasseringen til radiosignalkilden etter tidsforsinkelsen for utbredelsen, kan du finne ut den nøyaktige avstanden til satellitten. Og så, ved å triangulere avstander til flere kjente objekter, kan du finne ut hvor du er i verdensrommet.

Tenk deg at denne blå ballen er planeten vår. Tre satellitter flyr over den i en høyde av 20 tusen kilometer. Når du måler avstanden til den første, vil du motta informasjon om at du er et sted på denne sirkelen - foreløpig er dette lite informativt. Signalet fra den andre satellitten vil klargjøre posisjonen din til to skjæringspunkter uten referanse til høyden. Signalet fra den tredje navigasjonssatellitten vil indikere høyden på disse punktene over overflaten og formelt løse navigasjonsligningen, og redusere posisjonen din til to mulige steder. I virkeligheten har en av disse koordinatene utrolige egenskaper og blir forkastet, noe som løser problemet fullstendig. Signalet fra den fjerde satellitten gjør det samme - det løser allerede entydig nøyaktig navigasjonsligningen.

Måling av avstandene til hver påfølgende satellitt øker posisjoneringsnøyaktigheten og varierer i dag fra 1 til 3 meter med standard sikt på ca. 10 navigasjonssatellitter.

Vi har ordnet teorien, la oss gå videre til praksis. I dag selges forskjellige navigasjonsmoduler separat. De enkleste og eldste støtter kun signaler fra det amerikanske GPS-observasjonssystemet, i gjennomsnitt 5-7 satellitter. Mer avanserte moduler kan også motta signaler fra den russiske GLONASS-konstellasjonen, noe som øker det totale antallet observerte satellitter med et gjennomsnitt på to ganger. Det er også moduler til salgs som er kombinert med et kompass; de brukes til nøyaktig navigasjon og kursvedlikehold.

Satellittene til forskjellige navigasjonssystemer er synlige på skjermen på telefonen min. Sirklene er GPS, trekantene er GLONASS, og stjernene er den kinesiske BeiDou. Så telefonen min støtter tre forskjellige navigasjonssystemer og å kombinere signaler fra dem, øker nøyaktigheten av stedsbestemmelse. Nå er det 28 satellitter over hodet mitt, og signalet er tilgjengelig fra kun 7. Altså. telefonen min vet allerede på forhånd hvor hver satellitt er. Og det manglende signalet fra 21 satellitter betyr at de er utenfor synsvidde. Navigasjonssignalet er veldig svakt, fra ordet VASCHE, reflekteres det nesten ikke, det er blokkert av terrenget, bygninger, taket på en bil - hvilket som helst metall over hodet eller på siden. Selv snø som faller utenfor vinduet forstyrrer godt mottak.

For å gjennomføre prosjektet trenger du en rekke elektroniske moduler: en programmerbar plattform Arduino Nano, en OLED-skjerm 128 ganger 32 punkter (den kobles til via I2C-bussen), en GPS-modul for tilkobling via UART, evt. litiumbatteri med en kapasitet over 200 milliampere, en beskyttende lademodul for litium og en boost-omformer for å få 5 volt. Jeg har tre forskjellige typer her, alle vil gjøre det. Jeg planla også å bruke en farge RGB LED for å indikere status, men forlot dette etter hvert som prosjektet skred frem.

Vi kobler skjermen til Arduino og møter den første vanskeligheten. Standard bibliotek OLED-skjermen tar opp 20 kB, som er 70 % av mikrokontrollerens minne og gir praktisk talt ingen plass til programmet. Tidligere satte jeg sammen en høydemåler og ble møtt med det faktum at enhver ny kodelinje fører til minneoverflyt og mikrokontrolleren fryser under drift. Derfor vil jeg bruke mye mer lys bibliotek. Den fungerer ikke med grafikk og viser kun tekst på en OLED-skjerm, og den tar kun opp 1 KB minne.

Jeg kobler GPS-modulen separat til breadboardet og ser de første navigasjonsdataene - et signal fra verdensrommet er fanget opp og behandlet. Nå viser jeg informasjon på skjermen. Klasse! Ser 4 satellitter, nå 3, og igjen 4, allerede 5! For bedre GPS-mottak henger modulen utenfor vinduet på en wire.

Under utviklingen av prosjektet brukte jeg GPS-moduler forskjellige typer. Enkel GPS og kombinert GPS med Glonass. Vi måtte gjennomføre en rekke mange timer lange eksperimenter for å sjekke driftsstabiliteten. Modulene viste seg å fungere, men med programvarebiblioteker Jeg måtte tukle. Prøvde flere ulike biblioteker, og TinyGPS+ var den eneste som fungerte med alle GPS-moduler samtidig.

Generelt analyserer biblioteket NMEA-protokollen; det analyserer ganske enkelt dataene som GPS-modulen spytter ut to ganger per sekund. Slik ser en ubehandlet datastrøm ut.

Som et resultat lar fastvaren min deg koble til nesten hvilken som helst GPS-modul via UART med NMEA-dataoverføringsprotokollen. Faktisk er dette flertallet av modulene som har RX- og TX-pinner. Jeg anbefaler å ta GPS-modulen fra Glonass, den ser flere satellitter, så nøyaktigheten er høyere. Lenker til alle komponenter og moduler er i beskrivelsen av denne videoen.

Brødbrettet viste hele funksjonaliteten til systemet, nå kan du sette sammen alt innen maskinvare. Jeg vil bruke et litiumbatteri som strøm; det kobles til beskyttelseskortet med lading. På dette kortet setter den nedre motstanden R3 batteriets ladestrøm, standard er 1 ampere, dette er mye for små batterier, så motstanden må byttes. På skjermen ser du en plate med motstandsverdier for ulike ladestrømmer. Hvis batteriet ditt har en kapasitet på 500 milliamperetimer, må du ikke stille inn ladestrømmen høyere enn denne verdien. De. du kan stille inn 200 eller 300 milliampere, og ikke overstige 500.

Deretter må spenningen økes; skjermen og GPS-modulen drives av 5 volt. Vi vil gjøre dette ved hjelp av en boost-spenningsomformer. Disse er vanligvis installert i kraftbanker for å heve spenningen fra 3,7 til 5 volt. Jeg skal bruke den lille grønne modulen, den kan sende ut opptil 300mA og er mer enn nok for dette prosjektet.

Jeg har oppdatert fastvaren, nå når hovedskjermen lastes inn viser den gjeldende nøyaktige tiden fra satellitter, antall synlige satellitter og gjeldende hastighet til trackeren, den hopper fordi det er en feil ved å bestemme plasseringen. Når du trykker på knappen, endres skjermen. Her vises gjeldende hastighetsverdi og maksimumsverdi for observasjonsperioden. På en annen skjerm er det gjeldende avstand til nullpunktet, maksimal registrert avstand fra det og kilometertelleren.

Jeg måler størrelsen på alle moduler og prøver å ordne dem så kompakt som mulig. Men uansett hvor hardt jeg prøvde, passet ikke den tynne skjermen sammen med den brede. GPS-mottaker ohm Derfor bestemte jeg meg for å bytte ut skjermen med en annen OLED 128x64 piksler. Dette gjør den mer ergonomisk og gir mulighet for en større knapp. OLED-skjermer er fullt kompatible og krever minimal kodekorreksjon, så fastvare vil være tilgjengelig for begge versjoner av enheten med en liten skjerm og en stor.

Monteringsskjemaet er enkelt. Du må koble skjermen til I2C-bussen, disse er pinnene A4 og A5, gps-modulen er koblet til programvarens serieport på pinnene D3 og D4. Knapp på pinne D7. Batteristrøm via beskyttelsesmodul dra den til bryteren, deretter til boost-omformeren, og koble Arduino til 5 volt.

For praktisk plassering av komponentene vil jeg bruke et grønt brødbrett på 7 x 3 centimeter. For å unngå at skjermen henger på kontakten, monterer jeg den på plaststativ med 5 mm avstandsstykker. Det vil være en GPS-mottaker mellom skjermen og knappen. På baksiden av brettet vil det være en Arduino-kontroller, et batteri og et beskyttelseskort. Batteriet vil bruke tynt litium 350 milliampere, hvis jeg ikke tar feil, brukes disse i elektroniske sigaretter, men som sagt, du kan bruke et hvilket som helst litiumbatteri.

Jeg måler alt på nytt, måler det og forbereder et design for huset for utskrift på en 3D-printer. Bokstavelig talt 15 minutter på TinkerCAD-nettstedet og prosjektet er klart til utskrift. Jeg overfører filen til en flash-stasjon, starter den og så drar vi. Utskriftstiden er ca. 40 minutter, dette er det første sikteorganet for å prøve ut plassering av moduler.

Brettet og knappen passet på plass, men skjermen var bokstavelig talt en millimeter kort, og det innvendige stativet var i veien. Så alt passer og er installert på sin plass. Flott, jeg redigerer prosjektet og skriver ut siste versjon oransje hus. Etter å ha fullført utskriften, må du gi bordet tid til å avkjøles og først deretter rive av delen, da blir forsiden glatt og vil ikke bevege seg.

Jeg bryter av og renser festekanten på plasten. Siden jeg brukte ABS-plast er den gjenstand for etterbehandling med aceton. Jeg påfører den med en børste, lagene holder i tillegg sammen, og kroppen blir sterkere og får en glans.

Brettet passer perfekt inne i saken, festene er justert, knappen fester seg ikke. I den ene enden er det et hull for Arduino Nano-kontakten, og på den andre siden for lading av batteriet. Den viste seg å være litt smalere, så jeg utvider den med en skalpell.

Ladebrettet har utstikk langs kantene, de hindrer at kontakten blir dypere, så jeg sliper dem ned med en nålefil. Nå er styret godt på plass.

I generelt syn enheten vil se slik ut. Huset er plassert på toppen. Under den vil det være en mikrobryter, et brødbrett med skjerm, en GPS-modul og en knapp. Det er også en step-up strømomformer på siden.

Separat for bryteren kuttet jeg et hull i etuiet med en skalpell, over knappen. Den er forsenket i kroppen og vil ikke forstyrre.

Det er på tide å lodde. Jeg lodder den første kontakten på skjermen til brettet, prøv den på - alt er riktig, og du kan lodde de resterende tre kontaktene. Nå knappen. Og sørg for å rense av flussen med en børste. Jeg lodder ledningene til batteribeskyttelsesmodulen.

Når du kobler til, må du være oppmerksom på fargen på ledningene. Feil farger kommer av og til fra Kina. I dette tilfellet bestemte jeg meg for å avlodde kontakten og lodde ledningene direkte for bedre kontakt. Prosedyren er kompleks og krever presisjon og forsiktighet ved lodding. I tillegg fyller jeg kontaktene med varmt lim, dette vil beskytte sporene og ledningen mot utilsiktet trekking. Og vi fyller umiddelbart hele GPS-modulen i varmekrympe; dette er ikke nødvendig, men det vil i tillegg beskytte mot mekanisk skade og kortslutninger når de er montert på et brødbrett.

Vi pakker også boost-omformeren inn i varmekrympe. For å feste modulene bruker jeg dobbeltsidig tape. Ved montering av brettet viste det seg at det ikke var nok plass til ledningene, så jeg boret hull i midten og satte strømledningene gjennom der.

Jeg anbefaler forresten en kul batteridrill. Den kjører på et enkelt 18650-batteri og lar deg raskt bore lignende hull på brett og kofferter. Tidligere, for slikt arbeid, måtte jeg ta Dremel ut av kassen og koble den til en stikkontakt, men nå har jeg alltid denne bor for hånden.

Den øvre delen av brettet er satt sammen, ledningene er gjenget og nå må du installere bryteren. For å gjøre dette, biter vi av de ekstra bena på den; bare to er nødvendig for å forsyne og avbryte strømforsyningen. Vi lodder ledningen på dem og varmekrymper alt som vanlig. Deretter kan du installere bryteren på sin plass og fylle den med varmt lim. Nå vil det være praktisk å slå trackeren på og av.

Jeg installerer brettet i kassen og fester det med fire små skruer. De tilsvarende hullene er allerede anordnet på husstøttene. Da jeg fjernet beskyttelsesfilmen fra skjermen, la jeg merke til et stort gap mellom skjermen og kroppen. Derfor tok jeg et stykke gjennomsiktig emballasje fra litt elektronikk og skar glass ut av det for å passe størrelsen på vinduet. Og limte den med aceton til plasten på saken.

Vi utfører monteringen i henhold til ordningen, det er ingen vanskeligheter eller nyanser her. Bare vær oppmerksom, pluss til pluss, minus til minus. Vi kobler bryteren direkte til utgangen til lademodulen. Dette vil slå av hele strømkretsen og forhindre at batteriet tappes.

Etter å ha loddet alle ledningene til modulene, dekk bunnkortet med blått elektrisk tape. Arduino-kontrolleren med lading vil være på toppen, og uten isolasjon er det mulighet for å kortslutte noe.

Jeg lodder beskyttelsesmodulen og fester den på plass med varmt lim.

Jeg putter batterikontaktene og lodder raskt ledningen til dem for ikke å overopphete batteriet. På den ene siden og på den andre. Etter dette må du koble til mikro USB kabel og strøm til beskyttelsesmodulen, vil dette aktivere funksjonen.

Ferdig, nå må du laste opp fastvaren. Vi kobler Arduino til datamaskinen, gå til prosjektsiden, en lenke til den er i videobeskrivelsen. Last ned arkivet, pakk ut filene, installer bibliotekene, åpne den nødvendige fastvareversjonen for 32- eller 64-punktsskjermen og last den inn i kontrolleren. Alt fungerte første gang! Data fra GPS-stang. Kul!

Jeg installerer kontrolleren på plass, slår på den autonome strømforsyningen... iiiiiiiii... ingenting. Strøm-LED-en på Arduino er på, men skjermen slår seg ikke på. Og det var slik tryndet skjedde, grunnen til det vet jeg fortsatt ikke. Det tok meg flere timers arbeid å få trackeren til å fungere autonomt fra det innebygde batteriet.

Først trodde jeg den lille step-up strømomformeren var synderen. Men sjekk med multimeter viste stabile 5 volt. Deretter koblet jeg til en autonom strømmodul som jeg hadde til overs fra et annet prosjekt, den er bygget på en stor boost-omformer - og se, trackeren startet opp, men frøs etter noen sekunder.

Jeg ladet batteriet på den og plasserte trackeren på vinduet for å fange satellitter. Tre minutter senere fanget han opp et signal fra 4 satellitter og bestemte plasseringen. Vel, det betyr at det fungerer og sannsynligvis kan monteres? Vi bytter boost-omformer, den lille lager tydeligvis mye støy fra strømforsyningen.

For å gjøre dette måtte jeg demontere trackeren helt, løsne alle ledningene og sette den sammen igjen. Den nye strømmodulen skal stå på samme sted som den gamle, kun ett stativ måtte fjernes for at det skulle passe under skjermen.

Det var det, jeg snodde ledningene til pigtails for å unngå forstyrrelser. Aaand... denne jævelen slo seg ikke på igjen. Mer presist slo den seg på og frøs umiddelbart med gjenstander på skjermen. Så mange timer med arbeid og alt for ingenting. Det hjalp ikke å bytte omformer.

Jeg prøvde å installere kondensatorer på strømforsyningen - ingenting hjalp. Trackeren nektet å jobbe autonomt, både fra boost-omformere og fra laboratoriets strømforsyning - den frøs eller slo seg ikke på i det hele tatt. Men samtidig fungerte det perfekt fra Arduino USB-kontakten.

Ved å bruke den sekvensielle avstengingsmetoden klarte jeg å finne ut at OLED-skjermen var skyld i dette - men jeg forstår fortsatt ikke hvorfor. Løsningen ble funnet plutselig. Under neste kontroll av den autonome strømforsyningen brukte jeg ved et uhell 5 volt på VIN-pinnen. Jeg legger merke til at denne pinnen! Ikke! designet for å levere 5 volt strøm og krever en spenning på 7 til 12 volt.

Men ikke desto mindre startet sporeren umiddelbart og begynte å fungere stabilt. De. Det viser seg at den lille stabilisatoren ikke var kilden til problemet, det var noe annet.

Samtidig bestemte jeg meg for å sjekke dagens forbruk. Fra 5 volt forbrukte trackeren omtrent 70 milliampere. Og fra 4 volt gjennom en boost-omformer viste det seg å være omtrent 110 milliampere. Dermed vil mitt lille 350 milliampere batteri vare i tre timer batteritid. Og jeg har ikke optimalisert strømforsyningen ennå, du kan kutte av lysdiodene som alltid er på og fortsatt spare batteriet.

Trackeren begynte å fungere helt stabilt, jeg lot den stå på vinduet og etter noen minutter fanget den 4 satellitter. Flott

Hvis du er interessert i å hjelpe meg med å forstå årsaken til den merkelige oppførselen til Arduino, så her er en introduksjon:

1 – Trackeren fungerer hvis den får strøm via Arduino USB-kontakten.

2 – Trackeren fryser og slår seg ikke på hvis du driver den gjennom Arduino 5V-pinnen ved å bruke 5 volt til den fra en hvilken som helst strømkilde.

3 – Trackeren fryser og slår seg ikke på hvis 7 volt eller mer tilføres den gjennom Arduino VIN-pinnen.

4 – Trackeren fungerer hvis den drives med ikke-standard 5 volt gjennom samme VIN-pinne.

Den ferdige enheten er et universelt autonomt speedometer, avstandsmåler, kilometerteller og satellitt-nøyaktig klokke i ett hus.

På hovedskjermen etter lasting vises gjeldende klokkeslett og dato i Greenwich øverst, den andre linjen er gjeldende hastighet på 0,3 kilometer i timen og maksimal hastighetsverdi som er registrert siden den ble slått på - 26 kilometer i timen. På den tredje linjen er gjeldende avstand til nullpunktet 530 meter og maksimal avstand som er oppnådd siden innkobling er 580 meter. På den fjerde linjen viser kilometertelleren 923 meter og antall satellitter som er brukt.

Hovedtegnene er mengden data som mottas fra GPS-modulen.

Når du trykker kort på knappen, endres skjermvisningen, og når du holder den lenge, husker trackeren gjeldende plassering som et nullreferansepunkt for avstandsmålinger. Den andre skjermen viser gjeldende og maksimal hastighet. Den tredje skjermen inneholder informasjon om avstanden til nullpunktet. Den fjerde skjermen er kilometertelleren. Femte breddegrad og lengdegrad.

Du kan tilbakestille kilometertelleren og maksimumsverdiene ved å trykke lenge på knappen på skjermen med disse parameterne. De. gå til kilometertelleren og hold nede knappen for å tilbakestille den.

La oss gå videre til testing. Nå ser sporeren 12 satellitter. Jeg stiller inn gjeldende nullpunkt og tilbakestiller kilometertelleren til null. Jeg gjør det samme på en kilometerteller i en bil. Etter å ha kjørt 1,2 kilometer i henhold til bilens speedometer, så jeg de samme 1205 meterne på GPS-trackeren. Gjeldende avstand til nullpunktet i en rett linje er 0,93 kilometer. Og ifølge kartet, de samme 930 meterne, så langt er alt nøyaktig.

Jeg bestemte meg for å måle en lengre avstand. Igjen tilbakestiller jeg avlesningene til null på trackeren og bilen. Etter å ha reist 8,4 kilometer fant jeg på trackeren at avstanden var kortere - bare 7974 meter. I dette tilfellet er gjeldende avstand til nullpunktet 4 930 meter. La oss sjekke det på kartet, det viser seg veldig nøyaktig, de samme 4.930 meterne. Det er ikke klart, men hvorfor ligger da kilometertelleren på 400 meter og hvilken kilometerteller som ligger, på bilen eller GPS-en.

Ok, det er på tide å skrive ut bakdeksel og vi vil teste igjen. Jeg stenger. Vekten til den ferdige enheten viste seg å være 55 gram, mye, men ikke kritisk - til slutt vil jeg vise deg hvordan du kan redusere den.

Jeg ankom skøytebanen og bestemte meg for å måle hockeyspillerens hastighet. Faen, han må fortsatt fjerne dekslene for fart. Resultatet var en voldsom hastighet, som en "russisk rakett" - 5 kilometer i timen. Jeg gikk, og alt fordi taket på skøytebanen er isolert med refleksfolie for å holde kulden ute. Det er et signal fra satellitter, men det er ikke nøyaktig.

La oss ta en siste test med mobiltelefon. Telefonen ser 7 satellitter, og trackeren 9. Jeg begynner å logge og tilbakestiller kilometertelleren på trackeren. Vel... la oss gå. Etter å ha kjørt tre kilometer viste telefonen og trackeren identiske verdier på kilometertelleren. 3017 mot 3021 meter er et superresultat, jeg hadde ikke forventet en slik nøyaktighet.

Men kilometertelleren feilet, så mye som 12 tusen kilometer. Ikke surt. Tidligere, når jeg feilsøkte et program, hadde jeg allerede møtt en slik feil, og sporeren ble umiddelbart flyttet 7 tusen kilometer. Da jeg kom hjem, opprettet jeg et punkt i Google med null bredde- og lengdegrad. Det viste seg at det ligger i Atlanterhavet, ikke langt fra kysten av Ghana. Etter å ha målt avstanden fra den til posisjonen min, fikk jeg de samme 7 tusen kilometerne. Det viser seg at GPS-modulen noen ganger hopper over nuller langs koordinatene. Dette kan enkelt fikses ved å legge til bare én betingelse i programkoden. Og denne feilen ble ikke observert under tester.

Jeg synes trackeren ble kjempebra; dette er min første erfaring med å jobbe direkte med GPS-moduler. Hvorfor trengs det? En slik tracker kan tjene som et autonomt speedometer eller en uavhengig kilometerteller. Den kan plasseres på en sykkel, bil, leketøy eller quadcopter. Den lar deg også måle avstanden i en rett linje til et gitt punkt, nullverdier er lagret i ikke-flyktig minne. Husker de maksimalt oppnådde hastighets- og avstandsverdiene. Den gjør alt dette autonomt og er ikke avhengig av andre enn satellitter. Og selvfølgelig er dette en nøyaktig klokke. Jeg trenger den for å måle maksimal hastighet og maksimal avstand fra objekter. Det stemmer, du må legge til mer høyde på skjermen for å måle hvor høyt du stiger!

La oss snakke om hvordan du kan redusere vekten; den enkleste måten å gjøre dette på er ved å montere trackeren på en plattform Arduino Pro Mini på 3,3 volt. Da trenger du ikke en boost-omformer, i stedet blir det en liten lineær stump på 3,3 volt, GPS-modulen fungerer uten problemer på denne spenningen, og på skjermen må du omgå strømstabilisatoren.

Vel, jeg vil umiddelbart svare på spørsmålet: er det mulig å legge til en GSM-modul og kontrollere trackeren via SMS? Ja det kan du. For å gjøre dette, i tillegg til selve modulen, må du også legge til behandling av SMS-kommandoer til programkoden og dette bør være et eget prosjekt.

Det var alt for i dag, hvis du likte denne videoen, så er jeg sikker på at du vil like den og dele lenken til videoen med vennene dine.

Takk for at du så, lykke til alle sammen og se deg i nye videoer! Ha det!

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 skjermen åpnes seriell port // 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) ; // ut informasjon om initialisering til seriell port 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") ; ) )