Pelacak GPS Mobil Terpercaya dengan Integrasi Peta Real-Time Thinger.io
Komponen dan Perlengkapan
Arduino Leonardo – 1 unit (digunakan untuk mendapatkan serial hardware khusus)
SIM900 development board – 1 unit
u-blox NEO-6M GPS module – 1 unit
Antenna GPS – 1 unit
Resistor 220 ohm – 2 unit
LED (generik) – 2 unit
Solder board 7 x 5cm – 1 unit
Modul step down 12V ke 5V – 1 unit
Adafruit SD card reader – 1 unit
Flash Memory Card, MicroSD Card – 1 unit
Alat dan Mesin yang Diperlukan
Soldering iron (generik)
Aplikasi dan Layanan Online
Thinger.io Platform – layanan IoT gratis dengan Dashboard!
Tentang Proyek Ini
Proyek ini dimulai sebagai ide sederhana "pelacak GPS" dan berubah menjadi "pelacak GPS multifungsi". Sebagai proyek pertama saya, kurva pembelajaran cukup tajam, dan saya sangat terbuka untuk masukan, masukan, dan perbaikan pada desain! :)
Pelacak ini dimaksudkan untuk ditempatkan dalam mobil saya dan memiliki fitur berikut:
Melacak koordinat GPS dan memposting lokasi terakhir yang diketahui ke dashboard IoT cloud thinger.io setiap 2 menit (ditampilkan pada peta). Posting ke thinger.io dengan HTTP POST requests.
Membalas perintah SMS dan mengembalikan link Google Maps ke lokasi saat ini atau terakhir yang diketahui (lokasi terakhir jika lokasi saat ini tidak tersedia).
Mengirim notifikasi SMS setiap XX kilometer (ide adalah pelacak mengingatkan saya untuk mengosongkan tangki tangkapan minyak saya setiap 4000km). Ini berfungsi sebagai "odometer" perangkat lunak yang dapat disesuaikan.
Selama proyek ini, saya dengan cepat menyadari betapa "terbatasnya" Arduino in terms of memori yang tersedia dan saya harus belajar teknik untuk mengurangi overhead dan membuat kode yang efisien (setidaknya saya telah mencoba). Saya juga menggunakan library ringan agar semuanya muat pada chip dan RAM yang tersedia.
Komponen yang digunakan adalah sebagai berikut (seperti dalam daftar komponen):
Perangkat GPS NEO-6M. Ini tampaknya merupakan perangkat GPS yang sangat populer dan tersedia dengan harga murah di Ebay dan sejenisnya. Komunikasi dengan GPS akan menggunakan serial hardware.
Antenna GPS. Apa pun yang kompatibel akan cukup, namun saya menemukan yang termurah di Ebay tidak bekerja dengan baik, yaitu resepsi buruk / jumlah satelit rendah. Mungkin saya hanya tidak beruntung dengan antenna pertama, tetapi saya harus mendapatkan yang berkualitas lebih baik untuk resepsi yang stabil.
SIM900 development board untuk konektivitas GSM dan GPRS. Proyek ini juga seharusnya bekerja dengan modul SIM800 dan kompatibel, tidak ada jaminan. Komunikasi dengan SIM900 akan menggunakan serial perangkat lunak.
Papan Arduino Leonardo. Saya menggunakan papan Leonardo untuk memiliki baris serial hardware khusus, karena kita memerlukan dua baris serial. Meskipun memungkinkan untuk menggunakan papan UNO reguler juga, Anda harus melepas GPS untuk mengunduh perangkat lunak dan juga Anda tidak akan memiliki serial monitor untuk debugging. Kita memerlukan dua baris serial (satu untuk GPS dan satu untuk papan SIM900); satu serial perangkat lunak dan satu serial hardware.
Pembaca kartu SD (saya menggunakan pembaca kartu Adafruit yang kompatibel 5V (membuat koneksi ke header 5V SPI mudah). Modul yang lebih murah mungkin juga bekerja sama. Kartu Micro SD akan digunakan untuk menyimpan jarak yang telah ditempuh. Peringatan: pastikan pembaca kartu SD Anda mendukung supply 5V jika mengikuti skematik saya, banyak pembaca kartu SD hanya menggunakan 3,3V. Penggunaan level tegangan yang salah kemungkinan besar akan merusak elektronika. Komunikasi dengan pembaca kartu SD akan menggunakan antarmuka SPI.
LED dan resistor untuk membuat rangkaian indikator status (LED daya dan GPS lock).
Kartu SIM dengan data.
Saya juga telah mendesain kotak 3D printable dengan file STL yang dilampirkan yang dapat dicetak langsung pada printer 3D.
Pertama kita perlu menginstal library yang diperlukan. Saya menggunakan library berikut untuk proyek ini:
NeoGPS untuk pelacakan dan dekoding GPS. Dapat diinstal langsung dari library manager di Arduino IDE. Info lebih lanjut: https://github.com/SlashDevin/NeoGPS
Time library (digunakan untuk konversi zona waktu UTC): https://github.com/PaulStoffregen/Time
PetitFS untuk read/write ke kartu SD: https://github.com/greiman/PetitFS Library SD FAT ringan.
Mengapa tidak menggunakan library yang tersedia untuk Arduino oleh thinger.io?
Meskipun library yang disediakan oleh thinger.io sangat mudah digunakan dan akan menyederhanakan hal-hal secara signifikan, tidak kalah dengan yang sudah terintegrasi di IDE, ini mengonsumsi hampir 80% penyimpanan pada Arduino Leo, sehingga hampir tidak ada ruang yang tersisa untuk kode yang tersisa. Jadi ini terlalu besar untuk proyek ini dan kita akan harus melakukannya dengan cara yang sulit. Untuk berkomunikasi dengan cloud thinger.io kita akan menggunakan HTTP POST requests.
Perintah SMS
Perintah yang tersedia pada SMS adalah sebagai berikut (semua huruf kapital). Ini adalah perintah yang didukung dalam kode yang disediakan; Anda dapat menambahkan / menghapus perintah untuk proyek / kebutuhan Anda sendiri:
"POS" mengembalikan koordinat dengan link Google Maps, jika koordinat tersedia. Jika tidak, lokasi terakhir yang diketahui akan dikembalikan.
"GETKM" mengembalikan jarak saat ini sejak "reset" terakhir.
"RESETKM" mengatur penghitung jarak ke 0 (reset odometer).
Menyiapkan NeoGPS
Kami menggunakan library NeoGPS untuk kinerja dan penggunaan sumber daya dibandingkan alternatif seperti TinyGPS++. Ini mengonsumsi RAM yang sangat sedikit, dan ini diperlukan; jika tidak kita akan mendapatkan peringatan untuk memori rendah dan stabilitas.
Setelah library terinstal, modifikasi file GPSPort.h di jalur instalasi library (contoh yang diberikan adalah untuk OS X - untuk Windows Anda akan menemukan library di lokasi yang berbeda)
Ganti semua konten dalam GPSPort.h dengan yang berikut:
File ini berisi definisi yang digunakan oleh library NeoGPS. Jika Anda menggunakan papan Arduino yang berbeda, ini adalah tempat Anda menentukan baris serial ke penerima GPS, misalnya "Serial2", "Serial3" untuk Arduino MEGA.
Catatan tentang akurasi
Harus dicatat bahwa GPS bukan cara yang paling akurat untuk mengukur dan mengakumulasi jarak, karena posisi akan beregring sedikit bahkan saat diam. Anda dapat menguji ini dengan berdiri diam di tempat yang sama dan amati bahwa koordinat GPS akan berbeda untuk setiap pembacaan. Untuk aplikasi ini, akurasi kurang penting dan oleh karena itu deviasi kecil dapat diterima.
Saya telah mencoba untuk mengakui deviasi kecil dalam koordinat dan perangkat lunak hanya menambahkan jarak untuk gerakan di atas 10m (semua gerakan di bawah 10m dianggap diam) selama 15 detik.
Ingat juga bahwa jarak dihitung dalam garis lurus, sedangkan jarak aktual yang ditempuh mobil tergantung pada jalan, belokan, dll. Saya mengatur tingkat sampling menjadi 15 detik, Anda dapat menurunkannya jika ingin akurasi yang lebih tinggi.
Menyiapkan PetitFS
Library ini adalah library super-ringan untuk read/write ke kartu SD dengan format FAT. Membutuhkan waktu bagi saya untuk memahami cara kerjanya, karena dokumentasi hampir tidak ada dan beberapa bahkan salah / ketinggalan zaman. Kode contoh library yang disediakan bahkan tidak akan dikompilasi. Ini datang dengan banyak pembatasan (berlawanan dengan library "normal" seperti library SD Arduino atau SDFat):
Tidak dapat membuat file. Hanya file yang ada yang dapat ditulis.
Tidak dapat memperluas ukuran file.
Tidak dapat memperbarui stempel waktu file.
Tidak dapat menambahkan data ke file (menulis ulang file setiap kali).
Hanya satu file yang terbuka pada satu waktu.
Mengapa menggunakan library kecil dan terbatas dengan banyak kekhususan?
Ukuran, dasarnya. Saya telah mencoba beberapa library termasuk library SD Arduino, SDFat dan juga fat16lib. Semuanya terlalu besar untuk membuat semua kode muat pada chip, jadi untuk tidak menghapus fungsionalitas saya menggunakan library ini (library SD Arduino standar mengambil sekitar 12% lebih banyak ruang). Meskipun semua kekhususan dan keterbatasan, ini masih menyediakan apa yang kita butuhkan untuk aplikasi ini: read dan write sederhana dari satu nilai untuk penyimpanan.
Jika Anda tidak menggunakan semua kode dan ada cukup ruang untuk menyisipkan sedikit tambahan, jauh lebih mudah untuk bekerja dengan library seperti library SD standar.
Buka file pffArduino.h dari folder library PetitFS. Ubah SD_CS_PIN menjadi 10. Ini adalah pin SS yang digunakan untuk berkomunikasi dengan kartu SD dengan SPI.
Buka file pffconf.h dari folder library. Nonaktifkan opsi berikut dengan mengubah nilai yang diatur dari 1 menjadi 0:
_USE_DIR
_USE_LSEEK
_FS_FAT12
_FS_FAT16
Dengan menonaktifkan opsi ini, program yang dikompilasi mengambil lebih sedikit ruang - yang diperlukan; Skrip akhir mengambil sekitar 96% penyimpanan.
Pada impor pertama library Anda akan mendapatkan error kompilasi yang *dapat* diabaikan (kompilasi kedua error tidak muncul - masih tidak mengerti mengapa). Namun, jika Anda ingin memperbaiki ini (akan muncul kembali setiap kali Anda memulai Arduino IDE -> kompilasi) tambahkan parameter return fungsi yang hilang "FRESULT" seperti yang ditunjukkan dalam screenshot di atas. Ini ada dalam file pff.cpp di folder library.
Saya telah mencoba sebaik mungkin untuk memahami cara kerja library ini dan meskipun saya telah membuat semuanya bekerja, saya cukup yakin hal-hal dapat ditingkatkan juga. Jika Anda menemukan kesalahan atau perbaikan dalam rutinitas yang saya tulis, silakan berbagi! Saya sangat ingin belajar dan membangun lebih banyak pengalaman.
Siapkan kartu SD
Saya menggunakan kartu Micro SD untuk proyek ini. Karena library tidak dapat membuat file sendiri, penting untuk membuat file "dist.txt" dan "settings.txt" pada kartu sebelum digunakan. Saya merekomendasikan menyalin file "dist.txt" dan "settings.txt" yang dilampirkan dari halaman proyek ini, karena file-file ini sudah memiliki format yang benar dan bekerja (library sangat selektif terhadap format dan konten teks).
Sebelum Anda menempatkan file pada kartu Micro SD pastikan untuk memformat kartu dengan benar (sebagai FAT32). Saya merekomendasikan menggunakan "SD Card Formatter" resmi dari SD Association: https://www.sdcard.org/downloads/formatter/.
Memastikan kartu SD bekerja (read / write ke file dengan benar)
Library PetitFS sangat selektif terhadap file masukan. Jika Anda menyalakan perangkat dan tidak ada output yang ditampilkan di serial monitor (hanya kosong) kemungkinan besar macet di "loop" di mana mencoba membaca file dari kartu tetapi tidak dapat untuk beberapa alasan (fungsi initializeSD()). Saya telah memiliki banyak file teks yang untuk beberapa alasan tidak dapat dibaca, oleh karena itu saya telah menyertakan file teks referensi yang saya gunakan yang bekerja. Tempatkan file referensi ini pada kartu SD dan seharusnya dapat baik membaca maupun menulis dengan benar padanya.
Opsi lain dapat menjadi mengisi file teks dengan angka yang lebih besar dari yang ditulis. Saya belum menguji ini, tetapi karena library tidak dapat memperluas ukuran file sendiri, saya mengasumsikan ini dapat menjadi masalah.
PetitFS akan menulis seluruh panjang array karakter ke file, sehingga Anda akan melihat spasi kosong di depan angka aktual (kecuali angka cukup besar untuk mengisi array - panjang "array" ditentukan dalam kode). Spasi ini harus dipertahankan saat membuat perubahan pada file - karena PetitFS tidak dapat mengubah ukuran file, dapat menyebabkan masalah jika jumlah karakter berubah.
Setel file "dist.txt" ke "0" jika Anda ingin odometer dimulai dari "0", atau angka lain untuk memudahkan verifikasi bahwa bekerja, misalnya mengirim perintah "GETKM" untuk verifikasi balasan SMS.
Dalam "settings.txt" Anda menetapkan jarak pemicu notifikasi, jarak tempat odometer memicu notifikasi SMS (dalam meter).
Siapkan Papan SIM900
Beberapa hal harus diatur pada papan SIM900 sebelum kita dapat menggunakannya. Untuk detailnya ada sumber daya yang bagus di https://lastminuteengineers.com/sim900-gsm-shield-arduino-tutorial/ untuk pengaturan papan ini.
Sumber daya
Papan Arduino tidak mampu menyediakan daya yang cukup, oleh karena itu kita harus menggunakan sumber daya eksternal. Karena lonjakan dapat menarik hingga 2A pastikan untuk menggunakan sumber daya yang dapat menyediakan setidaknya 2A pada 5V-9V DC; ini menggunakan konektor barrel 5,5mm.
Pemilih sumber daya
Di samping jack DC ada pemilih sumber daya. Untuk menggunakan sumber daya eksternal, geser slider seperti yang ditunjukkan dalam gambar di atas.
Pemilih serial
Atur papan untuk menggunakan Software Serial dengan menyelaraskan jumper seperti yang ditunjukkan di atas.
Trigger perangkat lunak
Alih-alih menekan tombol power secara manual setiap kali, Anda dapat menyalakan/mematikan SIM900 dalam perangkat lunak. Untuk melakukannya jumper bernama R13 harus di-solder. Papan kemudian akan menyala dengan menghubungkan pin #9 SIM900 ke pin #7 Arduino (seperti ditunjukkan dalam skematik).
Jika mempertahankan fungsionalitas "power on manual", fungsi "SIM900power()" dalam kode dapat dihapus.
Hapus kunci PIN SIM card
Pastikan untuk menghapus kunci PIN pada kartu SIM sebelum digunakan. Ini dapat dilakukan dengan memasukkannya ke ponsel reguler dan menghapus kunci PIN dari menu pengaturan yang berlaku.
Ingat juga bahwa modul SIM900 dalam skematik mungkin terlihat berbeda dari papan aktual, namun tata letak pinnya benar yang merupakan bagian terpenting.
Versi firmware SIM900 (Penting!)
Sangat penting untuk memiliki versi firmware yang benar yang dimuat pada chip. Ini karena salah satu perintah untuk dengan benar mengatur header HTTP POST tidak didukung hingga versi B10 firmware. Ini berarti Anda perlu memiliki setidaknya versi B10 atau lebih tinggi agar komunikasi http bekerja. Secara khusus, dengan versi firmware yang lebih rendah tidak akan dapat mengatur "Content-type" dalam header http. Jika content-type tidak diatur ke "application/json" dalam permintaan post, akan ditolak oleh server.
Untuk memeriksa versi firmware Anda gunakan perintah AT berikut:
AT+CGMR
Chip SIM900 kemudian akan memberikan versi firmware saat ini di konsol output. Masukkan yang berikut di akhir bagian setup() untuk mencetak versi firmware saat startup:
SIM900.println( F("AT+CGMR") );
Dalam kasus saya akan menunjukkan ini (sebelum saya memperbarui):
Revision:1137B01SIM900M64_ST_AM
Ini adalah versi firmware terlama yang mungkin untuk chip ini ("B01"), jadi saya memperbarui ke versi B10: 1137B10SIM900M64_ST. Firmware yang lebih baru juga seharusnya bekerja.
Saya tidak akan membahas cara memperbarui firmware dalam panduan ini, sudah ada panduan yang bagus cara melakukannya: SIM900 firmware update - ACOPTEX (meskipun proses yang cukup menyakitkan).
Saya tidak tahu apakah ini akan menjadi kasus untuk chip lain seperti SIM800, namun, ini merupakan chip yang lebih baru saya katakan lebih mungkin bahwa ini sudah ada di sana.
Penyesuaian Kode
Untuk menyesuaikan kode untuk proyek Anda sendiri beberapa penyesuaian diperlukan:
Ubah informasi APN (penyedia jaringan).
Modifikasi URL thinger.io agar cocok dengan yang Anda miliki (URL menghubungkan permintaan pembaruan ke "bucket" Anda sendiri dengan access token). Ini dibahas dalam bab "integrasi thinger.io".
Di bawah fungsi connectGPRS() Anda akan menemukan nama APN yang diberikan oleh penyedia jaringan Anda, ditampilkan di atas sebagai "TeleXXX". Ganti ini dengan nama APN Anda sendiri.
AT OK AT+CMGF=1 OK AT+CNMI=1,2,0,0,0 OK AT+SAPBR=3,1,"CONTYPE","GPRS" OK AT+SAPBR=3,1,"APN","TeleXXX" OK AT+SAPBR=1,1 OK AT+SAPBR=2,1 +SAPBR: 1,1,"36.57.240.233" OK
Di atas: output dari fungsi connectGPRS() saat koneksi berfungsi. Semua perintah harus mengembalikan status "OK".
Zona waktu
#define UTC_OFFSET 1 // set time zone offset, i.e. 1 = UTC+1
Dalam bagian "define", setel zona waktu sesuai kebutuhan Anda. Kode diatur ke UTC+1.
Notifikasi SMS
Saya telah mengatur notifikasi setiap 4000km untuk mengosongkan tangki tangkapan minyak saya. Saya menyadari kebanyakan orang tidak memiliki tangki tangkapan minyak, notifikasi ini seharusnya diubah menjadi apa pun yang Anda inginkan (atau dinonaktifkan sepenuhnya).
void loop() { ... // sends notification on SMS if the total distance exceeds 4000km if (totalDistance > triggerDistance) { char sms_msg[160]; char distanceTotalMsg[10]; itoa( (totalDistance / 1000) , distanceTotalMsg, 10); sprintf(sms_msg, "Empty catchtank! Current distance: %skm", distanceTotalMsg); textMessage = ""; totalDistance = 0; // sets the default phone number to trigger notification number = DEFAULT_NUMBER; sendSMS(sms_msg); } ... }
Di atas: bagian kode yang memicu notifikasi (di dalam loop() utama).
Comment out / hapus bagian ini jika Anda tidak ingin notifikasi yang dipicu. Atau ubah teks menjadi sesuatu yang berguna.
Notifikasi dipicu saat "odometer" (jarak yang terakumulasi) mencapai jarak yang dikonfigurasi dalam file "settings.txt".
Nomor telepon default
Ini adalah nomor telepon tempat notifikasi yang dipicu dikirim (karena notifikasi tidak memiliki nomor "pengirim" untuk dibalas)
// phone number for triggered notification #define DEFAULT_NUMBER "+4712345678"
Tunggu koneksi serial
Sebaiknya juga untuk mencoment baris berikut dalam kode. Ini membuat papan Arduino menunggu koneksi serial menjadi aktif, misalnya serial monitor untuk debugging. Dengan cara ini Anda tidak akan melewatkan pesan debugging apa pun di awal kode sebelum baris serial menjadi aktif.
Ingat untuk menghapus / mencoment baris sebelum menyala Arduino dari sumber daya eksternal, karena sebaliknya akan berhenti dalam loop tak terbatas sampai terhubung ke PC.
// while (!Serial); // wait for serial port to connect - for ATmega32u4 (Leonardo)
Integrasi Thinger.io
Saya tidak akan membahas detail cara menyiapkan thinger.io karena cukup mudah; Anda harus membuat akun dan "bucket" untuk menerima data melalui situs web mereka, dan "device" yang akan kita hubungkan. "Bucket" adalah database untuk menerima data. "Device" adalah titik koneksi untuk kode kita tempat kita memutuskan apa yang akan dilakukan dengan data (dalam kasus kita, mengisi database "bucket").
Buat "bucket" seperti yang ditunjukkan di atas dengan nama dan deskripsi Anda sendiri.
Sekarang, lanjutkan dan buat "HTTP Device" seperti yang dijelaskan dalam dokumentasi resmi: https://docs.thinger.io/quick-sart/devices/http-devices.
Gunakan nama device yang pendek. Karena nama device adalah bagian dari algoritma yang menghasilkan kunci otorisasi saya menemukan bahwa nama device yang lebih panjang menghasilkan kunci otorisasi yang lebih panjang juga. Masalahnya? Kunci otorisasi dengan cepat menjadi lebih panjang dari buffer 256 karakter yang digunakan untuk mengirim string dari Arduino. Kemungkinan ada beberapa cara yang lebih baik untuk memperbaiki ini, tetapi saya menemukan pendekatan termudah adalah menjaga nama device pendek dan menghindari masalahnya.
Di bagian callback > settings device pastikan pengaturan "write bucket" menunjuk ke bucket yang telah dibuat sebelumnya. Ini memberitahu "device" untuk menulis data masuk ke database kita.
Di bagian callback > overview device catat method URL dan authorization header (string panjang tanpa kata kunci "Bearer").
Untuk mengirim data ke thinger.io kita menggunakan "authorization URL" dalam permintaan HTTP POST. Anda kemudian harus mengganti URL dan kunci otorisasi dalam kode dengan yang Anda miliki.
Dalam fungsi postDataThinger() Anda akan menemukan panggilan (kunci otorisasi sebenarnya diacak):
Anda kemudian harus mengganti URL dan kunci otorisasi dalam kode dengan yang Anda miliki, dihasilkan dengan mengikuti instruksi dalam tautan yang disediakan di atas.
https://backend.thinger.io/...
Secara default, authorization URL yang dihasilkan akan https. SIM900 tidakmendukungSSL (setidaknya saya belum berhasil), jadi pastikan untuk mengubah "https://" menjadi "https://". API thinger juga mendukung koneksi non-SSL. Ini sangat penting. Jika Anda mempertahankan "https" ini tidak akan bekerja. Saat semuanya berfungsi, serial monitor seharusnya memberikan balasan "200 - OK" saat mengirimkan permintaan http post.
Setelah perintah AT "AT+HTTPACTION=1" (mengirim permintaan HTTP POST) Anda seharusnya menerima balasan seperti ini di serial monitor:
+HTTPACTION: 1,200,0
Jika Anda menerima balasan "400 - bad request" atau sejenisnya..
+HTTPACTION: 0,400,51
..kemungkinan ada yang salah dengan URL, misalnya "https" alih-alih "http", sintaks "kunci otorisasi" yang salah, dll. Saat Anda menerima pesan "200 - OK" data seharusnya muncul di bucket thinger seperti yang ditunjukkan di bawah ini. Anda juga dapat menerima 400 - "bad request" jika Anda tidak memiliki firmware yang benar seperti disebutkan sebelumnya.
Di atas adalah tampilan bucket setelah data tiba (diacak untuk alasan privasi). Konten (kolom data) ditentukan oleh sintaks permintaan HTTP POST dalam kode, tidak perlu pengaturan di thinger.io.
Di bawah adalah output serial dari permintaan HTTP POST seharusnya terlihat saat semuanya berfungsi. +HTTPACTION:1, 200, 0 menunjukkan bahwa pembaruan berhasil.
AT+HTTPINIT OK AT+HTTPPARA="CID",1 OK AT+HTTPPARA="URL"," OK AT+HTTPPARA="CONTENT","application/json" OK AT+HTTPDATA=84,10000 DOWNLOAD OK AT+HTTPACTION=1 OK +HTTPACTION:1,200,0 AT+HTTPTERM OK
Dashboard kemudian dapat dengan mudah diatur di thinger dengan widget peta menggunakan bucket sebagai sumber data.
Lebih banyak data ke thinger?
Apakah Anda ingin mendorong lebih banyak data daripada longitude, latitude dan date/time? Cukup tambahkan lebih banyak kolom data ke permintaan http seperti yang ditunjukkan di bawah ini.
Format adalah { "field1 name" : field1, "field2 name" : field2, "field3 name" : field3 }
Perintah sprintf di atas mengompilasi string data yang dikirim ke thinger. Sintaksnya *sangat* ketat dan Anda harus menambahkan kolom data baru dengan cara yang sama persis. Contoh diberikan dalam kode (bagian komentar). Ide yang baik adalah mencatat output serial monitor dari perintah yang akan menampilkan string. Kemudian Anda menambahkan "field4" dan seterusnya..
Kotak
Saya telah melampirkan kotak 3D printable lengkap. Ini dirancang untuk cocok dengan PCB yang tepat yang digunakan untuk proyek ini. Baut M3 digunakan untuk pemasangan.
Ini dirancang untuk solder board 7x5cm untuk rangkaian "LED" dan bukan breadboard. Jika menggunakan breadboard, cukup gunakan lem. GPS dan solder board ("breadboard") dipasang di casing atas. Gunakan spasi kecil untuk pemasangan PCB terbaik di casing atas.
Saya juga menjaga titik pemasangan di casing atas padat (tidak ada lubang) untuk mencetak tanpa dukungan yang lebih mudah. Buka ini dengan bor 3mm.
Ini dicetak dengan baik pada 0,2mm tanpa dukungan.
Koneksi ke aki mobil / sumber daya
Kemungkinan ada ratusan cara untuk melakukannya, jadi saya tidak memiliki jawaban tunggal, atau jawaban terbaik untuk itu; bagaimana merangkakannya ke aki mobil. Semua tergantung pada aplikasi Anda, tetapi saya akan segera menjelaskan solusi saya.
Saya ingin perangkat menyala dengan mobil, sehingga tidak terhubung langsung ke aki (dan menghabiskan daya saat mobil mati). Jadi saya telah menghubungkannya ke rangkaian "stop kontak rokok" yang sudah menyala/mati bersama mobil. Jika Anda ingin perangkat online bahkan saat mobil mati, Anda harus menemukan cara untuk merangkaknya ke aki. Untuk sebagian besar mobil stop kontak rokok mati bersama mobil, tetapi Anda harus memeriksa ini untuk mobil Anda sendiri. Saya tidak akan menunjukkan rangkaian yang tepat untuk saya karena ini juga akan berbeda untuk setiap mobil. Anda juga dapat menempatkan paket baterak di antaranya untuk menjaga perangkat tetap menyala selama jam-jam setelah mobil dimatikan (atau dicuri..).
Anda tentu juga dapat hanya menggunakan adapter, seperti salah satu charger ponsel USB, tetapi itu mengorbankan tujuan saya untuk menyembunyikannya (jika mobil dicuri). Kita juga memiliki dua sumber daya, papan Arduino dan modul SIM900. Saya menggunakan modul step-down "China cheap-o matic", yang mengonversi dari 12V-5V (rentang input aktual dikatakan 9V-20V). Ini mungkin bukan kualitas bagus, tetapi telah bekerja baik sejauh ini :)
Modul step-down mengubah input 12V menjadi output 5V ke dua konektor USB female. Kemudian saya menghubungkan Arduino dan modul SIM900 ke masing-masing output USB ini untuk menyediakan daya. Kemungkinan ada solusi lain yang lebih "profesional", tetapi ini murah dan bekerja cukup baik.
Saya mengukur daya yang ditarik selama aktivitas GSM sekitar 110maH, jadi konsumsi daya sangat sedikit. Ini mungkin akan menarik lebih banyak daya di area dengan cakupan GSM buruk.
Masalah yang diketahui
Jika perintah SMS diterima pada saat yang sama dengan saat permintaan http thinger.io diproses (saat data sedang dikirim ke thinger) perintah tidak akan ditangkap oleh perangkat lunak. Dalam hal ini, Anda tidak akan menerima balasan SMS. Kirim perintah baru beberapa detik kemudian dan akan bekerja lagi. Saya belum membuat solusi untuk ini, karena bukan masalah besar. Jika seseorang ingin memperbaiki ini, silakan berbagi.
Juga, jika Arduino dihidupkan di area tanpa cakupan jaringan, tidak akan menyambung kembali saat jaringan tersedia lagi, karena hanya menyambung saat startup. Saya mungkin akan memodifikasi kode pada suatu titik untuk memperbaiki ini, tetapi saat ini itu