Dati tiek saglabāti izklājlapā dataGPS.csv, kuras formāts atbilst pakalpojuma prasībām. Google manas kartes.

    Programmēšanas valoda: Arduino (C++)

Video instrukcija

Ko tev vajag

Kā salikt

gps-tracker.ino // bibliotēka darbam ar ierīcēm, izmantojot SPI#iekļauts // bibliotēka darbam ar SD karti#iekļauts // bibliotēka darbam ar GPS ierīci#iekļauts // izveidojiet GPS klases objektu un nododiet tam Serial1 objektu GPS gps (Serial1); // LED tapa#define LED_PIN A0 // pogas tapa #define BUTTON_PIN 13 // piespraust CS micro-sd karti#define CHIP_SELECT_PIN 9 // laika intervāls datu ierakstīšanai kartē#define INTERVĀLU 5000 // iestatiet masīva lielumu laikam, datumam, platumam un garumam#define MAX_SIZE_MASS 16 // masīvs, lai saglabātu pašreizējo laiku char time [MAX_SIZE_MASS]; // ieraksta stāvoklis bool stateRec = false ; // atceras pašreizējo laiku long startMillis = millis() ; anulēt iestatīšanu() ( // atveriet seriālo portu, lai pārraudzītu programmas darbības Serial.begin(115200); // pagaidiet, līdz tiek atvērts seriālā porta monitors // lai izsekotu visiem programmas notikumiem// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // atver seriālo savienojumu ar GPS moduli Serial1.begin(115200); // iestatiet LED izvades režīmā pinMode(LED_PIN, OUTPUT) ; // iestatiet pogu pieteikšanās režīmā pinMode(BUTTON_PIN, INPUT_PULLUP) ; // izvada informāciju par inicializāciju seriālajā portā Serial.println("Inicializē SD karti...") ; // inicializējiet SD karti while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Karte neizdevās vai tās nav") ; delay(1000) ; ) // izvada informāciju uz seriālo portu Serial.println("Karte inicializēta"); // izveido klases Fails objektu dataFile, lai strādātu ar failiem Fails dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ja fails eksistē if (dataFile) ( // ierakstiet atmiņas kartē nākotnes datu nosaukumu dataFile.println("Laiks, koordinātes, ātrums"); // aizveriet failu dataFile.close(); Serial.println ("Saglabāt labi"); ) else ( Serial.println ("Kļūda atverot test.csv" ) ; ) ) void loop() ( // Ierakstiet pogas nospiešanu if (! digitalRead(BUTTON_PIN) ) ( // mainiet stāvokli “ieraksts” / “neraksta” atmiņas kartē stateRec = ! stateRec; // mainīt indikācijas LED stāvokli digitalWrite(LED_PIN, statusRec) ; ) // ja dati tika saņemti no GPS moduļa if (gps.available()) ( // lasīt datus un parsēt gps.readParsing(); // pārbaudiet GPS moduļa statusu slēdzis (gps.getState () ) ( // viss ir kārtībā gadījumā GPS_OK: Serial.println ("GPS ir OK" ) ; // ja norādītais laika intervāls ir pagājis if (millis() - startMillis > INTERVAL && stateRec) ( // saglabājiet datus atmiņas kartē saveSD() ; // atcerieties pašreizējo laiku startMillis = millis() ; ) pārtraukums ; // datu kļūdas gadījums GPS_ERROR_DATA: Serial.println ("GPS kļūdu dati" ) ; pārtraukums ; // nav savienojuma ar satelītiem gadījums GPS_ERROR_SAT: Serial.println ( "GPS nav savienojuma ar satelītiem") ; pārtraukums ; ) ) ) // funkcija datu saglabāšanai atmiņas kartē void saveSD() ( Fails dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // ja fails pastāv un ir atvērts if (dataFile) ( // nolasa pašreizējo laiku gps.getTime(laiks, MAX_SIZE_MASS); // ierakstiet laiku atmiņas kartē dataFile.print(" \" " ) ; dataFile.print(laiks); dataFile.print(" \" " ) ; dataFile.print ("," ) ; dataFile.print(" \" " ) ; // lasīt un ierakstīt atmiņas kartē platuma un garuma koordinātas 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 ("Saglabāt OK"); ) else ( Serial.println ("Kļūda atverot test.csv" ) ; ) )

GPS globālās pozicionēšanas sistēma jau ir kļuvusi par mūsu dzīves sastāvdaļu. Mūsdienās ir grūti iedomāties mobilo tālruni bez iebūvēta GPS moduļa. Šī satelītnavigācijas sistēma ļauj izsekot jebkuriem objektiem, noteikt to koordinātas un kustības ātrumu. Tagad GPS ir pieejams ne tikai uzņēmumiem, kas izstrādā atbilstošo aprīkojumu, bet arī parastajiem radioamatieriem, kuri jau pilnībā izmanto populārās Arduino plates. Šajā materiālā tiks apspriesta miniatūra GPS izsekotāja savienošana ar Arduino Pro Mini plati. PG03 MiniGPS izsekotājs tiek izmantots kā testa subjekts.



Šis izsekotājs papildus tiešajām ģeogrāfiskajām koordinātām parāda kustības virzienu, nobraukto attālumu un kustības ātrumu. Diemžēl tas neieraksta informāciju, tāpēc, savienojot to ar Arduino, jūs varat piekļūt šiem datiem un darīt ar tiem visu, ko vēlaties.


