Az adatok adatGPS.csv táblázatban kerülnek mentésre, melynek formátuma megfelel a szolgáltatás követelményeinek Google Saját térképek.

    Programozási nyelv: Arduino (C++)

Videós utasítás

Amire szükséged van

Hogyan kell összeszerelni

gps-tracker.ino // könyvtár az SPI-n keresztüli eszközökkel való munkavégzéshez#beleértve // könyvtár az SD-kártyával való munkavégzéshez#beleértve // könyvtár a GPS-eszközzel való munkavégzéshez#beleértve // hozzon létre egy objektumot a GPS osztályból, és adja át neki a Serial1 objektumot GPS gps (Serial1) ; // LED tű#define LED_PIN A0 // gombtüske #define BUTTON_PIN 13 // pin CS micro-sd kártya#define CHIP_SELECT_PIN 9 // időintervallum az adatok kártyára írásához#define INTERVAL 5000 // állítsa be a tömb méretét az időhöz, dátumhoz, szélességhez és hosszúsághoz#define MAX_SIZE_MASS 16 // tömb az aktuális idő tárolásához char time[MAX_SIZE_MASS]; // rekord állapot bool stateRec = false ; // emlékszik az aktuális időre long startMillis = millis() ; void setup() ( // a soros port megnyitása a programban végzett műveletek figyeléséhez Serial.begin(115200); // várja meg, amíg a soros port monitor megnyílik // a program összes eseményének nyomon követéséhez// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // soros kapcsolat megnyitása a GPS-modullal Serial1.begin(115200); // állítsa a LED-et kimeneti módba pinMode(LED_PIN, OUTPUT) ; // állítsa be a gombot bejelentkezési módba pinMode(BUTTON_PIN, INPUT_PULLUP) ; // az inicializálással kapcsolatos információkat ad ki a soros portra Serial.println("SD-kártya inicializálása...") ; // inicializálja az SD-kártyát while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("A kártya meghiúsult, vagy nincs jelen" ) ; delay(1000 ) ; ) // információkat ad ki a soros portra Serial.println("A kártya inicializálva"); // hozzon létre egy dataFile objektumot a File osztályból a fájlokkal való munkához Fájl dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ha a fájl létezik if (adatfájl) ( // írja be a memóriakártyára a jövőbeli adatok nevét dataFile.println("Idő, koordináták, sebesség"); // zárja be a fájlt dataFile.close(); Serial.println("Mentés OK"); ) else ( Serial.println ("Hiba a teszt.csv megnyitásakor" ) ; ) ) void loop() ( // Rögzítse a gombnyomást if (! digitalRead(BUTTON_PIN) ) ( // módosítsa a „rögzítés” / „nem ír” állapotot a memóriakártyára stateRec = ! stateRec; // a jelző LED állapotának módosítása digitalWrite(LED_PIN, állapotRec) ; ) // ha a GPS-modulból érkeztek adatok if (gps.available()) ( // adatok olvasása és elemzése gps.readParsing(); // a GPS-modul állapotának ellenőrzése switch (gps.getState () ) ( // minden rendben van eset GPS_OK: Serial.println ("GPS rendben van" ) ; // ha a megadott időintervallum letelt if (millis() - startMillis > INTERVAL && stateRec) ( // adatok mentése memóriakártyára saveSD() ; // emlékszik az aktuális időre startMillis = millis() ; ) szünet ; // adathiba eset GPS_ERROR_DATA: Serial.println ("GPS hibaadatok" ) ; szünet ; // nincs kapcsolat a műholdakkal eset GPS_ERROR_SAT: Serial.println ( "GPS nem csatlakozik műholdakhoz") ; szünet ; ) ) ) // funkció az adatok memóriakártyára mentéséhez void saveSD() ( Fájl dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ha a fájl létezik és meg van nyitva if (adatfájl) ( // beolvassa az aktuális időt gps.getTime(idő, MAX_SIZE_MASS); // írja be az időt a memóriakártyára dataFile.print(" \" " ) ; dataFile.print(time); dataFile.print(" \" " ) ; dataFile.print ("," ) ; dataFile.print(" \" " ) ; // szélességi és hosszúsági koordináták beolvasása és írása a memóriakártyára 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("Mentés OK"); ) else ( Serial.println ( "Hiba a teszt.csv megnyitásakor" ) ; ) )

A GPS globális helymeghatározó rendszer már életünk részévé vált. Ma már nehéz elképzelni egy mobiltelefont beépített GPS-modul nélkül. Ez a műholdas navigációs rendszer lehetővé teszi az objektumok nyomon követését, azok koordinátáinak és mozgási sebességének meghatározását. A GPS immár nem csak a megfelelő berendezéseket fejlesztő cégek számára elérhető, hanem a közönséges rádióamatőrök számára is, akik már teljes mértékben kihasználják a népszerű Arduino táblákat. Ez az anyag egy miniatűr GPS-követő Arduino Pro Mini kártyához való csatlakoztatását tárgyalja. A PG03 MiniGPS nyomkövetőt tesztalanyként használják.



Ez a nyomkövető a közvetlen földrajzi koordinátákon kívül mutatja a mozgás irányát, a megtett távolságot és a mozgás sebességét. Sajnos nem rögzít információkat, így az Arduino-hoz csatlakoztatva hozzáférhetsz ezekhez az adatokhoz, és azt csinálhatsz vele, amit csak akarsz.


Először is szét kell szerelni a nyomkövetőt. Az alábbiakban egy szétszerelt GPS nyomkövető képei láthatók.




A nyomkövető szíve a Venus638FLP GPS chip. 44. érintkezője az UART interfész (TxD) kimenete. Forraszthat egy vezetéket közvetlenül ehhez a tűhöz, vagy találhat egy tesztcsapot a táblán, amelyhez ez a tű is csatlakoztatva van. Az alábbiakban képek láthatók a mikroáramkör érintkezőinek helyéről és a kívánt érintkezőhöz való csatlakozásról.





Most vegyünk egy kompakt Arduino Pro Mini kártyát és egy SD-kártya modult az NMEA protokoll adatok rögzítéséhez. Az Arduino Pro Mini és az SD kártya modul csatlakozási rajza a következő:



Csatlakozó modul érintkezők SD kártyákhoz:


GND a GND
VCC 3,3V-ra
MISO a 12. tűhöz
MOSI a 11. tűhöz
SCK a 13. tűhöz
CS a 10. tűhöz

A GPS nyomkövető érintkezőinek csatlakoztatása:


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

Jobb, ha a GPS nyomkövetőről vesz áramot (3,7 V). Akkumulátora alacsony energiakapacitása miatt célszerű külső akkumulátort csatlakoztatni, például egy 1400 mAh-s mobiltelefonhoz, amint az az egyik fenti képen látható.


Most le kell töltenie a TinyGPS könyvtárat, szükség lesz egy könyvtárra az SD-kártyákkal való munkavégzéshez és a SoftwareSerial könyvtárra is, amely az Arduino\libraries-ben található.



A következő kódrészletben kiválaszthatja, hogy milyen adatokat írjon:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Szél, Long float fkmph = gps.f_speed_kmph(); // Sebesség km/h-ban float falt = gps.f_altitude(); // +/- magasság méterben (valójában magasságban) float fc = gps.f_course( // Kurzus unsigned long age (&flat, &flon, &age); " lon "); Serial.print(" kms " .print(" elevation "); //// /////////////////////////////////////////////// ////////////////

Töltsd fel a vázlatot az Arduino-ba, helyezz be egy FAT32 szerint formázott SD-kártyát, amelynek a gyökérben van egy log.txt fájl. Indítsa el a Serial Monitor alkalmazást, és látni fogja, hogy az adatok az SD-kártyára íródnak.



Számos Arduino-kísérlet után úgy döntöttem, hogy készítek egy egyszerű és nem túl drága GPS-követőt, amely GPRS-en keresztül küldi el a koordinátákat a szervernek.
Használt Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modul (információ küldésére a szervernek), GPS vevő SKM53 GPS.

Mindent az ebay.com-on vásároltak, összesen körülbelül 1500 rubelért (körülbelül 500 rubelt az arduino, egy kicsit kevesebb a GSM modul, egy kicsit több a GPS).

GPS vevő

Először meg kell értened, hogyan kell dolgozni a GPS-szel. A kiválasztott modul az egyik legolcsóbb és legegyszerűbb. A gyártó azonban akkumulátort ígér a műholdadatok mentésére. Az adatlap szerint a hidegindítás 36 másodpercig tart, de az én körülményeim között (10. emelet az ablakpárkányról, nincs a közelben épület) akár 20 percet is igénybe vett. A következő kezdés viszont már 2 perc.

Az Arduino-hoz csatlakoztatott eszközök fontos paramétere az energiafogyasztás. Ha túlterheli az Arduino konvertert, kiéghet. A használt vevő esetében a maximális energiafogyasztás 45 mA @ 3,3 V. Számomra rejtély, hogy a specifikációnak miért kell feltüntetnie az áramerősséget a szükségestől eltérő feszültség mellett (5 V). Az Arduino konverter azonban ellenáll a 45 mA-nek.

Kapcsolat
A GPS nem vezérelhető, bár van rajta RX tű. Hogy milyen célból, nem ismert. A legfontosabb, amit ezzel a vevővel tehet, az az, hogy az NMEA protokollon keresztül adatokat olvas ki a TX lábról. Szintek - 5 V, csak Arduinohoz, sebesség - 9600 baud. Csatlakozom a VIN-t az arduino VCC-jéhez, a GND-t a GND-hez, a TX-et a megfelelő soros RX-hez. Először manuálisan olvastam ki az adatokat, majd a TinyGPS könyvtár segítségével. Meglepő módon minden olvasható. Miután átváltottam az Uno-ra, a SoftwareSerial-t kellett használnom, és akkor kezdődtek a problémák – az üzenet néhány karaktere elveszett. Ez nem túl kritikus, hiszen a TinyGPS levágja az érvénytelen üzeneteket, de elég kellemetlen: az 1 Hz-es frekvenciát elfelejthetjük.

Egy gyors megjegyzés a SoftwareSerial-ról: az Uno-n nincs hardverport (az USB soros porton kívül), ezért szoftvert kell használnia. Tehát csak olyan tűn tud adatokat fogadni, amelyen a kártya támogatja a megszakításokat. Az Uno esetében ez 2 és 3. Ráadásul egyszerre csak egy ilyen port fogadhat adatokat.

Így néz ki a „próbapad”.

GSM vevő/adó


Most jön az érdekesebb rész. GSM modul - SIM900. Támogatja a GSM-et és a GPRS-t. Sem az EDGE, sem különösen a 3G nem támogatott. A koordináta adatok továbbítására ez valószínűleg jó - nem lesz késés vagy probléma az üzemmódok közötti váltásnál, ráadásul a GPRS már szinte mindenhol elérhető. Néhány bonyolultabb alkalmazáshoz azonban ez nem elég.

Kapcsolat
A modul vezérlése szintén a soros porton keresztül történik, azonos szinten - 5V. És itt szükségünk lesz RX-re és TX-re is. A modul pajzs, vagyis az Arduino-ra van telepítve. Sőt, mega és uno kompatibilis is. Az alapértelmezett sebesség 115200.

A Megán szereljük össze, és itt vár ránk az első kellemetlen meglepetés: a modul TX tűje a Mega 7. tűjére esik. A mega 7. érintkezőjén nem érhetők el megszakítások, ami azt jelenti, hogy a 7. érintkezőt mondjuk a 6. érintkezőhöz kell csatlakoztatni, amelyen megszakítások lehetségesek. Így elpazarolunk egy Arduino tűt. Nos, egy mega számára ez nem túl ijesztő - elvégre van elég tű. De Uno esetében ez már bonyolultabb (emlékeztem arra, hogy csak 2 érintkező támogatja a megszakításokat - 2 és 3). A probléma megoldásaként azt javasolhatjuk, hogy ne telepítse a modult az Arduino-ra, hanem csatlakoztassa vezetékekkel. Ezután használhatja a Serial1-et.

Csatlakozás után megpróbálunk „beszélni” a modullal (ne felejtsük el bekapcsolni). Kiválasztjuk a port sebességét - 115200, és jó, ha az összes beépített soros port (4 mega-n, 1 uno-n) és minden szoftveres port azonos sebességgel működik. Így stabilabb adatátvitelt érhet el. Nem tudom miért, bár sejthetem.

Tehát primitív kódot írunk a soros portok közötti adattovábbításhoz, Atz-t küldünk, és válaszul csendet kapunk. Mi történt? Ó, kis- és nagybetűérzékeny. ATZ, jól vagyunk. Hurrá, a modul hall minket. Fel kell hívnia minket kíváncsiságból? ATD +7499... Csörög a vezetékes, füst jön az arduinóból, a laptop kikapcsol. Kiégett az Arduino konverter. Rossz ötlet volt 19 V-ról betáplálni, bár azt írják, hogy 6-20V-ig tud működni, 7-12V-ot ajánlanak. A GSM modul adatlapja sehol nem ír a terhelés alatti energiafogyasztásról. Nos, a Mega az alkatrészraktárba megy. Lélegzet-visszafojtva kapcsolom be a laptopot, ami +19V-ot kapott a +5V vonalon keresztül USB-ről. Működik, és még az USB sem égett ki. Köszönjük a Lenovonak, hogy megvédett minket.

Miután kiégett a konverter, megnéztem az áramfelvételt. Tehát csúcs - 2A, tipikus - 0,5A. Ez egyértelműen meghaladja az Arduino konverter képességeit. Külön táplálékot igényel.

Programozás
A modul széles körű adatátviteli lehetőségeket biztosít. Kezdve a hanghívásokkal és SMS-ekkel, és magával a GPRS-sel végződve. Sőt, az utóbbi esetében lehetőség van egy HTTP kérés végrehajtására AT parancsokkal. Többet is el kell küldened, de megéri: nem igazán akarsz manuálisan kérést létrehozni. Van néhány árnyalat az adatátviteli csatorna GPRS-en keresztüli megnyitásakor – emlékszel a klasszikus AT+CGDCONT=1, „IP”, „apn” kifejezésre? Tehát itt is ugyanerre van szükség, csak egy kicsit ravaszabb.

Ha egy adott URL-címen szeretne oldalt elérni, a következő parancsokat kell elküldenie:
AT+SAPBR=1,1 //Nyílt szolgáltató (vivő) AT+SAPBR=3,1"CONTYPE","GPRS" //kapcsolat típusa - GPRS AT+SAPBR=3,1"APN","internet" //APN, Megafonhoz - internet AT+HTTPINIT //HTTP inicializálása AT+HTTPPARA="CID",1 //A használandó szolgáltató azonosítója. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //A tényleges URL a sprintf után AT+HTTPACTION=0 koordinátákkal // Adatkérés a GET metódussal //várja a választ AT+HTTPTERM //HTTP leállítása

Ennek eredményeként, ha van kapcsolat, választ kapunk a szervertől. Vagyis valójában már tudjuk, hogyan kell koordinátaadatokat küldeni, ha a szerver GET-en keresztül kapja azokat.

Táplálás
Mivel a GSM modul áramellátása Arduino konverterről, mint rájöttem, rossz ötlet, ezért úgy döntöttek, hogy veszek egy 12v->5v, 3A konvertert ugyanazon az ebay-en. A modul azonban nem szereti az 5V-os tápellátást. Menjünk egy hackelésre: csatlakoztassunk 5V-ot arra a pinre, ahonnan 5V jön az arduino-ból. Ekkor a modul beépített átalakítója (sokkal erősebb, mint az Arduino konverter, a MIC 29302WU) 5V-ról készíti el azt, amire a modulnak szüksége van.

szerver

A szerver írt egy primitívet - koordinátákat tárolva és rajzolva a Yandex.maps-on. A jövőben lehetőség nyílik különféle funkciók hozzáadására, beleértve a sok felhasználó támogatását, az „élesített/élesítetlen” állapotot, a járműrendszerek állapotát (gyújtás, fényszórók stb.), sőt, esetleg a járműrendszerek vezérlését is. Természetesen a nyomkövető megfelelő támogatásával, amely simán teljes értékű riasztórendszerré alakul.

Terepi tesztek

Így néz ki az összeszerelt készülék, tok nélkül:

A tápátalakító beszerelése és a tokba helyezés után egy halott DSL modemből a rendszer így néz ki:

Leforrasztottam a vezetékeket, és eltávolítottam néhány érintkezőt az Arduino blokkokról. Így néznek ki:

Bekötöttem a 12V-ot az autóba, körbejártam Moszkvát, és megkaptam a pályát:


A pályapontok elég messze vannak egymástól. Ennek az az oka, hogy a GPRS-en keresztüli adatküldés viszonylag hosszú ideig tart, és ezalatt a koordináták nem kerülnek beolvasásra. Ez egyértelműen programozási hiba. Ezt egyrészt úgy kezelik, hogy azonnal elküldik egy koordinátacsomagot az idő múlásával, másrészt a GPRS-modullal történő aszinkron munkavégzéssel.

A műholdak keresési ideje egy autó utasülésében néhány perc.

következtetéseket

GPS-követő létrehozása Arduino-n saját kezűleg lehetséges, bár nem triviális feladat. A fő kérdés most az, hogy hogyan lehet elrejteni az eszközt az autóban, hogy ne legyen kitéve káros tényezőknek (víz, hőmérséklet), ne legyen fém fedve (a GPS és a GPRS árnyékolt lesz), és ne legyen különösebben észrevehető. Egyelőre csak a kabinban fekszik, és a szivargyújtó aljzathoz csatlakozik.

Nos, a kódot is javítanunk kell a simább pálya érdekében, bár a tracker már elvégzi a fő feladatot.

Használt eszközök

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 alapú GSM/GPRS Shield
  • DC-DC 12v->5v 3A konverter

Számos Arduino-kísérlet után úgy döntöttem, hogy készítek egy egyszerű és nem túl drága GPS-követőt, amely GPRS-en keresztül küldi el a koordinátákat a szervernek.
Használt Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modul (információ küldésére a szervernek), GPS vevő SKM53 GPS.

Mindent az ebay.com-on vásároltak, összesen körülbelül 1500 rubelért (körülbelül 500 rubelt az arduino, egy kicsit kevesebb a GSM modul, egy kicsit több a GPS).

GPS vevő

Először meg kell értened, hogyan kell dolgozni a GPS-szel. A kiválasztott modul az egyik legolcsóbb és legegyszerűbb. A gyártó azonban akkumulátort ígér a műholdadatok mentésére. Az adatlap szerint a hidegindítás 36 másodpercig tart, de az én körülményeim között (10. emelet az ablakpárkányról, nincs a közelben épület) akár 20 percet is igénybe vett. A következő kezdés viszont már 2 perc.

Az Arduino-hoz csatlakoztatott eszközök fontos paramétere az energiafogyasztás. Ha túlterheli az Arduino konvertert, kiéghet. A használt vevő esetében a maximális energiafogyasztás 45 mA @ 3,3 V. Számomra rejtély, hogy a specifikáció miért jelezze az áramerősséget az előírttól eltérő feszültségen (5 V). Az Arduino konverter azonban ellenáll a 45 mA-nek.

Kapcsolat

A GPS nem vezérelhető, bár van rajta RX tű. Hogy milyen célból, nem ismert. A fő dolog, amit ezzel a vevővel tehet, az az, hogy az NMEA protokollon keresztül adatokat olvasson a TX lábról. Szintek - 5 V, csak Arduinohoz, sebesség - 9600 baud. Csatlakozom a VIN-t az arduino VCC-jéhez, a GND-t a GND-hez, a TX-et a megfelelő soros RX-hez. Először manuálisan olvastam ki az adatokat, majd a TinyGPS könyvtár segítségével. Meglepő módon minden olvasható. Miután átváltottam az Uno-ra, a SoftwareSerial-t kellett használnom, és ekkor kezdődtek a problémák – az üzenet néhány karaktere elveszett. Ez nem túl kritikus, hiszen a TinyGPS levágja az érvénytelen üzeneteket, de elég kellemetlen: az 1 Hz-es frekvenciát elfelejthetjük.

Egy gyors megjegyzés a SoftwareSerial-ról: az Uno-n nincsenek hardverportok, ezért szoftveres portot kell használnia. Tehát csak olyan tűn tud adatokat fogadni, amelyen a kártya támogatja a megszakításokat. Az Uno esetében ez 2 és 3. Ráadásul egyszerre csak egy ilyen port fogadhat adatokat.

Így néz ki a „próbapad”.


GSM vevő/adó


Most jön az érdekesebb rész. GSM modul - SIM900. Támogatja a GSM-et és a GPRS-t. Sem az EDGE, sem különösen a 3G nem támogatott. A koordináta adatok továbbítására ez valószínűleg jó - nem lesz késés vagy probléma az üzemmódok közötti váltásnál, ráadásul a GPRS már szinte mindenhol elérhető. Néhány bonyolultabb alkalmazáshoz azonban ez nem elég.

Kapcsolat

A modul vezérlése szintén a soros porton keresztül történik, azonos szinten - 5V. És itt szükségünk lesz RX-re és TX-re is. A modul pajzs, vagyis az Arduino-ra van telepítve. Sőt, mega és uno kompatibilis is. Az alapértelmezett sebesség 115200.

A Megán szereljük össze, és itt vár ránk az első kellemetlen meglepetés: a modul TX tűje a Mega 7. tűjére esik. A mega 7. érintkezőjén nem érhetők el megszakítások, ami azt jelenti, hogy a 7. érintkezőt mondjuk a 6. érintkezőhöz kell csatlakoztatni, amelyen megszakítások lehetségesek. Így elpazarolunk egy Arduino tűt. Nos, egy mega számára ez nem túl ijesztő - elvégre van elég tű. De Uno esetében ez már bonyolultabb (emlékeztem arra, hogy csak 2 érintkező támogatja a megszakításokat - 2 és 3). A probléma megoldásaként azt javasolhatjuk, hogy ne telepítse a modult az Arduino-ra, hanem csatlakoztassa vezetékekkel. Ezután használhatja a Serial1-et.

Csatlakozás után megpróbálunk „beszélni” a modullal (ne felejtsük el bekapcsolni). Kiválasztjuk a port sebességét - 115200, és jó, ha az összes beépített soros port (4 mega-n, 1 uno-n) és minden szoftveres port azonos sebességgel működik. Így stabilabb adatátvitelt érhet el. Nem tudom miért, bár sejthetem.

Tehát primitív kódot írunk a soros portok közötti adattovábbításhoz, Atz-t küldünk, és válaszul csendet kapunk. Mi történt? Ó, kis- és nagybetűérzékeny. ATZ, jól vagyunk. Hurrá, a modul hall minket. Fel kell hívnia minket kíváncsiságból? ATD +7499... Csörög a vezetékes, füst jön az arduinóból, a laptop kikapcsol. Kiégett az Arduino konverter. Rossz ötlet volt 19 V-ról betáplálni, bár azt írják, hogy 6-20V-ig tud működni, 7-12V-ot ajánlanak. A GSM modul adatlapja sehol nem ír a terhelés alatti energiafogyasztásról. Nos, a Mega az alkatrészraktárba megy. Lélegzet-visszafojtva kapcsolom be a laptopot, ami +19V-ot kapott a +5V vonalon keresztül USB-ről. Működik, és még az USB sem égett ki. Köszönjük a Lenovonak, hogy megvédett minket.


Miután kiégett a konverter, megnéztem az áramfelvételt. Tehát csúcs - 2A, tipikus - 0,5A. Ez egyértelműen meghaladja az Arduino konverter képességeit. Külön táplálékot igényel.

Programozás

A modul széles körű adatátviteli lehetőségeket biztosít. Kezdve a hanghívásokkal és SMS-ekkel, és magával a GPRS-sel végződve. Sőt, az utóbbi esetében lehetőség van egy HTTP kérés végrehajtására AT parancsokkal. Többet is el kell küldened, de megéri: nem igazán akarsz manuálisan kérést létrehozni. Van néhány árnyalat az adatátviteli csatorna GPRS-en keresztüli megnyitásakor – emlékszel a klasszikus AT+CGDCONT=1, „IP”, „apn” kifejezésre? Tehát itt is ugyanerre van szükség, csak egy kicsit ravaszabb.

Ha egy adott URL-címen szeretne oldalt elérni, a következő parancsokat kell elküldenie:

AT+SAPBR=1,1 //Nyílt szolgáltató (vivő) AT+SAPBR=3,1"CONTYPE","GPRS" //kapcsolat típusa - GPRS AT+SAPBR=3,1"APN","internet" //APN, Megafonhoz - internet AT+HTTPINIT //HTTP inicializálása AT+HTTPPARA="CID",1 //Carrier ID használni. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //A tényleges URL a sprintf után AT+HTTPACTION=0 koordinátákkal // Adatkérés a GET metódussal //várja a választ AT+HTTPTERM //HTTP leállítása

Ennek eredményeként, ha van kapcsolat, választ kapunk a szervertől. Vagyis valójában már tudjuk, hogyan kell koordinátaadatokat küldeni, ha a szerver GET-en keresztül kapja azokat.

Táplálás

Mivel a GSM modul áramellátása Arduino konverterről, mint rájöttem, rossz ötlet, ezért úgy döntöttek, hogy veszek egy 12v->5v, 3A konvertert ugyanazon az ebay-en. A modul azonban nem szereti az 5V-os tápellátást. Hackeljünk: csatlakoztassunk 5V-ot arra a tűre, ahonnan 5V jön az Arduino-ból. Ekkor a modul beépített átalakítója (sokkal erősebb, mint az Arduino konverter, a MIC 29302WU) 5V-ról készíti el azt, amire a modulnak szüksége van.

szerver

A szerver írt egy primitívet - koordinátákat tárolva és rajzolva a Yandex.maps-on. A jövőben lehetőség nyílik különféle funkciók hozzáadására, beleértve a sok felhasználó támogatását, az „élesített/élesítetlen” állapotot, az autórendszerek állapotát (gyújtás, fényszórók stb.), sőt, esetleg az autórendszerek vezérlését is. Természetesen a nyomkövető megfelelő támogatásával, amely simán teljes értékű riasztórendszerré alakul.

Terepi tesztek

Így néz ki az összeszerelt készülék, tok nélkül:


A tápátalakító beszerelése és a tokba helyezés után egy halott DSL modemből a rendszer így néz ki:

Leforrasztottam a vezetékeket, és eltávolítottam néhány érintkezőt az Arduino blokkokról. Így néznek ki:

Bekötöttem a 12V-ot az autóba, körbejártam Moszkvát, és megkaptam a pályát:


A pálya szakadtnak bizonyul. Ennek az az oka, hogy a GPRS-en keresztüli adatküldés viszonylag hosszú ideig tart, és ezalatt a koordináták nem kerülnek beolvasásra. Ez egyértelműen programozási hiba. Ezt egyrészt úgy kezelik, hogy azonnal elküldik egy koordinátacsomagot az idő múlásával, másrészt pedig a GPRS-modullal való aszinkron munkával.

Személyi GPS adók

Manapság a fejlődés olyan ütemben halad, hogy a korábban terjedelmes, drágák és rendkívül specializált eszközök gyorsan veszítenek méretükből, súlyukból és árából, de számos új funkciót kapnak.

Így jutottak el a GPS-technológiára épülő eszközök a zsebkütyükhöz, és ott szilárdan megtelepedtek, új lehetőségeket adva az embereknek. Külön érdemes kiemelni az egyes GPS-adókat.

Lényegében ugyanazok a GPS nyomkövetők, csak nem járműben való használatra tervezték, hanem egy személy a mindennapi életben.

Modelltől függően több különböző készülék is kombinálható egy házban. A legegyszerűbb formájában egyszerűen egy kijelző nélküli kis doboz, ami lehetővé teszi a gyermekek, állatok vagy más tárgyak mozgásának vezérlését, amelyen rögzítve van.

Belül egy földi koordinátákat meghatározó GPS-modul, egy információt továbbító és vezérlőparancsokat fogadó GSM/GPRS-modul, valamint egy áramforrás, amely hosszú ideig biztosítja az autonóm működést.

A GPS-adók működése

A funkcionalitás növekedésével az eszköz következő képességei jelennek meg:


Lehetőségek GPS-adókhoz

A konfigurációtól függően a távadó házai jelentősen eltérhetnek. Különféle modellek állnak rendelkezésre mobiltelefonok, klasszikus navigátorok vagy akár karórák formájában.

A különleges változatok színes dizájnja és a hasznos kiegészítések lehetővé teszik, hogy a gyerekek ne „szülői kémként”, hanem divatos és praktikus kütyüként kezeljék ezeket az eszközöket.

Előnyként érdemes megemlíteni, hogy a készülék számos verziója jól működik a szakosított szolgáltatók szolgáltatásainak előfizetési díja nélkül, és minden szükséges információ közvetlenül az interneten vagy SMS-ben kerül az ügyfélhez, ami jelentős megtakarítást tesz lehetővé. az ilyen berendezések karbantartásáról.

Cikkek a GPS nyomkövetőkről

Ebben a cikkben bemutatom, hogyan kell használni a gsm-modult arduino-val a sim800L példaként. Ugyanezek az utasítások nagyon alkalmasak bármilyen más gsm-modul, például sim900 stb., használatára, mivel minden modul megközelítőleg ugyanúgy működik - ez az AT-parancsok cseréje a porton keresztül.

A modul használatát az arduino-val egy SMS relé példáján mutatom be, amivel SMS parancsokkal távolról is vezérelhető a készülék. Használható autóriasztókkal stb.

A modul az Arduino nano 2 és 3 digitális érintkezőjén működő szoftveres soros port UART interfészén keresztül csatlakozik az Arduino-hoz.

Az Arduino használata GSM modulokkal

A modul táplálásához 3,6 V és 4,2 V közötti feszültségre van szükség, ez azt jelenti, hogy további feszültségstabilizátort kell használnia, mivel az Arduino 3,3 voltos stabilizátorral rendelkezik, amely nem alkalmas a modul táplálására , a második ok a kiegészítő stabilizátor felszerelésére az, hogy a GSM-modul komoly terhelést jelent, mivel gyenge adója van, amely stabil kommunikációt biztosít a mobilállomással. Az Arduino nano tápellátása a VIN érintkezőn keresztül történik – ez az Arduino-ba épített stabilizátor, amely biztosítja a modul széles feszültségtartományban (6-10V) való működését. A relémodul a megadott programszöveg szerint az Arduino nano 10-es érintkezőjére csatlakozik, és könnyen átcserélhető bármilyen digitális kimenetként működőre.

Ez így működik: behelyezünk egy SIM kártyát a GSM modulba, bekapcsoljuk a tápfeszültséget és SMS-t küldünk a SIM kártya számára „1” szöveggel, hogy bekapcsoljuk a relét, a kikapcsoláshoz SMS-t küldünk a „0” szöveggel.

#beleértve
SoftwareSerial gprsSerial(2, 3); // a 2. és 3. láb beállítása a szoftverporthoz
int LedPin = 10; // reléhez

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

// üzenetfogadás beállítása

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
késleltetés(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
késleltetés(500); // késleltetés a parancsfeldolgozáshoz
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
késleltetés(700);
}

Karakterlánc currStr = "";
// ha ez a sor egy üzenet, akkor a változó True értéket vesz fel
logikai érték isStringMessage = false;

void loop()
{
if (!gprsSerial.available())
Visszatérés;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// ha az aktuális sor üzenet, akkor...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = false;
) más (
if (currStr.startsWith("+CMT")) (
// ha az aktuális sor „+CMT”-vel kezdődik, akkor a következő üzenet
isStringMessage = igaz;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

A cikk videós változata:

Címkék: #Arduino, #SIM800L

A jeled:

A cikkben használt termékek:

← GPS logger az arduino | Relévezérlés COM porton keresztül →

GSM szkenner RTL-SDR-en

| itthon| angol | Fejlesztés | GYIK |

A szkenner főbb jellemzői

A GSM-szkenner pásztázza a lefelé irányuló GSM-csatornákat, és információkat jelenít meg a jelszintről, valamint arról, hogy a csatorna a három fő mobilszolgáltató, az MTS, a Beeline és a Megafon valamelyikéhez tartozik-e. Munkájának eredményei alapján a szkenner lehetővé teszi az MCC, MNC, LAC és CI bázisállomás azonosítók listájának elmentését az összes letapogatott csatornához.
A GSM szkenner segítségével értékelhető a GSM jel szintje, összehasonlítható a különböző szolgáltatók jelminősége, felmérhető a rádiós lefedettség, amikor a cellás jelerősítők telepítéséről és paramétereinek beállításáról döntünk, oktatási célokra stb.
A szkenner Windows alatt fut, és egy egyszerű és olcsó vevőt használ - RTL-SDR. Az RTL-SDR-ről itt olvashat:
RTL-SDR (RTL2832U) és szoftver által meghatározott rádióhírek és projektek,
RTL-SDR – OsmoSDR,
RTL-SDR oroszul.
Az RTL-SDR paraméterek határozzák meg a szkenner főbb jellemzőit. Természetesen a GSM szkenner nem helyettesíti a normál mérőberendezéseket.
A szkennert ingyenesen, használati korlátozás nélkül terjesztjük.
A jelenlegi verzió támogatja a GSM 900 sávot, és nem támogatja a GSM 1800-at. Ezt az a tény határozza meg, hogy az RTL-SDR működési frekvenciája az R820T tunerrel 1760 MHz-re van korlátozva. Remélhetőleg a kísérleti RTL-SDR meghajtó használata lehetővé teszi a működést az 1800 MHz-es tartomány legalább egy részén.

A szkenner elindítása

A szkenner legújabb verziója letölthető erről a linkről. Egyszerűen csomagolja ki a fájlt egy kényelmes helyre, és futtassa a gsmscan.exe fájlt.
A szkenner korábbi verziói, a forrásokkal ellátott repository linkje és a fejlesztéssel kapcsolatos egyéb információk a fejlesztési oldalon találhatók.
A szkennerhez RTL-SDR illesztőprogramok telepítése szükséges, ha még nem telepítették, ezt kényelmesen megteheti a Zadig programmal, amely leírja a telepítési eljárást.

A szkenner használata

Az alábbiakban látható a szkennerprogram ablakának képe:

A vízszintes tengely a GSM csatorna számát mutatja ARFCN vagy MHz-ben, a függőleges tengely pedig a jelszintet dBm-ben. A vonal magassága a jelerősséget mutatja.

GSM modul NEOWAY M590 kommunikáció Arduino-val

Ha a BS azonosítók dekódolása sikeresen megtörtént, és azok megfelelnek a három nagy távközlési szolgáltató azonosítóinak, a vonalak a megfelelő színekre vannak festve.
A képernyő tetején található legördülő listák lehetővé teszik az SDR vevő kiválasztását, ha több csatlakoztatva van, a GSM 900 vagy GSM 1800 működési tartományát és a vízszintes tengely mentén mért mértékegységeket ARFCN vagy MHz.
A gombok segítségével jelentést menthet a szkenner működéséről a dekódolt bázisállomások listája formájában, törölheti a BS dekódolás eredményeit, és információkat kaphat a programról.

A munka alapelvei és jellemzői.

A program működés közben 2,0 MHz-es lépésekkel pásztázza a működési frekvencia tartományt (10 GSM csatorna), és 2,4 MHz-es mintavételezési frekvenciával digitalizálja a jelet. A szkennelési folyamat a jelerősség mérése érdekében a teljes tartományon történő gyors áthaladásból és a BS azonosítók dekódolásához lassú lépésből áll.

Egy dekódolási lépést hajtanak végre a teljes tartomány bejárása után a teljesítmény mérésére. Így a GSM 900 tartományban a jelszint körülbelül 2 másodpercenként frissül, és a teljes dekódolási lépés körülbelül 1 percet vesz igénybe.
Az RTL-SDR-től kapott jel rossz minősége miatt a BS broadcast vezérlőcsatorna (BCCH) rendszerinformációinak (SI) helyes dekódolásának valószínűsége nem magas. A többutas terjedés következtében fellépő jelszint-ingadozások szintén csökkentik a rendszerinformációk dekódolásának valószínűségét. Ezen okok miatt a BS azonosítók megszerzéséhez szükséges, hogy a szkenner körülbelül 10 percen keresztül információt gyűjtsön. De még ebben az esetben sem minden csatorna biztosít megfelelő jelszintet és jelminőséget egy adott helyen a dekódoláshoz még a legideálisabb vevő által is. Ráadásul nem minden GSM csatorna működik a GSM szabvány szerint, amint az a fenti ábrán látható, a 975 - 1000 csatornákat a Megafon foglalja el, hogy az UMTS szabvány szerint működjenek.
Működés közben a szkenner hozzáadja az új dekódolt csatornák rendszerinformációit a csatornák általános információihoz. A korábban dekódolt csatornákra vonatkozó információk azonban nem törlődnek, ha a rendszerinformációt nem dekódolják ebben a lépésben, és a tömbben maradnak. Az információ törléséhez használja a gombot a BS dekódolási eredmények törléséhez.
A jelentés mentése gombra kattintva a felhalmozott eredmények egy szöveges fájlba kerülnek mentésre, melynek neve a program nevéből, az adatok mentésének dátumából és időpontjából áll. Az alábbiakban egy példa látható a jelentésfájl egy részére:
A szkennert úgy tervezték, hogy Windows 7, 8.1 és 10 alatt működjön. A munkát az RTL-SDR három példányával, az R820T tunerrel tesztelték.
A program egy speciális verzióját fordították le, hogy Windows XP alatt működjön, többször lassabban fut, mint a normál verzió.

Fejlesztés.

A szkennerprogramot úgy szállítjuk, ahogy van, mindenféle garancia és felelősségvállalás nélkül. Ha van ésszerű ötlete a szkenner funkcionalitásának bővítésére vagy teljesítményének javítására, készek vagyunk megvitatni a megvalósítás lehetőségét.
Részt vehet a szkenner fejlesztésében, ehhez látogasson el a fejlesztési oldalra.
A GSM szkenner további fejlesztését tervezzük, esetleg az Önök részvételével.