جدول المحتويات:

مسجل تأثير للمركبات: 18 خطوة (بالصور)
مسجل تأثير للمركبات: 18 خطوة (بالصور)

فيديو: مسجل تأثير للمركبات: 18 خطوة (بالصور)

فيديو: مسجل تأثير للمركبات: 18 خطوة (بالصور)
فيديو: شاهد مدير المرور بصبيا يقفل دوريه فرد 2024, شهر نوفمبر
Anonim
مسجل تأثير المركبات
مسجل تأثير المركبات

تم تصميم مسجل التأثير لتسجيل التأثير المستمر على السيارة أثناء القيادة أو الوقوف. يتم تخزين التأثيرات في قاعدة البيانات في شكل قراءات بالإضافة إلى فيديو / صورة ، ويمكن التحقق من المستخدم عن بُعد في الوقت الفعلي ، ويمكن للمستخدم البعيد مشاهدة الفيديو المحفوظ أو الوصول عن بُعد إلى كاميرا pi ومشاهدة الأحداث وفقًا لذلك..

الخطوة 1: قطع الغيار والملحقات

(1) Raspberry Pi 3 أو أفضل: القوة الحسابية المطلوبة

(2) قبعة إحساس التوت

(3) كاميرا Raspberry Pi / كاميرا USB

(4) بطاقة ذاكرة بأحدث صورة raspbian (يجب أن تدعم العقدة الحمراء ، كل صورة حديثة تقريبًا تدعمها)

(5) مصدر طاقة 2.1 أمبير على الأقل (لقد استخدمت بنك البطارية للتشغيل المستقل في السيارة)

الخطوة 2: وصف الأجزاء: Sense Hat

وصف الأجزاء: Sense Hat
وصف الأجزاء: Sense Hat

يحتوي Sense HAT على مصفوفة 8 × 8 RGB LED وعصا تحكم بخمسة أزرار ويتضمن المستشعرات التالية:

  • جيروسكوب
  • مقياس التسارع
  • مقياس المغناطيسية
  • درجة حرارة
  • بارومتري
  • الضغط
  • رطوبة

يمكن الحصول على مزيد من المعلومات حول العمل مع قبعة الحس من الروابط التالية: Sense_Hat

واجهة برمجة التطبيقات الخاصة بقبعة الإحساس مستضافة على العنوان: Sense_hat_API

تمت تغطية رمز برمجة قبعة الحس في خطوات لاحقة. يمكن أيضًا محاكاة رمز قبعة Sense على جهاز محاكاة مستضاف على: Sense-hat simulator

الخطوة 3: التجميع: مسجل الأثر

التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
التجميع: مسجل الأثر
  • يعد التجميع أبسط حيث يجب تكديس قبعة الإحساس فوق pi (يتم توفير مسامير التثبيت المخصصة مع قبعة استشعار).
  • يمكن توصيل كاميرا USB أو كاميرا بي. في البرنامج التعليمي ، يتم النظر في كاميرا pi وبناءً عليه يتم تنفيذ الترميز لنفسه.
  • أدخل بطاقة الذاكرة وقم بتكوين كود python والعقدة الحمراء (تتم تغطية التكوين والرمز في خطوات أخرى)

تُظهر الصورة أعلاه كاميرا pi متصلة عبر كابل الشريط المسطح بـ pi

الخطوة 4: التجميع: تأثير مسجل على لوحة داش في السيارة

التجميع: مسجل التأثير على لوحة داش في السيارة
التجميع: مسجل التأثير على لوحة داش في السيارة

لتركيب المُسجل ، استخدمت شريطًا مزدوج الجوانب ، والميزة هي أن المُسجل يمكن تغييره بسهولة في وضع مختلف ، أيهما يناسب سيارتك بشكل أفضل.

يتم تثبيت المزيد من الكاميرا عموديًا كما هو موضح ، باستخدام نفس الشريط الجانبي المزدوج ،

التالي في الخط هو توصيل مصدر طاقة (بنك طاقة 10000 مللي أمبير في الساعة) مع اتصال إنترنت جاهز

يلزم الاتصال بالإنترنت لتطبيق MQTT (تتم تغطية تفاصيل MQTT في خطوات أخرى)

