في البرامج التعليمية السابقة ، تعلمنا كيفية ربط وحدة GPS بالكمبيوتر وكيفية تتبع السيارة باستخدام GSM و GPS. قمنا أيضًا ببناء نظام تنبيه حوادث المركبات باستخدام Arduino ومقياس التسارع. نحن هنا نبني مرة أخرى نفس المشروع ولكن هذه المرة سيتم استخدام لوحة تشغيل MSP430 وجهاز استشعار الاهتزاز لاكتشاف حادث السيارة. لذلك سيخبر هذا المشروع أيضًا عن توصيل مستشعر الاهتزاز بلوحة التشغيل MSP430. يمكنك العثور على المزيد من مشاريع MSP430 هنا.
هنا تكتشف وحدة مستشعر الاهتزاز اهتزاز السيارة وترسل إشارة إلى MSP430 Launchpad. ثم يقوم MSP430 بجلب البيانات من وحدة GPS وإرسالها إلى الهاتف المحمول للمستخدم عبر الرسائل القصيرة باستخدام وحدة GSM. سوف يتوهج مؤشر LED أيضًا كإشارة تنبيه للحوادث ، ويمكن استبدال هذا المؤشر ببعض التنبيه. يتم إرسال موقع الحادث على شكل رابط Google Map ، المشتق من خطوط الطول والعرض من وحدة GPS. شاهد الفيديو التوضيحي في النهاية.
ترسل وحدة GPS البيانات المتعلقة بتتبع الموقع في الوقت الفعلي ، وترسل الكثير من البيانات بتنسيق NMEA (انظر لقطة الشاشة أدناه). يتكون تنسيق NMEA من عدة جمل ، نحتاج فيها فقط إلى جملة واحدة. تبدأ هذه الجملة من $ GPGGA وتحتوي على الإحداثيات والوقت والمعلومات المفيدة الأخرى. يشار إلى GPGGA هذا إلى بيانات إصلاح نظام تحديد المواقع العالمي. تعرف على المزيد حول جمل NMEA وقراءة بيانات GPS هنا.
يمكننا استخراج إحداثيات من سلسلة $ GPGGA عن طريق حساب الفواصل في السلسلة. لنفترض أنك عثرت على سلسلة $ GPGGA وقمت بتخزينها في مصفوفة ، فيمكن العثور على Latitude بعد فاصلتين ويمكن العثور على خط الطول بعد أربع فاصلات. الآن ، يمكن وضع خط الطول وخط العرض هذا في مصفوفات أخرى.
يوجد أدناه سلسلة $ GPGGA مع وصفها:
GPGGA بالدولار ، 104534.000 ، 7791.0381 ، N ، 06727.4434 ، E ، 1،08،0.9،510.4 ، M ، 43.9 ، M ، * 47 دولارًا GPGGA ، HHMMSS.SSS ، خطوط العرض ، N ، خط الطول ، E ، FQ ، NOS ، HDP الارتفاع M الارتفاع بيانات المجموع الاختباري
المعرف |
وصف |
GPGGA دولار |
بيانات نظام تحديد المواقع العالمي |
HHMMSS.SSS |
الوقت بتنسيق ساعة دقيقة ثانية وميلي ثانية. |
خط العرض |
خط العرض (تنسيق) |
ن |
الاتجاه N = الشمال ، S = الجنوب |
خط الطول |
خط الطول (الإحداثيات) |
ه |
الاتجاه E = الشرق ، W = الغرب |
FQ |
إصلاح بيانات الجودة |
NOS |
عدد الأقمار الصناعية المستخدمة |
HDP |
التخفيف الأفقي للدقة |
ارتفاع |
الارتفاع (متر فوق مستوى سطح البحر) |
م |
متر |
ارتفاع |
ارتفاع |
اختباري |
بيانات المجموع الاختباري |
وحدة GSM
SIM900 عبارة عن وحدة GSM / GPRS رباعية الموجات كاملة يمكن دمجها بسهولة بواسطة العميل أو الهواة. توفر وحدة SIM900 GSM واجهة قياسية في الصناعة. يوفر SIM900 أداء GSM / GPRS 850/900/1800/1900 ميجاهرتز للصوت والرسائل النصية القصيرة والبيانات مع استهلاك منخفض للطاقة. إنه متوفر بسهولة في السوق.
- تم تصميم شريحة SIM900 باستخدام معالج أحادي الشريحة يتكامل مع قلب AMR926EJ-S
- وحدة GSM / GPRS رباعية الموجات بحجم صغير.
- تمكين GPRS
أوامر AT
AT يعني الانتباه. يستخدم هذا الأمر للتحكم في وحدة GSM. هناك بعض أوامر الاتصال والمراسلة التي استخدمناها في العديد من مشاريع GSM السابقة مع Arduino. لاختبار وحدة GSM استخدمنا أمر AT. بعد تلقي AT Command GSM Module ، تستجيب بـ OK. هذا يعني أن وحدة GSM تعمل بشكل جيد. فيما يلي بعض أوامر AT التي استخدمناها هنا في هذا المشروع:
ATE0 لصدى قبالة
AT + CNMI = 2،2،0،0،0
ATD
في + CMGF = 1
AT + CMGS = "رقم الجوال"
>> الآن يمكننا كتابة رسالتنا
>> بعد كتابة الرسالة
يرسل Ctrl + Z أمر الرسالة (26 في النظام العشري).
أدخل = 0x0d في HEX
(لمعرفة المزيد عن وحدة GSM ، تحقق من مشاريع GSM المتنوعة التي تحتوي على وحدات تحكم دقيقة مختلفة هنا)
وحدة استشعار الاهتزاز
في مشروع نظام تنبيه الحوادث MSP430 هذا ، استخدمنا وحدة استشعار الاهتزاز التي تكتشف الاهتزازات أو التعديلات المفاجئة. توفر وحدة مستشعر الاهتزاز إخراجًا رقميًا لمنطق HIGH / LOW اعتمادًا على الوحدة. في حالتنا ، استخدمنا وحدة استشعار اهتزاز منطقي عالي نشطة. هذا يعني أنه عندما يكتشف مستشعر الاهتزاز اهتزازًا ، فإنه سيعطي منطقًا عاليًا للمتحكم الدقيق.
شرح الدائرة
اتصالات الدائرة لمشروع نظام إنذار حوادث المركبات هذا بسيط. هنا يتم توصيل Tx pin الخاص بوحدة GPS مباشرةً برقم التعريف الرقمي P1_1 الخاص بـ MSP430 Launchpad (تسلسل الأجهزة) ويتم استخدام 5 فولت لتشغيل وحدة GPS. باستخدام Software Serial Library هنا ، سمحنا بالاتصال التسلسلي على pin P_6 و P1_7 ، وجعلناهما Rx و Tx على التوالي ومتصلين بوحدة GSM. يستخدم مصدر 12 فولت لتشغيل وحدة GSM. و الاهتزاز استشعار متصلة في P1_3. يستخدم أيضًا مؤشر LED للإشارة إلى اكتشاف الحوادث. يتم عرض باقي التوصيلات في مخطط الدائرة.
شرح البرمجة
البرمجة لهذا المشروع سهلة باستثناء جزء GPS. يتم إعطاء رمز كامل في نهاية المشروع. لكتابة أو تجميع الكود في MSP430 ، استخدمنا Energia IDE وهو متوافق مع Arduino. يمكن استخدام معظم وظائف Arduino IDE مباشرة في Energia IDE.
لذلك أولاً وقبل كل شيء قمنا بتضمين المكتبات المطلوبة والمعلن عن رقم التعريف الشخصي والمتغيرات.
#تضمن
يتم استخدام وظيفة معينة لقراءة إشارة مستشعر الاهتزاز. ستعمل هذه الوظيفة على تصفية الاهتزازات الصغيرة أو الخاطئة أيضًا.
#define count_max 25 char SensorRead (int pin) // read sw with debounce { char count_low = 0، count_high = 0؛ فعل { delay (1) ؛ إذا (digitalRead (pin) == HIGH) { count_high ++ ؛ count_low = 0 ؛ } وإلا { count_high = 0؛ count_low ++ ؛ } } while (count_low <count_max && count_high <count_max) ؛ إذا (count_low> = count_max) ترجع LOW ؛ آخر العودة عالية ؛ }
تكتشف الوظيفة أدناه الاهتزاز واستدعاء وظيفة gpsEvent () للحصول على إحداثيات GPS وأخيراً استدعاء وظيفة Send () لإرسال الرسائل القصيرة.
حلقة فارغة () { if (SensorRead (vibrationSensor) == HIGH) { digitalWrite (led، HIGH) ؛ gpsEvent () ؛ إرسال()؛ الكتابة الرقمية (led ، منخفضة) ؛ تأخير (2000) ؛ } }
نظرًا لأن الوظيفة مسؤولة عن الحصول على سلاسل GPS من وحدة GPS ، واستخرج الإحداثيات منها وتحويلها بتنسيق درجة عشرية.
void gpsEvent () { char gpsString؛ اختبار char = "RMC" ؛ أنا = 0 ؛ while (1) { while (Serial.available ()) // Serial incomming data from GPS { char inChar = (char) Serial.read () ؛ gpsString = inChar ؛ // تخزين بيانات incomming من GPS إلى سلسلة مؤقتة str i ++ ؛ إذا (i <4) { if (gpsString! = test) // تحقق من السلسلة الصحيحة i = 0 ؛ }
درجة int = 0 ؛ درجة = gpsString-48 ؛ الدرجة * = 10 ؛ درجة + = 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) ؛ تعويم minut = ((float) minut_int + ((float) minut_dec / 100000.0)) / 60.0 ؛ خط العرض = ((عائم) درجة + دقيقة) ؛
وأخيرًا ، يتم استخدام وظيفة Send () لإرسال الرسائل القصيرة إلى رقم المستخدم الذي تم إدخاله في هذا الجزء من الرمز.
إرسال باطل () { GSM.print ("AT + CMGS =") ؛ GSM.print ("" ") ؛ GSM.print (" 961 **** 059 ") ؛ // أدخل رقم هاتفك المحمول GSM.println ('"') ؛ تأخير (500) ؛ // GSM.print ("Latitude:") ؛ // GSM.println (خط العرض) ؛ GSM.println ("حدث حادث") ؛ تأخير (500) ؛ // GSM.print ("خط الطول:") ؛ // GSM.println (logitude) ؛ GSM.println ("انقر فوق الارتباط لرؤية الموقع") ؛ GSM.print ("http://maps.google.com/maps؟&z=15&mrt=yp&t=k&q=")؛ GSM.print (خط العرض ، 6) ؛ GSM.print ("+") ؛ GSM.print (logitude، 6) ؛ GSM.write (26) ؛ تأخير (4000) ؛ }
يتم تقديم الكود الكامل والفيديو التوضيحي أدناه ، يمكنك التحقق من جميع الوظائف في الكود.