תוכן עניינים:

מקליט השפעה לרכבים: 18 שלבים (עם תמונות)
מקליט השפעה לרכבים: 18 שלבים (עם תמונות)

וִידֵאוֹ: מקליט השפעה לרכבים: 18 שלבים (עם תמונות)

וִידֵאוֹ: מקליט השפעה לרכבים: 18 שלבים (עם תמונות)
וִידֵאוֹ: תיקון נזילה ברדיאטור 2024, נוֹבֶמבֶּר
Anonim
מקליט השפעה לרכבים
מקליט השפעה לרכבים

מקליט ההשפעות נועד לתעד פגיעה שנגרמה לרכב בזמן נהיגה או נייח. ההשפעות מאוחסנות במסד הנתונים בצורה של קריאות, כמו גם וידאו/תמונה. ניתן לאמת משתמש מרחוק עם השפעה בזמן אמת, ומשתמש מרוחק יכול לצפות בסרטון השמור או לקחת גישה מרחוק למצלמת pi ולצפות באירועים בהתאם..

שלב 1: חלקים ואביזרים

(1) Raspberry Pi 3 ומעלה: נדרש כוח חישוב

(2) כובע פי סנס פטל

(3) מצלמת פטל פאי / מצלמת USB

(4) כרטיס זיכרון עם התמונה האחרונה של הספסל (אמור לתמוך בצומת אדום, כמעט כל התמונה האחרונה עושה זאת)

(5) אספקת חשמל לפחות 2.1 A (השתמשתי בבנק סוללות להפעלה עצמאית במכונית)

שלב 2: תיאור חלקים: כובע סנס

תיאור חלקים: כובע חוש
תיאור חלקים: כובע חוש

ל- Sense HAT מטריצת LED 8 × 8 RGB, ג'ויסטיק בעל חמישה כפתורים וכולל את החיישנים הבאים:

  • ג'ִירוֹסקוֹפּ
  • מד תאוצה
  • מגנטומטר
  • טֶמפֶּרָטוּרָה
  • בָּרוֹמֶטרִי
  • לַחַץ
  • לחות

מידע נוסף על עבודה עם כובע חוש ניתן להפיק מהקישורים הבאים: Sense_Hat

API ל- hat hat מתארח בכתובת: Sense_hat_API

קוד לתכנות כובע חוש מכוסה בשלבים מאוחרים יותר. ניתן לדמות קוד כובע Sense גם בסימולטור המתארח ב: סימולטור כובע Sense

שלב 3: הרכבה: מקליט השפעה

הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
הרכבה: מקליט השפעה
  • ההרכבה פשוטה יותר מכיוון שצריך לערום כובע חוש על פי (ברגי הרכבה המיועדים מסופקים עם כובע חוש).
  • ניתן לחבר מצלמת USB או מצלמת pi. במדריך, מצלמת pi נחשבת ובהתאם לכך מתבצעת קידוד לאותו הדבר.
  • הכנס את כרטיס הזיכרון והגדר את קוד הפייתון ואת הצומת -אדום (תצורה וקוד מכוסים בשלבים נוספים)

התמונה למעלה מציגה מצלמת pi המחוברת באמצעות כבל סרט שטוח ל- pi

שלב 4: הרכבה: מקליט השפעה על לוח המחוונים של הרכב

הרכבה: מקליט השפעה על לוח המחוונים של הרכב
הרכבה: מקליט השפעה על לוח המחוונים של הרכב

לצורך הרכבה של המקליט השתמשתי בקלטת דו צדדית, היתרון הוא שניתן להזיז את המקליט בקלות במיקום אחר, לפי המתאים ביותר לרכב שלך.

מצלמה נוספת מותקנת במאונך כפי שמוצג, תוך שימוש באותו סרט דבק כפול, הבא בתור הוא חיבור מקור חשמל (10, 000 mAh בנק) יחד עם חיבור אינטרנט מוכן

חיבור לאינטרנט יידרש ליישום MQTT (הפרטים עבור MQTT מכוסים בשלבים נוספים)

שלב 5: מקליט השפעה: עבודה ויישומים

מתוך הכובע החוש, האצה וג'ירוסקופ משמשים כדי לבדוק אם הערכים הגולמיים הם מעבר לגבול שנקבע בקוד.

מד תאוצה: מד התאוצה מספר את כמות כוח הכבידה (כוח G) הפועל על כל אחד מציר x, y & z, אם ציר כלשהו מודד יותר מכוח 1G, ניתן לזהות תנועה מהירה. (שים לב שלציר המפנה כלפי מטה יהיה ערך 1 גרם ויש להתייחס אליו בהתאם לקוד פייתון).

ג'ירוסקופ; הג'ירוסקופ משמש למדידת תנועה זוויתית, כלומר במהלך סיבוב חד החיישן עשוי להיות מופעל (תלוי בהגדרה בקוד), כך שאדם שמסתובב בחדות את הרכב ייתפס !!

כל הפעלה של הגבלה שנקבעה מוצגת גם על מטריצת ה- LED של כובע החושים כ"! " באדום להאצה וירוק להפעלת גירוסקופ

שלב 6: תיאור התוכנה: Node Red

Node-RED הוא כלי תכנות מבוסס זרימה, שפותח במקור על ידי IBM Emerging Technology Servicesteam וכיום חלק מקרן JS.

מידע נוסף על הצומת האדום ניתן להשיג באמצעות הקישור הבא: node-red

במקרה שלנו נשתמש בצומת -אדום לפעילויות הבאות

(1) אינטראקציה עם הג'ויסטיקים להפעלת פונקציות המצלמה

(2) ניטור ההשפעות על הרכב והעברת המידע למשתמש הקצה על ידי שימוש ב- MQTT וקבלה נוספת של פקודות משתמש הקצה באמצעות MQTT והפעלת היישום הנדרש ב- pi

(3) ביצוע כמה דברים בסיסיים כמו כיבוי pi

השלבים הנוספים נותנים את המידע המפורט לתרשים הזרימה המיושם בצומת אדום

שים לב שדיאגרמות הזרימה של הצומת-אדום מתקשרות עם קוד הפיתון, ומכאן שהחלק האחרון מכסה את היבטי קוד הפיתון

שלב 7: יסודות בצומת אדום

יסודות בצומת אדום
יסודות בצומת אדום
יסודות בצומת אדום
יסודות בצומת אדום
יסודות בצומת אדום
יסודות בצומת אדום

שלבים בסיסיים מסוימים מודגשים כדי להתחיל בצומת אדום בהבזק, אך כן צומת אדום פשוט מכדי להתחיל ולפתוח יישומים.

  • החל מהצומת אדום: https:// localhost: 1880.
  • החל Node-red כאשר pi מחובר לאינטרנט https:// ip address>: 1880

שלב 8: צומת-אדום: Flow _1a

צומת אדום: זרימה _1a
צומת אדום: זרימה _1a

Flow _1a, עוקב אחר שינויים בקובץ ה- CSV ועל בסיס השינויים, כלומר זיהוי השפעה, הקלטת וידיאו במצלמה מוגדרת למצב מופעל ובהמשך המשתמש נודע באינטרנט על כך שהתרחשה השפעה.

שלב 9: צומת אדום: Flow_1b

צומת אדום: Flow_1b
צומת אדום: Flow_1b

בזרימה האמורה ניתן להתחיל את הקלטת הווידיאו בכל שלב על ידי לחיצה על הג'ויסטיק

שלב 10: צומת אדום: Flow_2a

צומת אדום: Flow_2a
צומת אדום: Flow_2a

בזרם האמור, בכל פעם שמאוחסנים/מועלים כל תמונה או סרטון חדש לספרייה המידע מועבר למשתמש הרשום דרך האינטרנט

שלב 11: צומת אדום: Flow_2b

צומת אדום: Flow_2b
צומת אדום: Flow_2b

זרימה זו מיועדת בעיקר למשתמש המרוחק, על מנת לשלוט במכשיר באופן הבא

(א) מכשיר כיבוי

(ב) לצלם

(ג) הקלט קטעי וידאו

(ד) התחל קוד ראשי (קוד לוג הנתונים הוא הקוד הראשי שמחשב את ההשפעה)

שלב 12: צומת אדום; זרימה_3

צומת אדום; זרימה_3
צומת אדום; זרימה_3

הזרימה מיועדת לגישה מקומית, כדי להפעיל את הקוד הראשי או התקן הכיבוי

שלב 13: MQTT

MQTT (Message Queuing Telemetry Transport) הוא פרוטוקול TCP/IP, שבו מוציא לאור ומנוי מתקשרים.

במקרה שלנו Pi הוא מוציא לאור, בעוד שהיישום המותקן במובייל/במחשב האישי שלנו יהיה המנוי.

באופן זה על יצירת כל השפעה, מידע מועבר מרחוק למשתמש (חיבור אינטרנט עובד הוא חובה)

למידע נוסף על MQTT ניתן לגשת מהקישור הבא: MQTT

כדי להתחיל להשתמש ב- MQTT, עלינו להירשם תחילה, עבור ההדרכה שבה השתמשתי ב- cloudmqtt (www.cloudmqtt.com), יש תוכנית חינמית תחת "חתול חמוד", זה הכל.

לאחר הרישום צור מופע אמור "pi" ולאחר מכן תקבל את הפרטים הבאים

  • שם שרת
  • נמל
  • שם משתמש
  • סיסמה

האמור לעיל נדרש בעת הרשמה באמצעות נייד/מחשב

ליישום שלי, השתמשתי ביישום MQTT מחנות Google Play (גרסת אנדרואיד)

שלב 14: MQTT: מנוי

MQTT: מנוי
MQTT: מנוי

יישום MQTT הפועל בנייד (גרסת אנדרואיד)

ההשפעה שזוהתה על pi מועברת לאחור

שלב 15: MQTT: עריכת מאפיינים בצומת אדום

MQTT: עריכת מאפיינים בצומת אדום
MQTT: עריכת מאפיינים בצומת אדום

בצומת אדום לאחר בחירת צומת MQTT, יש לציין את "שם השרת" ו"נושא ". זה צריך להיות זהה בסוף המנוי

שלב 16: קוד פייתון:

פונקציונליות הקוד היא לפי תרשים זרימה מצורף

שלב 17: הקוד הסופי

קוד הפיתון מצורף

על מנת לגרום לתסריט הפיתון שלנו לפעול מהטרמינל, עלינו להפוך אותם להפעלה כ chmod +x datalogger.py, מעבר לכך שחלק העליון של הקוד צריך להכיל את השורה "shebang" הבאה #! /usr/bin/python3 (זה נדרש על מנת לבצע פונקציות מצומת אדום)

#!/usr/bin/python3 // shebang linefrom sense_hat import SenseHat from datetime import datetime from csv import import RPi. GPIO as GPIO from sleep time import

sense = SenseHat ()

ייבוא csv

חותמת זמן = datetime.now ()

עיכוב = 5 // עיכוב מוגדר לאחסון נתונים בקובץ data.csv אדום = (255, 0, 0) ירוק = (0, 255, 0) צהוב = (255, 255, 0)

#GPIO.setmode (GPIO. BCM)

#GPIO.setup (17, GPIO. OUT)

def get_sense_impact ():

sense_impact = acc = sense.get_accelerometer_raw () sense_impact.append (acc ["x"]) sense_impact.append (acc ["y"]) sense_impact.append (acc ["z"])

gyro = sense.get_gyroscope_raw ()

sense_impact.append (gyro ["x"]) sense_impact.append (gyro ["y"]) sense_impact.append (gyro ["z"])

החזר חוש_השפעה

def impact (): // פונקציה לאיתור השפעה #GPIO.setmode (GPIO. BCM) #GPIO.setup (4, GPIO. OUT) האצה = sense.get_accelerometer_raw () x = האצה ['x'] y = האצה ['y'] z = האצה ['z'] x = abs (x) y = abs (y) z = abs (z)

gyro = sense.get_gyroscope_raw ()

gyrox = gyro ["x"] gyroy = gyro ["y"] gyroz = gyro ["z"]

גירוקס = עגול (גירוקס, 2)

gyroy = עגול (gyroy, 2) gyroz = עגול (gyroz, 2)

impact = get_sense_impact ()

אם x> 1.5 או y> 1.5 או z> 1.5: // הערכים נקבעים לאחר איטרציה בכביש בפועל ניתן לשנות בהתאם לסוגים שונים ומיומנויות נהיגה עם פתוח ('impact.csv', 'w', newline = ' ') כ f: data_writer = כותב (f) data_writer.writerow ([' acc x ',' acc y ',' acc z ',' gyro x ',' gyro y ',' gyro z ']) #GPIO. פלט (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", אדום) data_writer.writerow (השפעה)

elif gyrox> 1.5 או gyroy> 1.5 או gyroz> 1.5: // הערכים נקבעים תוך הסתכלות על המהירות שבה מתחילים פניות בפתיחה ('impact.csv', 'w', newline = '') כ f: data_writer = כותב (f) data_writer.writerow (['acc x', 'acc y', 'acc z', 'gyro x', 'gyro y', 'gyro z']) #GPIO.output (4, GPIO. HIGH) sense.clear () sense.show_letter ("!", ירוק) data_writer.writerow (השפעה)

אַחֵר:

# GPIO.output (4, GPIO. LOW) sense.clear ()

def get_sense_data (): // פונקציה להקלטת ושמירה של ערכים מחיישני sense_data =

sense_data.append (sense.get_temperature ()) sense_data.append (sense.get_pressure ()) sense_data.append (sense.get_humidity ())

orientation = sense.get_orientation ()

sense_data.append (כיוון ["יה"]) sense_data.append (כיוון ["גובה"]) sense_data.append (כיוון ["גליל"])

acc = sense.get_accelerometer_raw ()

sense_data.append (acc ["x"]) sense_data.append (acc ["y"]) sense_data.append (acc ["z"]) mag = sense.get_compass_raw () sense_data.append (mag ["x"]) sense_data.append (mag ["y"]) sense_data.append (mag ["z"])

gyro = sense.get_gyroscope_raw ()

sense_data.append (gyro ["x"]) sense_data.append (gyro ["y"]) sense_data.append (gyro ["z"])

sense_data.append (datetime.now ())

החזר sense_data

עם open ('data.csv', 'w', newline = '') בתור f:

data_writer = כותב (ו)

data_writer.writerow (['temp', 'pres', 'hum', 'yaw', 'pitch', 'roll', 'acc x', 'acc y', 'acc z', 'mag x', ' mag y ',' mag z ',' gyro x ',' gyro y ',' gyro z ',' datetime '])

בעוד שזה נכון:

הדפס (get_sense_data ()) לאירוע ב- sense.stick.get_events (): # בדוק אם נלחץ על הג'ויסטיק אם event.action == "נלחץ": # בדוק לאיזה כיוון אם event.direction == "למעלה": # חוש.show_letter ("U") # האצת חץ למעלה = sense.get_accelerometer_raw () x = האצה ['x'] y = האצה ['y'] z = האצה ['z'] x = עגול (x, 0) y = עגול (y, 0) z = עגול (z, 0)

# עדכן את סיבוב התצוגה בהתאם לאיזו כיוון מעלה ה- if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) else: sense.set_rotation (0) sense.clear () t = sense.get_temperature () t = עגול (t, 1) הודעה = "T:" + str (t) sense.show_message (הודעה, טקסט_צבע = אדום, scroll_speed = 0.09) elif event.direction == "למטה": האצה = sense.get_accelerometer_raw () x = האצה ['x'] y = האצה ['y'] z = האצה ['z'] x = עגול (x, 0) y = עגול (y, 0) z = עגול (z, 0)

# עדכן את סיבוב התצוגה בהתאם לאיזו כיוון מעלה ה- if x == -1: sense.set_rotation (90) elif y == 1: sense.set_rotation (270) elif y == -1: sense.set_rotation (180) אחר: sense.set_rotation (0) # sense.show_letter ("D") # חץ למטה sense.clear () h = sense.get_humidity () h = עגול (h, 1) הודעה = "H:" + str (h) sense.show_message (הודעה, text_colour = ירוק, scroll_speed = 0.09) p = sense.get_pressure () p = עגול (p, 1) message = "P:" + str (p) sense.show_message (הודעה, טקסט_צבע = צהוב, scroll_speed = 0.09)

# elif event.direction == "שמאל":

#האצה = sense.get_accelerometer_raw () #x = האצה ['x'] #y = האצה ['y'] #z = האצה ['z'] #x = עגול (x, 0) #y = עגול (y, 0) #z = עגול (z, 0)

#עדכן את סיבוב התצוגה בהתאם לאיזה כיוון למעלה // לא בשימוש ונשלט על ידי צומת אדום #if x == -1: sense.set_rotation (90) #elif y == 1: sense.set_rotation (270) #elif y == -1: sense.set_rotation (180) #else: sense.set_rotation (0) # sense.show_letter ("L") # חץ שמאלה # elif event.direction == "ימינה": # sense.show_letter ("K") # חץ ימינה # elif event.direction == "באמצע": # sense.clear ()

פְּגִיעָה()

data = get_sense_data ()

dt = data [-1] - חותמת זמן אם dt.seconds> עיכוב: data_writer.writerow (data) timestamp = datetime.now ()

שלב 18: מעקב אחר וידאו חי

מקליט השפעה יכול לשמש גם לניטור וידאו חי, מכיוון שניתן להפעיל את הוידאו בכל זמן ובכל מקום באמצעות MQTT

היינו משתמשים בנגן VLC כדי להזרים קטעי וידאו, כברירת מחדל ב- raspbian האחרונה ה- VLC מותקן מראש, אחרת התקן vlc כפי שמופיע תחת

למידע נוסף אודות צפייה בזרם הרשת ניתן לגשת באמצעות זרם רשת VLC

תודה שקראת!!

יש הרבה יותר שהמקליט ההשפעה יכול לעשות..

היזהר מהחלל הבא לצורך ניתוח שדות מגנטיים בביצוע מיפוי מכשולים

מוּמלָץ: