- Gerekli Bileşenler:
- GPS Modülü ve Çalışması:
- GSM Modülü:
- İvmeölçer:
- Devre Açıklaması:
- Çalışma Açıklaması:
- Programlama Açıklaması:
Önceki eğitimlerimizde, GPS modülünün Bilgisayar ile nasıl arayüzleneceğini, bir Arduino GPS Saatinin nasıl kurulacağını ve GSM ve GPS kullanarak aracın nasıl izleneceğini öğrendik. İşte bu projede, GPS, GSM ve ivme ölçer kullanarak Arduino tabanlı bir araç kaza uyarı sistemi kuracağız. İvmeölçer, aracın eksenlerindeki ani değişikliği tespit eder ve GSM modülü, kazanın bulunduğu yer ile birlikte Cep Telefonunuza uyarı mesajı gönderir. Kaza yeri, GPS modülünden enlem ve boylamdan türetilen Google Harita bağlantısı şeklinde gönderilir. Mesaj ayrıca deniz mili cinsinden aracın hızını da içerir. Bkz Demo videosonunda. Bu Araç Kazası uyarı projesi, sadece donanım ve yazılımda birkaç değişiklik yaparak bir Takip Sistemi ve çok daha fazlası olarak da kullanılabilir.
Gerekli Bileşenler:
- Arduino Uno
- GSM Modülü (SIM900A)
- GPS Modülü (SIM28ML)
- İvmeölçer (ADXL335)
- 16x2 LCD
- Güç kaynağı
- Kabloların Bağlanması
- 10 K-POT
- Breadboard veya PCB
- Güç kaynağı 12v 1amp
Projeye girmeden önce GPS, GSM ve İvmeölçer hakkında konuşacağız.
GPS Modülü ve Çalışması:
GPS, Küresel Konumlandırma Sistemi anlamına gelir ve Dünya üzerindeki herhangi bir konumun Enlem ve Boylamını tam UTC saatiyle (Evrensel Zaman Koordineli) tespit etmek için kullanılır. Projemizde kazanın yerini takip etmek için GPS modülü kullanılmaktadır. Bu cihaz, saat ve tarihle birlikte her saniye uydudan koordinatları alır. Enlem ve Boylam Koordinatlarını bulmak için daha önce Araç Takip Sisteminde $ GPGGA dizesini çıkardık.
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 Komutu:
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 Yankı kapalı için AT + CNMI = 2,2,0,0,0
(GSM modülü hakkında daha fazla bilgi edinmek için, çeşitli mikro denetleyicilerle çeşitli GSM projelerimize buradan göz atın)
İvmeölçer:
İvmeölçerin Pin Açıklaması:
- Vcc 5 volt besleme bu pime bağlanmalıdır.
- X-OUT Bu pin x yönünde bir Analog çıkış verir
- Y-OUT Bu pin y yönünde bir Analog Çıkış verir
- Z-OUT Bu pin z yönünde bir Analog Çıkış verir
- GND Zemin
- ST Bu pin, sensörün hassasiyetini ayarlamak için kullanılır.
Ayrıca Accelerometer kullanan diğer projelerimizi de kontrol edin: Arduino ve Accelerometer Tabanlı El Hareketi Kontrollü Robot kullanarak Ping Pong Oyunu.
Devre Açıklaması:
Bu Araç Kaza Uyarı Sistemi Projesinin Devre Bağlantıları basittir. Burada GPS modülünün Tx pini doğrudan Arduino'nun 10 numaralı dijital pinine bağlıdır. Burada Yazılım Seri Kitaplığı'nı kullanarak pin 10 ve 11'de seri iletişime izin verdik ve sırasıyla Rx ve Tx yaptık ve GPS Modülünün Rx pinini açık bıraktık. Varsayılan olarak Arduino'nun Pin 0 ve 1'i seri iletişim için kullanılır, ancak SoftwareSerial kitaplığını kullanarak, Arduino'nun diğer dijital pinlerinde seri iletişime izin verebiliriz. GPS Modülüne güç sağlamak için 12 Volt besleme kullanılır.
GSM modülünün Tx ve Rx pinleri doğrudan Arduino'nun D2 ve D3 pinlerine bağlanır. GSM arabirimi için, burada ayrıca yazılım seri kitaplığı kullandık. GSM modülü ayrıca 12v besleme ile çalışır. İsteğe bağlı bir LCD'nin veri pinleri D4, D5, D6 ve D7, Arduino'nun 6, 7, 8 ve 9 numaralı pinlerine bağlanır. LCD'nin komut pini RS ve EN, Arduino'nun 4 ve 5 numaralı pinlerine bağlanır ve RW pini doğrudan toprağa bağlıdır. LCD'nin kontrastını veya parlaklığını ayarlamak için bir Potansiyometre de kullanılır.
Bir kazayı tespit etmek için bu sisteme bir İvmeölçer eklenir ve x, y ve z ekseni ADC çıkış pinleri doğrudan Arduino ADC pin A1, A2 ve A3'e bağlanır.
Çalışma Açıklaması:
Bu projede Arduino bir GPS Alıcısı ve GSM modülü ile tüm süreci kontrol etmek için kullanılmaktadır. GPS Alıcısı, aracın koordinatlarını tespit etmek için kullanılır, GSM modülü, koordinatlar ve Google Map'e bağlantı ile uyarı SMS'i göndermek için kullanılır. İvmeölçer yani ADXL335 herhangi bir eksendeki kaza veya ani değişikliği algılamak için kullanılır. Durum mesajlarını veya koordinatları görüntülemek için isteğe bağlı bir 16x2 LCD de kullanılır. GPS Modülü SIM28ML ve GSM Modülü SIM900A kullandık.
Programlamadan sonra donanımımız ile hazır olduğumuzda aracımıza takıp çalıştırabiliriz. Artık ne zaman bir kaza olsa, araç yana yatıyor ve ivmeölçer eksen değerlerini değiştiriyor. Bu değerler Arduino tarafından okunur ve herhangi bir eksende herhangi bir değişiklik olup olmadığını kontrol eder. Herhangi bir değişiklik olursa Arduino, GPS modülü verilerinden $ GPGGA Dizesini çıkararak koordinatları okur (GPS çalışması yukarıda açıklanmıştır) ve önceden tanımlanmış numaraya, kaza yerinin konum koordinatlarıyla birlikte polise veya ambulansa veya aile üyesine SMS gönderir. Mesaj ayrıca kaza yerine giden bir Google Haritası bağlantısı içerir, böylece konum kolayca izlenebilir. Mesajı aldığımızda sadece bağlantıya tıklamamız gerekiyor ve Google haritasına yönlendireceğiz ve ardından aracın tam yerini görebiliriz. Deniz mili cinsinden aracın hızı(1,852 KPH), ayrıca SMS ile gönderilir ve LCD panelde görüntülenir. Kontrol tam Demo video Projesi altında.
İşte bu projede İvmeölçerin hassasiyetini koda min ve max değer koyarak ayarlayabiliriz.
İşte demoda verilen değerleri kullandık:
#define minVal -50 #define MaxVal 50
Ancak daha iyi sonuçlar için 50 yerine 200 kullanabilir veya ihtiyacınıza göre ayarlayabilirsiniz.
Programlama Açıklaması:
Komple Program aşağıda Kod bölümünde verilmiştir; burada çeşitli işlevlerini kısaca açıklıyoruz.
İlk olarak, gerekli tüm kitaplıkları veya başlık dosyalarını ekledik ve hesaplamalar ve verilerin geçici olarak saklanması için çeşitli değişkenler tanımladık.
Bundan sonra, GSM modülünü başlatmak ve AT komutlarını kullanarak yanıtını kontrol etmek için void initModule (String cmd, char * res, int t) işlevini oluşturduk.
void initModule (String cmd, char * res, int t) {while (1) {Serial.println (cmd); Serial1.println (cmd); gecikme (100); while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); gecikme (t); dönüş; } else {Serial.println ("Hata"); }} gecikme (t); }}
Bundan sonra geçersiz setup () fonksiyonunda donanım ve yazılım seri haberleşmesi, LCD, GPS, GSM modülü ve ivmeölçeri başlattık.
geçersiz kurulum () {Serial1.begin (9600); Serial.begin (9600); lcd.begin (16,2); lcd.print ("Kaza Uyarısı"); lcd.setCursor (0,1); lcd.print ("Sistem"); gecikme (2000); lcd.clear ();…………………
İvmeölçer kalibrasyon işlemi ayrıca kurulum döngüsünde yapılır. Bunda, bazı örnekler aldık ve sonra x ekseni, y ekseni ve z ekseni için ortalama değerleri bulduk. Ve onları bir değişkende saklayın. Ardından, araç yana yattığında (kaza) ivmeölçer eksenindeki değişiklikleri okumak için bu örnek değerleri kullandık.
lcd.print ("Callibrating"); lcd.setCursor (0,1); lcd.print ("İvmeölçer"); for (int i = 0; i
Bundan sonra void loop () fonksiyonunda akselerometre eksen değerlerini okuduk ve Kalibrasyonda alınan numuneler yardımıyla değişiklikleri çıkarmak için bir hesaplama yaptık. Şimdi herhangi bir değişiklik az ya da çok tanımlanmış seviyedeyse, Arduino önceden tanımlanmış numaraya bir mesaj gönderir.
geçersiz döngü () {int değer1 = analogRead (x); int değer2 = analogRead (y); int değer3 = analogRead (z); int xValue = xörnek-değer1; int yValue = yörnek-değer2; int zValue = zsample-değer3; Seri.print ("x ="); Serial.println (xValue); Seri.print ("y ="); Serial.println (yValue); Seri.print ("z ="); Serial.println (zValue);…………………
Burada ayrıca GPS koordinatlarını almak için void gpsEvent () , GPS dizisinden koordinatları çıkarmak ve Ondalık değerlere dönüştürmek için void koordinate2dec () , değerleri seri monitör üzerinden görüntülemek için void show_coordinate () ve LCD ve son olarak önceden tanımlanmış numaraya uyarı SMS'i göndermek için Send () geçersiz kılın.
Tam kod ve demo videosu aşağıda verilmiştir, koddaki tüm fonksiyonları kontrol edebilirsiniz.