الخطوة 5: مسجل التأثير: العمل والتطبيقات

من قبعة الحس ، يتم استخدام التسارع والجيروسكوب للتحقق مما إذا كانت القيم الأولية تتجاوز الحد المعين في الكود.

مقياس التسارع: يخبر مقياس التسارع مقدار قوة الجاذبية (قوة G) التي تعمل على كل من المحور x و y و z ، إذا كان أي محور يقيس قوة 1G ، فيمكن اكتشاف الحركة السريعة. (يرجى ملاحظة أن المحور الذي يشير إلى أسفل سيكون له قيمة 1 جرام ويجب مراعاته وفقًا لذلك في كود بيثون).

جيروسكوب. يتم استخدام الجيروسكوب لقياس الحركة الزاوية ، أي أثناء الانعطاف الحاد ، قد يتم تنشيط المستشعر (يعتمد على الإعداد في الكود) ، لذلك فإن الشخص الذي يدور حول السيارة بحدة يتم القبض عليه !!

يتم أيضًا عرض أي تنشيط للحد المحدد على مصفوفة LED الخاصة بقبعة الإحساس كـ "!" باللون الأحمر للتسريع والأخضر لتنشيط الجيروسكوب

الخطوة 6: وصف البرنامج: Node Red

Node-RED هي أداة برمجة قائمة على التدفق ، تم تطويرها في الأصل بواسطة Emerging Technology Servicesteam من IBM وهي الآن جزء من JS Foundation.

يمكن الحصول على مزيد من المعلومات حول العقدة الحمراء من خلال الرابط التالي: العقدة الحمراء

بالنسبة لحالتنا ، سنستخدم العقدة الحمراء للأنشطة التالية

(1) التفاعل مع أذرع التحكم لبدء وظائف الكاميرا

(2) مراقبة التأثيرات على السيارة ونقل المعلومات إلى المستخدم النهائي من خلال استخدام MQTT وكذلك قبول أوامر المستخدم النهائي من خلال MQTT وبدء التطبيق المطلوب على pi

(3) أداء بعض الأشياء الأساسية مثل إيقاف تشغيل pi

تقدم الخطوات الإضافية معلومات مفصلة عن مخطط التدفق المطبق على العقدة الحمراء

يرجى ملاحظة أن مخططات تدفق العقدة الحمراء تتفاعل مع كود الثعبان ، ومن ثم فإن الجزء الأخير يغطي جوانب كود الثعبان

الخطوة 7: أساسيات العقدة الحمراء

أساسيات العقدة الحمراء
أساسيات العقدة الحمراء
أساسيات العقدة الحمراء
أساسيات العقدة الحمراء
أساسيات العقدة الحمراء
أساسيات العقدة الحمراء

يتم تمييز بعض الخطوات الأساسية لبدء تشغيل Node-red في ومضة ، ولكن نعم ، يعد node-red بسيطًا جدًا لبدء التطبيقات والعمل بها.

  • بدء العقدة الحمراء: https:// localhost: 1880.
  • بدء Node-red عندما يكون pi متصلاً بالإنترنت https:// ip address>: 1880

الخطوة 8: العقدة الحمراء: Flow _1a

العقدة الحمراء: تدفق _1 أ
العقدة الحمراء: تدفق _1 أ

يراقب Flow _1a أي تغييرات في ملف CSV وعلى أساس التغييرات ، على سبيل المثال ، تم اكتشاف التأثير ، وتعيين تسجيل فيديو الكاميرا على وضع التشغيل ، كما يتم إبلاغ المستخدم عبر الإنترنت بحدوث تأثير

الخطوة 9: العقدة الحمراء: Flow_1b

العقدة الحمراء: Flow_1b
العقدة الحمراء: Flow_1b

في التدفق المذكور ، يمكن بدء تسجيل الفيديو في أي وقت بمجرد الضغط على عصا التحكم

الخطوة 10: العقدة الحمراء: Flow_2a

العقدة الحمراء: Flow_2a
العقدة الحمراء: Flow_2a

في التدفق المذكور ، كلما تم تخزين / تحميل أي صورة أو مقطع فيديو جديد إلى الدليل ، يتم نقل المعلومات إلى المستخدم المسجل عبر الإنترنت

