في دروسنا السابقة ، تعلمنا كيفية ربط وحدة GPS بالكمبيوتر ، وكيفية إنشاء ساعة Arduino GPS ، وكيفية تتبع السيارة باستخدام GSM و GPS. هنا في هذا المشروع ، سنقوم ببناء نظام تنبيه لحوادث المركبات قائم على Arduino باستخدام GPS و GSM ومقياس التسارع. يكتشف مقياس التسارع التغيير المفاجئ في محاور السيارة وترسل وحدة GSM رسالة تنبيه على هاتفك المحمول مع موقع الحادث. يتم إرسال موقع الحادث على شكل رابط Google Map ، المشتق من خطوط الطول والعرض من وحدة GPS. تحتوي الرسالة أيضًا على سرعة السيارة في عقد. شاهد الفيديو التوضيحيفي نهايةالمطاف. يمكن أيضًا استخدام مشروع تنبيه حوادث المركبات هذا كنظام تتبع وغير ذلك الكثير ، فقط من خلال إجراء تغييرات قليلة في الأجهزة والبرامج.
المكونات المطلوبة:
- اردوينو اونو
- وحدة GSM (SIM900A)
- وحدة GPS (SIM28ML)
- مقياس التسارع (ADXL335)
- 16x2 LCD
- مزود الطاقة
- توصيل الأسلاك
- 10 K-POT
- اللوح أو ثنائي الفينيل متعدد الكلور
- مزود الطاقة 12 فولت 1 أمبير
قبل الدخول في المشروع ، سنناقش حول GPS و GSM و Accelerometer.
وحدة GPS وعملها:
يرمز نظام تحديد المواقع العالمي (GPS) إلى نظام تحديد المواقع العالمي ويستخدم لاكتشاف خطوط الطول والعرض لأي موقع على الأرض ، مع التوقيت العالمي المنسق (UTC) (تنسيق التوقيت العالمي). تستخدم وحدة GPS لتتبع موقع الحادث في مشروعنا. يستقبل هذا الجهاز الإحداثيات من القمر الصناعي لكل ثانية مع الوقت والتاريخ. لقد استخرجنا مسبقًا سلسلة GPGGA $ في نظام تتبع المركبات للعثور على إحداثيات خطوط الطول والعرض.
ترسل وحدة 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
(لمعرفة المزيد عن وحدة GSM ، تحقق من مشاريع GSM المتنوعة التي تحتوي على وحدات تحكم دقيقة مختلفة هنا)
مقياس التسارع:
وصف دبوس مقياس التسارع:
- يجب توصيل مصدر Vcc 5 فولت بهذا الدبوس.
- X-OUT يعطي هذا الدبوس إخراجًا تناظريًا في اتجاه x
- Y-OUT يعطي هذا الدبوس إخراجًا تناظريًا في اتجاه y
- Z-OUT يعطي هذا الدبوس إخراجًا تناظريًا في اتجاه z
- أرض GND
- ST يستخدم هذا الدبوس لتعيين حساسية المستشعر
تحقق أيضًا من مشاريعنا الأخرى باستخدام Accelerometer: Ping Pong Game باستخدام Arduino و Accelerometer Based Hand Gesture Control Robot.
شرح الدائرة:
اتصالات الدائرة لمشروع نظام إنذار حوادث المركبات هذا بسيط. هنا يتم توصيل Tx pin الخاص بوحدة GPS مباشرة برقم التعريف الرقمي 10 من Arduino. باستخدام Software Serial Library هنا ، سمحنا بالاتصال التسلسلي على الدبوس 10 و 11 ، وجعلناهما Rx و Tx على التوالي وتركنا دبوس Rx لوحدة GPS مفتوحًا. بشكل افتراضي ، يتم استخدام Pin 0 و 1 من Arduino للاتصال التسلسلي ولكن باستخدام مكتبة SoftwareSerial ، يمكننا السماح بالاتصال التسلسلي على دبابيس رقمية أخرى في Arduino. يستخدم مصدر 12 فولت لتشغيل وحدة GPS.
دبابيس Tx و Rx لوحدة GSM متصلة مباشرة بالدبوس D2 و D3 في Arduino. بالنسبة لواجهة GSM ، استخدمنا هنا أيضًا مكتبة البرامج التسلسلية. وحدة GSM مدعومة أيضًا بإمداد 12 فولت. و LCD اختياري و ترتبط دبابيس البيانات D4، D5، D6، وD7 لدبوس رقم 6 و 7 و 8 و 9 من اردوينو. يتم توصيل دبوس الأوامر RS و EN الخاص بشاشات الكريستال السائل برقم التعريف 4 و 5 من Arduino ويتم توصيل دبوس RW مباشرة بالأرض. يستخدم مقياس الجهد أيضًا لضبط التباين أو سطوع شاشة LCD.
تمت إضافة مقياس تسارع في هذا النظام لاكتشاف حادث ، ويتم توصيل دبابيس إخراج ADC للمحور x و y و z مباشرة بـ Arduino ADC pin A1 و A2 و A3.
شرح العمل:
في هذا المشروع ، يتم استخدام Arduino للتحكم في العملية بأكملها باستخدام جهاز استقبال GPS ووحدة GSM. يستخدم جهاز استقبال GPS للكشف عن إحداثيات السيارة ، ويتم استخدام وحدة GSM لإرسال رسائل التنبيه النصية القصيرة مع الإحداثيات والرابط إلى خريطة Google. يستخدم مقياس التسارع وبالتحديد ADXL335 لاكتشاف الحوادث أو التغيير المفاجئ في أي محور. كما تُستخدم شاشة LCD اختيارية مقاس 16 × 2 لعرض رسائل الحالة أو الإحداثيات. لقد استخدمنا GPS Module SIM28ML و GSM Module SIM900A.
عندما نكون جاهزين بأجهزتنا بعد البرمجة ، يمكننا تثبيتها في سيارتنا وتشغيلها. الآن كلما وقع حادث ، تميل السيارة ويغير مقياس التسارع قيم محوره. تقرأ هذه القيم بواسطة Arduino وتتحقق من حدوث أي تغيير في أي محور. في حالة حدوث أي تغيير ، يقوم Arduino بقراءة الإحداثيات عن طريق استخراج سلسلة GPGGA من بيانات وحدة GPS (تم شرح عمل GPS أعلاه) وإرسال رسالة نصية قصيرة إلى الرقم المحدد مسبقًا إلى الشرطة أو سيارة الإسعاف أو أحد أفراد العائلة مع إحداثيات موقع مكان الحادث. تحتوي الرسالة أيضًا على رابط خريطة Google لموقع الحادث ، بحيث يمكن تتبع هذا الموقع بسهولة. عندما نتلقى الرسالة ، نحتاج فقط إلى النقر فوق الرابط وسنعيد التوجيه إلى خريطة Google ومن ثم يمكننا رؤية الموقع الدقيق للسيارة. سرعة المركبة بالعقد(1.852 KPH) ، يتم إرسالها أيضًا في رسالة SMS ويتم عرضها على لوحة LCD. تحقق من الفيديو التوضيحي الكامل أسفل المشروع.
هنا في هذا المشروع ، يمكننا ضبط حساسية مقياس التسارع عن طريق وضع قيمة دنيا وأقصى في الكود.
هنا في العرض التوضيحي استخدموا القيم المعطاة:
#define minVal -50 #define MaxVal 50
ولكن للحصول على نتائج أفضل ، يمكنك استخدام 200 بدلاً من 50 ، أو يمكنك ضبطها وفقًا لمتطلباتك.
شرح البرمجة:
تم تقديم البرنامج الكامل أدناه في قسم التعليمات البرمجية ؛ هنا نوضح وظائفها المختلفة باختصار.
أولاً قمنا بتضمين جميع المكتبات أو ملفات الرؤوس المطلوبة وأعلننا عن متغيرات مختلفة للحسابات وتخزين البيانات مؤقتًا.
بعد ذلك ، أنشأنا وحدة initModule باطلة (String cmd، char * res، int t) لتهيئة وحدة GSM والتحقق من استجابتها باستخدام أوامر AT.
initModule باطلة (String cmd، char * res، int t) {while (1) {Serial.println (cmd)؛ Serial1.println (كمد) ؛ تأخير (100) ؛ while (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res)؛ تأخير (ر) ؛ إرجاع؛ } else {Serial.println ("خطأ") ؛ }} delay (t)؛ }}
بعد ذلك ، في وظيفة الإعداد الباطل () ، قمنا بتهيئة الاتصال التسلسلي للأجهزة والبرامج ، وشاشات الكريستال السائل ، ونظام تحديد المواقع العالمي ، ووحدة GSM ومقياس التسارع.
إعداد باطل () {Serial1.begin (9600) ؛ Serial.begin (9600) ؛ lcd.begin (16.2) ؛ lcd.print ("إنذار وقوع حادث") ؛ lcd.setCursor (0،1) ؛ lcd.print ("النظام") ؛ تأخير (2000) ؛ lcd.clear () ؛…………………
تتم أيضًا عملية معايرة مقياس التسارع في حلقة الإعداد . في هذا ، أخذنا بعض العينات ثم وجدنا القيم المتوسطة للمحور x ، والمحور y ، والمحور z. وتخزينها في متغير. ثم استخدمنا قيم العينة هذه لقراءة التغييرات في محور مقياس التسارع عند إمالة السيارة (حادث).
lcd.print ("Callibrating") ؛ lcd.setCursor (0،1) ؛ lcd.print ("Acceleromiter") ؛ لـ (int i = 0 ؛ i
بعد ذلك ، في وظيفة الحلقة الفارغة () ، قرأنا قيم محور مقياس التسارع وأجرينا عملية حسابية لاستخراج التغييرات بمساعدة العينات التي تم أخذها في المعايرة. الآن إذا كانت أي تغييرات أكثر أو أقل من المستوى المحدد ، فإن Arduino يرسل رسالة إلى الرقم المحدد مسبقًا.
حلقة فارغة () {int value1 = analogRead (x) ؛ int value2 = analogRead (y) ؛ قيمة int 3 = analogRead (z) ؛ int xValue = xsample-value1 ؛ int yValue = ysample-value2 ؛ int zValue = zsample-value3 ؛ Serial.print ("x =") ؛ Serial.println (xValue) ؛ Serial.print ("y =") ؛ Serial.println (yValue) ؛ Serial.print ("z =") ؛ Serial.println (zValue) ؛…………………..
هنا أنشأنا أيضا بعض وظيفة أخرى لpuposes مختلفة مثل gpsEvent الفراغ () للحصول على إحداثيات GPS، coordinate2dec الفراغ () لاستخراج الإحداثيات من سلسلة GPS وتحويلها إلى قيم عشري، show_coordinate الفراغ () لعرض القيم على رصد المسلسل و LCD ، وأخيرًا إرسال () الباطل لإرسال رسائل تنبيه إلى الرقم المحدد مسبقًا.
يتم تقديم الكود الكامل والفيديو التوضيحي أدناه ، يمكنك التحقق من جميع الوظائف في الكود.