Dalam tutorial sebelumnya, kami telah belajar tentang Cara menginterface modul GPS dengan Komputer dan cara Menjejak kenderaan menggunakan GSM dan GPS. Kami juga membina Sistem Peringatan Kemalangan Kenderaan menggunakan Arduino dan accelerometer. Di sini kita sekali lagi membina projek yang sama tetapi kali ini peluncur MSP430 dan sensor getaran akan digunakan untuk mengesan kemalangan kenderaan. Oleh itu, projek ini juga akan menceritakan tentang menghubungkan sensor getaran dengan MSP430 launchpad. Anda boleh mendapatkan lebih banyak projek MSP430 di sini.
Di sini modul sensor getaran mengesan getaran kenderaan dan menghantar isyarat ke MSP430 Launchpad. Kemudian MSP430 mengambil data dari modul GPS dan menghantarnya ke Telefon bimbit pengguna melalui SMS menggunakan modul GSM. LED juga akan menyala sebagai isyarat Makluman Kemalangan, LED ini boleh diganti dengan beberapa penggera. Lokasi kemalangan dihantar dalam bentuk pautan Peta Google, berasal dari garis lintang dan garis bujur dari modul GPS. Lihat Video Demo di akhir.
Modul GPS menghantar data yang berkaitan dengan kedudukan penjejakan dalam masa nyata, dan mengirimkan begitu banyak data dalam format NMEA (lihat tangkapan skrin di bawah). Format NMEA terdiri daripada beberapa ayat, di mana kita hanya memerlukan satu ayat. Kalimat ini bermula dari $ GPGGA dan mengandungi koordinat, masa dan maklumat berguna lain. Ini GPGGA disebut Sistem Kedudukan Global Fix Data. Ketahui lebih lanjut mengenai ayat NMEA dan membaca data GPS di sini.
Kita boleh mengekstrak koordinat dari rentetan $ GPGGA dengan mengira koma dalam rentetan. Katakan anda menjumpai rentetan $ GPGGA dan menyimpannya dalam array, maka Latitud dapat dijumpai setelah dua koma dan Bujur dapat dijumpai setelah empat koma. Sekarang, garis lintang dan garis bujur ini boleh dimasukkan ke dalam tatasusunan yang lain.
Berikut adalah rentetan $ GPGGA, beserta keterangannya:
$ GPGGA, 104534.000,7791.0381, N, 06727.4434, E, 1,08,0.9,510.4, M, 43.9, M,, * 47 $ GPGGA, HHMMSS.SSS, garis lintang, N, garis bujur, E, FQ, NOS, HDP, ketinggian, M, tinggi, M,, data checksum
Pengenal |
Penerangan |
$ GPGGA |
Memperbaiki data sistem Penentududukan Global |
HHMMSS.SSS |
Masa dalam jam beberapa saat dan format milisaat. |
Latitud |
Lintang (Koordinat) |
N |
Arah N = Utara, S = Selatan |
Bujur |
Bujur (Koordinat) |
E |
Arah E = Timur, W = Barat |
FQ |
Betulkan Data Berkualiti |
NOS |
Bilangan Satelit yang Digunakan |
HDP |
Pencairan Ketepatan Mendatar |
Ketinggian |
Ketinggian (meter di atas dari permukaan laut) |
M |
Meter |
Ketinggian |
Ketinggian |
Checksum |
Data Checksum |
Modul GSM
SIM900 adalah Modul GSM / GPRS Quad-band lengkap yang dapat disematkan dengan mudah digunakan oleh pelanggan atau penggemar. SIM900 GSM Module menyediakan antara muka standard industri. SIM900 memberikan prestasi GSM / GPRS 850/900/1800 / 1900MHz untuk suara, SMS, Data dengan penggunaan kuasa yang rendah. Ia mudah didapati di pasaran.
- SIM900 direka dengan menggunakan pemproses cip tunggal yang mengintegrasikan teras AMR926EJ-S
- Modul GSM / GPRS quad-band dalam saiz kecil.
- GPRS Diaktifkan
Perintah AT
AT bermaksud PERHATIAN. Perintah ini digunakan untuk mengawal modul GSM. Terdapat beberapa arahan untuk memanggil dan menghantar pesanan yang telah kami gunakan dalam banyak projek GSM kami sebelumnya dengan Arduino. Untuk menguji Modul GSM kami menggunakan arahan AT. Setelah menerima Modul GSM Perintah AT, balas dengan OK. Ini bermaksud modul GSM berfungsi dengan baik. Berikut adalah beberapa arahan AT yang kami gunakan di sini dalam projek ini:
ATE0 Untuk gema mati
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Nombor Mudah Alih"
>> Sekarang kita boleh menulis mesej kita
>> Selepas menulis mesej
Ctrl + Z menghantar arahan mesej (26 dalam perpuluhan).
ENTER = 0x0d dalam HEX
(Untuk mengetahui lebih lanjut mengenai modul GSM, Periksa pelbagai projek GSM kami dengan pelbagai pengawal mikro di sini)
Modul Sensor Getaran
Dalam projek Sistem Peringatan Kemalangan MSP430 ini, kami telah menggunakan modul sensor getaran yang mengesan getaran atau modulasi tiba-tiba. Modul sensor getaran memberikan logik keluaran digital TINGGI / RENDAH bergantung pada modul. Dalam kes kami, kami telah menggunakan modul sensor getaran logik TINGGI yang aktif. Ini bermaksud setiap kali sensor getaran akan mengesan getaran, ia akan memberikan logik TINGGI kepada mikrokontroler.
Penjelasan Litar
Sambungan Litar Projek Sistem Makluman Kemalangan Kenderaan ini mudah. Di sini pin Tx modul GPS disambungkan secara langsung ke nombor pin digital P1_1 dari MSP430 Launchpad (perkakasan Serial) dan 5v digunakan untuk menggerakkan Modul GPS. Dengan menggunakan Perisian Serial Perpustakaan di sini, kami telah membenarkan komunikasi bersiri pada pin P_6 dan P1_7, dan menjadikannya Rx dan Tx masing-masing dan disambungkan ke modul GSM. Bekalan 12 volt digunakan untuk menghidupkan Modul GSM. The getaran sensor disambungkan di P1_3. LED juga digunakan untuk menunjukkan pengesanan kemalangan. Sambungan selebihnya ditunjukkan dalam rajah litar.
Penjelasan Pengaturcaraan
Pengaturcaraan untuk projek ini adalah mudah kecuali bahagian GPS. Kod lengkap diberikan pada akhir projek. Untuk menulis atau menyusun kod dalam MSP430, kami telah menggunakan Energia IDE yang serasi dengan Arduino. Sebilangan besar fungsi Arduino IDE boleh digunakan secara langsung di Energia IDE ini.
Jadi pertama-tama kami telah memasukkan perpustakaan yang diperlukan dan menyatakan pin dan pemboleh ubah.
#sertakan
Fungsi yang diberikan digunakan untuk membaca isyarat sensor getaran. Fungsi ini juga akan menapis getaran kecil atau salah.
#define count_max 25 char SensorRead (int pin) // baca sw dengan debounce { char count_low = 0, count_high = 0; lakukan { kelewatan (1); jika (digitalRead (pin) == TINGGI) { count_high ++; hitung_low = 0; } lain { count_high = 0; hitung_low ++; } } sementara (count_low <count_max && count_high <count_max); jika (count_low> = count_max) kembali RENDAH; lain kembali TINGGI; }
Fungsi di bawah ini mengesan getaran dan memanggil fungsi gpsEvent () untuk mendapatkan koordinat GPS dan akhirnya memanggil fungsi Kirim () untuk menghantar SMS.
gelung void () { if (SensorRead (vibrationSensor) == TINGGI) { digitalWrite (dipimpin, TINGGI); gpsEvent (); Hantar (); digitalWrite (dipimpin, RENDAH); kelewatan (2000); } }
Fungsi Diberi bertanggungjawab untuk mendapatkan rentetan GPS dari modul GPS, ekstrak koordinat daripadanya dan ubahnya dalam format darjah-perpuluhan.
batal gpsEvent () { char gpsString; ujian char = "RMC"; i = 0; while (1) { while (Serial.available ()) // Serial data masuk dari GPS { char inChar = (char) Serial.read (); gpsString = dalamChar; // simpan data masuk dari GPS ke rentetan temparary str i ++; if (i <4) { if (gpsString! = test) // periksa rentetan kanan i = 0; }
darjah int = 0; darjah = gpsString-48; darjah * = 10; darjah + = gpsString-48; int minut_int = 0; minut_int = gpsString-48; minut_int * = 10; minut_int + = gpsString-48; int minut_dec = 0; minut_dec + = (gpsString-48) * 10000; minut_dec + = (gpsString-48) * 1000; minut_dec + = (gpsString-48) * 100; minut_dec + = (gpsString-48) * 10; minut_dec + = (gpsString-48); float minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0; garis lintang = ((apungan) darjah + minut);
Dan akhirnya, fungsi Kirim () digunakan untuk menghantar SMS ke nombor pengguna yang dimasukkan di bahagian kod ini.
batal Hantar () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // masukkan nombor mudah alih anda GSM.println ('"'); kelewatan (500); // GSM.print ("Latitud:"); // GSM.println (garis lintang); GSM.println ("Kemalangan Berlaku"); kelewatan (500); // GSM.print ("bujur:"); // GSM.println (logitud); GSM.println ("Klik pautan untuk melihat Lokasi"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (garis lintang, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); kelewatan (4000); }
Kod lengkap dan video demo diberikan di bawah, anda boleh menyemak semua fungsi dalam kod tersebut.