Pelacakan GPS Instan untuk Arduino MKR GSM 1400 melalui SMS
Komponen dan Perlengkapan
Arduino MKR GSM 1400 (1)
Tentang Proyek Ini
Catatan: Tutorial ini mungkin sudah ketinggalan zaman, silakan pergi disini untuk versi yang lebih terkini.
Tujuan proyek ini adalah untuk menunjukkan cara menggunakan pelokalan seluler dari Arduino MKR GSM 1400. Untuk melakukan ini, kami mengimplementasikan aplikasi sederhana yang memungkinkan Anda untuk mencoba lintang dan bujur MKR GSM saat SMS dengan huruf pemeriksaan keamanan diterima. Nomor pengirim diambil dari SMS yang diterima dan balasan dibuat dengan tautan Google Maps yang tepat yang dilengkapi dengan koordinat yang diberikan oleh layanan pelokalan yang disediakan oleh modul u-blox.
Apa yang Anda Butuhkan
Proyek ini didasarkan pada Arduino MKR GSM 1400, antena, paket baterai LiPo, ponsel, dan satu SIM data.
Arduino MKR GSM 1400 mengeksekusi sketsa dan mendukung konektivitas GSM yang memungkinkan fungsi pelokalan yang diperlukan oleh proyek kami;
Antenna dan paket baterai masing-masing digunakan untuk memungkinkan koneksi ke jaringan data seluler dengan sinyal yang baik dan untuk menyediakan daya pada perangkat ketika sumber daya lain tidak tersedia;
Ponsel diperlukan untuk mengirim SMS ke MKR GSM 1400 dan meminta pelokalan GPRS;
Kartu SIM diperlukan untuk mengakses jaringan data dan memungkinkan operasi jaringan;
PIN, APN, dan kredensial akses diperlukan untuk terhubung ke jaringan data.
Pengaturan Perangkat Keras
Proyek ini tidak membutuhkan sesuatu yang khusus. Hubungkan antena ke papan, masukkan kartu SIM dan hubungkan baterai LiPo ke konektor JST.
Baterai LiPo opsional, tetapi memungkinkan untuk mengatasi puncak arus yang mungkin diperlukan modul GSM dalam kondisi khusus cakupan buruk.
Cara Kerja
Proyek ini menggunakan pustaka MKRGSM untuk mengelola pesan SMS dan georeferensi berbasis sel.
Saat SMS diterima, isi diperiksa untuk mengetahui apakah berisi huruf “L”. Hanya jika demikian, sketsa melanjutkan dengan pelokalan dan transmisi SMS. Dengan solusi ini, nomor apa pun dapat meminta lokasi sistem, tetapi hanya mereka yang tahu kata sandi (huruf “rahasia”) yang akan mendapatkan balasan. Ini adalah baris yang melakukan pemeriksaan if (c != 76) dan 76 adalah kode ASCII dari “L”. Anda dapat mengubah nilainya untuk mengubah huruf yang dikenali.
Modul GSM tidak memiliki penerima GPS, tetapi produsen memiliki database lokasi setiap sel dari jaringan GSM dan oleh karena itu menyediakan koordinat untuk setiap ID sel yang disediakan. Sistem ini cukup akurat di area perkotaan, di mana setiap sel mencakup area kecil. Di area pedesaan cakupan setiap sel jauh lebih besar dan lokasi yang disediakan dengan pendekatan yang lebih kasar.
Untuk membuat tautan untuk Google Maps kami menggunakan URL standar tempat kami hanya menyatukan nilai Long dan Lat yang tepat di akhir. URL ini terlihat seperti “https://www.google.com/maps/place/<LAT>, <LONG>”. Posisi yang ditampilkan pada peta akan menjadi tempat di mana sel secara fisik berada; papan kami dalam jangkauan yang dicakupi oleh sel.
Sketsa
Berikut deskripsi rinci dari Sketsa; bagian kode pertama digunakan untuk menyertakan pustaka yang diperlukan oleh aplikasi.
MKRGSM menyertakan semua fungsi koneksi GSM, pelokalan dan manajemen SMS, ini tersedia melalui objek GSMClient, GPRS, GSM dan GSMLocation, API manajemen SMS tersedia melalui objek GSM_SMS, header ArduinoLowPower mengimpor API yang memungkinkan manajemen daya rendah modul Papan.
Jika Anda mengunduh kode dari Web Editor, Anda akan menemukan file arduino_secrets.h yang menyertakan data sensitif seperti PIN, APN, user dan password. Di web editor, Anda harus mengisi data sensitif di Tab Secrets.
Fungsi measureLocation() meminta modul untuk mencoba koordinat melalui jaringan seluler, jika koordinat baru tersedia itu menetapkannya ke variabel global sebaliknya meminta lagi selama 45 detik, jika tidak ada yang tersedia ukuran yang mematuhi batasan akurasi itu mengembalikan yang terbaik terakhir
//global variable used for location management String GSMlatitude = "0.000000"; String GSMlongitude = "0.000000"; // This function use the location's APIs to get the device coordinates and update the globa variable if all the requirement are satisfied void measureLocation() { unsigned long timeout = millis(); while (millis() - timeout < 45000) { if (location.available() && location.accuracy() < 300 && location.accuracy() != 0) { GSMlatitude = String(location.latitude(), 6); GSMlongitude = String(location.longitude(), 6); break; } } }
Fungsi connectNetwork() menggunakan API smAccess.begin dan gprs.attachGPRS untuk menghubungkan papan ke jaringan data; kredensial data yang digunakan pin, apn, user dan pass yang ditetapkan oleh deklarasi di arduino_secrets.h.
// The connectNetwork() function is used for the board data connection void connectNetwork() { bool status = false; //set global AT command timeout this allow to recover from uart communication // freeze between samd module and ublox module. gprs.setTimeout(100000); gsmAccess.setTimeout(100000); // Start GSM connection while (status == false) { if ((gsmAccess.begin(PINNUMBER) == GSM_READY) & (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD) == GPRS_READY)) { status = true; } else { delay(1000); } } } The setup section allow to initialize all the object used by the sketch, is called the connectionNetwork() function to establish the data connection and the localization structure beginning. //code section used to initialize data connection and localization object void setup() { connectNetwork(); location.begin(); }
Bagian kode terakhir adalah fungsi loop di mana manajemen SMS dan Pengukuran Lokasi diimplementasikan, setiap kali SMS baru tersedia papan merespons pengirim dengan SMS yang berisi koordinat papan, untuk mengurangi konsumsi papan mematikan modul dan masuk ke tidur dalam selama 60 detik.
void loop() { int c; String response; String messager = ""; measureLocation(); unsigned long timeout = millis(); while (millis() - timeout < 5000) { if (sms.available()) { //check for SMS available char senderNumber[20] = {"0"}; sms.remoteNumber(senderNumber, 20); //Get remote number int c = sms.read(); if (c != 76) { sms.flush(); break; } //concatenate the string message to be sended to the remote number String txtMsg = "https://www.google.com/maps/place/" + GSMlatitude + "," + GSMlongitude; // send the message sms.beginSMS(senderNumber); sms.print(txtMsg); sms.endSMS(); break; } } //Turn off the GSM module to gain the lowest power consumption from the board while are sleeping gsmAccess.shutdown(); LowPower.sleep(60000); //enable the low power for 60 seconds and after retry the board connectNetwork(); //turn on the module and reconect to data network }
Cara Menggunakannya
Siapkan perangkat keras seperti yang dijelaskan di atas, sesuaikan sketsa dengan kredensial akses Anda, muat sketsa ke papan, dan tunggu hingga koneksi terbentuk dengan jaringan GSM. Ini mungkin memakan waktu 30 detik.
Setelah koneksi terbentuk, cukup kirim SMS ke nomor SIM MKRGSM dengan teks “L”: ini akan memulai proses pelokalan dan papan akan merespons dengan SMS yang berisi tautan Google Maps dengan posisi yang diminta.