Gör-det-själv GPS-spårare baserad på GY-NEO6M är lätt. Kort beskrivning av Arduino GPS tracker Hatire Arduino inställningsfönster

Efter flera experiment med Arduino bestämde jag mig för att göra en enkel och inte särskilt dyr GPS-spårare med koordinater skickade via GPRS till servern.
Använd Arduino Mega 2560 ( Arduino Uno), SIM900 - GSM/GPRS-modul (för att skicka information till servern), GPS-mottagare SKM53 GPS.

Allt köptes på ebay.com, för totalt cirka 1500 rubel (cirka 500 rubel för arduino, lite mindre för GSM-modulen, lite mer för GPS).

GPS-mottagare

Först måste du förstå hur du arbetar med GPS. Den valda modulen är en av de billigaste och enklaste. Tillverkaren lovar dock ett batteri för att spara satellitdata. Enligt databladet ska en kallstart ta 36 sekunder, men i mina förhållanden (10:e våningen från fönsterbrädan, inga byggnader i närheten) tog det så mycket som 20 minuter. Nästa start är dock redan 2 minuter.

En viktig parameter för enheter som är anslutna till Arduino är strömförbrukningen. Om du överbelastar Arduino-omvandlaren kan den brinna ut. För den mottagare som används är den maximala strömförbrukningen 45mA @ 3,3v. Varför specifikationen ska ange strömstyrkan vid en annan spänning än den som krävs (5V) är för mig en gåta. Arduino-omvandlaren klarar dock 45 mA.

Förbindelse
GPS är inte styrd, även om den har ett RX-stift. I vilket syfte är okänt. Det viktigaste du kan göra med denna mottagare är att läsa data via NMEA-protokollet från TX-stiftet. Nivåer - 5V, bara för Arduino, hastighet - 9600 baud. Jag ansluter VIN till VCC på arduino, GND till GND, TX till RX i motsvarande serie. Jag läser data först manuellt och använder sedan TinyGPS-biblioteket. Överraskande nog är allt läsbart. Efter att ha bytt till Uno var jag tvungen att använda SoftwareSerial, och sedan började problem - några av meddelandetecknen gick förlorade. Detta är inte särskilt kritiskt, eftersom TinyGPS stänger av ogiltiga meddelanden, men det är ganska obehagligt: ​​du kan glömma 1Hz-frekvensen.

En snabb notering om SoftwareSerial: det finns inga hårdvaruportar på Uno (andra än den som är ansluten till USB Serial), så du måste använda programvara. Så den kan bara ta emot data på en pin där kortet stöder avbrott. I fallet med Uno är dessa 2 och 3. Dessutom kan endast en sådan port ta emot data åt gången.

Så här ser "provbänken" ut.

GSM-mottagare/sändare


Nu kommer den mer intressanta delen. GSM-modul - SIM900. Den stöder GSM och GPRS. Varken EDGE, eller särskilt 3G, stöds. För att överföra koordinatdata är detta förmodligen bra - det blir inga förseningar eller problem när man växlar mellan lägen, plus att GPRS nu är tillgängligt nästan överallt. För vissa mer komplexa applikationer kanske detta inte räcker.

Förbindelse
Modulen styrs även via serieporten, med samma nivå - 5V. Och här kommer vi att behöva både RX och TX. Modulen är sköld, det vill säga den är installerad på Arduino. Dessutom är den kompatibel med både mega och uno. Standardhastigheten är 115200.

Vi monterar den på Mega, och här väntar oss den första obehagliga överraskningen: TX-stiftet på modulen faller på det 7:e stiftet på Mega. Avbrott är inte tillgängliga på det 7:e stiftet på mega, vilket innebär att du måste ansluta 7:e stiftet, till exempel, till det 6:e stiftet, där avbrott är möjligt. Därför kommer vi att slösa bort en Arduino-stift. Tja, för en megastor är det inte särskilt skrämmande - trots allt finns det tillräckligt med stift. Men för Uno är detta redan mer komplicerat (jag påminner dig om att det bara finns 2 stift som stöder avbrott - 2 och 3). Som en lösning på detta problem kan vi föreslå att du inte installerar modulen på Arduino, utan ansluter den med kablar. Då kan du använda Serial1.

Efter anslutning försöker vi "prata" med modulen (glöm inte att slå på den). Vi väljer porthastigheten - 115200, och det är bra om alla inbyggda seriella portar (4 på mega, 1 på uno) och alla mjukvaruportar fungerar med samma hastighet. På så sätt kan du uppnå en mer stabil dataöverföring. Jag vet inte varför, även om jag kan gissa.

Så vi skriver primitiv kod för att vidarebefordra data mellan seriella portar, skicka atz och ta emot tystnad som svar. Vad har hänt? Ah, skiftlägeskänslig. ATZ, vi klarar oss. Hurra, modulen kan höra oss. Ska du ringa oss av nyfikenhet? ATD +7499... Den fasta telefonen ringer, rök kommer från arduino, den bärbara datorn stängs av. Arduino-omvandlaren brann ut. Det var en dålig idé att mata den 19 volt, även om det står skrivet att den kan fungera från 6 till 20V, 7-12V rekommenderas. Databladet för GSM-modulen säger ingenstans om strömförbrukning under belastning. Nåväl, Mega går till reservdelslagret. Med häpen andedräkt sätter jag på den bärbara datorn som fick +19V via +5V-linjen från USB. Det fungerar, och till och med USB brändes inte ut. Tack Lenovo för att du skyddar oss.

Efter att omvandlaren brann ut letade jag efter strömförbrukning. Så, topp - 2A, typisk - 0,5A. Detta är helt klart bortom kapaciteten hos Arduino-omvandlaren. Kräver separat mat.

Programmering
Modulen ger omfattande dataöverföringsmöjligheter. Börjar från röstsamtal och SMS och slutar med själva GPRS. Dessutom, för den senare är det möjligt att utföra HTTP-förfrågan använda AT-kommandon. Du måste skicka flera, men det är värt det: du vill egentligen inte skapa en förfrågan manuellt. Det finns ett par nyanser med att öppna en dataöverföringskanal via GPRS - minns du den klassiska AT+CGDCONT=1, "IP", "apn"? Så, samma sak behövs här, men lite listigare.

För att få en sida på en specifik URL måste du skicka följande kommandon:
AT+SAPBR=1,1 //Öppen operatör (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //anslutningstyp - GPRS AT+SAPBR=3,1,"APN","internet" //APN, för Megafon - internet AT+HTTPINIT //Initialisera HTTP AT+HTTPPARA="CID",1 //Carrier ID att använda. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Den faktiska webbadressen, efter sprintf med koordinater AT+HTTPACTION=0 // Begär data med GET-metoden //vänta på svar AT+HTTPTERM //stopp HTTP

Som ett resultat, om det finns en anslutning, kommer vi att få ett svar från servern. Det vill säga, i själva verket vet vi redan hur man skickar koordinatdata om servern tar emot det via GET.

Näring
Eftersom att driva GSM-modulen från en Arduino-omvandlare, som jag fick reda på, är en dålig idé, bestämde man sig för att köpa en 12v->5v, 3A-omvandlare på samma ebay. Modulen gillar dock inte 5V strömförsörjning. Låt oss göra ett hack: anslut 5V till stiftet från vilket 5V kommer från arduino. Då kommer modulens inbyggda omvandlare (mycket kraftfullare än Arduino-omvandlaren, MIC 29302WU) att göra från 5V vad modulen behöver.

Server

Servern skrev en primitiv - lagrade koordinater och ritade på Yandex.maps. I framtiden är det möjligt att lägga till olika funktioner, inklusive stöd för många användare, "beväpnad/beväpnad" status, tillståndet för fordonssystemen (tändning, strålkastare, etc.), och eventuellt även kontroll av fordonssystemen. Naturligtvis med lämpligt stöd för trackern, som smidigt förvandlas till ett fullfjädrat larmsystem.

Fälttester

Så här ser den sammansatta enheten ut utan fodral:

Efter att ha installerat strömomvandlaren och placerat den i fodralet från ett dött DSL-modem, ser systemet ut så här:

Jag lödde fast ledningarna och tog bort flera kontakter från Arduino-blocken. De ser ut så här:

Jag kopplade in 12V i bilen, körde runt Moskva och fick spåret:


Spårpunkterna ligger ganska långt ifrån varandra. Anledningen är att det tar relativt lång tid att skicka data via GPRS och under denna tid läses inte koordinaterna. Detta är helt klart ett programmeringsfel. Den behandlas dels genom att omedelbart skicka ett paket med koordinater över tiden, dels genom att asynkront arbeta med GPRS-modulen.

Söktiden för satelliter i passagerarsätet i en bil är ett par minuter.

Slutsatser

Att skapa en GPS-spårare på Arduino med dina egna händer är möjligt, även om det inte är en trivial uppgift. Huvudfrågan nu är hur man döljer enheten i bilen så att den inte utsätts för skadliga faktorer (vatten, temperatur), inte täcks med metall (GPS och GPRS kommer att vara skärmade) och inte är särskilt märkbar. Än så länge ligger den bara i kabinen och ansluts till cigarettändaruttaget.

Tja, vi måste också korrigera koden för ett smidigare spår, även om spåraren redan utför huvuduppgiften.

Begagnade enheter

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900-baserad GSM/GPRS-sköld
  • DC-DC 12v->5v 3A omvandlare

Personliga GPS-sändare

Idag går framstegen i en sådan takt att enheter som tidigare var skrymmande, dyra och mycket specialiserade snabbt tappar storlek, vikt och pris, men får många nya funktioner.

Det var så enheter baserade på GPS-teknik nådde fickprylar och slog sig fast där, vilket gav människor nya möjligheter. Det är särskilt värt att lyfta fram enskilda GPS-sändare.

I huvudsak är det samma GPS-spårare, endast designade för användning inte på ett fordon, utan av en person i vardagen.

Beroende på modell, flera olika enheter. I sin enklaste form är det helt enkelt en liten låda utan display, vilket låter dig kontrollera barns, djurs eller andra föremåls rörelser, på vilken den är fixerad.

Inuti ligger den GPS-modul, som bestämmer koordinater på marken, en GSM/GPRS-modul som sänder information och tar emot kontrollkommandon, samt en strömkälla som säkerställer autonom drift under lång tid.

Funktionalitet hos GPS-sändare

När funktionaliteten ökar visas följande funktioner för enheten:


Tillval för GPS-sändare

Beroende på konfigurationen kan sändarhusen skilja sig avsevärt. Olika modeller ha avrättningar i formen mobiltelefoner, klassiska navigatorer eller till och med armbandsur.

Den färgglada designen av speciella versioner och användbara tillägg gör att barn kan behandla dessa enheter inte som "föräldraspioner", utan som fashionabla och praktiska prylar.

Som en fördel är det värt att nämna det faktum att många versioner av enheten kan klara sig utan Prenumerationsavgift för tjänster från specialiserade operatörer, och all nödvändig information skickas till kunden direkt via Internet eller SMS-meddelanden, vilket möjliggör betydande besparingar på underhållet av sådan utrustning.

Artiklar om GPS-spårare

I den här artikeln kommer jag att visa hur man använder en gsm-modul med arduino med sim800L som exempel. Samma instruktioner är ganska lämpliga för att använda andra gsm-moduler, till exempel sim900, etc., eftersom alla moduler fungerar på ungefär samma sätt - detta är utbytet av AT-kommandon genom porten.

Jag kommer att visa användningen av modulen med arduino med exemplet på ett SMS-relä, som kan användas för att fjärrstyra enheten via SMS-kommandon. Detta kan användas i samband med billarm etc.

Modulen är ansluten till Arduino via UART-gränssnittet i en seriell mjukvaruport som fungerar på 2 och 3 digitala stift av Arduino nano.

Arbetar med Arduino med GSM-moduler

För att driva modulen krävs en spänning i området från 3,6V till 4,2V, detta innebär att du måste använda en extra spänningsstabilisator, eftersom Arduino har en 3,3 volts stabilisator installerad, som inte är lämplig för att driva modulen , det andra skälet till att installera en extra stabilisator är att GSM-modulen är allvarlig belastning, eftersom den har en svag sändare som ger stabil anslutning med en mobilstation. Ström till Arduino nano levereras till VIN-stiftet - detta är en stabilisator inbyggd i Arduino som säkerställer att modulen fungerar över ett brett spänningsområde (6-10V). Relämodulen ansluts enligt den givna programtexten till pin 10 på Arduino nano och kan enkelt ändras till vilken annan som fungerar som digital utgång.

Det fungerar så här: installera ett SIM-kort i GSM-modulen, slå på strömmen och skicka ett SMS med texten "1" till numret SIM-kort för att slå på vårt relä, för att stänga av det skickar vi ett SMS med texten "0".

#omfatta
SoftwareSerial gprsSerial(2, 3); // ställ in stift 2 och 3 för mjukvaruport
int LedPin = 10; // för relä

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

// ställa in meddelandemottagning

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
fördröjning(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
fördröjning(500); // fördröjning för kommandobearbetning
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
fördröjning(700);
}

String currStr = "";
// om denna rad är ett meddelande, kommer variabeln att anta värdet True
boolean isStringMessage = false;

void loop()
{
if (!gprsSerial.available())
lämna tillbaka;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// om den aktuella raden är ett meddelande, då...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) annat (
if (currStr.startsWith("+CMT")) (
// om den aktuella raden börjar med “+CMT”, då nästa meddelande
isStringMessage = true;
}
}
currStr = "";
) else if (‘\n’ != currSymb) (
currStr += String(currSymb);
}
}

Videoversion av artikeln:

Taggar: #Arduino, #SIM800L

Ditt märke:

Produkter som används i den här artikeln:

← GPS-logger på arduino | Relästyrning via COM-port →

GSM-skanner på RTL-SDR

| Hem| engelska | Utveckling | FAQ |

Huvudegenskaper hos skannern

GSM-skannern skannar GSM-nedlänkskanaler och visar information om signalstyrka och kanalägande för en av de tre huvudoperatörerna cellulär kommunikation MTS, Beeline och Megafon. Baserat på resultatet av sitt arbete låter skannern dig spara en lista med identifierare basstationer MCC, MNC, LAC och CI för alla skannade kanaler.
En GSM-skanner kan användas för att utvärdera GSM-signalnivån och jämföra signalkvalitet olika operatörer, radiotäckningsbedömningar, vid beslut om installation av cellulära signalförstärkare och justering av deras parametrar, för utbildningsändamål, etc.
Skannern körs under Windows och använder en enkel och billig mottagare - RTL-SDR. Du kan läsa om RTL-SDR på:
RTL-SDR (RTL2832U) och mjukvarudefinierade radionyheter och projekt,
RTL-SDR – OsmoSDR,
RTL-SDR på ryska.
RTL-SDR-parametrarna bestämmer skannerns huvudegenskaper. En GSM-skanner är naturligtvis inte en ersättning för normal mätutrustning.
Skannern distribueras gratis, utan några begränsningar i användningen.
Aktuell version stöder GSM 900-bandet och stöder inte GSM 1800. Detta bestäms av det faktum att driftfrekvensen för RTL-SDR med R820T-tunern är begränsad till 1760 MHz. Det finns hopp om att användningen av den experimentella RTL-SDR-drivrutinen kommer att tillåta drift i åtminstone en del av 1800 MHz-området.

Startar skannern

Den senaste versionen av skannern kan laddas ner från denna länk. Packa bara upp filen till en lämplig plats och kör gsmscan.exe.
Tidigare versioner scanner, en länk till arkivet med källor och annan information relaterad till utvecklingen finns på utvecklingssidan.
För att skannern ska fungera krävs installation av RTL-SDR-drivrutiner; om de inte redan har installerats kan detta enkelt göras med hjälp av Zadig-programmet för att beskriva installationsproceduren.

Använda skannern

Nedan är en vy av skannerprogramfönstret:

Den horisontella axeln visar GSM-kanalnumret i form av ARFCN eller i MHz, och den vertikala axeln visar signalnivån i dBm. Linjens höjd visar signalstyrkan.

GSM-modul NEOWAY M590 kommunikation med Arduino

Om BS-identifierarna har avkodats framgångsrikt och de motsvarar identifierarna för de tre stora teleoperatörerna, målas linjerna i motsvarande färger.
Rullgardinslistor högst upp på skärmen låter dig välja en SDR-mottagare, om flera är anslutna, räckvidd GSM-arbete 900 eller GSM 1800 och horisontella axelenheter ARFCN eller MHz.
Knapparna låter dig spara en rapport om skannerns funktion i form av en lista över avkodade basstationer, rensa resultaten av BS-avkodning och få information om programmet.

Principer och funktioner i arbetet.

Under drift skannar programmet av driftfrekvensområdet med ett steg på 2,0 MHz (10 GSM-kanaler) och digitaliserar signalen med en samplingsfrekvens på 2,4 MHz. Skanningsprocessen består av en snabb passage genom hela området för att mäta signalstyrkan och en långsam passage för att avkoda BS-identifierarna.

Ett avkodningssteg utförs efter att ha korsat hela området för att mäta effekt. I GSM 900-området uppdateras således signalnivån ungefär en gång varannan sekund, och ett fullständigt avkodningspass tar ungefär 1 minut.
På grund av den dåliga kvaliteten på signalen som tas emot från RTL-SDR är sannolikheten för att korrekt avkoda systeminformation (SI) för BS-sändningskontrollkanalen (BCCH) inte hög. Signalnivåfluktuationer som ett resultat av flervägsutbredning minskar också sannolikheten för avkodning av systeminformation. Av dessa skäl, för att erhålla BS-identifierare, är det nödvändigt för skannern att ackumulera information under en period av cirka 10 minuter. Men även i det här fallet tillhandahåller inte alla kanaler denna plats tillräcklig signalnivå och kvalitet för avkodning även av den mest idealiska mottagaren. Dessutom används inte alla GSM-kanaler för att fungera över GSM-standard, som kan ses i figuren ovan, är kanalerna 975 - 1000 ockuperade av Megafon att arbeta på UMTS-standard.
Under drift lägger skannern till systeminformation om nya avkodade kanaler till den allmänna uppsättningen av information om kanaler. Men information om tidigare avkodade kanaler raderas inte när systeminformationen inte avkodas i detta steg, och förblir i arrayen. För att rensa denna information, använd knappen för att rensa BS-avkodningsresultaten.
När du klickar på knappen Spara rapport sparas de ackumulerade resultaten i textfil med ett namn som består av programmets namn, datum och tid då data sparades. Nedan är ett exempel på en del av rapportfilen:
Skannern är designad för att fungera under Windows 7, 8.1 och 10. Verket testades med tre kopior av RTL-SDR med R820T-tunern, andra typer av tuners testades inte.
En specialversion av programmet har kompilerats för att fungera under Windows XP, det går flera gånger långsammare än standardversionen.

Utveckling.

Skannerprogrammet levereras som det är, utan några garantier eller ansvar. Om du har rimliga idéer om hur du kan utöka funktionaliteten eller förbättra skannerns prestanda, är vi redo att diskutera möjligheten att implementera dem.
Du kan delta i utvecklingen av skannern, för att göra detta, besök utvecklingssidan.
Ytterligare utveckling av GSM-skannern planeras, eventuellt med ditt deltagande.

Efter flera experiment med Arduino bestämde jag mig för att göra en enkel och inte särskilt dyr GPS-spårare med koordinater skickade via GPRS till servern.
Använd Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS-modul (för att skicka information till servern), GPS-mottagare SKM53 GPS.

Allt köptes på ebay.com, för totalt cirka 1500 rubel (cirka 500 rubel för arduino, lite mindre för GSM-modulen, lite mer för GPS).

GPS-mottagare

Först måste du förstå hur du arbetar med GPS. Den valda modulen är en av de billigaste och enklaste. Tillverkaren lovar dock ett batteri för att spara satellitdata. Enligt databladet ska en kallstart ta 36 sekunder, men i mina förhållanden (10:e våningen från fönsterbrädan, inga byggnader i närheten) tog det så mycket som 20 minuter. Nästa start är dock redan 2 minuter.

En viktig parameter för enheter som är anslutna till Arduino är strömförbrukningen. Om du överbelastar Arduino-omvandlaren kan den brinna ut. För den mottagare som används är den maximala strömförbrukningen 45mA @ 3,3v. Varför specifikationen ska ange strömstyrkan vid en annan spänning än den som krävs (5V) är för mig en gåta. Arduino-omvandlaren klarar dock 45 mA.

Förbindelse

GPS är inte styrd, även om den har ett RX-stift. I vilket syfte är okänt. Det viktigaste du kan göra med denna mottagare är att läsa data via NMEA-protokollet från TX-stiftet. Nivåer - 5V, bara för Arduino, hastighet - 9600 baud. Jag ansluter VIN till VCC på arduino, GND till GND, TX till RX i motsvarande serie. Jag läser data först manuellt och använder sedan TinyGPS-biblioteket. Överraskande nog är allt läsbart. Efter att ha bytt till Uno var jag tvungen att använda SoftwareSerial, och sedan började problem - några av meddelandetecknen gick förlorade. Detta är inte särskilt kritiskt, eftersom TinyGPS stänger av ogiltiga meddelanden, men det är ganska obehagligt: ​​du kan glömma 1Hz-frekvensen.

En snabb notering om SoftwareSerial: det finns inga hårdvaruportar på Uno, så du måste använda programvaran. Så den kan bara ta emot data på en pin där kortet stöder avbrott. I fallet med Uno är dessa 2 och 3. Dessutom kan endast en sådan port ta emot data åt gången.

Så här ser "provbänken" ut.


GSM-mottagare/sändare


Nu kommer den mer intressanta delen. GSM-modul - SIM900. Den stöder GSM och GPRS. Varken EDGE, eller särskilt 3G, stöds. För att överföra koordinatdata är detta förmodligen bra - det blir inga förseningar eller problem när man växlar mellan lägen, plus att GPRS nu är tillgängligt nästan överallt. För vissa mer komplexa applikationer kanske detta inte räcker.

Förbindelse

Modulen styrs även via serieporten, med samma nivå - 5V. Och här kommer vi att behöva både RX och TX. Modulen är sköld, det vill säga den är installerad på Arduino. Dessutom är den kompatibel med både mega och uno. Standardhastigheten är 115200.

Vi monterar den på Mega, och här väntar oss den första obehagliga överraskningen: TX-stiftet på modulen faller på det 7:e stiftet på Mega. Avbrott är inte tillgängliga på det 7:e stiftet på mega, vilket innebär att du måste ansluta 7:e stiftet, till exempel, till det 6:e stiftet, där avbrott är möjligt. Därför kommer vi att slösa bort en Arduino-stift. Tja, för en megastor är det inte särskilt skrämmande - trots allt finns det tillräckligt med stift. Men för Uno är detta redan mer komplicerat (jag påminner dig om att det bara finns 2 stift som stöder avbrott - 2 och 3). Som en lösning på detta problem kan vi föreslå att du inte installerar modulen på Arduino, utan ansluter den med kablar. Då kan du använda Serial1.

Efter anslutning försöker vi "prata" med modulen (glöm inte att slå på den). Vi väljer porthastigheten - 115200, och det är bra om alla inbyggda seriella portar (4 på mega, 1 på uno) och alla mjukvaruportar fungerar med samma hastighet. På så sätt kan du uppnå en mer stabil dataöverföring. Jag vet inte varför, även om jag kan gissa.

Så vi skriver primitiv kod för att vidarebefordra data mellan seriella portar, skicka atz och ta emot tystnad som svar. Vad har hänt? Ah, skiftlägeskänslig. ATZ, vi klarar oss. Hurra, modulen kan höra oss. Ska du ringa oss av nyfikenhet? ATD +7499... Den fasta telefonen ringer, rök kommer från arduino, den bärbara datorn stängs av. Arduino-omvandlaren brann ut. Det var en dålig idé att mata den 19 volt, även om det står skrivet att den kan fungera från 6 till 20V, 7-12V rekommenderas. Databladet för GSM-modulen säger ingenstans om strömförbrukning under belastning. Nåväl, Mega går till reservdelslagret. Med häpen andedräkt sätter jag på den bärbara datorn som fick +19V via +5V-linjen från USB. Det fungerar, och till och med USB brändes inte ut. Tack Lenovo för att du skyddar oss.


Efter att omvandlaren brann ut letade jag efter strömförbrukning. Så, topp - 2A, typisk - 0,5A. Detta är helt klart bortom kapaciteten hos Arduino-omvandlaren. Kräver separat mat.

Programmering

Modulen ger omfattande dataöverföringsmöjligheter. Börjar från röstsamtal och SMS och slutar med själva GPRS. För det senare är det dessutom möjligt att utföra en HTTP-begäran med hjälp av AT-kommandon. Du måste skicka flera, men det är värt det: du vill egentligen inte skapa en förfrågan manuellt. Det finns ett par nyanser med att öppna en dataöverföringskanal via GPRS - minns du den klassiska AT+CGDCONT=1, "IP", "apn"? Så, samma sak behövs här, men lite listigare.

För att få en sida på en specifik URL måste du skicka följande kommandon:

AT+SAPBR=1,1 //Öppen operatör (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //anslutningstyp - GPRS AT+SAPBR=3,1,"APN","internet" //APN, för Megafon - internet AT+HTTPINIT //Initialisera HTTP AT+HTTPPARA="CID",1 //Carrier ID att använda. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Den faktiska webbadressen, efter sprintf med koordinater AT+HTTPACTION=0 // Begär data med GET-metoden //vänta på svar AT+HTTPTERM //stopp HTTP

Som ett resultat, om det finns en anslutning, kommer vi att få ett svar från servern. Det vill säga, i själva verket vet vi redan hur man skickar koordinatdata om servern tar emot det via GET.

Näring

Eftersom att driva GSM-modulen från en Arduino-omvandlare, som jag fick reda på, är en dålig idé, bestämde man sig för att köpa en 12v->5v, 3A-omvandlare på samma ebay. Modulen gillar dock inte 5V strömförsörjning. Låt oss göra ett hack: anslut 5V till stiftet från vilket 5V kommer från Arduino. Då kommer modulens inbyggda omvandlare (mycket kraftfullare än Arduino-omvandlaren, MIC 29302WU) att göra från 5V vad modulen behöver.

Server

Servern skrev en primitiv - lagrade koordinater och ritade på Yandex.maps. I framtiden är det möjligt att lägga till olika funktioner, inklusive stöd för många användare, "beväpnad/beväpnad" status, tillståndet för fordonssystemen (tändning, strålkastare, etc.), och eventuellt även kontroll av fordonssystemen. Naturligtvis med lämpligt stöd för trackern, som smidigt förvandlas till ett fullfjädrat larmsystem.

Fälttester

Så här ser den sammansatta enheten ut utan fodral:


Efter att ha installerat strömomvandlaren och placerat den i fodralet från ett dött DSL-modem, ser systemet ut så här:

Jag lödde fast ledningarna och tog bort flera kontakter från Arduino-blocken. De ser ut så här:

Jag kopplade in 12V i bilen, körde runt Moskva och fick spåret:


Banan visar sig vara trasig. Anledningen är att det tar relativt lång tid att skicka data via GPRS och under denna tid läses inte koordinaterna. Detta är helt klart ett programmeringsfel. Den behandlas dels genom att omedelbart skicka ett paket med koordinater över tiden, dels genom att asynkront arbeta med GPRS-modulen.

Projektdiagram:

Hej vänner, vi har ett stort antal olika rymdfarkoster som flyger över våra huvuden. Bland dem finns cirka 90 extremt användbara navigationssatelliter från det amerikanska GPS-systemet, ryska GLONASS, europeiska Galileo och kinesiska BeiDou. Och idag kommer vi att fånga en signal från dem.

Först, en liten teori: Ett satellitnavigeringssystem är ett nätverk av rymdfarkoster som flyger längs tidigare kända rutter, noggrant observerar deras omloppsbana och bana, eller som är belägna vid en känd stationär punkt i en geostationär eller geosynkron bana. Satelliter flyger i genomsnitt på en höjd av cirka 20 tusen kilometer, och var och en är en ultraexakt atomklocka som kontinuerligt sänder sin tid till hela planeten. aktuell tid.

En radiosignal som sprider sig med ljusets hastighet når jorden med en fördröjning på 60 till 90 millisekunder, detta beror på satellitens avstånd. Genom att veta den exakta platsen för radiosignalkällan genom tidsfördröjningen av dess utbredning kan du ta reda på det exakta avståndet till satelliten. Och sedan, genom att triangulera avstånd till flera kända objekt, kan du ta reda på var du befinner dig i rymden.

Föreställ dig att den här blå bollen är vår planet. Tre satelliter flyger över den på en höjd av 20 tusen kilometer. När du mäter avståndet till den första får du information om att du befinner dig någonstans i den här cirkeln - för nu är detta inte särskilt informativt. Signalen från den andra satelliten kommer att klargöra din position till två skärningspunkter utan hänvisning till höjd. Signalen från den tredje navigationssatelliten kommer att indikera höjden på dessa punkter över ytan och formellt lösa navigationsekvationen, vilket reducerar din position till två möjliga platser. I verkligheten har en av dessa koordinater otroliga egenskaper och kasseras, vilket helt löser problemet. Signalen från den fjärde satelliten gör samma sak - den löser redan entydigt noggrant navigationsekvationen.

Att mäta avstånden till varje efterföljande satellit ökar positioneringsnoggrannheten och sträcker sig idag från 1 till 3 meter med standardsikt på cirka 10 navigationssatelliter.

Vi har sorterat teorin, låt oss gå vidare till praktiken. Numera säljs olika navigationsmoduler separat. De enklaste och äldsta stöder bara signaler från det amerikanska GPS-observationssystemet, i genomsnitt 5-7 satelliter. Mer avancerade moduler kan också ta emot signaler från den ryska GLONASS-konstellationen, vilket ökar det totala antalet observerade satelliter med i genomsnitt två gånger. Det finns även moduler till försäljning som kombineras med en kompass, de används för noggrann navigering och kursunderhåll.

Satelliterna från olika navigationssystem är synliga på skärmen på min telefon. Cirklarna är GPS, trianglarna är GLONASS och stjärnorna är kinesiska BeiDou. Så min telefon stöder tre olika navigationssystem och att kombinera signaler från dem, ökar noggrannheten för lokaliseringsbestämningen. Nu finns det 28 satelliter ovanför mitt huvud, och signalen är tillgänglig från endast 7. Det vill säga. min telefon vet redan i förväg var varje satellit är. Och den saknade signalen från 21 satelliter betyder att de är utom synfält. Navigationssignalen är mycket svag, från ordet VASCHE, den reflekteras nästan inte, den är blockerad av terrängen, byggnader, taket på en bil - vilken metall som helst ovanför huvudet eller på sidan. Även snö som faller utanför fönstret stör bra mottagning.

För att genomföra projektet behöver du ett antal elektroniska moduler: en programmerbar plattform Arduino Nano, en OLED-skärm 128 gånger 32 punkter (den är ansluten via I2C-bussen), en GPS-modul för anslutning via UART, ev. litiumbatteri med en kapacitet över 200 milliampere, en skyddande laddningsmodul för litium och en boost-omvandlare för att få 5 volt. Jag har tre olika typer här, vilken som helst kommer att göra. Jag planerade också att använda en färg RGB LED för att indikera status, men övergav detta allt eftersom projektet fortskred.

Vi ansluter skärmen till Arduino och stöter på den första svårigheten. Standardbibliotek OLED-skärmen tar upp 20 kB, vilket är 70 % av mikrokontrollerns minne och lämnar praktiskt taget inget utrymme för programmet. Tidigare höll jag på att montera en höjdmätare och ställdes inför det faktum att varje ny kodrad leder till minnesspill och mikrokontrollern fryser under drift. Därför kommer jag att använda mycket mer ljusbibliotek. Den fungerar inte med grafik och visar bara text på en OLED-skärm, och den tar bara upp 1 KB minne.

Jag kopplar separat GPS-modulen till brödbrädan och ser de första navigationsdata - en signal från rymden har fångats och bearbetats. Nu visar jag information på skärmen. Klass! Ser 4 satelliter, nu 3, och igen 4, redan 5! För bättre GPS-mottagning hänger modulen utanför fönstret på en vajer.

Under utvecklingen av projektet använde jag GPS-moduler olika typer. Enkel GPS och kombinerad GPS med Glonass. Vi var tvungna att genomföra en serie många timmar långa experiment för att kontrollera driftstabiliteten. Modulerna visade sig fungera, men med mjukvarubibliotek Jag var tvungen att pyssla. Provade flera olika bibliotek, och TinyGPS+ var den enda som fungerade med alla GPS-moduler på en gång.

I allmänhet analyserar biblioteket NMEA-protokollet; det analyserar helt enkelt data som GPS-modulen spottar ut två gånger per sekund. Så här ser en obearbetad dataström ut.

Som ett resultat låter min firmware dig ansluta nästan vilken GPS-modul som helst via UART med NMEA dataöverföringsprotokoll. Faktum är att det här är majoriteten av modulerna som har RX- och TX-stift. Jag rekommenderar att du tar GPS-modulen från Glonass, den ser fler satelliter, så dess noggrannhet är högre. Länkar till alla komponenter och moduler finns i beskrivningen av den här videon.

Breadboarden visade systemets fulla funktionalitet, nu kan du montera allt i hårdvara. Jag kommer att använda ett litiumbatteri som ström, det kommer att anslutas till skyddskortet med laddning. På detta kort ställer det nedre motståndet R3 in batteriets laddningsström, standard är 1 ampere, detta är mycket för små batterier, så motståndet måste bytas ut. På skärmen ser du en platta med resistorvärden för olika laddningsströmmar. Om ditt batteri har en kapacitet på 500 milliampetimmar, måste du ställa in laddningsströmmen inte högre än detta värde. De där. du kan ställa in 200 eller 300 milliampere och inte överstiga 500.

Därefter måste spänningen ökas, skärmen och GPS-modulen drivs med 5 volt. Vi kommer att göra detta med hjälp av en boostspänningsomvandlare. Dessa installeras vanligtvis i powerbanks för att höja spänningen från 3,7 till 5 volt. Jag kommer att använda den lilla gröna modulen, den kan mata ut upp till 300mA och är mer än tillräckligt för detta projekt.

Jag har uppdaterat firmware, nu när huvudskärmen laddas visar den aktuella exakta tiden från satelliter, antalet synliga satelliter och spårarens aktuella hastighet, den hoppar eftersom det finns ett fel vid bestämning av platsen. När du trycker på knappen ändras skärmen. Här visas aktuellt hastighetsvärde och maxvärde för observationsperioden. På en annan skärm finns det aktuella avståndet till nollpunkten, det maximala registrerade avståndet från den och vägmätaren.

Jag mäter storlekarna på alla moduler och försöker ordna dem så kompakt som möjligt. Men hur mycket jag än försökte passade den tunna skärmen inte in med den breda. GPS-mottagare ohm Därför bestämde jag mig för att ersätta skärmen med ytterligare en OLED 128x64 pixlar. Detta gör den mer ergonomisk och möjliggör en större knapp. OLED-skärmar är helt kompatibla och kräver minimal kodkorrigering, så firmware kommer att finnas tillgänglig för båda versionerna av enheten med en liten skärm och en stor.

Monteringsschemat är enkelt. Du måste ansluta skärmen till I2C-bussen, dessa är stift A4 och A5, gps-modulen är ansluten till programvarans seriella port på stift D3 och D4. Knapp på stift D7. Batteriström via skyddsmodul dra den till switchen, sedan till boost-omvandlaren och anslut Arduino till 5 volt.

För bekväm placering av komponenterna kommer jag att använda en grön brödbräda 7 gånger 3 centimeter. För att förhindra att skärmen hänger på kontakten installerar jag den på plaststativ med 5 mm distanser. Det kommer att finnas en GPS-mottagare mellan skärmen och knappen. På baksidan av kortet kommer det att finnas en Arduino-kontroller, ett batteri och ett skyddskort. Batteriet kommer att använda tunna litium 350 milliampere, om jag inte har fel så används dessa i elektroniska cigaretter, men som sagt, du kan använda vilket litiumbatteri som helst.

Jag mäter allt igen, mäter det och förbereder en design för huset för utskrift på en 3D-skrivare. Bokstavligen 15 minuter på TinkerCAD-webbplatsen och projektet är redo att skrivas ut. Jag överför filen till en flash-enhet, startar den och så kör vi. Utskriftstiden är cirka 40 minuter, detta är det första siktorganet för att prova placeringen av moduler.

Brädan och knappen passade på plats, men skärmen var bokstavligen en millimeter kort, och det inre stativet var i vägen. Och så passar allt och installeras på sin plats. Bra, jag redigerar projektet och skriver ut slutversion orange hölje. Efter avslutad utskrift måste du ge bordet tid att svalna och först då riva av delen, då blir framsidan slät och kommer inte att röra sig.

Jag bryter av och rengör plastens fästkant. Eftersom jag använde ABS-plast är det föremål för efterbearbetning med aceton. Jag applicerar den med en borste, skikten håller dessutom ihop, och kroppen blir starkare och får en glans.

Brädan passar perfekt inuti fodralet, fästena är i linje, knappen fastnar inte. I ena änden finns ett hål för Arduino Nano-kontakten, och på andra sidan för att ladda batteriet. Den visade sig vara lite smalare, så jag utökar den med en skalpell.

Laddplattan har utsprång längs kanterna, de hindrar kontakten från att fördjupas, så jag slipar ner dem med en nålfil. Nu är styrelsen väl på plats.

I allmän syn enheten kommer att se ut så här. Huset är placerat ovanpå. Under den kommer det att finnas en mikrobrytare, en breadboard med skärm, en GPS-modul och en knapp. Det finns också en step-up strömomvandlare på sidan.

Separat för strömbrytaren skar jag ett hål i fodralet med en skalpell, ovanför knappen. Det är försänkt i kroppen och kommer inte att störa.

Det är dags att löda. Jag löder den första kontakten på skärmen till kortet, prova den - allt är korrekt och du kan löda de återstående tre kontakterna. Nu knappen. Och se till att rensa bort flussmedlet med en borste. Jag löder fast ledningarna till batteriskyddsmodulen.

När du ansluter, var noga med att vara uppmärksam på färgen på ledningarna. Felaktiga färger kommer ibland från Kina. I det här fallet bestämde jag mig för att avlöda kontakten och löda ledningarna direkt för bättre kontakt. Proceduren är komplex och kräver precision och omsorg vid lödning. Dessutom fyller jag kontakterna med varmt lim, detta kommer att skydda spåren och tråden från att oavsiktligt dras ut. Och vi stoppar omedelbart in hela GPS-modulen i värmekrympning; detta är inte nödvändigt, men det kommer dessutom att skydda mot mekanisk skada och kortslutningar när de är monterade på en brödbräda.

Vi lindar även in boostomvandlaren i värmekrymp. För att fästa modulerna använder jag dubbelhäftande tejp. Vid installationen av brädan visade det sig att det inte fanns tillräckligt med utrymme för ledningarna, så jag borrade hål i mitten och satte igenom strömkablarna där.

För övrigt rekommenderar jag en cool sladdlös borrmaskin. Den drivs på ett enda 18650-batteri och gör att du snabbt kan borra liknande hål på brädor och i fodral. Tidigare, för sådant arbete, var jag tvungen att ta ut Dremel ur fodralet och koppla in den i ett eluttag, men nu har jag alltid denna borr till hands.

Den övre delen av brädan är monterad, ledningarna är gängade och nu måste du installera omkopplaren. För att göra detta biter vi av de extra benen på den, bara två behövs för att försörja och avbryta strömförsörjningen. Vi löder tråden på dem och värmekrymper som vanligt allt. Därefter kan du installera omkopplaren på sin plats och fylla den med varmt lim. Nu kommer det att vara bekvämt att slå på och av trackern.

Jag installerar brädet i höljet och fäster det med fyra små skruvar. Motsvarande hål finns redan på husstöden. När jag tog bort skyddsfilmen från skärmen märkte jag ett stort mellanrum mellan skärmen och kroppen. Därför tog jag en bit genomskinlig förpackning från lite elektronik och skar ut glas ur den för att passa storleken på fönstret. Och limmade den med aceton på plasten på fodralet.

Vi utför monteringen enligt schemat, det finns inga svårigheter eller nyanser här. Var bara uppmärksam, plus till plus, minus till minus. Vi ansluter omkopplaren direkt till utgången på laddningsmodulen. Detta kommer att stänga av hela strömkretsen och förhindra att batteriet laddas ur.

Efter lödning av alla ledningar till modulerna, täck bottenkortet med blått tejp. Arduino-kontrollern med laddning kommer att ligga på toppen, och utan isolering finns det möjlighet att kortsluta något.

Jag löder skyddsmodulen och fäster den på plats med varmt lim.

Jag pölar batterikontakterna och löder snabbt fast tråden till dem för att inte överhetta batteriet. Å ena sidan och å andra sidan. Efter detta måste du ansluta mikro USB kabel och mata ström till skyddsmodulen, kommer detta att aktivera dess funktion.

Klart, nu måste du ladda upp firmware. Vi kopplar Arduino till datorn, gå till projektsidan, en länk till den finns i videobeskrivningen. Ladda ner arkivet, packa upp filerna, installera biblioteken, öppna den erforderliga firmwareversionen för 32- eller 64-punktsskärmen och ladda in den i styrenheten. Allt fungerade första gången! Data från GPS-spö. Häftigt!

Jag installerar styrenheten på dess plats, sätter på den autonoma strömförsörjningen... iiiiiiiii... ingenting. Strömlampan på Arduino är på, men skärmen slås inte på. Och det var så tryndets hände, anledningen till vilken jag fortfarande inte vet. Det tog mig flera timmars arbete att få trackern att fungera autonomt från det inbyggda batteriet.

Först trodde jag att den lilla step-up-strömomvandlaren var boven. Men kontroll med multimeter visade stabila 5 volt. Därefter kopplade jag in en autonom kraftmodul som jag hade över från ett annat projekt, den är byggd på en stor boost-omvandlare - och se och häpna, trackern startade upp, men frös efter några sekunder.

Jag laddade batteriet på den och placerade spåraren på fönstret för att fånga satelliter. Tre minuter senare fick han en signal från fyra satelliter och bestämde platsen. Tja, det betyder att det fungerar och förmodligen kan monteras? Vi byter boost-omvandlare, tydligen låter den lilla mycket från strömförsörjningen.

För att göra detta var jag tvungen att ta isär trackern helt, löda upp alla kablar och sätta ihop den igen. Den nya kraftmodulen kommer att placeras på samma plats som den gamla, endast ett stativ behövde tas bort för att det skulle få plats under skärmen.

Det var allt, jag snodde ledningarna till pigtails för att undvika störningar. Aaand... den här jäveln tände inte igen. Mer exakt slog den på och frös omedelbart med artefakter på skärmen. Så många timmars arbete och allt för ingenting. Att byta ut omvandlaren hjälpte inte.

Jag försökte installera kondensatorer på strömförsörjningen - inget hjälpte. Trackern vägrade att arbeta självständigt, både från boost-omvandlare och från laboratoriets strömförsörjning - den frös eller slogs inte på alls. Men samtidigt fungerade det perfekt från Arduino USB-kontakten.

Med den sekventiella avstängningsmetoden kunde jag ta reda på att OLED-skärmen var skyldig till detta - men jag förstår fortfarande inte varför. Lösningen hittades plötsligt. Under nästa kontroll av den autonoma strömförsörjningen applicerade jag av misstag 5 volt på VIN-stiftet. Jag noterar att denna pin! Inte! designad för att ge 5 volt ström och kräver en spänning på 7 till 12 volt.

Men ändå startade spåraren omedelbart och började arbeta stabilt. De där. Det visar sig att den lilla stabilisatorn inte var källan till problemet, det var något annat.

Samtidigt bestämde jag mig för att kontrollera aktuell förbrukning. Från 5 volt förbrukade trackern cirka 70 milliampere. Och från 4 volt genom en boost-omvandlare visade det sig vara cirka 110 milliampere. Därmed kommer mitt lilla batteri på 350 milliamp att hålla i tre timmar Batteri-liv. Och jag har inte optimerat strömförsörjningen än, du kan stänga av lysdioderna som alltid är på och fortfarande spara batteriet.

Trackern började fungera helt stabilt, jag lämnade den på fönstret och efter några minuter fångade den 4 satelliter. Bra

Om du är intresserad av att hjälpa mig förstå orsaken till Arduinos konstiga beteende, så här är en introduktion:

1 – Trackern fungerar om den drivs via Arduino USB-kontakten.

2 – Trackern fryser och slås inte på om du driver den via Arduino 5V-stiftet genom att applicera 5 volt på den från valfri strömkälla.

3 – Trackern fryser och slås inte på om 7 volt eller mer appliceras på den genom Arduino VIN-stiftet.

4 – Trackern fungerar om den drivs med icke-standardiserade 5 volt genom samma VIN-stift.

Den färdiga enheten är en universell autonom hastighetsmätare, avståndsmätare, vägmätare och satellit exakt tidklocka i ett hus.

På huvudskärmen efter laddning visas aktuell tid och datum i Greenwich högst upp, den andra raden är den aktuella hastigheten på 0,3 kilometer i timmen och det maximala hastighetsvärdet som har registrerats sedan den slogs på - 26 kilometer i timmen. På den tredje raden är det aktuella avståndet till nollpunkten 530 meter och det maximala avståndet som uppnåtts sedan påslagning är 580 meter. På den fjärde raden visar vägmätaren 923 meter och antalet använda satelliter.

Den nedersta raden är mängden data som tas emot från GPS-modulen.

När du kort trycker på knappen ändras skärmvisningen och när du håller den länge kommer spåraren ihåg den aktuella platsen som en nollreferenspunkt för avståndsmätningar. Den andra skärmen visar aktuell och maximal hastighet. Den tredje skärmen innehåller information om avståndet till nollpunkten. Den fjärde skärmen är vägmätaren. Femte latitud och longitud.

Du kan återställa vägmätaren och maximala värden genom att trycka länge på knappen på skärmen med dessa parametrar. De där. gå till vägmätaren och håll ned knappen för att återställa den.

Låt oss gå vidare till att testa. Nu ser spåraren 12 satelliter. Jag ställer in den nuvarande nollpunkten och nollställer vägmätaren. Jag gör samma sak på en bilvägmätare. Efter att ha rest 1,2 kilometer enligt bilens hastighetsmätare såg jag samma 1205 meter på GPS-spåraren. Det aktuella avståndet till nollpunkten på en rak linje är 0,93 kilometer. Och enligt kartan, samma 930 meter, än så länge är allt korrekt.

Jag bestämde mig för att mäta ett längre avstånd. Återigen nollställde jag avläsningarna på spåraren och bilen. Efter att ha åkt 8,4 kilometer fann jag på trackern att avståndet var kortare - bara 7974 meter. I detta fall är det aktuella avståndet till nollpunkten 4 930 meter. Låt oss kolla det på kartan, det visar sig väldigt exakt, samma 4 930 meter. Det är inte klart, men varför ligger då vägmätaren på 400 meter och vilken vägmätare som ligger, på bilen eller GPS:en.

Okej, det är dags att skriva ut bakstycket och vi testar igen. Jag stänger. Vikten på den färdiga enheten visade sig vara 55 gram, mycket, men inte kritisk - i slutet kommer jag att visa dig hur du minskar den.

Jag kom till skridskobanan och bestämde mig för att mäta hockeyspelarens hastighet. Fan, han måste fortfarande ta av skydden för fart. Resultatet var en hård hastighet, som en "rysk raket" - 5 kilometer i timmen. Jag gick, och allt för att taket på skridskobanan är isolerat med reflexfolie för att hålla kylan ute. Det finns en signal från satelliter, men den är inte korrekt.

Låt oss göra ett sista test med mobiltelefon. Telefonen ser 7 satelliter, och spåraren 9. Jag börjar logga och återställer vägmätaren på spåraren. Tja... låt oss gå. Efter tre kilometers körning visade telefonen och spåraren identiska värden på vägmätaren. 3017 kontra 3021 meter är ett superresultat, jag förväntade mig inte en sådan noggrannhet.

Men vägmätaren glapp, så mycket som 12 tusen kilometer. Inte surt. Tidigare, när jag felsökte ett program, hade jag redan stött på ett sådant fel och spåraren flyttades omedelbart 7 tusen kilometer. När jag kom hem skapade jag en punkt i Google med noll latitud och longitud. Det visade sig att det ligger i Atlanten, inte långt från Ghanas kust. Efter att ha mätt avståndet från den till min plats fick jag samma 7 tusen kilometer. Det visar sig att GPS-modulen ibland hoppar över nollor längs koordinaterna. Detta kan enkelt fixas genom att bara lägga till ett villkor i programkoden. Och detta fel observerades inte under tester.

Jag tycker att trackern blev fantastisk; detta är min första erfarenhet av att arbeta direkt med GPS-moduler. Varför behövs det? En sådan tracker kan fungera som en autonom hastighetsmätare eller en oberoende vägmätare. Den kan placeras på en cykel, bil, leksak eller quadcopter. Det låter dig också mäta avståndet i en rak linje till en given punkt, nollvärden lagras i icke-flyktigt minne. Kommer ihåg de maximalt uppnådda hastighets- och avståndsvärdena. Den gör allt detta självständigt och är inte beroende av någon annan än satelliter. Och naturligtvis är detta en korrekt tidklocka. Jag behöver den för att mäta maximal hastighet och maximalt avstånd från föremål. Det stämmer, du måste lägga till mer höjd på skärmen för att mäta hur högt du stiger!

Låt oss prata om hur du kan minska vikten; det enklaste sättet att göra detta är genom att montera trackern på en plattform Arduino Pro Mini på 3,3 volt. Då behöver du ingen boost-omvandlare, istället blir det en liten linjär stubb på 3,3 volt, GPS-modulen fungerar utan problem på denna spänning, och på skärmen måste du kringgå effektstabilisatorn.

Tja, jag kommer omedelbart att svara på frågan: är det möjligt att lägga till en GSM-modul och styra spåraren via SMS? Jo det kan du. För att göra detta, utöver själva modulen, måste du också lägga till bearbetning av SMS-kommandon till programkoden och detta bör vara ett separat projekt.

Det var allt för idag, om du gillade den här videon så är jag säker på att du kommer att gilla den och dela länken till videon med dina vänner.

Tack för att du tittade, lycka till alla och vi ses i nya videor! Hejdå!

Uppgifterna sparas i ett kalkylblad dataGPS.csv, vars format motsvarar tjänstens krav Google Mina kartor.

    Programmeringsspråk: Arduino (C++)

Videoinstruktion

Vad du behöver

Hur man monterar

gps-tracker.ino // bibliotek för att arbeta med enheter via SPI#omfatta // bibliotek för att arbeta med SD-kort#omfatta // bibliotek för att arbeta med en GPS-enhet#omfatta // skapa ett objekt av GPS-klassen och skicka Serial1-objektet till det GPS gps(Serial1); // LED-stift#define LED_PIN A0 // knappstift #define BUTTON_PIN 13 // pin CS micro-sd-kort#define CHIP_SELECT_PIN 9 // tidsintervall för att skriva data till kortet#define INTERVAL 5000 // ställ in arraystorleken för tid, datum, latitud och longitud#define MAX_SIZE_MASS 16 // array för att lagra aktuell tid char time[MAX_SIZE_MASS]; // rekordstatus bool stateRec = false ; // kommer ihåg den aktuella tiden lång startMillis = millis() ; void setup() ( // öppna serieporten för att övervaka åtgärder i programmet Serial.begin(115200); // vänta tills monitorn öppnas serieport // för att spåra alla händelser i programmet// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // öppna en seriell anslutning med GPS-modulen Serial1.begin(115200); // ställ in lysdioden på utgångsläge pinMode(LED_PIN, OUTPUT) ; // ställ in knappen till inloggningsläge pinMode(BUTTON_PIN, INPUT_PULLUP) ; // matar ut information om initiering till serieporten Serial.println("Initierar SD-kort...") ; // initiera SD-kortet while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kortet misslyckades eller finns inte") ; delay(1000 ) ; ) // matar ut information till serieporten Serial.println("Kort initialiserat"); // skapa ett dataFile-objekt av klassen File för att arbeta med filer File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // om filen finns if (datafil) ( // skriv namnet på framtida data till minneskortet dataFile.println("Tid, Koordinater, Hastighet" ); // stäng filen dataFile.close(); Serial.println("Spara OK"); ) else ( Serial.println ("Fel vid öppning av test.csv") ; ) ) void loop() ( // Spela in knapptryckningen if (! digitalRead(BUTTON_PIN) ) ( // ändra tillståndet "inspelning" / "skriver inte" till minneskortet stateRec = ! stateRec; // ändra statusen för indikeringslampan digitalWrite(LED_PIN, stateRec) ; ) // om data kom från GPS-modulen if (gps.available()) ( // läs data och analysera gps.readParsing(); // kontrollera GPS-modulens status switch (gps.getState () ) ( // allt är OK fall GPS_OK: Serial.println ("GPS är OK" ) ; // om det angivna tidsintervallet har passerat if (millis() - startMillis > INTERVAL && stateRec) ( // spara data på minneskort saveSD() ; // kom ihåg den aktuella tiden startMillis = millis() ; ) ha sönder ; // datafelfall GPS_ERROR_DATA: Serial.println("GPS feldata" ); ha sönder ; // ingen koppling till satelliter fall GPS_ERROR_SAT: Serial.println ( "GPS ingen anslutning till satelliter"); ha sönder ; ) ) ) // funktion för att spara data på ett minneskort void saveSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // om filen finns och har öppnats if (datafil) ( // läser den aktuella tiden gps.getTime(tid, MAX_SIZE_MASS); // skriv tiden till minneskortet dataFile.print(" \" " ); dataFile.print(tid); dataFile.print(" \" " ); dataFile.print ("," ); dataFile.print(" \" " ) ; // läs och skriv latitud- och longitudkoordinater till minneskortet 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("Spara OK"); ) else ( Serial.println ("Fel vid öppning av test.csv") ; ) )