Деректер dataGPS.csv электрондық кестесінде сақталады, оның форматы қызмет талаптарына сәйкес келеді. Google Менің карталарым.

    Бағдарламалау тілі: Arduino (C++)

Бейне нұсқау

Сізге не керек

Қалай құрастыру керек

gps-tracker.ino // SPI арқылы құрылғылармен жұмыс істеуге арналған кітапхана#қосу // SD картасымен жұмыс істеуге арналған кітапхана#қосу // GPS құрылғысымен жұмыс істеуге арналған кітапхана#қосу // GPS класының объектісін жасаңыз және оған Serial1 нысанын беріңіз GPS gps(1-сериялық); // LED түйреуіш#LED_PIN кодын анықтау A0 // түйменің түйреушісі #ТҮЙМЕШІК_PIN кодын анықтау 13 // CS micro-SD картасын бекітіңіз#CHIP_SELECT_PIN кодын анықтаңыз 9 // картаға деректерді жазу уақыт аралығы#INTERVAL 5000 анықтаңыз // уақыт, күн, ендік және бойлық үшін массив өлшемін орнатыңыз#МАКС_ӨЛШЕМ_МАССА 16-ны анықтаңыз // ағымдағы уақытты сақтау үшін массивтаңба уақыты[MAX_SIZE_MASS]; // жазба күйі bool stateRec = жалған; // ағымдағы уақытты еске түсіреді long startMillis = millis(); жарамсыз орнату() ( // бағдарламадағы әрекеттерді бақылау үшін сериялық портты ашыңыз Serial.begin(115200); // сериялық порт мониторы ашылғанша күтіңіз // бағдарламадағы барлық оқиғаларды қадағалау үшін// while (!Сериялық) ( // ) Serial.print ("Сериялық кіріс ОК \r\n") ; // GPS модулімен сериялық қосылымды ашыңыз Serial1.begin(115200); // ЖШД шығыс режиміне орнату pinMode(LED_PIN, OUTPUT) ; // түймені кіру режиміне орнатыңыз pinMode(BUTTON_PIN, INPUT_PULLUP) ; // Сериялық портқа инициализация туралы ақпаратты шығару Serial.println("SD картасы инициализациялануда...") ; // SD картасын инициализациялау while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println («Карта сәтсіз аяқталды немесе жоқ» ) ; кешігу (1000 ) ; ) // Сериялық портқа ақпаратты шығару Serial.println («Картаны инициализациялау»); // файлдармен жұмыс істеу үшін File класының dataFile нысанын жасаңыз DataFile файлы = SD.open("dataGPS.csv" , FILE_WRITE) ; // егер файл бар болсаегер (деректер файлы) ( // жад картасына болашақ деректердің атын жазыңыз dataFile.println("Уақыт, координаттар, жылдамдық"); // файлды жабыңыз dataFile.close(); Serial.println («Жарайды сақтау»); ) else ( Serial.println («test.csv ашу қатесі» ) ; ) ) void loop() ( // Түймені басуды жазып алыңызегер (! цифрлық оқу(BUTTON_PIN) ) ( // жад картасына “жазылу” / “жазбау” күйін өзгерту stateRec =! stateRec; // индикатордың жарық диоды күйін өзгерту digitalWrite(LED_PIN, stateRec); ) // егер деректер GPS модулінен келсеегер (gps.available()) ( // деректерді оқу және талдау gps.readParsing(); // GPS модулінің күйін тексеру switch (gps.getState () ) ( // бәрі жақсы жағдай GPS_OK: Serial.println («GPS жақсы» ) ; // егер көрсетілген уақыт аралығы өткен болсаегер (millis() - startMillis > INTERVAL && stateRec) ( // деректерді жад картасына сақтау saveSD(); // ағымдағы уақытты еске түсіру startMillis = millis(); ) үзіліс; // деректер қатесі жағдайы GPS_ERROR_DATA: Serial.println («GPS қате деректері» ); үзіліс; // спутниктермен байланыс жоқ Case GPS_ERROR_SAT: Serial.println ( «GPS спутниктерге қосылмайды»); үзіліс; ))) // жад картасына деректерді сақтау функциясы void saveSD() ( DataFile файлы = SD.open("dataGPS.csv" , FILE_WRITE) ; // егер файл бар болса және ашылған болсаегер (деректер файлы) ( // ағымдағы уақытты оқиды gps.getTime(уақыт, MAX_SIZE_MASS); // жад картасына уақытты жазу dataFile.print(" \" " ); dataFile.print(уақыт); dataFile.print(" \" " ); dataFile.print ("," ); dataFile.print(" \" " ) ; // жад картасына ендік пен бойлық координаттарын оқу және жазу dataFile.print(gps.getLatitudeBase10(), 6); dataFile.print ("," ); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.print(" \" " ); dataFile.print ("," ); dataFile.print(gps.getSpeedKm()); dataFile.println("км/сағ"); dataFile.close(); Serial.println («Жарайды сақтау»); ) else ( Serial.println («test.csv ашу қатесі» ) ; ) )

GPS жаһандық позициялау жүйесі біздің өміріміздің бір бөлігіне айналды. Бүгінгі таңда ұялы телефонды орнатылған GPS модулінсіз елестету қиын. Бұл спутниктік навигация жүйесі кез келген объектілерді қадағалауға, олардың координаталары мен қозғалыс жылдамдығын анықтауға мүмкіндік береді. Енді GPS сәйкес жабдықты әзірлейтін компанияларға ғана емес, сонымен қатар танымал Arduino тақталарын өз әлеуетіне дейін қолданатын қарапайым радиоәуесқойларға да қолжетімді. Бұл материал миниатюралық GPS трекерін Arduino Pro Mini тақтасына қосуды талқылайды. PG03 MiniGPS трекері сынақ нысанасы ретінде пайдаланылады.