الخطوة 11: العقدة الحمراء: Flow_2b

العقدة الحمراء: Flow_2b
العقدة الحمراء: Flow_2b

تم تصميم هذا التدفق بشكل أساسي للمستخدم البعيد ، وذلك للتحكم في الجهاز بالطريقة التالية

(أ) جهاز الاغلاق

(ب) التقاط الصور

(ج) تسجيل مقاطع الفيديو

(د) بدء الكود الرئيسي (كود datalogger هو الكود الرئيسي الذي يحسب التأثير)

الخطوة 12: العقدة الحمراء ؛ تدفق_3

العقدة الحمراء تدفق_3
العقدة الحمراء تدفق_3

تم تصميم التدفق للوصول المحلي ، وذلك لبدء الكود الرئيسي أو جهاز إيقاف التشغيل

الخطوة 13: MQTT

MQTT (النقل عن بعد لخدمة وضع الرسائل في قائمة انتظار) هو بروتوكول TCP / IP ، حيث يتفاعل الناشر والمشترك.

في حالتنا ، يكون Pi هو الناشر ، في حين أن التطبيق المثبت في moblile / الكمبيوتر الشخصي الخاص بنا يجب أن يكون هو المشترك.

بهذه الطريقة عند إحداث أي تأثير ، يتم نقل المعلومات عن بُعد إلى المستخدم (يجب توفر اتصال إنترنت فعال)

يمكن الوصول إلى مزيد من المعلومات حول MQTT من الرابط التالي: MQTT

لبدء استخدام MQTT ، نحتاج إلى التسجيل أولاً ، في البرنامج التعليمي الذي استخدمت فيه cloudmqtt (www.cloudmqtt.com) ، هناك خطة مجانية ضمن "cute cat" ، هذا كل شيء.

بعد التسجيل قم بإنشاء مثيل قل "pi" وبعد ذلك ستحصل على التفاصيل التالية

  • اسم الخادم
  • ميناء
  • اسم االمستخدم
  • كلمه السر

ما ورد أعلاه مطلوب عند الاشتراك من خلال الموبايل / الكمبيوتر الشخصي

بالنسبة لتطبيقي ، لقد استخدمت تطبيق MQTT من متجر google play (إصدار Android)

الخطوة 14: MQTT: المشترك

MQTT: مشترك
MQTT: مشترك

تطبيق MQTT يعمل على الهاتف المحمول (إصدار Android)

يتم ترحيل التأثير المكتشف على pi مرة أخرى

الخطوة 15: MQTT: تحرير الخصائص باللون الأحمر العقدة

MQTT: تحرير الخصائص باللون الأحمر العقدة
MQTT: تحرير الخصائص باللون الأحمر العقدة

في العقدة الحمراء بعد تحديد عقدة MQTT ، يجب ذكر "اسم الخادم" و "الموضوع". يجب أن يكون هذا هو نفسه في نهاية المشترك

الخطوة 16: كود بايثون:

وظيفة الكود هي حسب المخطط الانسيابي المرفق

الخطوة 17: الكود النهائي

كود الثعبان مرفق

لكي نجعل سكربت python يعمل من المحطة ، نحتاج إلى جعلها قابلة للتنفيذ مثل chmod + x datalogger.py ، بدلاً من أن يحتوي الجزء العلوي من الكود على سطر "shebang" التالي #! / usr / bin / python3 (هذا مطلوب لتنفيذ الوظائف من العقدة الحمراء)

#! / usr / bin / python3 // shebang linef from sense_hat استيراد SenseHat من استيراد التاريخ والوقت والوقت من كاتب استيراد csv ، استيراد RPi. GPIO كـ GPIO من وقت استيراد السكون

المعنى = 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"])

جيرو = sense.get_gyroscope_raw ()

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

عودة تأثير المعنى

تأثير def (): // وظيفة لاكتشاف التأثير # 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)

جيرو = sense.get_gyroscope_raw ()

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

gyrox = مستدير (gyrox، 2)

gyroy = round (gyroy، 2) gyroz = مستدير (gyroz، 2)

التأثير = get_sense_impact ()

