Önceki eğitimlerde, GPS modülünün Bilgisayar ile nasıl arayüzleneceğini ve GSM ve GPS kullanarak aracın nasıl izleneceğini öğrendik. Ayrıca Arduino ve ivmeölçer kullanarak Araç Kazası Uyarı Sistemi kurduk. Burada yine aynı projeyi inşa ediyoruz ama bu sefer araç kazasını tespit etmek için bir MSP430 fırlatma rampası ve bir titreşim sensörü kullanılacak. Dolayısıyla bu proje aynı zamanda bir titreşim sensörünün MSP430 başlatma çubuğu ile arayüzlenmesini anlatacak. Daha fazla MSP430 projesini burada bulabilirsiniz.
Burada Titreşim sensörü modülü, aracın titreşimini algılar ve MSP430 Başlatma Çubuğuna bir sinyal gönderir. Daha sonra MSP430 GPS modülünden veri alır ve GSM modülünü kullanarak SMS ile kullanıcının Cep Telefonuna gönderir. Kaza Uyarısı sinyali olarak bir LED de yanacaktır, bu LED bazı alarmlarla değiştirilebilir. Kaza yeri, GPS modülünden enlem ve boylamdan türetilen Google Harita bağlantısı şeklinde gönderilir. Sonunda Demo Videoya bakın.
GPS modülü, izleme konumu ile ilgili verileri gerçek zamanlı olarak gönderir ve NMEA formatında çok fazla veri gönderir (aşağıdaki ekran görüntüsüne bakın). NMEA formatı, yalnızca bir cümleye ihtiyacımız olan birkaç cümleden oluşur. Bu cümle $ GPGGA'dan başlar ve koordinatları, zamanı ve diğer yararlı bilgileri içerir. Bu GPGGA, Küresel Konumlandırma Sistemi Düzeltme Verileri olarak adlandırılır. NMEA cümleleri hakkında daha fazla bilgi edinin ve GPS verilerini buradan okuyun.
Dizedeki virgülleri sayarak $ GPGGA dizesinden koordinatı çıkarabiliriz. $ GPGGA dizesini bulduğunuzu ve bir dizide depoladığınızı varsayalım, ardından Enlem iki virgülden sonra ve Boylam dört virgülden sonra bulunabilir. Şimdi, bu enlem ve boylam diğer dizilere yerleştirilebilir.
Aşağıda, açıklamasıyla birlikte $ GPGGA Dizesi bulunmaktadır:
$ GPGGA, 104534.000,7791.0381, K, 06727.4434, E, 1,08,0,9,510,4, M, 43,9, M,, * 47 $ GPGGA, HHMMSS.SSS, enlem, K, boylam, E, FQ, NOS, HDP, rakım, M, yükseklik, M,, sağlama toplamı verileri
Tanımlayıcı |
Açıklama |
$ GPGGA |
Küresel Konumlandırma sistemi düzeltme verileri |
HHMMSS.SSS |
Saat, dakika saniye ve milisaniye biçiminde zaman. |
Enlem |
Enlem (Koordinat) |
N |
Yön N = Kuzey, S = Güney |
Boylam |
Boylam (Koordinat) |
E |
Yön E = Doğu, W = Batı |
FQ |
Kalite Verilerini Düzeltin |
NOS |
Kullanılan Uyduların Sayısı |
HDP |
Yatay Hassasiyet Kaybı |
Rakım |
Rakım (deniz seviyesinden metre yüksekliğinde) |
M |
Metre |
Yükseklik |
Yükseklik |
Sağlama toplamı |
Sağlama Verileri |
GSM Modülü
SIM900, müşteri veya amatörler tarafından kolayca kullanılabilen, tam bir Dört bantlı GSM / GPRS Modülüdür. SIM900 GSM Modülü, endüstri standardı bir arayüz sağlar. SIM900, düşük güç tüketimi ile ses, SMS, Veri için GSM / GPRS 850/900/1800 / 1900MHz performansı sunar. Piyasada kolaylıkla bulunur.
- SIM900, AMR926EJ-S çekirdeğini entegre eden tek çipli işlemci kullanılarak tasarlanmıştır
- Küçük boyutlu dört bantlı GSM / GPRS modülü.
- GPRS Etkin
AT Komutları
AT DİKKAT anlamına gelir. Bu komut, GSM modülünü kontrol etmek için kullanılır. Arduino ile daha önceki birçok GSM projemizde kullandığımız arama ve mesajlaşma için bazı komutlar bulunmaktadır. GSM Modülünü test etmek için AT komutunu kullandık. AT Komutu GSM Modülü aldıktan sonra OK ile yanıt verir. GSM modülünün iyi çalıştığı anlamına gelir. Bu projede burada kullandığımız bazı AT komutları aşağıdadır:
ATE0 Eko kapama için
AT + CNMI = 2,2,0,0,0
ATD
AT + CMGF = 1
AT + CMGS = "Mobil Numara"
>> Şimdi mesajımızı yazabiliriz
>> Bir mesaj yazdıktan sonra
Ctrl + Z, mesaj komutu gönderir (ondalık olarak 26).
ENTER = 0x0d HEX'te
(GSM modülü hakkında daha fazla bilgi edinmek için, çeşitli mikro denetleyicilerle çeşitli GSM projelerimize buradan göz atın)
Titreşim Sensörü Modülü
Bu MSP430 Kaza Uyarı Sistemi projesinde, titreşimleri veya ani modülasyonları algılayan bir titreşim sensörü modülü kullandık. Titreşim sensörü modülü, modüle bağlı olarak dijital çıkış HIGH / LOW mantığı verir. Bizim durumumuzda, aktif bir YÜKSEK mantık titreşim sensörü modülü kullandık. Bu, titreşim sensörü titreşimi algıladığında, mikro denetleyiciye YÜKSEK mantık vereceği anlamına gelir.
Devre Açıklaması
Bu Araç Kaza Uyarı Sistemi Projesinin Devre Bağlantıları basittir. Burada GPS modülünün Tx pini MSP430 Launchpad'in (donanım Seri) P1_1 dijital pin numarasına doğrudan bağlanır ve 5v GPS Modülüne güç sağlamak için kullanılır. Burada Yazılım Seri Kitaplığı'nı kullanarak P_6 ve P1_7 pinlerinde seri haberleşmeye izin verdik ve sırasıyla Rx ve Tx yaptık ve GSM modülüne bağladık. GSM Modülüne güç sağlamak için 12 Volt besleme kullanılır. Titreşim sensörü P1_3 bağlanmıştır. Kaza tespitini belirtmek için bir LED de kullanılır. Bağlantıların geri kalanı devre şemasında gösterilmiştir.
Programlama Açıklaması
Bu proje için programlama, GPS kısmı dışında kolaydır. Proje sonunda tam kod verilmektedir. MSP430'da kod yazmak veya derlemek için Arduino uyumlu Energia IDE kullandık. Arduino IDE işlevinin çoğu doğrudan bu Energia IDE'de kullanılabilir.
Öncelikle gerekli kütüphaneleri ekledik ve pin ve değişkenleri tanımladık.
#Dahil etmek
Verilen işlev, titreşim sensörü sinyalini okumak için kullanılır. Bu işlev, küçük veya yanlış titreşimleri de filtreleyecektir.
#define count_max 25 karakter SensorRead (int pin) // debounce ile sw okuyun { char count_low = 0, count_high = 0; yapmak { gecikme (1); if (digitalRead (pin) == HIGH) { count_high ++; count_low = 0; } else { count_high = 0; count_low ++; } } while (count_low <count_max && count_high <count_max); eğer (count_low> = count_max) LOW döndürür; aksi takdirde YÜKSEK döndürür; }
Aşağıdaki işlev titreşimi algılar ve GPS koordinatını almak için gpsEvent () işlevini çağırır ve son olarak SMS göndermek için Gönder () işlevini çağırır.
void döngü () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led, HIGH); gpsEvent (); Gönder (); digitalWrite (led, DÜŞÜK); gecikme (2000); } }
Verilen Fonksiyon, GPS modülünden GPS dizilerini almaktan, koordinatları onlardan çıkarmak ve onları derece-ondalık formatta dönüştürmekle sorumludur.
void gpsEvent () { char gpsString; char testi = "RMC"; i = 0; while (1) { while (Serial.available ()) // GPS'den seri gelen veri { char inChar = (char) Serial.read (); gpsString = inChar; // GPS'den geçici dizgiye gelen verileri depolayın str i ++; if (i <4) { if (gpsString! = test) // sağ dizeyi kontrol et i = 0; }
int derece = 0; derece = gpsString-48; derece * = 10; derece + = 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; enlem = ((kayan) derece + dakika);
Ve son olarak, SMS'i kodun bu bölümüne eklenen kullanıcı numarasına göndermek için Send () işlevi kullanılır.
void Gönder () { GSM.print ("AT + CMGS ="); GSM.print ('"'); GSM.print (" 961 **** 059 "); // GSM.println ('"') Cep numaranızı girin gecikme (500); // GSM.print ("Latitude:"); // GSM.println (enlem); GSM.println ("Kaza Oldu"); gecikme (500); // GSM.print ("boylam:"); // GSM.println (logitude); GSM.println ("Konumu görmek için bağlantıya tıklayın"); GSM.print ("http://maps.google.com/maps?&z=15&mrt=yp&t=k&q="); GSM.print (enlem, 6); GSM.print ("+"); GSM.print (logitude, 6); GSM.write (26); gecikme (4000); }
Tam kod ve demo videosu aşağıda verilmiştir, koddaki tüm fonksiyonları kontrol edebilirsiniz.