Бұл трекер тікелей географиялық координаттардан басқа қозғалыс бағытын, жүріп өткен қашықтықты және қозғалыс жылдамдығын көрсетеді. Өкінішке орай, ол ақпаратты жазбайды, сондықтан оны Arduino-ға қосу арқылы сіз бұл деректерге қол жеткізе аласыз және онымен қалағаныңызды жасай аласыз.


Біріншіден, трекерді бөлшектеу керек. Төменде бөлшектелген GPS трекерінің суреттері берілген.




Трекердің жүрегі - Venus638FLP GPS чипі. Оның 44-ші түйреуіштері UART интерфейсінің (TxD) шығысы болып табылады. Сымды тікелей осы түйреуішке дәнекерлеуге болады немесе тақтада осы түйреуіш жалғанған сынақ істікшесін табуға болады. Төменде микросұлбаның түйреуіш орындарының суреттері және қалаған түйреуішке қосылу жолы берілген.





Енді NMEA протоколының деректерін жазу үшін ықшам Arduino Pro Mini тақтасын және SD карта модулін алайық. Arduino Pro Mini және SD картасы модулінің қосылу диаграммасы келесідей:



SD карталарына арналған қосылатын модуль түйреуіштері:


GND - GND
VCC 3,3 В дейін
12 түйреуіш үшін MISO
MOSI 11 түйреуішке
SCK 13 істікшеге
CS 10 түйреуішке

GPS трекер түйреуіштерін қосу:


GND - GND
2 түйреуіштен (Arduino) 44-ке (GPS)

Қуатты GPS трекерінен алған дұрыс (3,7 В). Оның батареясының қуат сыйымдылығы төмен болғандықтан, жоғарыдағы суреттердің бірінде көрсетілгендей сыртқы батареяны, мысалы, 1400 мАч ұялы телефоннан қосқан жөн.


Енді сізге TinyGPS кітапханасын жүктеп алу керек, сонымен қатар SD карталарымен жұмыс істеуге арналған кітапхана және Arduino\libraries ішінде табуға болатын SoftwareSerial кітапханасы қажет болады.



Келесі код бөлігінде қандай деректерді жазу керектігін таңдауға болады:


void gpsdump(TinyGPS &gps) ( қалқымалы тегіс, флон; // Лат, Ұзын қалтқы fkmph = gps.f_speed_kmph(); // км/сағ қалтқыдағы жылдамдық = gps.f_altitude(); // +/- биіктік метрде (шындығында, биіктікке ұқсайды) float fc = gps.f_course( // Curse in signed long age(&flat, &flon, &age, 4); " lon "); Serial.print(" биіктік "); //// //////////////////////////////////////////// // ///////////////

Эскизді Arduino-ға жүктеңіз, FAT32 стандартына сәйкес пішімделген және түбірде log.txt файлы бар SD картасын салыңыз. Сериялық мониторды іске қосыңыз және деректердің SD картасына жазылғанын көресіз.



Arduino-мен бірнеше эксперименттерден кейін мен GPRS арқылы серверге жіберілген координаттары бар қарапайым және өте қымбат емес GPS трекерін жасауды шештім.
Қолданылған Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модулі (серверге ақпаратты жіберу үшін), GPS қабылдағышы SKM53 GPS.

Барлығы ebay.com сайтында сатып алынды, барлығы шамамен 1500 рубль (arduino үшін шамамен 500 рубль, GSM модулі үшін сәл аз, GPS үшін аздап көп).

GPS қабылдағышы

Алдымен сіз GPS-пен қалай жұмыс істеу керектігін түсінуіңіз керек. Таңдалған модуль ең арзан және қарапайымдардың бірі болып табылады. Дегенмен, өндіруші спутниктік деректерді сақтау үшін батареяны уәде етеді. Деректер парағына сәйкес, суық старт 36 секундқа созылуы керек, бірақ менің жағдайым бойынша (терезеден 10-қабат, жақын жерде ғимараттар жоқ) 20 минутқа дейін созылды. Алайда келесі стартқа 2 минут қалды.

Arduino-ға қосылған құрылғылардың маңызды параметрі - қуат тұтыну. Arduino түрлендіргішін шамадан тыс жүктеп алсаңыз, ол күйіп кетуі мүмкін. Пайдаланылған қабылдағыш үшін максималды қуат тұтынуы 45 мА @ 3,3 в. Неліктен спецификация қажет кернеуден (5В) басқа кернеудегі ток күшін көрсетуі керек - мен үшін жұмбақ. Дегенмен, Arduino түрлендіргіші 45 мА кернеуге төтеп береді.

Байланыс
GPS басқарылмайды, бірақ оның RX пин бар. Қандай мақсатта екені белгісіз. Бұл ресивермен жасай алатын ең бастысы - TX пинінен NMEA протоколы арқылы деректерді оқу. Деңгейлер - 5 В, тек Arduino үшін, жылдамдық - 9600 бад. Мен VIN кодын arduino VCC-ге, GND-ді GND-ге, TX-ты сәйкес серияның RX-ке қосамын. Мен деректерді алдымен қолмен оқыдым, содан кейін TinyGPS кітапханасын қолданамын. Бір қызығы, бәрі оқуға болады. Uno-ға ауысқаннан кейін мен SoftwareSerial-ды қолдануға тура келді, содан кейін проблемалар басталды - кейбір хабарлама таңбалары жоғалып кетті. Бұл өте маңызды емес, өйткені TinyGPS жарамсыз хабарламаларды өшіреді, бірақ бұл өте жағымсыз: 1 Гц жиілігін ұмытуға болады.

SoftwareSerial туралы қысқаша ескерту: Uno құрылғысында аппараттық порттар жоқ (USB сериясына қосылғаннан басқа), сондықтан бағдарламалық құралды пайдалану керек. Осылайша, ол тек тақта үзілістерді қолдайтын түйреуіште деректерді қабылдай алады. Uno жағдайында бұл 2 және 3. Сонымен қатар, бір уақытта деректерді тек бір порт қабылдай алады.

«Тест стенді» осылай көрінеді.

GSM қабылдағышы/таратқышы


Енді ең қызықты бөлігі келді. GSM модулі - SIM900. Ол GSM және GPRS қолдайды. EDGE-ге де, әсіресе 3G-ге де қолдау көрсетілмейді. Координаталық деректерді беру үшін бұл жақсы болуы мүмкін - режимдер арасында ауысу кезінде кідіріс немесе проблемалар болмайды, сонымен қатар GPRS қазір барлық жерде дерлік қол жетімді. Дегенмен, кейбір күрделі қолданбалар үшін бұл жеткіліксіз болуы мүмкін.

Байланыс
Модуль сонымен қатар бірдей деңгеймен - 5 В сериялық порт арқылы басқарылады. Мұнда бізге RX және TX екеуі де қажет болады. Модуль қалқан болып табылады, яғни ол Arduino-да орнатылған. Сонымен қатар, ол mega және uno екеуімен үйлесімді. Әдепкі жылдамдық – 115200.

Біз оны Mega-да жинаймыз және мұнда бізді бірінші жағымсыз тосынсый күтіп тұр: модульдің TX коды Mega-ның 7-ші түйреуішіне түседі. Меганың 7-ші түйреуішінде үзілістер жоқ, яғни 7-ші істікшелін, айталық, үзілістер болуы мүмкін 6-шы істікшеліге қосу керек болады. Осылайша, біз Arduino түйреуіштерін босқа жібереміз. Мега үшін бұл өте қорқынышты емес - ақыр соңында түйреуіштер жеткілікті. Бірақ Uno үшін бұл әлдеқайда күрделі (мен сізге үзілістерді қолдайтын тек 2 түйреуіш бар екенін еске саламын - 2 және 3). Бұл мәселені шешу ретінде біз модульді Arduino-ға орнатпай, оны сымдармен қосуды ұсына аламыз. Содан кейін Serial1 пайдалана аласыз.

Қосылғаннан кейін біз модульмен «сөйлесуге» тырысамыз (оны қосуды ұмытпаңыз). Біз порт жылдамдығын таңдаймыз - 115200 және барлық кірістірілген сериялық порттар (mega-да 4, uno-да 1) және барлық бағдарламалық порттар бірдей жылдамдықта жұмыс істесе жақсы. Осылайша сіз тұрақты деректерді тасымалдауға қол жеткізе аласыз. Мен неге екенін білмеймін, бірақ мен болжауға болады.

Осылайша, біз сериялық порттар арасында деректерді қайта жіберу үшін қарапайым кодты жазамыз, Atz жібереміз және жауап ретінде үнсіздікті аламыз. Не болды? Ах, регистр сезімтал. ATZ, бәрі жақсы. Ура, модуль бізді естиді. Бізге қызығушылықпен қоңырау шалу керек пе? ATD +7499... Стационарлық телефон шырылдайды, arduino-дан түтін шығады, ноутбук өшеді. Arduino түрлендіргіші жанып кетті. Оны 19 вольтпен қоректендіру жаман ой болды, 6-дан 20В-ға дейін жұмыс істей алады деп жазылғанымен, олар 7-12В-ты ұсынады. GSM модулінің деректер парағы жүктеме кезінде қуат тұтыну туралы еш жерде айтылмайды. Ал, Мега қосалқы бөлшектер қоймасына барады. Тыныштықпен мен ноутбукты қостым, ол USB-ден +5В желісі арқылы +19В алды. Ол жұмыс істейді, тіпті USB күйіп кетпеді. Бізді қорғағаны үшін Lenovo компаниясына рахмет.

Түрлендіргіш жанып кеткеннен кейін мен ағымдағы тұтынуды іздедім. Сонымен, шың - 2А, әдеттегі - 0,5А. Бұл Arduino түрлендіргішінің мүмкіндіктерінен тыс екені анық. Бөлек тағамды қажет етеді.

Бағдарламалау
Модуль деректерді тасымалдаудың кең мүмкіндіктерін қамтамасыз етеді. Дауыстық қоңыраулар мен SMS-тен бастап, GPRS-пен аяқталады. Сонымен қатар, соңғысы үшін AT пәрмендері арқылы HTTP сұрауын орындауға болады. Бірнеше жіберуге тура келеді, бірақ бұл тұрарлық: сіз шынымен сұрауды қолмен жасағыңыз келмейді. GPRS арқылы деректерді беру арнасын ашудың бірнеше нюанстары бар - классикалық AT+CGDCONT=1, «IP», «apn» есіңізде ме? Сонымен, бұл жерде дәл осындай нәрсе қажет, бірақ аздап қулық.

Белгілі бір URL мекенжайындағы бетті алу үшін келесі пәрмендерді жіберу керек:
AT+SAPBR=1,1 //Ашық тасымалдаушы (Тасымалдаушы) AT+SAPBR=3,1,"CONTYPE","GPRS" //қосылу түрі - GPRS AT+SAPBR=3,1,"APN","internet" //APN, Megafon үшін - интернет AT+HTTPINIT //HTTP инициализациясы AT+HTTPPARA="CID",1 //Пайдалану үшін оператор идентификаторы. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Нақты URL, AT+HTTPACTION=0 координаттары бар sprintf кейін // GET әдісі арқылы деректерді сұрау //жауапты күту AT+HTTPTERM //HTTP тоқтату

Нәтижесінде қосылым болса, серверден жауап аламыз. Яғни, егер сервер оны GET арқылы алса, координаталық деректерді қалай жіберу керектігін біз қазірдің өзінде білеміз.

Тамақтану
GSM модулін Arduino түрлендіргішінен қуаттандыру, мен білгенімдей, жаман идея болғандықтан, сол ebay-де 12v->5v, 3A түрлендіргішін сатып алу туралы шешім қабылданды. Дегенмен, модуль 5 В қуат көзін ұнатпайды. Бұзылуға барайық: 5 В arduino-дан келетін түйреуішке 5 В қосыңыз. Содан кейін модульдің кірістірілген түрлендіргіші (Arduino түрлендіргішінен әлдеқайда күшті, MIC 29302WU) модульге қажет нәрсені 5 В-тан жасайды.

Сервер

Сервер қарапайымды жазды - координаттарды сақтау және Yandex.maps-те сызу. Болашақта әртүрлі мүмкіндіктерді қосуға болады, соның ішінде көптеген пайдаланушыларға қолдау көрсету, «қарулы/қарусыз» күй, көлік жүйелерінің күйі (оталдыру, фаралар және т.б.) және, мүмкін, тіпті көлік жүйелерін басқару. Әрине, толыққанды дабыл жүйесіне біркелкі айналатын трекерге тиісті қолдауымен.

Далалық сынақтар

Жинақталған құрылғы корпуссыз келесідей көрінеді:

Қуат түрлендіргішін орнатып, оны өлі DSL модемінен қорапқа салғаннан кейін жүйе келесідей көрінеді:

Мен сымдарды дәнекерлеп, Arduino блоктарынан бірнеше контактіні алып тастадым. Олар келесідей көрінеді:

Мен көлікке 12 В қостым, Мәскеуді аралап, жолды алдым:


Жол нүктелері бір-бірінен өте алыс. Себебі, GPRS арқылы деректерді жіберу салыстырмалы түрде ұзақ уақыт алады және осы уақыт ішінде координаттар оқылмайды. Бұл бағдарламалау қатесі екені анық. Ол, біріншіден, уақыт өте келе координаттар пакетін дереу жіберу арқылы, екіншіден, GPRS модулімен асинхронды жұмыс істеу арқылы өңделеді.

Автокөліктің жолаушылар креслосында спутниктерді іздеу уақыты екі минутты құрайды.

қорытындылар

Arduino-да өз қолыңызбен GPS трекерін жасау мүмкін емес, бірақ тривиальды тапсырма. Ендігі басты мәселе - зиянды факторларға (су, температура) әсер етпейтін, металлмен жабылмаған (GPS және GPRS экрандалатын болады) және әсіресе байқалмайтындай етіп құрылғыны көлікте қалай жасыру керек. Әзірге ол тек кабинада жатыр және темекі тұтқышының розеткасына қосылады.

Сондай-ақ, трекер негізгі тапсырманы орындағанымен, тегіс жол үшін кодты түзетуіміз керек.

Қолданылған құрылғылар

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 негізіндегі GSM/GPRS қалқаны
  • Тұрақты ток 12в->5в 3А түрлендіргіш

Arduino-мен бірнеше эксперименттерден кейін мен GPRS арқылы серверге жіберілген координаттары бар қарапайым және өте қымбат емес GPS трекерін жасауды шештім.
Қолданылған Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS модулі (серверге ақпаратты жіберу үшін), GPS қабылдағышы SKM53 GPS.

Барлығы ebay.com сайтында сатып алынды, барлығы шамамен 1500 рубль (arduino үшін шамамен 500 рубль, GSM модулі үшін сәл аз, GPS үшін аздап көп).

GPS қабылдағышы

Алдымен сіз GPS-пен қалай жұмыс істеу керектігін түсінуіңіз керек. Таңдалған модуль ең арзан және қарапайымдардың бірі болып табылады. Дегенмен, өндіруші спутниктік деректерді сақтау үшін батареяны уәде етеді. Деректер парағына сәйкес, суық старт 36 секундқа созылуы керек, бірақ менің жағдайым бойынша (терезеден 10-қабат, жақын жерде ғимараттар жоқ) 20 минутқа дейін созылды. Алайда келесі стартқа 2 минут қалды.

Arduino-ға қосылған құрылғылардың маңызды параметрі - қуат тұтыну. Arduino түрлендіргішін шамадан тыс жүктеп алсаңыз, ол күйіп кетуі мүмкін. Пайдаланылатын ресивер үшін максималды қуат тұтынуы 45 мА @ 3,3 в. Неліктен спецификация қажет кернеуден (5 В) басқа кернеудегі ток күшін көрсетуі керек - мен үшін жұмбақ. Дегенмен, Arduino түрлендіргіші 45 мА кернеуге төтеп береді.

Байланыс

GPS басқарылмайды, бірақ оның RX пин бар. Қандай мақсатта екені белгісіз. Бұл ресивермен жасай алатын ең бастысы - TX пинінен NMEA протоколы арқылы деректерді оқу. Деңгейлер - 5 В, тек Arduino үшін, жылдамдық - 9600 бад. Мен VIN кодын arduino VCC-ге, GND-ді GND-ге, TX-ты сәйкес серияның RX-ке қосамын. Мен деректерді алдымен қолмен оқыдым, содан кейін TinyGPS кітапханасын қолданамын. Бір қызығы, бәрі оқуға болады. Uno-ға ауысқаннан кейін мен SoftwareSerial-ды қолдануға тура келді, содан кейін проблемалар басталды - кейбір хабарлама таңбалары жоғалды. Бұл өте маңызды емес, өйткені TinyGPS жарамсыз хабарламаларды өшіреді, бірақ бұл өте жағымсыз: 1 Гц жиілігін ұмытуға болады.

SoftwareSerial туралы қысқаша ескерту: Uno жүйесінде аппараттық порттар жоқ, сондықтан бағдарламалық құралды пайдалану керек. Осылайша, ол тек тақта үзілістерді қолдайтын түйреуіште деректерді қабылдай алады. Uno жағдайында бұл 2 және 3. Сонымен қатар, бір уақытта деректерді тек бір порт қабылдай алады.

«Тест стенді» осылай көрінеді.


GSM қабылдағышы/таратқышы


Енді ең қызықты бөлігі келді. GSM модулі - SIM900. Ол GSM және GPRS қолдайды. EDGE-ге де, әсіресе 3G-ге де қолдау көрсетілмейді. Координаталық деректерді беру үшін бұл жақсы болуы мүмкін - режимдер арасында ауысу кезінде кідіріс немесе проблемалар болмайды, сонымен қатар GPRS қазір барлық жерде дерлік қол жетімді. Дегенмен, кейбір күрделі қолданбалар үшін бұл жеткіліксіз болуы мүмкін.

Байланыс

Модуль сонымен қатар бірдей деңгеймен - 5 В сериялық порт арқылы басқарылады. Мұнда бізге RX және TX екеуі де қажет болады. Модуль қалқан болып табылады, яғни ол Arduino-да орнатылған. Сонымен қатар, ол mega және uno екеуімен үйлесімді. Әдепкі жылдамдық – 115200.

Біз оны Mega-да жинаймыз және мұнда бізді бірінші жағымсыз тосынсый күтіп тұр: модульдің TX коды Mega-ның 7-ші түйреуішіне түседі. Меганың 7-ші түйреуішінде үзілістер жоқ, яғни 7-ші істікшелін, айталық, үзілістер болуы мүмкін 6-шы істікшеліге қосу керек болады. Осылайша, біз Arduino түйреуіштерін босқа жібереміз. Мега үшін бұл өте қорқынышты емес - ақыр соңында түйреуіштер жеткілікті. Бірақ Uno үшін бұл әлдеқайда күрделі (мен сізге үзілістерді қолдайтын тек 2 түйреуіш бар екенін еске саламын - 2 және 3). Бұл мәселені шешу ретінде біз модульді Arduino-ға орнатпай, оны сымдармен қосуды ұсына аламыз. Содан кейін Serial1 пайдалана аласыз.

Қосылғаннан кейін біз модульмен «сөйлесуге» тырысамыз (оны қосуды ұмытпаңыз). Біз порт жылдамдығын таңдаймыз - 115200 және барлық кірістірілген сериялық порттар (mega-да 4, uno-да 1) және барлық бағдарламалық порттар бірдей жылдамдықта жұмыс істесе жақсы. Осылайша сіз тұрақты деректерді тасымалдауға қол жеткізе аласыз. Мен неге екенін білмеймін, бірақ мен болжауға болады.

Осылайша, біз сериялық порттар арасында деректерді қайта жіберу үшін қарапайым кодты жазамыз, Atz жібереміз және жауап ретінде үнсіздікті аламыз. Не болды? Ах, регистр сезімтал. ATZ, бәрі жақсы. Ура, модуль бізді естиді. Бізге қызығушылықпен қоңырау шалу керек пе? ATD +7499... Стационарлық телефон шырылдайды, arduino-дан түтін шығады, ноутбук өшеді. Arduino түрлендіргіші жанып кетті. Оны 19 вольтпен қоректендіру жаман ой болды, 6-дан 20В-ға дейін жұмыс істей алады деп жазылғанымен, олар 7-12В-ты ұсынады. GSM модулінің деректер парағы жүктеме кезінде қуат тұтыну туралы еш жерде айтылмайды. Ал, Мега қосалқы бөлшектер қоймасына барады. Тыныштықпен мен ноутбукты қостым, ол USB-ден +5В желісі арқылы +19В алды. Ол жұмыс істейді, тіпті USB күйіп кетпеді. Бізді қорғағаны үшін Lenovo компаниясына рахмет.


Түрлендіргіш жанып кеткеннен кейін мен ағымдағы тұтынуды іздедім. Сонымен, шың - 2А, әдеттегі - 0,5А. Бұл Arduino түрлендіргішінің мүмкіндіктерінен тыс екені анық. Бөлек тағамды қажет етеді.

Бағдарламалау

Модуль деректерді тасымалдаудың кең мүмкіндіктерін қамтамасыз етеді. Дауыстық қоңыраулар мен SMS-тен бастап, GPRS-пен аяқталады. Сонымен қатар, соңғысы үшін AT пәрмендері арқылы HTTP сұрауын орындауға болады. Бірнеше жіберуге тура келеді, бірақ бұл тұрарлық: сіз шынымен сұрауды қолмен жасағыңыз келмейді. GPRS арқылы деректерді беру арнасын ашудың бірнеше нюанстары бар - классикалық AT+CGDCONT=1, «IP», «apn» есіңізде ме? Сонымен, бұл жерде дәл осындай нәрсе қажет, бірақ аздап қулық.

Белгілі бір URL мекенжайындағы бетті алу үшін келесі пәрмендерді жіберу керек:

AT+SAPBR=1,1 //Ашық тасымалдаушы (Тасымалдаушы) AT+SAPBR=3,1,"CONTYPE","GPRS" //қосылу түрі - GPRS AT+SAPBR=3,1,"APN","internet" //APN, Megafon үшін - интернет AT+HTTPINIT //HTTP инициализациясы AT+HTTPPARA="CID",1 //Пайдалану үшін оператор идентификаторы. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Нақты URL, AT+HTTPACTION=0 координаттары бар sprintf кейін // GET әдісі арқылы деректерді сұрау //жауапты күту AT+HTTPTERM //HTTP тоқтату

Нәтижесінде қосылым болса, серверден жауап аламыз. Яғни, егер сервер оны GET арқылы алса, координаталық деректерді қалай жіберу керектігін біз қазірдің өзінде білеміз.

Тамақтану

GSM модулін Arduino түрлендіргішінен қуаттандыру, мен білгенімдей, жаман идея болғандықтан, сол ebay-де 12v->5v, 3A түрлендіргішін сатып алу туралы шешім қабылданды. Дегенмен, модуль 5 В қуат көзін ұнатпайды. Бұзуға барайық: Arduino-дан 5 В келетін түйреуішке 5 В қосыңыз. Содан кейін модульдің кірістірілген түрлендіргіші (Arduino түрлендіргішінен әлдеқайда күшті, MIC 29302WU) модульге қажет нәрсені 5 В-тан жасайды.

Сервер

Сервер қарапайымды жазды - координаттарды сақтау және Yandex.maps-те сызу. Болашақта әртүрлі мүмкіндіктерді қосуға болады, соның ішінде көптеген пайдаланушыларға қолдау көрсету, «қарулы/қарусыз» күй, көлік жүйелерінің күйі (оталдыру, фаралар және т.б.) және, мүмкін, тіпті көлік жүйелерін басқару. Әрине, толыққанды дабыл жүйесіне біркелкі айналатын трекерге тиісті қолдауымен.

Далалық сынақтар

Жинақталған құрылғы корпуссыз келесідей көрінеді:


Қуат түрлендіргішін орнатып, оны өлі DSL модемінен қорапқа салғаннан кейін жүйе келесідей көрінеді:

Мен сымдарды дәнекерлеп, Arduino блоктарынан бірнеше контактіні алып тастадым. Олар келесідей көрінеді:

Мен көлікке 12 В қостым, Мәскеуді аралап, жолды алдым:


Жол жыртылған болып шығады. Себебі, GPRS арқылы деректерді жіберу салыстырмалы түрде ұзақ уақыт алады және осы уақыт ішінде координаттар оқылмайды. Бұл бағдарламалау қатесі екені анық. Ол, біріншіден, уақыт өте келе координаттар пакетін дереу жіберу арқылы, екіншіден, GPRS модулімен асинхронды жұмыс істеу арқылы өңделеді.

Жеке GPS таратқыштары

Бүгінгі таңда прогрестің қарқыны соншалық, бұрын көлемді, қымбат және жоғары мамандандырылған құрылғылар көлемін, салмағын және бағасын тез жоғалтады, бірақ көптеген жаңа функцияларға ие болды.

Осылайша GPS технологиясына негізделген құрылғылар қалта гаджеттеріне жетіп, сол жерде берік орнығып, адамдарға жаңа мүмкіндіктер берді. Жеке GPS таратқыштарын ерекше атап өткен жөн.

Негізінде, бұл бірдей GPS трекерлері, тек көлікте емес, адамның күнделікті өмірінде қолдануға арналған.

Модельге байланысты бірнеше түрлі құрылғылар бір корпуста біріктірілуі мүмкін. Қарапайым түрде бұл жай ғана дисплейі жоқ шағын қорап, ол балалардың, жануарлардың немесе кейбір басқа заттардың қозғалысын басқаруға мүмкіндік береді, ол бекітілген.

Оның ішінде жердегі координаттарды анықтайтын GPS модулі, ақпаратты тарататын және басқару командаларын қабылдайтын GSM/GPRS модулі, сондай-ақ ұзақ уақыт бойы автономды жұмысты қамтамасыз ететін қуат көзі бар.

GPS таратқыштарының функционалдығы

Функционалдық ұлғайған сайын құрылғының келесі мүмкіндіктері пайда болады:


GPS таратқыштарына арналған опциялар

Конфигурацияға байланысты таратқыш корпустары айтарлықтай ерекшеленуі мүмкін. Түрлі модельдер ұялы телефондар, классикалық навигаторлар немесе тіпті қол сағаттары түрінде қол жетімді.

Арнайы нұсқалардың әсем дизайны мен пайдалы толықтырулары балаларға бұл құрылғыларды «ата-ана тыңшысы» ретінде емес, сәнді және практикалық гаджеттер ретінде қарастыруға мүмкіндік береді.

Артықшылық ретінде, құрылғының көптеген нұсқалары мамандандырылған операторлардың қызметтері үшін абоненттік төлемсіз жақсы жұмыс істейтінін және барлық қажетті ақпарат клиентке тікелей Интернет немесе SMS хабарламалары арқылы жіберілетінін атап өткен жөн, бұл айтарлықтай үнемдеуге мүмкіндік береді. осындай жабдыққа техникалық қызмет көрсету туралы.

GPS трекерлері туралы мақалалар

Бұл мақалада мысал ретінде sim800L көмегімен arduino көмегімен GSM модулін қалай пайдалану керектігін көрсетемін. Дәл осындай нұсқаулар кез келген басқа GSM модульдерін пайдалану үшін өте қолайлы, мысалы, sim900 және т.б., өйткені барлық модульдер шамамен бірдей жұмыс істейді - бұл порт арқылы AT командаларымен алмасу.

Мен arduino-мен модульді пайдалануды SMS пәрмендері арқылы құрылғыны қашықтан басқаруға болатын SMS релесі мысалында көрсетемін. Бұл автомобиль дабылдарымен және т.б.

Модуль Arduino-ға Arduino nano-ның 2 және 3 сандық түйреуіштерінде жұмыс істейтін бағдарламалық сериялық порттың UART интерфейсі арқылы қосылған.

Arduino-мен GSM модульдерімен жұмыс істеу

Модульді қуаттандыру үшін 3,6 В-тан 4,2 В-қа дейінгі диапазондағы кернеу қажет, бұл сізге қосымша кернеу тұрақтандырғышын пайдалану керек дегенді білдіреді, өйткені Arduino-да модульді қуаттандыруға жарамсыз 3,3 вольтты тұрақтандырғыш орнатылған. , қосымша тұрақтандырғышты орнатудың екінші себебі - GSM модулі ауыр жүктеме, өйткені оның ұялы станциямен тұрақты байланысты қамтамасыз ететін әлсіз таратқышы бар. Arduino nano үшін қуат VIN түйреуішіне беріледі - бұл модульдің кең кернеу диапазонында (6-10 В) жұмыс істеуін қамтамасыз ететін Arduino ішіне орнатылған тұрақтандырғыш. Релелік модуль берілген бағдарлама мәтініне сәйкес Arduino nano 10 түйреуішіне қосылған және оны сандық шығыс ретінде жұмыс істейтін кез келген басқасына оңай өзгертуге болады.

Ол келесідей жұмыс істейді: біз GSM модуліне SIM картасын орнатамыз, қуатты қосамыз және релені қосу үшін SIM картасының нөміріне «1» мәтіні бар SMS жібереміз, оны өшіру үшін SMS жібереміз. «0» мәтінімен.

#қосу
SoftwareSerial gprsSerial(2, 3); // бағдарламалық құрал порты үшін 2 және 3 түйреуіштерді орнатыңыз
int LedPin = 10; // реле үшін

жарамсыз орнату()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// хабарламаны қабылдауды орнату

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
кешіктіру(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
кешіктіру(500); // пәрменді өңдеуге арналған кідіріс
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
кешіктіру(700);
}

Жол currStr = "";
// егер бұл жол хабарлама болса, онда айнымалы True мәнін қабылдайды
логикалық isStringMessage = жалған;

жарамсыз цикл()
{
егер (!gprsSerial.available())
қайтару;

char currSymb = gprsSerial.read();
егер ('\r' == currSymb) (
егер (isStringMessage) (
// егер ағымдағы жол хабарлама болса, онда...
егер (!currStr.compareTo("1")) (
digitalWrite(LedPin, HIGH);
) басқа болса (!currStr.compareTo("0")) (
digitalWrite(LedPin, LOW);
}
isStringMessage = жалған;
) басқа (
if (currStr.startsWith("+CMT")) (
// егер ағымдағы жол «+CMT» арқылы басталса, келесі хабарлама
isStringMessage = шын;
}
}
currStr = "";
) егер (‘\n’ != currSymb) (
currStr += Жол(currSymb);
}
}

Мақаланың бейне нұсқасы:

Тегтер: #Arduino, #SIM800L

Сіздің белгіңіз:

Осы мақалада қолданылатын өнімдер:

← Arduino жүйесіндегі GPS тіркеушісі | COM порты арқылы релелік басқару →

RTL-SDR жүйесіндегі GSM сканері

| үй| Ағылшын | дамыту | Жиі қойылатын сұрақтар |

Сканердің негізгі сипаттамалары

GSM сканері төменгі ағындағы GSM арналарын сканерлейді және сигнал деңгейі және арнаның MTS, Beeline және Megafon үш негізгі ұялы байланыс операторларының біріне жататындығы туралы ақпаратты көрсетеді. Өз жұмысының нәтижелері бойынша сканер барлық сканерленген арналар үшін MCC, MNC, LAC және CI базалық станция идентификаторларының тізімін сақтауға мүмкіндік береді.
GSM сканерін GSM сигналының деңгейін бағалау, әртүрлі операторлардың сигнал сапасын салыстыру, радиоқабылдағышты бағалау, ұялы сигнал күшейткіштерін орнату және олардың параметрлерін реттеу туралы шешім қабылдау кезінде білім беру мақсатында және т.б.
Сканер Windows жүйесінде жұмыс істейді және қарапайым және арзан қабылдағышты пайдаланады - RTL-SDR. RTL-SDR туралы мына жерден оқи аласыз:
RTL-SDR (RTL2832U) және бағдарламалық құрал анықталған радио жаңалықтары мен жобалары,
RTL-SDR – OsmoSDR,
Орыс тілінде RTL-SDR.
RTL-SDR параметрлері сканердің негізгі сипаттамаларын анықтайды. Әрине, GSM сканері қалыпты өлшеу жабдығын алмастырмайды.
Сканер пайдалануға ешқандай шектеулерсіз тегін таратылады.
Ағымдағы нұсқа GSM 900 жолағын қолдайды және GSM 1800-ге қолдау көрсетпейді. Бұл R820T тюнері бар RTL-SDR жұмыс жиілігі 1760 МГц шектелгенімен анықталады. Эксперименттік RTL-SDR драйверін пайдалану 1800 МГц диапазонының кем дегенде бір бөлігінде жұмыс істеуге мүмкіндік береді деген үміт бар.

Сканерді іске қосу

Сканердің соңғы нұсқасын мына сілтемеден жүктеп алуға болады. Файлды ыңғайлы жерге ашыңыз және gsmscan.exe файлын іске қосыңыз.
Сканердің алдыңғы нұсқалары, дереккөздері бар репозиторийге сілтеме және әзірлеуге қатысты басқа ақпарат әзірлеу бетінде орналасқан.
Сканер жұмыс істеуі үшін RTL-SDR драйверлерін орнату қажет, егер олар әлі орнатылмаған болса, оны орнату процедурасын сипаттау үшін Zadig бағдарламасы арқылы жасауға болады.

Сканерді пайдалану

Төменде сканер бағдарламасының терезесінің көрінісі берілген:

Көлденең ось GSM арнасының нөмірін ARFCN немесе МГц түрінде көрсетеді, ал тік ось сигнал деңгейін дБм-де көрсетеді. Сызықтың биіктігі сигнал күшін көрсетеді.

GSM модулі NEOWAY M590 Arduino-мен байланыс

Егер BS идентификаторлары сәтті декодталған болса және олар үш негізгі байланыс операторының идентификаторларына сәйкес келсе, сызықтар сәйкес түстермен боялады.
Экранның жоғарғы жағындағы ашылмалы тізімдер SDR қабылдағышын, егер бірнеше қосылған болса, жұмыс ауқымын GSM 900 немесе GSM 1800 және ARFCN немесе МГц көлденең осі бойынша өлшем бірліктерін таңдауға мүмкіндік береді.
Түймешіктер сканердің жұмысы туралы есепті декодталған базалық станциялар тізімі түрінде сақтауға, BS декодтау нәтижелерін тазалауға және бағдарлама туралы ақпаратты алуға мүмкіндік береді.

Жұмыстың принциптері мен ерекшеліктері.

Жұмыс кезінде бағдарлама 2,0 МГц (10 GSM арнасы) қадамымен жұмыс жиілігі диапазонын сканерлейді және 2,4 МГц дискреттеу жиілігімен сигналды цифрлайды. Сканерлеу процесі сигнал күшін өлшеу үшін бүкіл диапазон арқылы жылдам өтуден және BS идентификаторларын декодтау үшін баяу өтуден тұрады.

Бір декодтау қадамы қуатты өлшеу үшін бүкіл ауқымды жүріп өткеннен кейін орындалады. Осылайша, GSM 900 диапазонында сигнал деңгейі шамамен 2 секунд сайын жаңартылады және толық декодтау өтуі шамамен 1 минутты алады.
RTL-SDR-дан алынған сигнал сапасының нашарлығына байланысты BS хабар таратуды басқару арнасының (BCCH) жүйелік ақпаратын (СИ) дұрыс декодтау ықтималдығы жоғары емес. Көп жолды тарату нәтижесіндегі сигнал деңгейінің ауытқуы да жүйе ақпаратын декодтау ықтималдығын азайтады. Осы себептерге байланысты BS идентификаторларын алу үшін сканер шамамен 10 минут ішінде ақпаратты жинақтауы қажет. Бірақ бұл жағдайда да барлық арналар тіпті ең тамаша қабылдағышпен де кодтау үшін берілген жерде жеткілікті сигнал деңгейі мен сапасын қамтамасыз ете бермейді. Сонымен қатар, GSM стандарты бойынша жұмыс істеу үшін барлық GSM арналары пайдаланылмайды, жоғарыдағы суретте көрсетілгендей, 975 - 1000 арналары UMTS стандартына сәйкес жұмыс істеу үшін Megafon компаниясында орналасқан.
Жұмыс барысында сканер арналардағы ақпараттың жалпы массивіне жаңа декодталған арналар туралы жүйелік ақпаратты қосады. Бірақ бұрын декодталған арналар туралы ақпарат бұл қадамда жүйелік ақпарат декодталмаған кезде өшірілмейді және массивте қалады. Бұл ақпаратты өшіру үшін BS декодтау нәтижелерін өшіру үшін түймені пайдаланыңыз.
Есепті сақтау түймешігін басқан кезде жинақталған нәтижелер бағдарламаның атауынан, деректердің сақталған күні мен уақытынан тұратын аты бар мәтіндік файлға сақталады. Төменде есеп файлының бір бөлігінің мысалы берілген:
Сканер Windows 7, 8.1 және 10 жүйелерінде жұмыс істеуге арналған. Жұмыс R820T тюнерімен RTL-SDR үш данасымен сынақтан өтті.
Бағдарламаның арнайы нұсқасы Windows XP жүйесінде жұмыс істеу үшін құрастырылған, ол стандартты нұсқаға қарағанда бірнеше есе баяу жұмыс істейді.

Даму.

Сканер бағдарламасы ешбір кепілдіксіз немесе жауапкершіліксіз сол күйінде жеткізіледі. Егер сізде сканердің функционалдығын кеңейту немесе өнімділігін жақсарту туралы ақылға қонымды идеяларыңыз болса, біз оларды жүзеге асыру мүмкіндігін талқылауға дайынбыз.
Ол үшін сканерді әзірлеуге қатыса аласыз, әзірлеу бетіне кіріңіз;
GSM сканерін одан әрі дамыту жоспарлануда, мүмкін сіздің қатысуыңызбен.