إذا كانت x> 1.5 أو y> 1.5 أو z> 1.5: // يمكن تغيير القيم بعد التكرار على الطريق الفعلي وفقًا لأنواع مختلفة ومهارات القيادة مع فتح ('effect.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) بمعنى واضح () إحساس. إظهار_حرف ("!" ، أحمر) data_writer.writerow (تأثير)

elif gyrox> 1.5 أو gyroy> 1.5 أو gyroz> 1.5: // يتم تعيين القيم بالنظر إلى السرعة التي تبدأ عندها المنعطفات بالفتح ('effect.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) استشعار واضح ()

def get_sense_data (): // وظيفة لتسجيل وتخزين القيم من المستشعر sense_data =

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

التوجه = sense.get_orientation ()

sense_data.append (التوجه ["yaw"]) 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"])

جيرو = sense.get_gyroscope_raw ()

sense_data.append (gyro ["x"]) sense_data.append (gyro ["y"]) sense_data.append (الدوران ["z"])

sense_data.append (datetime.now ())

إرجاع البيانات المنطقية

مع open ('data.csv'، 'w'، newline = '') مثل f:

data_writer = الكاتب (f)

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 '])

احيانا صحيح:

print (get_sense_data ()) للحدث في sense.stick.get_events (): # تحقق مما إذا تم الضغط على عصا التحكم إذا كان event.action == "pressed": # تحقق من الاتجاه إذا كان event.direction == "up": # sense.show_letter ("U") # تسريع السهم لأعلى = sense.get_accelerometer_raw () x = التسارع ['x'] y = التسارع ['y'] z = التسارع ['z'] x = round (x، 0) y = دائري (ص ، 0) ض = دائري (ض ، 0)

# قم بتحديث دوران الشاشة اعتمادًا على أي اتجاه يصل إلى 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 = round (t، 1) message = "T:" + str (t) sense.show_message (message، text_colour = red، scroll_speed = 0.09) elif event.direction == "down": التسريع = sense.get_accelerometer_raw () x = التسارع ['x'] y = التسارع ['y'] z = التسارع ['z'] x = round (x ، 0) y = round (y، 0) z = round (z، 0)

# قم بتحديث دوران الشاشة اعتمادًا على أي اتجاه يصل إلى 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 ("D") # Down arrow sense.clear () h = sense.get_humidity () h = round (h، 1) message = "H:" + str (ح) sense.show_message (message، text_colour = green، scroll_speed = 0.09) p = sense.get_pressure () p = round (p، 1) message = "P:" + str (p) sense.show_message (message، text_colour = أصفر ، scroll_speed = 0.09)

# elif event.direction == "يسار":

# التسريع = sense.get_accelerometer_raw () # x = التسارع ['x'] #y = التسارع ['y'] #z = التسارع ['z'] # x = round (x، 0) # y = round (y ، 0) # ض = جولة (ض ، 0)

# قم بتحديث دوران الشاشة اعتمادًا على الطريقة التي يصل بها // غير مستخدم ويتحكم فيه node-red #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") # Left arrow # elif event.direction == "right": # sense.show_letter ("K") # سهم لليمين # elif event.direction == "وسط": # sense.clear ()

تأثير()

data = get_sense_data ()

dt = البيانات [-1] - الطابع الزمني إذا كانت dt.seconds> تأخير: data_writer.writerow (data) timestamp = datetime.now ()

الخطوة 18: مراقبة الفيديو المباشر

يمكن أيضًا استخدام Impact Recorder لمراقبة الفيديو المباشر ، حيث يمكن بدء تشغيل الفيديو في أي وقت وفي أي مكان من خلال MQTT

سنستخدم مشغل VLC لدفق مقاطع الفيديو ، افتراضيًا في أحدث إصدار من raspbian ، يتم تثبيت VLC مسبقًا ، وإلا قم بتثبيت vlc على النحو التالي

يمكن الوصول إلى مزيد من المعلومات حول عرض دفق الشبكة من خلال دفق شبكة VLC

شكرا لقرائتك!!

هناك الكثير مما يمكن أن يفعله مسجل التأثير..

احترس من المساحة التالية لتحليل المجال المغناطيسي في تنفيذ رسم خرائط العوائق

موصى به: