תוכן עניינים:
- שלב 1: חלקים ואביזרים
- שלב 2: תיאור חלקים: כובע סנס
- שלב 3: הרכבה: מקליט השפעה
- שלב 4: הרכבה: מקליט השפעה על לוח המחוונים של הרכב
- שלב 5: מקליט השפעה: עבודה ויישומים
- שלב 6: תיאור התוכנה: Node Red
- שלב 7: יסודות בצומת אדום
- שלב 8: צומת-אדום: Flow _1a
- שלב 9: צומת אדום: Flow_1b
- שלב 10: צומת אדום: Flow_2a
- שלב 11: צומת אדום: Flow_2b
- שלב 12: צומת אדום; זרימה_3
- שלב 13: MQTT
- שלב 14: MQTT: מנוי
- שלב 15: MQTT: עריכת מאפיינים בצומת אדום
- שלב 16: קוד פייתון:
- שלב 17: הקוד הסופי
- שלב 18: מעקב אחר וידאו חי
וִידֵאוֹ: מקליט השפעה לרכבים: 18 שלבים (עם תמונות)
2024 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2024-01-30 09:14
מקליט ההשפעות נועד לתעד פגיעה שנגרמה לרכב בזמן נהיגה או נייח. ההשפעות מאוחסנות במסד הנתונים בצורה של קריאות, כמו גם וידאו/תמונה. ניתן לאמת משתמש מרחוק עם השפעה בזמן אמת, ומשתמש מרוחק יכול לצפות בסרטון השמור או לקחת גישה מרחוק למצלמת 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
Flow _1a, עוקב אחר שינויים בקובץ ה- CSV ועל בסיס השינויים, כלומר זיהוי השפעה, הקלטת וידיאו במצלמה מוגדרת למצב מופעל ובהמשך המשתמש נודע באינטרנט על כך שהתרחשה השפעה.
שלב 9: צומת אדום: Flow_1b
בזרימה האמורה ניתן להתחיל את הקלטת הווידיאו בכל שלב על ידי לחיצה על הג'ויסטיק
שלב 10: צומת אדום: Flow_2a
בזרם האמור, בכל פעם שמאוחסנים/מועלים כל תמונה או סרטון חדש לספרייה המידע מועבר למשתמש הרשום דרך האינטרנט
שלב 11: צומת אדום: Flow_2b
זרימה זו מיועדת בעיקר למשתמש המרוחק, על מנת לשלוט במכשיר באופן הבא
(א) מכשיר כיבוי
(ב) לצלם
(ג) הקלט קטעי וידאו
(ד) התחל קוד ראשי (קוד לוג הנתונים הוא הקוד הראשי שמחשב את ההשפעה)
שלב 12: צומת אדום; זרימה_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 הפועל בנייד (גרסת אנדרואיד)
ההשפעה שזוהתה על pi מועברת לאחור
שלב 15: 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
תודה שקראת!!
יש הרבה יותר שהמקליט ההשפעה יכול לעשות..
היזהר מהחלל הבא לצורך ניתוח שדות מגנטיים בביצוע מיפוי מכשולים
מוּמלָץ:
מקליט הזיכרון - מתנת חג המולד: 8 שלבים (עם תמונות)
מקליט הזיכרון - מתנת חג המולד: Ciao a tutti! In vista del Natale arriva il momento dei regali, sono sicuro quindi che molti di voi sentiranno la necessità di donare qualcosa di special. בשנת questo periodo così difficile certentoe sono mancate molte occasioni per condividere e
מקליט מהירות הרוח וקרינת השמש: 3 שלבים (עם תמונות)
מקליט מהירות הרוח וקרינת השמש: אני צריך לרשום את מהירות הרוח ואת עוצמת קרינת השמש (קרינה) על מנת להעריך כמה כוח ניתן להפיק בעזרת טורבינת רוח ו/או פאנלים סולאריים. אני אמדוד במשך שנה אחת, מנתח את הנתונים ולאחר מכן עיצוב מערכת מחוץ לרשת
משחק "שטח השפעה" עם חיישן ג'יירו ולוקיה 5110 LCD: 3 שלבים
משחק "השפעת שטח" עם חיישן ג'יירו ומחשב נוקיה 5110 LCD: לאחר שמת הטמגוצ'י שלי (הפרויקט האחרון), התחלתי לחפש דרך חדשה לבזבז את זמני. החלטתי לתכנת את המשחק הקלאסי "Space Impact" על הארדואינו. כדי להפוך את המשחק למעניין ומהנה יותר, השתמשתי בחיישן גירוסקופ שהיה לי
חיישן/מד טמפרטורת מנוע עם בדיקה אלחוטית לרכבים קלאסיים: 7 שלבים
חיישן/מד טמפרטורת מנוע עם בדיקה אלחוטית לרכבים קלאסיים: הכנתי את החללית הזו לצ'פיטאק היפה שלי. מכונית פיאט 126 עם מנוע 2 צילינדרים מקורר אוויר מתחת למכסה המנוע האחורי. לצ'פיטק אין מד טמפרטורה שמראה עד כמה המנוע חם אז חשבתי שחיישן יהיה מועיל. גם רציתי שהחיישן יהיה תיל
כוח השפעה על עקב ורגל של רץ בזמן הריצה: 6 שלבים
כוח השפעה על עקב ורגל של רץ בזמן הריצה: לפרויקט שלי רציתי לבדוק את כמות הכוח שאליה נחשפת עקב ורגל של רץ, ואם נעלי ריצה חדשות אכן מפחיתות את הכוח. מד תאוצה הוא מכשיר המזהה תאוצה בצירים X, Y ו- Z. האצה היא מדידה