בהדרכות הקודמות שלנו למדנו כיצד לממשק מודול GPS למחשב, כיצד לבנות שעון GPS של ארדואינו וכיצד לעקוב אחר רכב באמצעות GSM ו- GPS. כאן בפרויקט זה אנו הולכים לבנות מערכת התראה על תאונות דרכים מבוססות Arduino באמצעות GPS, GSM ומד תאוצה. מד התאוצה מזהה את השינוי הפתאומי בצירי הרכב ומודול ה- GSM שולח את הודעת ההתראה בטלפון הנייד שלך עם מיקום התאונה. מיקום התאונה נשלח בצורה של קישור Google Map, הנגזר מקו הרוחב והאורך ממודול GPS. ההודעה מכילה גם את מהירות הרכב בקשרים. ראה סרטון הדגמהבסופו של דבר. פרויקט התראה על תאונות דרכים יכול לשמש גם כמערכת מעקב ועוד הרבה יותר על ידי ביצוע שינויים מעטים בחומרה ובתוכנה.
רכיבים נדרשים:
- ארדואינו אונו
- מודול GSM (SIM900A)
- מודול GPS (SIM28ML)
- מד תאוצה (ADXL335)
- LCD בגודל 16x2
- ספק כוח
- חוטי חיבור
- 10 K-POT
- לוח לחם או PCB
- ספק כוח 12 וולט 1 אמפר
לפני שנכנס לפרויקט נדון בנושא GPS, GSM ומאיץ.
מודול GPS ועבודתו:
GPS מייצג מערכת מיקום גלובלית ומשמשת לזיהוי קו רוחב ואורך של כל מקום על פני כדור הארץ, עם זמן UTC מדויק (זמן מתואם אוניברסלי). מודול GPS משמש למעקב אחר מיקום התאונה בפרויקט שלנו. מכשיר זה מקבל את הקואורדינטות מהלוויין לכל שנייה ושנייה, עם זמן ותאריך. בעבר חילצנו מחרוזת $ GPGGA במערכת מעקב אחר רכב כדי למצוא את הקואורדינטות של קו רוחב ואורך.
מודול GPS שולח את הנתונים הקשורים למיקום המעקב בזמן אמת, והוא שולח כל כך הרבה נתונים בפורמט NMEA (ראה צילום המסך למטה). פורמט NMEA מורכב מכמה משפטים, בהם אנו זקוקים למשפט אחד בלבד. משפט זה מתחיל מ- $ GPGGA ומכיל את הקואורדינטות, הזמן ומידע שימושי אחר. זה GPGGA נקרא Data תקן מערכת מיקום גלובלית. למידע נוסף על משפטים של 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, גובה, M,, נתוני בדיקה
מזהה |
תיאור |
$ GPGGA |
נתונים לתיקון מערכת מיקום גלובלית |
HHMMSS.SSS |
זמן בפורמט של דקה שעה שניות ומילישניות. |
קו רוחב |
קו רוחב (קואורדינטות) |
נ |
כיוון N = צפון, S = דרום |
קו אורך |
קו אורך (קואורדינטות) |
ה |
כיוון E = מזרח, W = מערב |
FQ |
תקן נתוני איכות |
NOS |
מספר לוויינים בשימוש |
HDP |
דילול אופקי של דיוק |
גוֹבַה |
גובה (מטר מעל פני הים) |
M |
מטר |
גוֹבַה |
גוֹבַה |
סכום בדיקה |
נתוני בדיקת בדיקה |
מודול GSM:
ה- SIM900 הוא מודול GSM / GPRS מרובע-פס אשר ניתן להטמיע בו בקלות על ידי הלקוח או התחביב. מודול GSM SIM900 מספק ממשק סטנדרטי בתעשייה. SIM900 מספק ביצועי GSM / GPRS 850/900/1800 / 1900MHz עבור קול, SMS, נתונים עם צריכת חשמל נמוכה. זה זמין בקלות בשוק.
- SIM900 תוכנן באמצעות מעבד שבב יחיד המשלב ליבת AMR926EJ-S
- מודול GSM / GPRS בעל ארבע פס בגודל קטן.
- GPRS מופעל
פיקוד AT:
AT פירושו תשומת לב. פקודה זו משמשת לשליטה במודול GSM. ישנן כמה פקודות להתקשרות והודעות שהשתמשנו בהן ברבות מפרויקטי ה- GSM הקודמים שלנו עם Arduino. לבדיקת מודול GSM השתמשנו בפקודה AT. לאחר קבלת מודול ה- GSM של פיקוד ה- AT הגיב עם אישור. זה אומר שמודול ה- 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: משחק פינג פונג באמצעות Arduino ו- Accelerometer מבוסס מחוות יד.
הסבר מעגל:
חיבורי מעגלים של פרויקט מערכת התראה על תאונות רכב זה פשוט. כאן סיכת ה- Tx של מודול ה- GPS מחוברת ישירות לסיכה הדיגיטלית מספר 10 של Arduino. על ידי שימוש בספרייה הסדרתית של התוכנה כאן, אפשרנו תקשורת סדרתית בסיכה 10 ו- 11, והפכנו אותם ל- Rx ו- Tx בהתאמה והשארנו את סיכת ה- Rx של מודול ה- GPS פתוח. כברירת מחדל פין 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 של Arduino. סיכת פיקוד RS ו- EN של LCD מחוברות עם מספר סיכה 4 ו- 5 של Arduino וסיכה RW מחוברת ישירות לקרקע. פוטנציומטר משמש גם להגדרת ניגודיות או בהירות של LCD.
Accelerometer מתווסף במערכת זו לאיתור תאונה x שלה, Y ו- Z ציר סיכות פלט ADC מחוברים ישירות Arduino ADC סיכה A1, A2, A3 ו-.
הסבר עבודה:
בפרויקט זה, Arduino משמש לשליטה בתהליך כולו באמצעות מקלט GPS ומודול GSM. מקלט GPS משמש לאיתור קואורדינטות של הרכב, מודול GSM משמש לשליחת SMS התראה עם הקואורדינטות והקישור למפה של גוגל. מד תאוצה כלומר ADXL335 משמש לאיתור תאונה או שינוי פתאומי בכל ציר כלשהו. ו- LCD 16x2 אופציונלי משמש גם להצגת הודעות סטטוס או קואורדינטות. השתמשנו במודול GPS SIM28ML ובמודול GSM SIM900A.
כאשר אנו מוכנים עם החומרה שלנו לאחר התכנות, אנו יכולים להתקין אותה ברכב שלנו ולהפעיל אותה. בכל פעם שיש תאונה, המכונית זוכה להטיה ומד התאוצה משנה את ערכי הציר שלו. ערכים אלה נקראים על ידי ארדואינו ובודקים אם מתרחש שינוי כלשהו בציר כלשהו. אם מתרחש שינוי כלשהו, Arduino קורא קואורדינטות על ידי חילוץ מחרוזת $ GPGGA מנתוני מודול GPS (GPS עובד מוסבר לעיל) ושלח SMS למספר המוגדר מראש למשטרה או לאמבולנס או לבן משפחה עם קואורדינטות המיקום של מקום התאונה. ההודעה מכילה גם קישור של Google Map למיקום התאונה, כך שאפשר לעקוב אחרי המיקום בקלות. כשאנחנו מקבלים את ההודעה אז אנחנו צריכים רק ללחוץ על הקישור וננתב למפת גוגל ואז נוכל לראות את המיקום המדויק של הרכב. מהירות הרכב, בקשרים(1.852 KPH), נשלח גם ב- SMS ומוצג בלוח ה- LCD. בדוק את סרטון ההדגמה המלא מתחת לפרויקט.
כאן בפרויקט זה, אנו יכולים להגדיר את הרגישות של תאוצה על ידי הכנסת ערך מינימום ומקסימום לקוד.
כאן בהדגמה השתמשו בערכים נתונים:
#define minVal -50 #define MaxVal 50
אך לקבלת תוצאות טובות יותר תוכלו להשתמש ב- 200 במקום 50, או להגדיר בהתאם לדרישתכם.
הסבר על תכנות:
התוכנית המלאה הובאה להלן בסעיף הקוד; כאן אנו מסבירים בקצרה את תפקידיה השונים.
ראשית כללנו את כל הספריות הנדרשות או קבצי הכותרות והכרזנו על משתנים שונים לחישובים ולאחסון נתונים זמניים.
לאחר מכן, יצרנו פונקציה בטל initModule (מחרוזת cmd, char * res, int t) כדי לאתחל את מודול ה- GSM ולבדוק את תגובתו באמצעות פקודות AT.
בטל initModule (מחרוזת cmd, char * res, int t) {בעוד (1) {Serial.println (cmd); Serial1.println (cmd); עיכוב (100); בעוד (Serial1.available ()> 0) {if (Serial1.find (res)) {Serial.println (res); עיכוב (ט); לַחֲזוֹר; } אחר {Serial.println ("שגיאה"); }} עיכוב (t); }}
לאחר מכן, בפונקציית ההתקנה הריקה () , ראשנו את התקשורת הטורית של חומרה ותוכנה, LCD, GPS, מודול 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
לאחר מכן, בפונקציית loop void () , קראנו ערכי ציר תאוצה ועשינו חישוב כדי לחלץ שינויים בעזרת דגימות שנלקחות בכיול. כעת אם שינויים כלשהם הם פחות או יותר ברמה המוגדרת אז Arduino שולח הודעה למספר שהוגדר מראש.
loop loop () {int value1 = analogRead (x); int value2 = analogRead (y); int value3 = 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);…………………
כאן יצרנו גם פונקציה אחרת עבור גורמים שונים כמו חלל gpsEvent () לקבלת קואורדינטות GPS, חלל קואורדינט 2 () לחילוץ קואורדינטות ממחרוזת GPS והמרתם לערכים עשרוניים, חלל show_coordinate () להצגת ערכים על גבי צג סדרתי ו LCD, ולבסוף הריק שלח () לשליחת SMS התראה למספר שהוגדר מראש.
הקוד המלא וסרטון ההדגמה מופיע בהמשך, תוכלו לבדוק את כל הפונקציות בקוד.