Pirmkārt, izsekotājs ir jāizjauc. Zemāk ir izjaukta GPS izsekotāja attēli.




Izsekotāja sirds ir Venus638FLP GPS mikroshēma. Tā 44. kontaktdakša ir UART interfeisa (TxD) izvade. Jūs varat pielodēt vadu tieši pie šīs tapas vai arī varat atrast testēšanas tapu uz tāfeles, pie kuras arī šī tapa ir pievienota. Zemāk ir attēli ar mikroshēmas tapu atrašanās vietām un to, kā izveidot savienojumu ar vēlamo tapu.





Tagad ņemsim kompaktu Arduino Pro Mini plati un SD kartes moduli, lai ierakstītu NMEA protokola datus. Arduino Pro Mini un SD kartes moduļa savienojuma shēma ir šāda:



Savienojuma moduļa tapas SD kartēm:


GND uz GND
VCC līdz 3,3 V
MISO, lai tapa 12
MOSI, lai tapa 11
SCK pie 13. tapas
CS, lai tapa 10

GPS izsekotāja tapu pievienošana:


GND uz GND
2. kontakts (Arduino) līdz 44. pinam (GPS)

Labāk ir ņemt strāvu no GPS izsekotāja (3,7 V). Tā kā tā akumulatoram ir zema enerģijas ietilpība, ieteicams pievienot ārējo akumulatoru, piemēram, no 1400 mAh mobilā tālruņa, kā parādīts vienā no iepriekš redzamajiem attēliem.


Tagad jums ir jālejupielādē TinyGPS bibliotēka, jums būs nepieciešama arī bibliotēka darbam ar SD kartēm un SoftwareSerial bibliotēka, kas atrodama Arduino\libraries.



Šajā koda daļā varat izvēlēties, kādus datus rakstīt:


void gpsdump(TinyGPS &gps) ( peldēt plakaniski, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Ātrums km/h float falt = gps.f_altitude(); // +/- augstums metros (šķiet, ka tas ir pacēlums) float fc = gps.f_course( // Kurss unsigned long age (&flat, &flon, &age); " lon "); //// //////////////////////////////////////////////// // ////////////////

Augšupielādējiet skici Arduino, ievietojiet SD karti, kas formatēta atbilstoši FAT32 un kuras saknē ir log.txt fails. Palaidiet Serial Monitor, un jūs redzēsit, ka dati tiek ierakstīti SD kartē.



Pēc vairākiem eksperimentiem ar Arduino, nolēmu uztaisīt vienkāršu un ne pārāk dārgu GPS izsekotāju ar koordinātēm, kuras pa GPRS nosūtītas uz serveri.
Lietots Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modulis (informācijas nosūtīšanai uz serveri), GPS uztvērējs SKM53 GPS.

Viss tika iegādāts ebay.com, kopā apmēram 1500 rubļu (apmēram 500 rubļu par arduino, nedaudz mazāk par GSM moduli, nedaudz vairāk par GPS).

GPS uztvērējs

Vispirms jums ir jāsaprot, kā strādāt ar GPS. Izvēlētais modulis ir viens no lētākajiem un vienkāršākajiem. Tomēr ražotājs sola akumulatoru, lai saglabātu satelīta datus. Pēc datu lapas aukstā palaišanai vajadzētu aizņemt 36 sekundes, tomēr manos apstākļos (10. stāvs no palodzes, tuvumā nevienas ēkas) tas prasīja pat 20 minūtes. Nākamais starts taču jau 2 minūtes.

Svarīgs arduino savienoto ierīču parametrs ir enerģijas patēriņš. Pārslogojot Arduino pārveidotāju, tas var izdegt. Izmantotā uztvērēja maksimālais enerģijas patēriņš ir 45 mA pie 3,3 V. Kāpēc specifikācijā būtu jānorāda strāvas stiprums pie sprieguma, kas atšķiras no vajadzīgā (5V), man ir noslēpums. Tomēr Arduino pārveidotājs izturēs 45 mA.

Savienojums
GPS netiek kontrolēts, lai gan tam ir RX tapa. Kādam nolūkam nav zināms. Galvenais, ko varat darīt ar šo uztvērēju, ir nolasīt datus no TX kontakta, izmantojot NMEA protokolu. Līmeņi - 5V, tikai priekš Arduino, ātrums - 9600 bodi. Es savienoju VIN ar arduino VCC, GND ar GND, TX ar RX no atbilstošās sērijas. Es vispirms nolasīju datus manuāli, pēc tam izmantojot TinyGPS bibliotēku. Pārsteidzoši, viss ir lasāms. Pēc pārejas uz Uno man nācās izmantot SoftwareSerial, un tad sākās problēmas - dažas ziņojuma rakstzīmes tika pazaudētas. Tas nav īpaši svarīgi, jo TinyGPS izslēdz nederīgus ziņojumus, taču tas ir diezgan nepatīkami: jūs varat aizmirst par 1 Hz frekvenci.

Īsa piezīme par SoftwareSerial: Uno nav aparatūras portu (izņemot to, kas ir pievienots USB seriālajai ierīcei), tāpēc jums ir jāizmanto programmatūra. Tātad tas var saņemt datus tikai par tapu, uz kuras plate atbalsta pārtraukumus. Uno gadījumā tie ir 2 un 3. Turklāt tikai viens šāds ports var saņemt datus vienlaikus.

Šādi izskatās “pārbaudes stends”.

GSM uztvērējs/raidītājs


Tagad nāk interesantākā daļa. GSM modulis - SIM900. Tā atbalsta GSM un GPRS. Netiek atbalstīts ne EDGE, ne īpaši 3G. Koordinātu datu pārraidei tas droši vien ir labi - pārslēdzoties starp režīmiem, nebūs kavēšanās vai problēmu, turklāt GPRS tagad ir pieejams gandrīz visur. Tomēr dažām sarežģītākām lietojumprogrammām ar to var nepietikt.

Savienojums
Modulis tiek vadīts arī caur seriālo portu, ar tādu pašu līmeni - 5V. Un šeit mums būs nepieciešams gan RX, gan TX. Modulis ir vairogs, tas ir, tas ir instalēts Arduino. Turklāt tas ir saderīgs gan ar mega, gan ar uno. Noklusējuma ātrums ir 115 200.

Mēs to saliekam uz Mega, un šeit mūs sagaida pirmais nepatīkamais pārsteigums: moduļa TX tapa nokrīt uz Mega 7. tapas. Uz mega 7. kontaktdakšas pārtraukumi nav pieejami, tas nozīmē, ka jums būs jāpievieno 7. kontakts, teiksim, ar 6. kontaktu, uz kura ir iespējami pārtraukumi. Tādējādi mēs iztērēsim vienu Arduino tapu. Nu, mega tas nav ļoti biedējoši - galu galā ir pietiekami daudz piespraudes. Bet Uno tas jau ir sarežģītāk (atgādinu, ka ir tikai 2 kontakti, kas atbalsta pārtraukumus - 2 un 3). Kā risinājumu šai problēmai mēs varam ieteikt nevis instalēt moduli Arduino, bet savienot to ar vadiem. Pēc tam varat izmantot Serial1.

Pēc savienojuma izveides mēs cenšamies “runāt” ar moduli (neaizmirstiet to ieslēgt). Mēs izvēlamies porta ātrumu - 115200, un ir labi, ja visi iebūvētie seriālie porti (4 uz mega, 1 uz uno) un visi programmatūras porti darbojas vienā ātrumā. Tādā veidā jūs varat sasniegt stabilāku datu pārraidi. Es nezinu, kāpēc, lai gan varu uzminēt.

Tātad, mēs rakstām primitīvu kodu datu pārsūtīšanai starp seriālajiem portiem, nosūtām atz un saņemam klusumu kā atbildi. Kas notika? Ak, reģistrjutīgs. ATZ, mums viss ir kārtībā. Urā, modulis mūs dzird. Vai ziņkārības dēļ mums vajadzētu piezvanīt? ATD +7499... Zvana fiksētais telefons, no arduino nāk dūmi, klēpjdators izslēdzas. Arduino pārveidotājs izdega. Bija slikta doma barot to ar 19 voltiem, lai gan rakstīts, ka var darboties no 6 līdz 20 V, viņi iesaka 7-12 V. GSM moduļa datu lapā nekur nav teikts par enerģijas patēriņu slodzes laikā. Nu Mega iet uz rezerves daļu noliktavu. Ar aizturētu elpu ieslēdzu portatīvo datoru, kas pa +5V līniju saņēma +19V no USB. Tas darbojas, un pat USB neizdegās. Paldies Lenovo par mūsu aizsardzību.

Pēc pārveidotāja izdegšanas es meklēju pašreizējo patēriņu. Tātad, maksimums - 2A, tipisks - 0,5A. Tas nepārprotami pārsniedz Arduino pārveidotāja iespējas. Nepieciešama atsevišķa barība.

Programmēšana
Modulis nodrošina plašas datu pārraides iespējas. Sākot no balss zvaniem un SMS un beidzot ar pašu GPRS. Turklāt pēdējam ir iespējams izpildīt HTTP pieprasījumu, izmantojot AT komandas. Jums būs jānosūta vairāki, taču tas ir tā vērts: jūs īsti nevēlaties izveidot pieprasījumu manuāli. Ar datu pārraides kanāla atvēršanu caur GPRS ir pāris nianses - atceries klasisko AT+CGDCONT=1, “IP”, “apn”? Tātad šeit ir vajadzīgs tas pats, tikai nedaudz viltīgāks.

Lai iegūtu lapu ar noteiktu URL, jums ir jānosūta šādas komandas:
AT+SAPBR=1,1 //Atvērts mobilo sakaru operators (Carrier) AT+SAPBR=3,1"CONTYPE","GPRS" //savienojuma veids - GPRS AT+SAPBR=3,1"APN","internets" //APN, Megafon - internets AT+HTTPINIT //Inicializēt HTTP AT+HTTPPARA="CID",1 //Izmantojamais mobilo sakaru operatora ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Faktiskais URL pēc sprintf ar koordinātām AT+HTTPACTION=0 // Pieprasīt datus, izmantojot GET metodi //gaidiet atbildi AT+HTTPTERM //apturiet HTTP

Rezultātā, ja būs savienojums, mēs saņemsim atbildi no servera. Tas nozīmē, ka mēs jau zinām, kā nosūtīt koordinātu datus, ja serveris tos saņem, izmantojot GET.

Uzturs
Tā kā GSM moduļa barošana no Arduino pārveidotāja, kā noskaidroju, ir slikta doma, tika nolemts tajā pašā ebay iegādāties 12v->5v, 3A pārveidotāju. Tomēr modulim nepatīk 5V barošanas avots. Iesim uzlauzt: pievienojiet 5V kontaktam, no kura 5V nāk no arduino. Tad moduļa iebūvētais pārveidotājs (daudz jaudīgāks par Arduino pārveidotāju MIC 29302WU) no 5V izveidos modulim nepieciešamo.

Serveris

Serveris uzrakstīja primitīvu - saglabā koordinātas un zīmēja Yandex.maps. Nākotnē ir iespējams pievienot dažādas funkcijas, tostarp atbalstu daudziem lietotājiem, statusu “bruņots/neapbruņots”, transportlīdzekļa sistēmu stāvokli (aizdedze, priekšējie lukturi utt.), un, iespējams, pat transportlīdzekļa sistēmu vadību. Protams, ar atbilstošu izsekotāja atbalstu, kas vienmērīgi pārvēršas par pilnvērtīgu signalizācijas sistēmu.

Lauka testi

Šādi izskatās saliktā ierīce bez korpusa:

Pēc strāvas pārveidotāja uzstādīšanas un ievietošanas korpusā no mirušā DSL modema sistēma izskatās šādi:

Es pielodēju vadus un noņēmu vairākus kontaktus no Arduino blokiem. Tie izskatās šādi:

Mašīnā pieslēdzu 12V, apbraucu Maskavu un ieguvu trasi:


Trases punkti atrodas diezgan tālu viens no otra. Iemesls ir tāds, ka datu nosūtīšana, izmantojot GPRS, aizņem salīdzinoši ilgu laiku, un šajā laikā koordinātas netiek nolasītas. Tā nepārprotami ir programmēšanas kļūda. Tas tiek apstrādāts, pirmkārt, nekavējoties nosūtot koordinātu paketi laika gaitā, un, otrkārt, asinhroni strādājot ar GPRS moduli.

Satelītu meklēšanas laiks automašīnas pasažiera sēdeklī ir pāris minūtes.

secinājumus

Ir iespējams izveidot GPS izsekotāju vietnē Arduino ar savām rokām, lai gan tas nav mazsvarīgs uzdevums. Šobrīd galvenais jautājums ir, kā noslēpt ierīci automašīnā, lai tā netiktu pakļauta kaitīgiem faktoriem (ūdens, temperatūra), netiktu pārklāta ar metālu (GPS un GPRS tiks ekranēti) un nebūtu īpaši pamanāma. Pagaidām tas vienkārši atrodas salonā un savienojas ar cigarešu aizdedzinātāja ligzdu.

Nu, mums arī jālabo kods, lai celiņš būtu vienmērīgāks, lai gan izsekotājs jau veic galveno uzdevumu.

Lietotas ierīces

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • SIM900 bāzes GSM/GPRS vairogs
  • DC-DC 12v->5v 3A pārveidotājs

Pēc vairākiem eksperimentiem ar Arduino, nolēmu uztaisīt vienkāršu un ne pārāk dārgu GPS izsekotāju ar koordinātēm, kuras pa GPRS nosūtītas uz serveri.
Lietots Arduino Mega 2560 (Arduino Uno), SIM900 - GSM/GPRS modulis (informācijas nosūtīšanai uz serveri), GPS uztvērējs SKM53 GPS.

Viss tika iegādāts ebay.com, kopā apmēram 1500 rubļu (apmēram 500 rubļu par arduino, nedaudz mazāk par GSM moduli, nedaudz vairāk par GPS).

GPS uztvērējs

Vispirms jums ir jāsaprot, kā strādāt ar GPS. Izvēlētais modulis ir viens no lētākajiem un vienkāršākajiem. Tomēr ražotājs sola akumulatoru, lai saglabātu satelīta datus. Pēc datu lapas aukstā palaišanai vajadzētu aizņemt 36 sekundes, tomēr manos apstākļos (10. stāvs no palodzes, tuvumā nevienas ēkas) tas prasīja pat 20 minūtes. Nākamais starts taču jau 2 minūtes.

Svarīgs arduino savienoto ierīču parametrs ir enerģijas patēriņš. Pārslogojot Arduino pārveidotāju, tas var izdegt. Izmantotā uztvērēja maksimālais enerģijas patēriņš ir 45 mA pie 3,3 V. Kāpēc specifikācijā būtu jānorāda strāvas stiprums pie sprieguma, kas atšķiras no vajadzīgā (5V), man ir noslēpums. Tomēr Arduino pārveidotājs izturēs 45 mA.

Savienojums

GPS netiek kontrolēts, lai gan tam ir RX tapa. Kādam nolūkam nav zināms. Galvenais, ko varat darīt ar šo uztvērēju, ir nolasīt datus no TX kontakta, izmantojot NMEA protokolu. Līmeņi - 5V, tikai priekš Arduino, ātrums - 9600 bodi. Es savienoju VIN ar arduino VCC, GND ar GND, TX ar atbilstošās sērijas RX. Es vispirms nolasīju datus manuāli, pēc tam izmantojot TinyGPS bibliotēku. Pārsteidzoši, viss ir lasāms. Pēc pārejas uz Uno man nācās izmantot SoftwareSerial, un tad sākās problēmas - dažas ziņojuma rakstzīmes tika pazaudētas. Tas nav īpaši svarīgi, jo TinyGPS izslēdz nederīgus ziņojumus, taču tas ir diezgan nepatīkami: jūs varat aizmirst par 1 Hz frekvenci.

Īsa piezīme par SoftwareSerial: Uno nav aparatūras portu, tāpēc jums ir jāizmanto programmatūras porti. Tātad tas var saņemt datus tikai par tapu, uz kuras plate atbalsta pārtraukumus. Uno gadījumā tie ir 2 un 3. Turklāt tikai viens šāds ports var saņemt datus vienlaikus.

Šādi izskatās “pārbaudes stends”.


GSM uztvērējs/raidītājs


Tagad nāk interesantākā daļa. GSM modulis - SIM900. Tā atbalsta GSM un GPRS. Netiek atbalstīts ne EDGE, ne īpaši 3G. Koordinātu datu pārraidei tas droši vien ir labi - pārslēdzoties starp režīmiem, nebūs kavēšanās vai problēmu, turklāt GPRS tagad ir pieejams gandrīz visur. Tomēr dažām sarežģītākām lietojumprogrammām ar to var nepietikt.

Savienojums

Modulis tiek vadīts arī caur seriālo portu, ar tādu pašu līmeni - 5V. Un šeit mums būs nepieciešams gan RX, gan TX. Modulis ir vairogs, tas ir, tas ir instalēts Arduino. Turklāt tas ir saderīgs gan ar mega, gan ar uno. Noklusējuma ātrums ir 115 200.

Mēs to saliekam uz Mega, un šeit mūs sagaida pirmais nepatīkamais pārsteigums: moduļa TX tapa nokrīt uz Mega 7. tapas. Uz mega 7. kontaktdakšas pārtraukumi nav pieejami, tas nozīmē, ka jums būs jāpievieno 7. kontakts, teiksim, ar 6. kontaktu, uz kura ir iespējami pārtraukumi. Tādējādi mēs iztērēsim vienu Arduino tapu. Nu, mega tas nav ļoti biedējoši - galu galā ir pietiekami daudz piespraudes. Bet Uno tas jau ir sarežģītāk (atgādinu, ka ir tikai 2 kontakti, kas atbalsta pārtraukumus - 2 un 3). Kā risinājumu šai problēmai mēs varam ieteikt nevis instalēt moduli Arduino, bet savienot to ar vadiem. Pēc tam varat izmantot Serial1.

Pēc savienojuma izveides mēs cenšamies “runāt” ar moduli (neaizmirstiet to ieslēgt). Mēs izvēlamies porta ātrumu - 115200, un ir labi, ja visi iebūvētie seriālie porti (4 uz mega, 1 uz uno) un visi programmatūras porti darbojas vienā ātrumā. Tādā veidā jūs varat sasniegt stabilāku datu pārraidi. Es nezinu, kāpēc, lai gan varu uzminēt.

Tātad, mēs rakstām primitīvu kodu datu pārsūtīšanai starp seriālajiem portiem, nosūtām atz un saņemam klusumu kā atbildi. Kas notika? Ak, reģistrjutīgs. ATZ, mums viss ir kārtībā. Urā, modulis mūs dzird. Vai ziņkārības dēļ mums vajadzētu piezvanīt? ATD +7499... Zvana fiksētais telefons, no arduino nāk dūmi, klēpjdators izslēdzas. Arduino pārveidotājs izdega. Bija slikta doma barot to ar 19 voltiem, lai gan rakstīts, ka var darboties no 6 līdz 20 V, viņi iesaka 7-12 V. GSM moduļa datu lapā nekur nav teikts par enerģijas patēriņu slodzes laikā. Nu Mega iet uz rezerves daļu noliktavu. Ar aizturētu elpu ieslēdzu portatīvo datoru, kas pa +5V līniju saņēma +19V no USB. Tas darbojas, un pat USB neizdegās. Paldies Lenovo par mūsu aizsardzību.


Pēc pārveidotāja izdegšanas es meklēju pašreizējo patēriņu. Tātad, maksimums - 2A, tipisks - 0,5A. Tas nepārprotami pārsniedz Arduino pārveidotāja iespējas. Nepieciešama atsevišķa barība.

Programmēšana

Modulis nodrošina plašas datu pārraides iespējas. Sākot no balss zvaniem un SMS un beidzot ar pašu GPRS. Turklāt pēdējam ir iespējams izpildīt HTTP pieprasījumu, izmantojot AT komandas. Jums būs jānosūta vairāki, taču tas ir tā vērts: jūs īsti nevēlaties izveidot pieprasījumu manuāli. Ar datu pārraides kanāla atvēršanu caur GPRS ir pāris nianses - atceries klasisko AT+CGDCONT=1, “IP”, “apn”? Tātad šeit ir vajadzīgs tas pats, tikai nedaudz viltīgāks.

Lai iegūtu lapu ar noteiktu URL, jums ir jānosūta šādas komandas:

AT+SAPBR=1,1 //Atvērts mobilo sakaru operators (Carrier) AT+SAPBR=3,1"CONTYPE","GPRS" //savienojuma veids - GPRS AT+SAPBR=3,1"APN","internets" //APN, Megafon - internets AT+HTTPINIT //Inicializēt HTTP AT+HTTPPARA="CID",1 //Izmantojamais mobilo sakaru operatora ID. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //Faktiskais URL pēc sprintf ar koordinātām AT+HTTPACTION=0 // Pieprasīt datus, izmantojot GET metodi //gaidiet atbildi AT+HTTPTERM //apturiet HTTP

Rezultātā, ja būs savienojums, mēs saņemsim atbildi no servera. Tas nozīmē, ka mēs jau zinām, kā nosūtīt koordinātu datus, ja serveris tos saņem, izmantojot GET.

Uzturs

Tā kā GSM moduļa barošana no Arduino pārveidotāja, kā noskaidroju, ir slikta doma, tika nolemts tajā pašā ebay iegādāties 12v->5v, 3A pārveidotāju. Tomēr modulim nepatīk 5V barošanas avots. Iesim uzlauzt: pievienojiet 5V kontaktam, no kura 5V nāk no Arduino. Tad moduļa iebūvētais pārveidotājs (daudz jaudīgāks par Arduino pārveidotāju MIC 29302WU) no 5V izveidos modulim nepieciešamo.

Serveris

Serveris uzrakstīja primitīvu - saglabā koordinātas un zīmēja Yandex.maps. Nākotnē ir iespējams pievienot dažādas funkcijas, tostarp atbalstu daudziem lietotājiem, statusu “bruņots/neapbruņots”, transportlīdzekļa sistēmu stāvokli (aizdedze, priekšējie lukturi utt.), un, iespējams, pat transportlīdzekļa sistēmu vadību. Protams, ar atbilstošu izsekotāja atbalstu, kas vienmērīgi pārvēršas par pilnvērtīgu signalizācijas sistēmu.

Lauka testi

Šādi izskatās saliktā ierīce bez korpusa:


Pēc strāvas pārveidotāja uzstādīšanas un ievietošanas korpusā no mirušā DSL modema sistēma izskatās šādi:

Es pielodēju vadus un noņēmu vairākus kontaktus no Arduino blokiem. Tie izskatās šādi:

Pieslēdzu mašīnā 12V, izbraucu pa Maskavu un ieguvu trasi:


Trase izrādās saplēsta. Iemesls ir tāds, ka datu nosūtīšana, izmantojot GPRS, aizņem salīdzinoši ilgu laiku, un šajā laikā koordinātas netiek nolasītas. Tā nepārprotami ir programmēšanas kļūda. Tas tiek apstrādāts, pirmkārt, nekavējoties nosūtot koordinātu paketi laika gaitā, un, otrkārt, asinhroni strādājot ar GPRS moduli.

Personīgie GPS raidītāji

Mūsdienās progress notiek tādā tempā, ka ierīces, kas iepriekš bija apjomīgas, dārgas un ļoti specializētas, ātri zaudē izmēru, svaru un cenu, bet iegūst daudzas jaunas funkcijas.

Tā ierīces, kuru pamatā ir GPS tehnoloģija, nokļuva līdz kabatas sīkrīkiem un stabili tur iekārtojās, sniedzot cilvēkiem jaunas iespējas. Īpaši vērts izcelt atsevišķus GPS raidītājus.

Būtībā tie ir tie paši GPS izsekotāji, tikai paredzēti lietošanai nevis transportlīdzeklī, bet gan cilvēkam ikdienas dzīvē.

Atkarībā no modeļa vienā korpusā var apvienot vairākas dažādas ierīces. Vienkāršākajā veidā tā ir vienkārši maza kaste bez displeja, kas ļauj kontrolēt bērnu, dzīvnieku vai kādu citu priekšmetu kustības, uz kura tas ir fiksēts.

Tā iekšpusē ir GPS modulis, kas nosaka koordinātas uz zemes, GSM/GPRS modulis, kas pārraida informāciju un saņem vadības komandas, kā arī barošanas avots, kas nodrošina autonomu darbību uz ilgu laiku.

GPS raidītāju funkcionalitāte

Palielinoties funkcionalitātei, parādās šādas ierīces iespējas:


Iespējas GPS raidītājiem

Atkarībā no konfigurācijas raidītāja korpusi var ievērojami atšķirties. Ir pieejami dažādi modeļi mobilo tālruņu, klasisko navigatoru vai pat rokas pulksteņu veidā.

Īpašo versiju krāsains dizains un noderīgi papildinājumi ļauj bērniem izturēties pret šīm ierīcēm nevis kā pret “vecāku spiegiem”, bet gan kā moderniem un praktiskiem sīkrīkiem.

Kā priekšrocību ir vērts minēt faktu, ka daudzas ierīces versijas darbojas labi bez abonēšanas maksām par specializēto operatoru pakalpojumiem, un visa nepieciešamā informācija klientam tiek nosūtīta tieši ar interneta vai SMS īsziņām, kas ļauj ievērojami ietaupīt. par šādu iekārtu apkopi.

Raksti par GPS sekotājiem

Šajā rakstā es parādīšu, kā izmantot gsm moduli ar arduino, izmantojot piemēru sim800L. Tās pašas instrukcijas ir diezgan piemērotas, lai izmantotu jebkurus citus gsm moduļus, piemēram, sim900 utt., Jo visi moduļi darbojas aptuveni vienādi - tā ir AT komandu apmaiņa caur portu.

Parādīšu moduļa lietošanu ar arduino, izmantojot SMS releja piemēru, ar kuru var attālināti vadīt ierīci, izmantojot SMS komandas. To var izmantot kopā ar automašīnu signalizāciju utt.

Modulis ir savienots ar Arduino, izmantojot programmatūras seriālā porta UART saskarni, kas darbojas ar 2 un 3 Arduino nano digitālajām tapām.

Darbojas Arduino ar GSM moduļiem

Lai darbinātu moduli, ir nepieciešams spriegums diapazonā no 3,6 V līdz 4,2 V, tas nozīmē, ka jums būs jāizmanto papildu sprieguma stabilizators, jo Arduino ir uzstādīts 3,3 voltu stabilizators, kas nav piemērots moduļa barošanai. , otrs iemesls papildu stabilizatora uzstādīšanai ir tas, ka GSM modulis ir nopietna slodze, jo tam ir vājš raidītājs, kas nodrošina stabilu saziņu ar mobilo staciju. Arduino nano barošana tiek piegādāta uz VIN tapas - tas ir Arduino iebūvēts stabilizators, kas nodrošina moduļa darbību plašā sprieguma diapazonā (6-10V). Releja modulis saskaņā ar doto programmas tekstu ir savienots ar Arduino nano 10. tapu, un to var viegli nomainīt uz jebkuru citu, kas darbojas kā digitālā izeja.

Tas darbojas šādi: ievietojam SIM karti GSM modulī, ieslēdzam strāvu un nosūtām SMS ar tekstu “1” uz SIM kartes numuru, lai ieslēgtu mūsu releju, lai to izslēgtu, mēs nosūtām SMS ar tekstu "0".

#iekļauts
SoftwareSerial gprsSerial(2, 3); // iestatiet 2. un 3. tapas programmatūras portam
int LedPin = 10; // stafetei

nederīgs iestatījums ()
{
gprsSerial.begin(4800);
pinMode(LedPin, OUTPUT);

// ziņojumu saņemšanas iestatīšana

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
kavēšanās (500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
kavēšanās (500); // aizkave komandu apstrādei
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
kavēšanās (700);
}

Virkne currStr = "";
// ja šī rinda ir ziņojums, tad mainīgajam būs vērtība True
Būla vērtība isStringMessage = false;

tukšuma cilpa ()
{
if (!gprsSerial.available())
atgriešanās;

char currSymb = gprsSerial.read();
if ('\r' == currSymb) (
if (isStringMessage) (
// ja pašreizējā rinda ir ziņojums, tad...
if (!currStr.compareTo("1")) (
digitalWrite (LedPin, HIGH);
) else if (!currStr.compareTo("0")) (
digitalWrite (LedPin, LOW);
}
isStringMessage = false;
) cits (
if (currStr.startsWith("+CMT")) (
// ja pašreizējā rinda sākas ar “+CMT”, tad nākamais ziņojums
isStringMessage = true;
}
}
currStr = "";
) else if ('\n' != currSymb) (
currStr += String(currSymb);
}
}

Raksta video versija:

Birkas: #Arduino, #SIM800L

Jūsu atzīme:

Šajā rakstā izmantotie produkti:

← GPS reģistrētājs arduino | Releja vadība caur COM portu →

GSM skeneris uz RTL-SDR

| mājas| angļu | Attīstība | FAQ |

Skenera galvenās īpašības

GSM skeneris skenē pakārtotos GSM kanālus un parāda informāciju par signāla līmeni un to, vai kanāls pieder vienam no trim galvenajiem mobilo sakaru operatoriem MTS, Beeline un Megafon. Pamatojoties uz sava darba rezultātiem, skeneris ļauj saglabāt MCC, MNC, LAC un CI bāzes staciju identifikatoru sarakstu visiem skenētajiem kanāliem.
GSM skeneri var izmantot, lai novērtētu GSM signāla līmeni, salīdzinātu dažādu operatoru signālu kvalitāti, novērtētu radio pārklājumu, pieņemot lēmumu par mobilo signālu pastiprinātāju uzstādīšanu un to parametru pielāgošanu, izglītības nolūkos utt.
Skeneris darbojas operētājsistēmā Windows un izmanto vienkāršu un lētu uztvērēju - RTL-SDR. Par RTL-SDR varat lasīt:
RTL-SDR (RTL2832U) un programmatūras definētas radio ziņas un projekti,
RTL-SDR — OsmoSDR,
RTL-SDR krievu valodā.
RTL-SDR parametri nosaka skenera galvenās īpašības. Protams, GSM skeneris nevar aizstāt parasto mērīšanas iekārtu.
Skeneris tiek izplatīts bez maksas, bez lietošanas ierobežojumiem.
Pašreizējā versija atbalsta GSM 900 joslu un neatbalsta GSM 1800. To nosaka fakts, ka RTL-SDR darbības frekvence ar R820T uztvērēju ir ierobežota līdz 1760 MHz. Ir cerība, ka eksperimentālā RTL-SDR draivera izmantošana ļaus darboties vismaz daļā no 1800 MHz diapazona.

Skenera palaišana

Jaunāko skenera versiju var lejupielādēt no šīs saites. Vienkārši izsaiņojiet failu ērtā vietā un palaidiet gsmscan.exe.
Iepriekšējās skenera versijas, saite uz repozitoriju ar avotiem un cita ar izstrādi saistīta informācija atrodas izstrādes lapā.
Lai skeneris darbotos, ir jāinstalē RTL-SDR draiveri, ja tie vēl nav instalēti, to var ērti izdarīt, izmantojot Zadig programmu, lai aprakstītu instalēšanas procedūru.

Izmantojot skeneri

Tālāk ir parādīts skenera programmas loga skats:

Horizontālā ass parāda GSM kanāla numuru ARFCN vai MHz formā, un vertikālā ass parāda signāla līmeni dBm. Līnijas augstums parāda signāla stiprumu.

GSM moduļa NEOWAY M590 komunikācija ar Arduino

Ja BS identifikatori ir veiksmīgi atšifrēti un tie atbilst trīs lielāko telekomunikāciju operatoru identifikatoriem, līnijas tiek nokrāsotas atbilstošās krāsās.
Ekrāna augšdaļā esošie nolaižamie saraksti ļauj izvēlēties SDR uztvērēju, ja ir pievienoti vairāki, darbības diapazonu GSM 900 vai GSM 1800 un mērvienības pa horizontālo asi ARFCN vai MHz.
Pogas ļauj saglabāt atskaiti par skenera darbību atšifrēto bāzes staciju saraksta veidā, notīrīt BS dekodēšanas rezultātus un iegūt informāciju par programmu.

Darba principi un iezīmes.

Darbības laikā programma skenē darbības frekvenču diapazonu ar soli 2,0 MHz (10 GSM kanāli) un digitalizē signālu ar iztveršanas frekvenci 2,4 MHz. Skenēšanas process sastāv no ātras caurlaides visam diapazonam, lai izmērītu signāla stiprumu, un lēnas pārejas, lai atšifrētu BS identifikatorus.

Viens dekodēšanas solis tiek veikts pēc visa diapazona šķērsošanas, lai izmērītu jaudu. Tādējādi GSM 900 diapazonā signāla līmenis tiek atjaunināts aptuveni reizi 2 sekundēs, un pilnīga dekodēšanas gājiens aizņem apmēram 1 minūti.
No RTL-SDR saņemtā signāla sliktās kvalitātes dēļ BS apraides vadības kanāla (BCCH) sistēmas informācijas (SI) pareizas dekodēšanas iespējamība nav augsta. Signāla līmeņa svārstības vairāku ceļu izplatīšanās rezultātā samazina arī sistēmas informācijas dekodēšanas iespējamību. Šo iemeslu dēļ, lai iegūtu BS identifikatorus, skenerim ir jāuzkrāj informācija aptuveni 10 minūšu laikā. Bet pat šajā gadījumā ne visi kanāli nodrošina pietiekamu signāla līmeni un kvalitāti noteiktā vietā, lai dekodētu pat ideālākais uztvērējs. Turklāt ne visi GSM kanāli tiek izmantoti darbam saskaņā ar GSM standartu, kā redzams attēlā iepriekš, kanālus 975 - 1000 aizņem Megafon, lai tie darbotos saskaņā ar UMTS standartu.
Darbības laikā skeneris pievieno sistēmas informāciju par jauniem dekodētiem kanāliem vispārējam informācijas masīvam par kanāliem. Taču informācija par iepriekš dekodētajiem kanāliem netiek dzēsta, ja sistēmas informācija netiek dekodēta šajā darbībā, un tā paliek masīvā. Lai notīrītu šo informāciju, izmantojiet pogu, lai notīrītu BS dekodēšanas rezultātus.
Noklikšķinot uz pogas Saglabāt atskaiti, uzkrātie rezultāti tiek saglabāti teksta failā ar nosaukumu, kas sastāv no programmas nosaukuma, datu saglabāšanas datuma un laika. Tālāk ir sniegts atskaites faila daļas piemērs:
Skeneris ir paredzēts darbam operētājsistēmās Windows 7, 8.1 un 10. Darbs tika pārbaudīts ar trim RTL-SDR kopijām ar R820T uztvērēju, netika pārbaudīts.
Ir izveidota īpaša programmas versija, kas darbojas operētājsistēmā Windows XP, tā darbojas vairākas reizes lēnāk nekā standarta versija.

Attīstība.

Skenera programma tiek piegādāta tāda, kāda tā ir, bez jebkādām garantijām vai saistībām. Ja jums ir pamatotas idejas, kā paplašināt skenera funkcionalitāti vai uzlabot veiktspēju, esam gatavi apspriest to ieviešanas iespēju.
Lai to izdarītu, varat piedalīties skenera izstrādē, apmeklējiet izstrādes lapu.
Plānota GSM skenera tālāka attīstība, iespējams, ar Jūsu līdzdalību.