Data disimpan dalam spreadsheet dataGPS.csv, format yang sesuai dengan persyaratan layanan Google Petaku.

    Bahasa Pemrograman: Arduino (C++)

Instruksi video

Apa yang kau butuhkan

Cara merakit

gps-tracker.ino // perpustakaan untuk bekerja dengan perangkat melalui SPI#termasuk // perpustakaan untuk bekerja dengan kartu SD#termasuk // perpustakaan untuk bekerja dengan perangkat GPS#termasuk // membuat objek kelas GPS dan meneruskan objek Serial1 ke sana GPS gps(Serial1) ; // pin LED#define LED_PIN A0 // pin tombol #define BUTTON_PIN 13 // menyematkan kartu micro-sd CS#tentukan CHIP_SELECT_PIN 9 // interval waktu untuk menulis data ke kartu#tentukan INTERVAL 5000 // mengatur ukuran array untuk waktu, tanggal, lintang dan bujur#tentukan MAX_SIZE_MASS 16 // array untuk menyimpan waktu saat ini waktu pengisian daya[MAX_SIZE_MASS]; // status rekaman bool stateRec = salah; // mengingat waktu saat ini startMillis panjang = milis() ; batalkan pengaturan() ( // buka port serial untuk memantau tindakan dalam program Serial.begin(115200); // tunggu hingga monitor port serial terbuka // untuk melacak semua kejadian dalam program// while (!Serial) ( // ) Serial.print ("Serial init OK \r\n") ; // membuka koneksi Serial dengan modul GPS Serial1.mulai(115200); // atur LED ke mode keluaran pinMode(LED_PIN, KELUARAN) ; // atur tombol ke mode login pinMode(BUTTON_PIN, INPUT_PULLUP) ; // mengeluarkan informasi tentang inisialisasi ke port Serial Serial.println("Menginisialisasi kartu SD...") ; // inisialisasi kartu SD while (! SD.begin (CHIP_SELECT_PIN) ) ( Serial.println ("Kartu gagal, atau tidak ada" ) ; penundaan(1000 ) ; ) // mengeluarkan informasi ke port Serial Serial.println("Kartu diinisialisasi"); // membuat objek dataFile dari kelas File untuk bekerja dengan file File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // jika file tersebut ada jika (File data) ( // tulis nama data masa depan ke kartu memori dataFile.println("Waktu, Koordinat, Kecepatan"); // tutup file dataFile.close(); Serial.println("Simpan OK"); ) else ( Serial.println ("Kesalahan membuka test.csv" ) ; ) ) void loop() ( // Rekam penekanan tombol jika (! digitalBaca(BUTTON_PIN) ) ( // mengubah status “merekam” / “tidak menulis” ke kartu memori negaraRec = ! Rek negara bagian; // mengubah status LED indikasi digitalWrite(LED_PIN, stateRec) ; ) // jika data berasal dari modul GPS jika (gps.tersedia()) ( // membaca data dan mengurai gps.readParsing(); // memeriksa status modul GPS switch (gps.getState () ) ( // semuanya baik-baik saja case GPS_OK: Serial.println ("GPS baik-baik saja" ); // jika interval waktu yang ditentukan telah terlewati jika (millis() - startMillis > INTERVAL && stateRec) ( // menyimpan data ke kartu memori simpanSD() ; // ingat waktu saat ini startMillis = milis() ; ) merusak ; // kasus kesalahan data GPS_ERROR_DATA: Serial.println ("Data kesalahan GPS" ) ; merusak ; // tidak ada koneksi dengan satelit kasus GPS_ERROR_SAT: Serial.println ( "GPS tidak terhubung ke satelit") ; merusak ; ) ) ) // fungsi menyimpan data ke kartu memori batal simpanSD() ( File dataFile = SD.open("dataGPS.csv" , FILE_WRITE) ; // jika file tersebut ada dan telah dibuka jika (File data) ( // membaca waktu saat ini gps.getTime(waktu, MAX_SIZE_MASS); // tulis waktu ke kartu memori dataFile.cetak(" \" " ) ; dataFile.print(waktu); dataFile.cetak(" \" " ) ; dataFile.cetak ("," ); dataFile.cetak(" \" " ) ; // membaca dan menulis koordinat lintang dan bujur ke kartu memori dataFile.print(gps.getLatitudeBase10(), 6); dataFile.cetak ("," ); dataFile.print(gps.getLongitudeBase10(), 6); dataFile.cetak(" \" " ) ; dataFile.cetak ("," ); dataFile.print(gps.getSpeedKm()); dataFile.println("km/jam"); dataFile.close(); Serial.println("Simpan OK"); ) else ( Serial.println ("Kesalahan saat membuka test.csv" ) ; ) )

Sistem penentuan posisi global GPS telah menjadi bagian dari kehidupan kita. Saat ini sulit membayangkan ponsel tanpa modul GPS bawaan. Sistem navigasi satelit ini memungkinkan Anda melacak objek apa pun, menentukan koordinat dan kecepatan pergerakannya. Sekarang GPS tersedia tidak hanya untuk perusahaan yang mengembangkan peralatan terkait, tetapi juga untuk amatir radio biasa yang telah menggunakan papan Arduino populer secara maksimal. Materi kali ini akan membahas tentang cara menghubungkan miniatur GPS Tracker ke board Arduino Pro Mini. Pelacak MiniGPS PG03 digunakan sebagai subjek uji.



Pelacak ini, selain koordinat geografis langsung, menunjukkan arah pergerakan, jarak yang ditempuh, dan kecepatan pergerakan. Sayangnya, ini tidak merekam informasi, jadi dengan menghubungkannya ke Arduino, Anda dapat mengakses data ini dan melakukan apapun yang Anda inginkan dengannya.


Pertama, pelacak perlu dibongkar. Di bawah ini adalah gambar pelacak GPS yang dibongkar.




Inti dari pelacak adalah chip GPS Venus638FLP. Pin ke-44nya merupakan output dari antarmuka UART (TxD). Anda dapat menyolder kawat langsung ke pin ini, atau Anda dapat menemukan pin pengujian di papan yang juga terhubung dengan pin ini. Di bawah ini adalah gambar lokasi pin pada rangkaian mikro dan cara menghubungkan ke pin yang diinginkan.





Sekarang mari kita ambil papan Arduino Pro Mini yang ringkas dan modul kartu SD untuk merekam data protokol NMEA. Diagram koneksi Arduino Pro Mini dan modul kartu SD adalah sebagai berikut:



Menghubungkan pin modul untuk kartu SD:


GND ke GND
VCC ke 3.3V
MISO ke pin 12
MOSI untuk menyematkan 11
SCK ke pin 13
CS untuk menyematkan 10

Menghubungkan pin pelacak GPS:


GND ke GND
Pin 2 (Arduino) hingga Pin 44 (GPS)

Lebih baik mengambil daya dari pelacak GPS (3,7 V). Karena baterainya memiliki kapasitas energi yang rendah, sebaiknya sambungkan baterai eksternal, misalnya dari ponsel 1400 mAh, seperti terlihat pada salah satu gambar di atas.


Sekarang Anda perlu mengunduh perpustakaan TinyGPS, Anda juga memerlukan perpustakaan untuk bekerja dengan kartu SD dan perpustakaan SoftwareSerial, yang dapat ditemukan di perpustakaan Arduino.



Pada potongan kode berikut Anda dapat memilih data apa yang akan ditulis:


void gpsdump(TinyGPS &gps) ( float flat, flon; // Lat, Long float fkmph = gps.f_speed_kmph(); // Kecepatan dalam km/jam float falt = gps.f_altitude(); // +/- ketinggian dalam meter (sebenarnya tampak seperti ketinggian) float fc = gps.f_course(); // Kursus dalam derajat unsigned long age; " lon "); Serial.print(" kms "); .print(fc); Serial.print("ketinggian"); //// //////////////////////////////////////////////// // ////////////////

Unggah sketsa ke Arduino, masukkan kartu SD yang diformat sesuai FAT32 dan memiliki file log.txt di root. Luncurkan Serial Monitor dan Anda akan melihat data ditulis ke kartu SD.



Setelah beberapa kali percobaan dengan Arduino, saya memutuskan untuk membuat pelacak GPS yang sederhana dan tidak terlalu mahal dengan koordinat yang dikirim melalui GPRS ke server.
Digunakan Arduino Mega 2560 (Arduino Uno), SIM900 - modul GSM/GPRS (untuk mengirim informasi ke server), penerima GPS SKM53 GPS.

Semuanya dibeli di eBay.com, dengan total sekitar 1500 rubel (sekitar 500 rubel untuk Arduino, sedikit lebih sedikit untuk modul GSM, sedikit lebih banyak untuk GPS).

Penerima GPS

Pertama, Anda perlu memahami cara bekerja dengan GPS. Modul yang dipilih adalah salah satu yang termurah dan paling sederhana. Namun pihak pabrikan menjanjikan baterai untuk menyimpan data satelit. Menurut lembar data, start dingin akan memakan waktu 36 detik, namun dalam kondisi saya (lantai 10 dari ambang jendela, tidak ada bangunan di dekatnya) butuh waktu hingga 20 menit. Namun permulaan berikutnya sudah 2 menit.

Parameter penting dari perangkat yang terhubung ke Arduino adalah konsumsi daya. Jika Anda membebani konverter Arduino secara berlebihan, konverter tersebut mungkin akan terbakar. Untuk receiver yang digunakan, konsumsi daya maksimalnya adalah [email protected]. Mengapa spesifikasi harus menunjukkan kekuatan arus pada tegangan selain yang disyaratkan (5V) adalah misteri bagi saya. Namun, konverter Arduino akan menahan 45 mA.

Koneksi
GPS tidak dikontrol, meski memiliki pin RX. Untuk tujuan apa tidak diketahui. Hal utama yang dapat Anda lakukan dengan receiver ini adalah membaca data melalui protokol NMEA dari pin TX. Level - 5V, hanya untuk Arduino, kecepatan - 9600 baud. Saya menghubungkan VIN ke VCC dari Arduino, GND ke GND, TX ke RX dari serial yang sesuai. Saya membaca datanya terlebih dahulu secara manual, kemudian menggunakan perpustakaan TinyGPS. Anehnya, semuanya bisa dibaca. Setelah beralih ke Uno, saya harus menggunakan SoftwareSerial, dan kemudian masalah dimulai - beberapa karakter pesan hilang. Ini tidak terlalu penting, karena TinyGPS memotong pesan yang tidak valid, tetapi ini sangat tidak menyenangkan: Anda bisa melupakan frekuensi 1Hz.

Catatan singkat tentang SoftwareSerial: tidak ada port perangkat keras di Uno (selain yang terhubung ke USB Serial), jadi Anda harus menggunakan perangkat lunak. Jadi, ia hanya dapat menerima data pada pin yang papannya mendukung interupsi. Dalam kasus Uno, ini adalah 2 dan 3. Selain itu, hanya satu port yang dapat menerima data pada satu waktu.

Seperti inilah tampilan “bangku tes”.

Penerima/pemancar GSM


Sekarang sampai pada bagian yang lebih menarik. Modul GSM - SIM900. Ini mendukung GSM dan GPRS. Baik EDGE, apalagi 3G, tidak didukung. Untuk transmisi data koordinat, ini mungkin bagus - tidak akan ada penundaan atau masalah saat berpindah antar mode, ditambah lagi GPRS sekarang tersedia hampir di mana-mana. Namun, untuk beberapa aplikasi yang lebih kompleks, hal ini mungkin tidak cukup.

Koneksi
Modul ini juga dikontrol melalui port serial, dengan level yang sama - 5V. Dan di sini kita membutuhkan RX dan TX. Modulnya adalah perisai, yaitu dipasang di Arduino. Selain itu, ini kompatibel dengan mega dan uno. Kecepatan defaultnya adalah 115200.

Kami merakitnya di Mega, dan di sini kejutan tidak menyenangkan pertama menanti kami: pin TX modul jatuh pada pin ke-7 Mega. Interupsi tidak tersedia pada pin ke-7 mega, yang berarti Anda harus menghubungkan pin ke-7, katakanlah, ke pin ke-6, di mana interupsi mungkin terjadi. Jadi, kita akan membuang satu pin Arduino. Yah, untuk mega itu tidak terlalu menakutkan - lagipula, pinnya cukup. Tapi untuk Uno ini sudah lebih rumit (saya ingatkan hanya ada 2 pin yang mendukung interupsi - 2 dan 3). Sebagai solusi untuk masalah ini, kami menyarankan untuk tidak memasang modul pada Arduino, tetapi menghubungkannya dengan kabel. Kemudian Anda dapat menggunakan Serial1.

Setelah terkoneksi, kita coba “berbicara” dengan modul (jangan lupa nyalakan). Kami memilih kecepatan port - 115200, dan ada baiknya jika semua port serial bawaan (4 di mega, 1 di uno) dan semua port perangkat lunak bekerja pada kecepatan yang sama. Dengan cara ini Anda dapat mencapai transfer data yang lebih stabil. Aku tidak tahu kenapa, meski aku bisa menebaknya.

Jadi, kami menulis kode primitif untuk meneruskan data antar port serial, mengirim atz, dan menerima keheningan sebagai respons. Apa yang terjadi? Ah, peka huruf besar-kecil. ATZ, kami baik-baik saja. Hore, modul dapat mendengar kita. Haruskah Anda menelepon kami karena penasaran? ATD +7499... Telepon rumah berdering, asap keluar dari arduino, laptop mati. Konverter Arduino terbakar. Merupakan ide yang buruk untuk memberinya tegangan 19 volt, meskipun tertulis dapat beroperasi dari 6 hingga 20V, mereka merekomendasikan 7-12V. Lembar data untuk modul GSM tidak menyebutkan konsumsi daya saat beban. Nah, Mega pergi ke gudang suku cadang. Dengan nafas tertahan, aku menyalakan laptop yang menerima +19V melalui jalur +5V dari USB. Berhasil, dan bahkan USBnya tidak mati. Terima kasih Lenovo karena telah melindungi kami.

Setelah konverter terbakar, saya mencari konsumsi saat ini. Jadi, puncaknya adalah 2A, tipikalnya adalah 0,5A. Ini jelas di luar kemampuan konverter Arduino. Membutuhkan makanan terpisah.

Pemrograman
Modul ini menyediakan kemampuan transfer data yang luas. Mulai dari panggilan suara dan SMS dan diakhiri dengan GPRS itu sendiri. Selain itu, untuk yang terakhir dimungkinkan untuk mengeksekusi permintaan HTTP menggunakan perintah AT. Anda harus mengirim beberapa, tapi itu sepadan: Anda tidak benar-benar ingin membuat permintaan secara manual. Ada beberapa perbedaan dalam membuka saluran transmisi data melalui GPRS - ingat AT+CGDCONT=1, “IP”, “apn” klasik? Jadi, hal yang sama diperlukan di sini, tetapi sedikit lebih licik.

Untuk mendapatkan halaman di URL tertentu, Anda perlu mengirimkan perintah berikut:
AT+SAPBR=1,1 //Buka operator (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tipe koneksi - GPRS AT+SAPBR=3,1,"APN","internet" //APN, untuk Megafon - internet AT+HTTPINIT //Inisialisasi HTTP AT+HTTPPARA="CID",1 //ID Operator yang akan digunakan. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //URL sebenarnya, setelah sprintf dengan koordinat AT+HTTPACTION=0 // Minta data menggunakan metode GET //tunggu respons AT+HTTPTERM //hentikan HTTP

Alhasil, jika ada koneksi, kita akan mendapat respon dari server. Artinya, kita sebenarnya sudah mengetahui cara mengirim data koordinat jika server menerimanya melalui GET.

Nutrisi
Karena memberi daya pada modul GSM dari konverter Arduino, seperti yang saya ketahui, adalah ide yang buruk, diputuskan untuk membeli konverter 12v->5v, 3A di ebay yang sama. Namun, modul ini tidak menyukai catu daya 5V. Mari kita lakukan peretasan: sambungkan 5V ke pin dari mana 5V berasal dari Arduino. Kemudian konverter bawaan modul (jauh lebih kuat daripada konverter Arduino, MIC 29302WU) akan menghasilkan 5V sesuai kebutuhan modul.

pelayan

Server menulis yang primitif - menyimpan koordinat dan menggambar di Yandex.maps. Di masa depan, dimungkinkan untuk menambahkan berbagai fitur, termasuk dukungan untuk banyak pengguna, status “bersenjata/tidak bersenjata”, status sistem kendaraan (pengapian, lampu depan, dll.), dan bahkan mungkin pengendalian sistem kendaraan. Tentu saja, dengan dukungan pelacak yang sesuai, yang dengan lancar berubah menjadi sistem alarm lengkap.

Tes lapangan

Seperti inilah tampilan perangkat rakitan, tanpa casing:

Setelah memasang konverter daya dan menempatkannya di casing modem DSL yang mati, sistemnya terlihat seperti ini:

Saya menyolder kabel dan melepaskan beberapa kontak dari blok Arduino. Mereka terlihat seperti ini:

Saya menghubungkan 12V di dalam mobil, berkeliling Moskow, dan mendapatkan trek:


Titik lintasannya cukup berjauhan satu sama lain. Pasalnya pengiriman data melalui GPRS membutuhkan waktu yang relatif lama dan selama itu koordinat tidak terbaca. Ini jelas merupakan kesalahan pemrograman. Hal ini ditangani, pertama, dengan segera mengirimkan paket koordinat dari waktu ke waktu, dan kedua, dengan bekerja secara asinkron dengan modul GPRS.

Waktu pencarian satelit di kursi penumpang mobil adalah beberapa menit.

kesimpulan

Membuat pelacak GPS di Arduino dengan tangan Anda sendiri adalah mungkin, meskipun bukan tugas yang sepele. Pertanyaan utamanya sekarang adalah bagaimana cara menyembunyikan perangkat di dalam mobil agar tidak terkena faktor berbahaya (air, suhu), tidak tertutup logam (GPS dan GPRS akan terlindung) dan tidak terlalu terlihat. Untuk saat ini hanya terletak di kabin dan disambungkan ke soket pemantik rokok.

Nah, kita juga perlu memperbaiki kodenya agar trek lebih lancar, meskipun pelacak sudah melakukan tugas utama.

Perangkat bekas

  • Arduino Mega 2560
  • Arduino Uno
  • GPS SkyLab SKM53
  • Perisai GSM/GPRS berbasis SIM900
  • Konverter DC-DC 12v->5v 3A

Setelah beberapa kali percobaan dengan Arduino, saya memutuskan untuk membuat pelacak GPS yang sederhana dan tidak terlalu mahal dengan koordinat yang dikirim melalui GPRS ke server.
Digunakan Arduino Mega 2560 (Arduino Uno), SIM900 - modul GSM/GPRS (untuk mengirim informasi ke server), penerima GPS SKM53 GPS.

Semuanya dibeli di eBay.com, dengan total sekitar 1500 rubel (sekitar 500 rubel untuk Arduino, sedikit lebih sedikit untuk modul GSM, sedikit lebih banyak untuk GPS).

Penerima GPS

Pertama, Anda perlu memahami cara bekerja dengan GPS. Modul yang dipilih adalah salah satu yang termurah dan paling sederhana. Namun pihak pabrikan menjanjikan baterai untuk menyimpan data satelit. Menurut lembar data, start dingin akan memakan waktu 36 detik, namun dalam kondisi saya (lantai 10 dari ambang jendela, tidak ada bangunan di dekatnya) butuh waktu hingga 20 menit. Namun permulaan berikutnya sudah 2 menit.

Parameter penting dari perangkat yang terhubung ke Arduino adalah konsumsi daya. Jika Anda membebani konverter Arduino secara berlebihan, konverter tersebut mungkin akan terbakar. Untuk receiver yang digunakan, konsumsi daya maksimalnya adalah [email protected]. Mengapa spesifikasi harus menunjukkan kekuatan arus pada tegangan selain yang disyaratkan (5V) adalah misteri bagi saya. Namun, konverter Arduino akan menahan 45 mA.

Koneksi

GPS tidak dikontrol, meski memiliki pin RX. Untuk tujuan apa tidak diketahui. Hal utama yang dapat Anda lakukan dengan receiver ini adalah membaca data melalui protokol NMEA dari pin TX. Level - 5V, hanya untuk Arduino, kecepatan - 9600 baud. Saya menghubungkan VIN ke VCC dari Arduino, GND ke GND, TX ke RX dari serial yang sesuai. Saya membaca datanya terlebih dahulu secara manual, kemudian menggunakan perpustakaan TinyGPS. Anehnya, semuanya bisa dibaca. Setelah beralih ke Uno, saya harus menggunakan SoftwareSerial, dan kemudian masalah dimulai - beberapa karakter pesan hilang. Ini tidak terlalu penting, karena TinyGPS memotong pesan yang tidak valid, tetapi ini sangat tidak menyenangkan: Anda bisa melupakan frekuensi 1Hz.

Catatan singkat tentang SoftwareSerial: tidak ada port perangkat keras di Uno, jadi Anda harus menggunakan port perangkat lunak. Jadi, ia hanya dapat menerima data pada pin yang papannya mendukung interupsi. Dalam kasus Uno, ini adalah 2 dan 3. Selain itu, hanya satu port yang dapat menerima data pada satu waktu.

Seperti inilah tampilan “bangku tes”.


Penerima/pemancar GSM


Sekarang sampai pada bagian yang lebih menarik. Modul GSM - SIM900. Ini mendukung GSM dan GPRS. Baik EDGE, apalagi 3G, tidak didukung. Untuk transmisi data koordinat, ini mungkin bagus - tidak akan ada penundaan atau masalah saat berpindah antar mode, ditambah lagi GPRS sekarang tersedia hampir di mana-mana. Namun, untuk beberapa aplikasi yang lebih kompleks, hal ini mungkin tidak cukup.

Koneksi

Modul ini juga dikontrol melalui port serial, dengan level yang sama - 5V. Dan di sini kita membutuhkan RX dan TX. Modulnya adalah perisai, yaitu dipasang di Arduino. Selain itu, ini kompatibel dengan mega dan uno. Kecepatan defaultnya adalah 115200.

Kami merakitnya di Mega, dan di sini kejutan tidak menyenangkan pertama menanti kami: pin TX modul jatuh pada pin ke-7 Mega. Interupsi tidak tersedia pada pin ke-7 mega, yang berarti Anda harus menghubungkan pin ke-7, katakanlah, ke pin ke-6, di mana interupsi mungkin terjadi. Jadi, kita akan membuang satu pin Arduino. Yah, untuk mega itu tidak terlalu menakutkan - lagipula, pinnya cukup. Tapi untuk Uno ini sudah lebih rumit (saya ingatkan hanya ada 2 pin yang mendukung interupsi - 2 dan 3). Sebagai solusi untuk masalah ini, kami menyarankan untuk tidak memasang modul pada Arduino, tetapi menghubungkannya dengan kabel. Kemudian Anda dapat menggunakan Serial1.

Setelah terkoneksi, kita coba “berbicara” dengan modul (jangan lupa nyalakan). Kami memilih kecepatan port - 115200, dan ada baiknya jika semua port serial bawaan (4 di mega, 1 di uno) dan semua port perangkat lunak bekerja pada kecepatan yang sama. Dengan cara ini Anda dapat mencapai transfer data yang lebih stabil. Aku tidak tahu kenapa, meski aku bisa menebaknya.

Jadi, kami menulis kode primitif untuk meneruskan data antar port serial, mengirim atz, dan menerima keheningan sebagai respons. Apa yang terjadi? Ah, peka huruf besar-kecil. ATZ, kami baik-baik saja. Hore, modul dapat mendengar kita. Haruskah Anda menelepon kami karena penasaran? ATD +7499... Telepon rumah berdering, asap keluar dari arduino, laptop mati. Konverter Arduino terbakar. Merupakan ide yang buruk untuk memberinya tegangan 19 volt, meskipun tertulis dapat beroperasi dari 6 hingga 20V, mereka merekomendasikan 7-12V. Lembar data untuk modul GSM tidak menyebutkan konsumsi daya saat beban. Nah, Mega pergi ke gudang suku cadang. Dengan nafas tertahan, aku menyalakan laptop yang menerima +19V melalui jalur +5V dari USB. Berhasil, dan bahkan USBnya tidak mati. Terima kasih Lenovo karena telah melindungi kami.


Setelah konverter terbakar, saya mencari konsumsi saat ini. Jadi, puncaknya adalah 2A, tipikalnya adalah 0,5A. Ini jelas di luar kemampuan konverter Arduino. Membutuhkan makanan terpisah.

Pemrograman

Modul ini menyediakan kemampuan transfer data yang luas. Mulai dari panggilan suara dan SMS dan diakhiri dengan GPRS itu sendiri. Selain itu, untuk yang terakhir dimungkinkan untuk mengeksekusi permintaan HTTP menggunakan perintah AT. Anda harus mengirim beberapa, tapi itu sepadan: Anda tidak benar-benar ingin membuat permintaan secara manual. Ada beberapa perbedaan dalam membuka saluran transmisi data melalui GPRS - ingat AT+CGDCONT=1, “IP”, “apn” klasik? Jadi, hal yang sama diperlukan di sini, tetapi sedikit lebih licik.

Untuk mendapatkan halaman di URL tertentu, Anda perlu mengirimkan perintah berikut:

AT+SAPBR=1,1 //Buka operator (Carrier) AT+SAPBR=3,1,"CONTYPE","GPRS" //tipe koneksi - GPRS AT+SAPBR=3,1,"APN","internet" //APN, untuk Megafon - internet AT+HTTPINIT //Inisialisasi HTTP AT+HTTPPARA="CID",1 //ID Operator yang akan digunakan. AT+HTTPPARA="URL","http://www.example.com/GpsTracking/record.php?Lat=%ld&Lng=%ld" //URL sebenarnya, setelah sprintf dengan koordinat AT+HTTPACTION=0 // Minta data menggunakan metode GET //tunggu respons AT+HTTPTERM //hentikan HTTP

Alhasil, jika ada koneksi, kita akan mendapat respon dari server. Artinya, kita sebenarnya sudah mengetahui cara mengirim data koordinat jika server menerimanya melalui GET.

Nutrisi

Karena memberi daya pada modul GSM dari konverter Arduino, seperti yang saya ketahui, adalah ide yang buruk, diputuskan untuk membeli konverter 12v->5v, 3A di ebay yang sama. Namun, modul ini tidak menyukai catu daya 5V. Mari kita lakukan peretasan: sambungkan 5V ke pin dari mana 5V berasal dari Arduino. Kemudian konverter bawaan modul (jauh lebih kuat daripada konverter Arduino, MIC 29302WU) akan menghasilkan dari 5V sesuai kebutuhan modul.

pelayan

Server menulis yang primitif - menyimpan koordinat dan menggambar di Yandex.maps. Di masa depan, dimungkinkan untuk menambahkan berbagai fitur, termasuk dukungan untuk banyak pengguna, status “bersenjata/tidak bersenjata”, status sistem kendaraan (pengapian, lampu depan, dll.), dan bahkan mungkin pengendalian sistem kendaraan. Tentu saja, dengan dukungan pelacak yang sesuai, yang dengan lancar berubah menjadi sistem alarm lengkap.

Tes lapangan

Seperti inilah tampilan perangkat rakitan, tanpa casing:


Setelah memasang konverter daya dan menempatkannya di casing modem DSL yang mati, sistemnya terlihat seperti ini:

Saya menyolder kabel dan melepaskan beberapa kontak dari blok Arduino. Mereka terlihat seperti ini:

Saya menghubungkan 12V di dalam mobil, berkeliling Moskow, dan mendapatkan trek:


Treknya ternyata sobek. Pasalnya pengiriman data melalui GPRS membutuhkan waktu yang relatif lama dan selama itu koordinat tidak terbaca. Ini jelas merupakan kesalahan pemrograman. Hal ini ditangani, pertama, dengan segera mengirimkan paket koordinat dari waktu ke waktu, dan kedua, dengan bekerja secara asinkron dengan modul GPRS.

Pemancar GPS pribadi

Saat ini, kemajuan berjalan begitu cepat sehingga perangkat yang sebelumnya berukuran besar, mahal, dan sangat terspesialisasi dengan cepat kehilangan ukuran, berat, dan harga, namun mendapatkan banyak fungsi baru.

Beginilah cara perangkat berbasis teknologi GPS menjangkau gadget saku dan menetap di sana, memberikan peluang baru bagi masyarakat. Sangatlah penting untuk menyoroti masing-masing pemancar GPS.

Pada dasarnya, ini adalah pelacak GPS yang sama, hanya dirancang untuk digunakan bukan pada kendaraan, tetapi oleh seseorang dalam kehidupan sehari-hari.

Tergantung pada modelnya, beberapa perangkat berbeda dapat digabungkan dalam satu wadah. Dalam bentuknya yang paling sederhana, ini hanyalah sebuah kotak kecil tanpa pajangan memungkinkan Anda mengontrol pergerakan anak-anak, hewan, atau objek lainnya, yang diperbaiki.

Di dalamnya terdapat modul GPS yang menentukan koordinat di lapangan, modul GSM/GPRS yang mengirimkan informasi dan menerima perintah kendali, serta sumber listrik yang menjamin pengoperasian otonom dalam waktu lama.

Fungsi pemancar GPS

Seiring meningkatnya fungsionalitas, kemampuan perangkat berikut muncul:


Pilihan untuk pemancar GPS

Tergantung pada konfigurasinya, rumah pemancar mungkin berbeda secara signifikan. Berbagai model tersedia dalam bentuk ponsel, navigator klasik, atau bahkan jam tangan.

Desain warna-warni dari versi khusus dan tambahan yang berguna memungkinkan anak-anak memperlakukan perangkat ini bukan sebagai “mata-mata orang tua”, tetapi sebagai gadget yang modis dan praktis.

Sebagai keuntungan, perlu disebutkan fakta bahwa banyak versi perangkat berfungsi dengan baik tanpa biaya berlangganan untuk layanan operator khusus, dan semua informasi yang diperlukan dikirim ke klien secara langsung melalui Internet atau pesan SMS, yang memungkinkan penghematan yang signifikan. tentang pemeliharaan peralatan tersebut.

Artikel tentang pelacak GPS

Pada artikel ini saya akan menunjukkan cara menggunakan modul gsm dengan arduino menggunakan sim800L sebagai contoh. Instruksi yang sama cukup cocok untuk menggunakan modul gsm lainnya, misalnya sim900, dll., karena semua modul bekerja dengan cara yang kurang lebih sama - ini adalah pertukaran perintah AT melalui port.

Saya akan menunjukkan penggunaan modul dengan arduino menggunakan contoh relay SMS, yang dapat digunakan untuk mengontrol perangkat dari jarak jauh melalui perintah SMS. Ini dapat digunakan bersama dengan alarm mobil, dll.

Modul terhubung ke Arduino melalui antarmuka UART dari port serial perangkat lunak yang beroperasi pada 2 dan 3 pin digital Arduino nano.

Bekerja Arduino dengan modul GSM

Untuk memberi daya pada modul, diperlukan tegangan dalam kisaran 3,6V hingga 4,2V, yang berarti Anda harus menggunakan penstabil tegangan tambahan, karena Arduino memiliki penstabil 3,3 volt yang terpasang, yang tidak cocok untuk memberi daya pada modul. , alasan kedua untuk memasang stabilizer tambahan adalah karena modul GSM mengalami beban serius, karena memiliki pemancar lemah yang menyediakan komunikasi stabil dengan stasiun seluler. Daya untuk Arduino nano disuplai ke pin VIN - ini adalah stabilizer yang terpasang di Arduino yang memastikan modul beroperasi pada rentang tegangan lebar (6-10V). Modul relai dihubungkan sesuai dengan teks program yang diberikan ke pin 10 Arduino nano dan dapat dengan mudah diubah ke modul lain yang berfungsi sebagai keluaran digital.

Cara kerjanya seperti ini: kita memasang kartu SIM di modul GSM, hidupkan daya dan kirim SMS dengan teks "1" ke nomor kartu SIM untuk menghidupkan relay kita, untuk mematikannya kita kirim SMS dengan teks “0”.

#termasuk
Perangkat LunakSerial gprsSerial(2, 3); // atur pin 2 dan 3 untuk port perangkat lunak
int Pin Led = 10; // untuk relai

batalkan pengaturan()
{
gprsSerial.begin(4800);
pinMode(Pin Led, KELUARAN);

// mengatur penerimaan pesan

gprsSerial.print("AT+CMGF=1\r");
gprsSerial.print("AT+IFC=1, 1\r");
penundaan(500);
gprsSerial.print("AT+CPBS=\"SM\"\r");
penundaan(500); // penundaan pemrosesan perintah
gprsSerial.print("AT+CNMI=1,2,2,1,0\r");
penundaan(700);
}

String arusStr = "";
// jika baris ini adalah pesan, maka variabel akan mengambil nilai True
boolean isStringMessage = salah;

lingkaran kosong()
{
jika (!gprsSerial.tersedia())
kembali;

char currSymb = gprsSerial.read();
if ('\r' == simbol saat ini) (
jika (isStringMessage) (
// jika baris saat ini adalah pesan, maka...
if (!currStr.compareTo("1")) (
digitalWrite(LedPin, TINGGI);
) else if (!currStr.compareTo("0")) (
digitalWrite(LedPin, RENDAH);
}
isStringMessage = salah;
) kalau tidak (
if (currStr.startsWith("+CMT")) (
// jika baris saat ini dimulai dengan “+CMT”, maka pesan berikutnya
isStringMessage = benar;
}
}
arusStr = "";
) lain jika ('\n' != CurrSymb) (
currStr += String(currSymb);
}
}

Versi video artikel:

Tag: #Arduino, #SIM800L

Tanda Anda:

Produk yang digunakan dalam artikel ini:

← Pencatat GPS di Arduino | Kontrol relai melalui port COM →

Pemindai GSM pada RTL-SDR

| rumah| Bahasa Inggris | Pembangunan | Pertanyaan Umum |

Karakteristik utama pemindai

Pemindai GSM memindai saluran GSM hilir dan menampilkan informasi tentang level sinyal dan apakah saluran tersebut milik salah satu dari tiga operator seluler utama MTS, Beeline dan Megafon. Berdasarkan hasil kerjanya, pemindai memungkinkan Anda menyimpan daftar pengidentifikasi stasiun pangkalan MCC, MNC, LAC dan CI untuk semua saluran yang dipindai.
Pemindai GSM dapat digunakan untuk menilai tingkat sinyal GSM, membandingkan kualitas sinyal dari berbagai operator, menilai jangkauan radio, ketika memutuskan untuk memasang penguat sinyal seluler dan menyesuaikan parameternya, untuk tujuan pendidikan, dll.
Pemindai berjalan di bawah Windows dan menggunakan receiver yang sederhana dan murah - RTL-SDR. Anda dapat membaca tentang RTL-SDR di:
RTL-SDR (RTL2832U) dan berita dan proyek radio yang ditentukan perangkat lunak,
RTL-SDR – OsmoSDR,
RTL-SDR dalam bahasa Rusia.
Parameter RTL-SDR menentukan karakteristik utama pemindai. Tentu saja, pemindai GSM bukanlah pengganti peralatan pengukuran biasa.
Pemindai ini didistribusikan secara gratis, tanpa batasan penggunaan.
Versi saat ini mendukung pita GSM 900 dan tidak mendukung GSM 1800. Hal ini disebabkan oleh fakta bahwa frekuensi pengoperasian RTL-SDR dengan tuner R820T dibatasi hingga 1760 MHz. Ada harapan bahwa penggunaan driver RTL-SDR eksperimental akan memungkinkan pengoperasian setidaknya sebagian dari rentang 1800 MHz.

Meluncurkan pemindai

Pemindai versi terbaru dapat diunduh dari tautan ini. Cukup unzip file ke lokasi yang nyaman dan jalankan gsmscan.exe.
Pemindai versi sebelumnya, tautan ke repositori dengan sumber dan informasi lain yang terkait dengan pengembangan terdapat di halaman pengembangan.
Pemindai memerlukan instalasi driver RTL-SDR; jika belum diinstal, hal ini dapat dilakukan dengan mudah menggunakan program Zadig, yang menjelaskan prosedur instalasi.

Menggunakan Pemindai

Di bawah ini adalah tampilan jendela program pemindai:

Sumbu horizontal menampilkan nomor saluran GSM dalam bentuk ARFCN atau dalam MHz, dan sumbu vertikal menunjukkan level sinyal dalam dBm. Ketinggian garis menunjukkan kekuatan sinyal.

Modul GSM komunikasi NEOWAY M590 dengan Arduino

Jika pengidentifikasi BS telah berhasil didekodekan dan sesuai dengan pengidentifikasi tiga operator telekomunikasi besar, garis-garis tersebut dicat dengan warna yang sesuai.
Daftar drop-down di bagian atas layar memungkinkan Anda memilih penerima SDR, jika beberapa terhubung, rentang operasi GSM 900 atau GSM 1800 dan unit pengukuran sepanjang sumbu horizontal ARFCN atau MHz.
Tombol-tombol tersebut memungkinkan Anda menyimpan laporan tentang pengoperasian pemindai dalam bentuk daftar stasiun pangkalan yang didekodekan, menghapus hasil penguraian kode BS, dan memperoleh informasi tentang program.

Prinsip dan ciri kerja.

Selama operasi, program memindai rentang frekuensi operasi dengan langkah 2,0 MHz (10 saluran GSM) dan mendigitalkan sinyal dengan frekuensi sampling 2,4 MHz. Proses pemindaian terdiri dari lintasan cepat melalui seluruh rentang untuk mengukur kekuatan sinyal dan lintasan lambat untuk memecahkan kode pengidentifikasi BS.

Satu langkah decoding dilakukan setelah melintasi seluruh rentang untuk mengukur daya. Jadi, dalam rentang GSM 900, level sinyal diperbarui kira-kira sekali setiap 2 detik, dan proses decoding lengkap membutuhkan waktu sekitar 1 menit.
Karena buruknya kualitas sinyal yang diterima dari RTL-SDR, kemungkinan decoding informasi sistem (SI) saluran kontrol siaran BS (BCCH) dengan benar tidak tinggi. Fluktuasi level sinyal sebagai akibat dari propagasi multipath juga mengurangi kemungkinan penguraian kode informasi sistem. Karena alasan ini, untuk mendapatkan pengidentifikasi BS, pemindai perlu mengumpulkan informasi selama jangka waktu sekitar 10 menit. Namun bahkan dalam kasus ini, tidak semua saluran memberikan tingkat dan kualitas sinyal yang memadai di lokasi tertentu untuk decoding bahkan oleh receiver yang paling ideal sekalipun. Selain itu tidak semua channel GSM yang digunakan berfungsi sesuai standar GSM, seperti terlihat pada gambar di atas, channel 975 - 1000 ditempati oleh Megafon agar berfungsi sesuai standar UMTS.
Selama pengoperasian, pemindai menambahkan informasi sistem tentang saluran baru yang didekodekan ke rangkaian informasi umum pada saluran. Namun informasi tentang saluran yang didekodekan sebelumnya tidak terhapus ketika informasi sistem tidak didekodekan pada langkah ini, dan tetap berada dalam array. Untuk menghapus informasi ini, gunakan tombol untuk menghapus hasil decoding BS.
Ketika Anda mengklik tombol simpan laporan, hasil akumulasi disimpan ke dalam file teks dengan nama yang terdiri dari nama program, tanggal dan waktu penyimpanan data. Di bawah ini adalah contoh bagian dari file laporan:
Pemindai dirancang untuk bekerja di bawah Windows 7, 8.1 dan 10. Pekerjaan diuji dengan tiga salinan RTL-SDR dengan tuner R820T;
Versi khusus dari program ini telah dikompilasi untuk bekerja pada Windows XP; program ini berjalan beberapa kali lebih lambat dari versi standar.

Perkembangan.

Program pemindai disediakan sebagaimana adanya, tanpa jaminan atau tanggung jawab apa pun. Jika Anda memiliki gagasan yang masuk akal tentang cara memperluas fungsionalitas atau meningkatkan kinerja pemindai, kami siap mendiskusikan kemungkinan penerapannya.
Anda dapat mengambil bagian dalam pengembangan pemindai; untuk melakukan ini, kunjungi halaman pengembangan.
Pengembangan lebih lanjut dari pemindai GSM direncanakan, mungkin dengan partisipasi Anda.