สารบัญ:

เครื่องบันทึกแรงกระแทกสำหรับรถยนต์: 18 ขั้นตอน (พร้อมรูปภาพ)
เครื่องบันทึกแรงกระแทกสำหรับรถยนต์: 18 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องบันทึกแรงกระแทกสำหรับรถยนต์: 18 ขั้นตอน (พร้อมรูปภาพ)

วีดีโอ: เครื่องบันทึกแรงกระแทกสำหรับรถยนต์: 18 ขั้นตอน (พร้อมรูปภาพ)
วีดีโอ: ทุบ 💥 บุหรี่ไฟฟ้า 🚬 ต้องทุบแบบนี้ 🎉 ครับท่าน 🤣#บุหรี่ไฟฟ้า 2024, พฤศจิกายน
Anonim
เครื่องบันทึกแรงกระแทกสำหรับยานยนต์
เครื่องบันทึกแรงกระแทกสำหรับยานยนต์

Impact Recorder ออกแบบมาเพื่อบันทึกการกระแทกอย่างต่อเนื่องกับยานพาหนะขณะขับขี่หรืออยู่นิ่ง ผลกระทบจะถูกเก็บไว้ในฐานข้อมูลในรูปแบบของการอ่านเช่นเดียวกับวิดีโอ / ภาพ สามารถตรวจสอบผู้ใช้ระยะไกลได้แบบเรียลไทม์และผู้ใช้ระยะไกลสามารถดูวิดีโอที่บันทึกไว้หรือเข้าถึงกล้อง pi จากระยะไกลและดูเหตุการณ์ได้.

ขั้นตอนที่ 1: อะไหล่และอุปกรณ์เสริม

(1) Raspberry Pi 3 หรือดีกว่า: ต้องใช้กำลังในการคำนวณ

(2) หมวก Raspberry pi sense

(3) กล้อง Raspberry pi / กล้อง USB

(4) การ์ดหน่วยความจำที่มีภาพ raspbian ล่าสุด (ควรสนับสนุนโหนดสีแดง เกือบทุกภาพล่าสุดรองรับ)

(5) แหล่งจ่ายไฟอย่างน้อย 2.1 A (ฉันใช้แบตเตอรีแบตเตอรีสำหรับการทำงานแบบสแตนด์อโลนในรถยนต์)

ขั้นตอนที่ 2: คำอธิบายชิ้นส่วน: Sense Hat

คำอธิบายชิ้นส่วน: Sense Hat
คำอธิบายชิ้นส่วน: Sense Hat

Sense HAT มีเมทริกซ์ LED RGB 8 × 8 จอยสติ๊กห้าปุ่มและมีเซ็นเซอร์ดังต่อไปนี้:

  • ไจโรสโคป
  • มาตรความเร่ง
  • เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก
  • อุณหภูมิ
  • ความกดอากาศ
  • ความดัน
  • ความชื้น

ข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ Sense Hat สามารถหาได้จากลิงค์ต่อไปนี้: Sense_Hat

API สำหรับ Sense Hat โฮสต์ที่: Sense_hat_API

รหัสสำหรับการเขียนโปรแกรม Sense-hat จะครอบคลุมในขั้นตอนต่อไป นอกจากนี้ยังสามารถจำลองรหัส Sense Hat บนเครื่องจำลองที่โฮสต์ได้ที่: Sense-hat simulator

ขั้นตอนที่ 3: การประกอบ: Impact Recorder

การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
การประกอบ: Impact Recorder
  • การประกอบจะง่ายกว่าเนื่องจากต้องวาง Sense Hat ไว้เหนือ pi (สลักเกลียวสำหรับติดตั้งที่กำหนดมาพร้อมกับ Sense Hat)
  • สามารถเชื่อมต่อกล้อง USB หรือกล้อง pi ได้ ในบทช่วยสอน กล้อง pi จะได้รับการพิจารณาและดำเนินการเข้ารหัสตามนั้น
  • ใส่การ์ดหน่วยความจำและกำหนดค่ารหัสหลามและโหนด -red (การกำหนดค่าและรหัสจะครอบคลุมในขั้นตอนต่อไป)

ภาพด้านบนแสดงกล้อง pi ที่เชื่อมต่อผ่านสายแพแบบแบนกับ pi

ขั้นตอนที่ 4: การประกอบ: Impact Recorder บน Dash Board of Car

การประกอบ: Impact Recorder บน Dash Board ของรถยนต์
การประกอบ: Impact Recorder บน Dash Board ของรถยนต์

สำหรับการติดตั้งเครื่องบันทึก ฉันใช้เทปกาวสองหน้า ข้อดีคือสามารถเปลี่ยนเครื่องบันทึกในตำแหน่งต่างๆ ได้อย่างง่ายดาย แล้วแต่ว่าจะเหมาะกับรถของคุณแบบใดมากที่สุด

ติดตั้งกล้องเพิ่มเติมในแนวตั้งตามที่แสดง โดยใช้เทปกาวสองหน้าแบบเดียวกัน

ลำดับต่อไปคือการเชื่อมต่อแหล่งพลังงาน (ธนาคารพลังงาน 10,000 mAH) พร้อมกับการเชื่อมต่ออินเทอร์เน็ตที่พร้อมใช้งาน

จำเป็นต้องมีการเชื่อมต่ออินเทอร์เน็ตสำหรับแอปพลิเคชัน MQTT (รายละเอียดสำหรับ MQTT มีอยู่ในขั้นตอนเพิ่มเติม)

ขั้นตอนที่ 5: ตัวบันทึกผลกระทบ: การทำงานและแอปพลิเคชัน

จาก Sense Hat จะใช้การเร่งความเร็วและไจโรสโคปเพื่อตรวจสอบว่าค่าดิบเกินขีดจำกัดที่กำหนดไว้ในโค้ดหรือไม่

มาตรความเร่ง: มาตรความเร่งจะบอกปริมาณแรงโน้มถ่วง (แรง G) ที่กระทำต่อแกน x, y & z แต่ละแกน ถ้าแกนใดวัดแรงมากกว่า 1G กว่าการเคลื่อนที่เร็วจะตรวจจับได้ (โปรดทราบว่าแกนที่ชี้ลงด้านล่างจะมีค่า 1g และต้องพิจารณาตามนั้นในรหัสหลาม)

ไจโรสโคป; ไจโรสโคปใช้สำหรับวัดการเคลื่อนที่เชิงมุม กล่าวคือ ในระหว่างการเลี้ยวที่แหลมคม เซ็นเซอร์อาจทำงาน (ขึ้นอยู่กับการตั้งค่าในรหัส) ดังนั้นบุคคลที่หมุนรถอย่างรวดเร็วจะถูกจับได้!!

การเปิดใช้งานขีด จำกัด ที่ตั้งไว้จะแสดงบนเมทริกซ์ LED ของ Sense Hat ด้วยเป็น "!" สีแดงสำหรับการเร่งความเร็ว & สีเขียวสำหรับการเปิดใช้งานไจโรสโคป

ขั้นตอนที่ 6: คำอธิบายซอฟต์แวร์: Node Red

Node-RED เป็นเครื่องมือการเขียนโปรแกรมแบบโฟลว์ ซึ่งเดิมพัฒนาโดยทีม Emerging Technology Services ของ IBM และปัจจุบันเป็นส่วนหนึ่งของ JS Foundation

ข้อมูลเพิ่มเติมเกี่ยวกับโหนดสีแดงสามารถรับได้จากลิงค์ต่อไปนี้:node-red

สำหรับกรณีของเรา เราจะใช้ node -red สำหรับกิจกรรมต่อไปนี้

(1) การโต้ตอบกับจอยสติ๊กเพื่อเริ่มการทำงานของกล้อง

(2) ติดตามตรวจสอบผลกระทบต่อรถและส่งข้อมูลไปยังผู้ใช้ปลายทางโดยใช้ MQTT และยอมรับคำสั่งของผู้ใช้ปลายทางเพิ่มเติมผ่าน MQTT และเริ่มต้นแอปพลิเคชันที่จำเป็นบน pi

(3) ดำเนินการบางอย่างพื้นฐานเช่นการปิด pi

ขั้นตอนเพิ่มเติมให้ข้อมูลโดยละเอียดสำหรับแผนภาพการไหลที่นำไปใช้กับโหนดสีแดง

โปรดทราบว่าไดอะแกรมการไหลของโหนดสีแดงโต้ตอบกับรหัสหลาม ดังนั้นส่วนหลังจะครอบคลุมแง่มุมของรหัสหลาม

ขั้นตอนที่ 7: พื้นฐานโหนดสีแดง

พื้นฐานโหนดสีแดง
พื้นฐานโหนดสีแดง
พื้นฐานโหนดสีแดง
พื้นฐานโหนดสีแดง
พื้นฐานโหนดสีแดง
พื้นฐานโหนดสีแดง

ขั้นตอนพื้นฐานบางอย่างจะถูกเน้นเพื่อเริ่ม Node-red ในแฟลช แต่ใช่ node-red นั้นง่ายเกินไปที่จะเริ่มต้นและใช้งานแอปพลิเคชัน

  • เริ่มต้น Node-red:
  • เริ่ม Node-red เมื่อ pi เชื่อมต่อกับอินเทอร์เน็ต https:// ที่อยู่ IP>: 1880

ขั้นตอนที่ 8: Node-red: Flow _1a

Node-red: Flow _1a
Node-red: Flow _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

โฟลว์นี้ได้รับการออกแบบมาสำหรับผู้ใช้ระยะไกลเป็นหลัก เพื่อควบคุมอุปกรณ์ในลักษณะดังต่อไปนี้

(ก) อุปกรณ์ปิดเครื่อง

(ข) ถ่ายรูป

(ค) บันทึกวิดีโอ

(d) เริ่มรหัสหลัก (รหัส datalogger คือรหัสหลักที่คำนวณผลกระทบ)

ขั้นตอนที่ 12: โหนดสีแดง; Flow_3

โหนดสีแดง; Flow_3
โหนดสีแดง; Flow_3

โฟลว์ถูกออกแบบมาสำหรับการเข้าถึงในเครื่อง เพื่อเริ่มต้นรหัสหลักหรืออุปกรณ์ปิดเครื่อง

ขั้นตอนที่ 13: MQTT

MQTT (Message Queuing Telemetry Transport) เป็นโปรโตคอล TCP/IP ซึ่งผู้เผยแพร่และผู้สมัครสมาชิกโต้ตอบกัน

ในกรณีของเรา Pi เป็นผู้เผยแพร่ ในขณะที่แอปพลิเคชันที่ติดตั้งในมือถือ/พีซีของเราจะเป็นผู้สมัครสมาชิก

ด้วยวิธีนี้ในการสร้างผลกระทบ ข้อมูลจะถูกส่งต่อจากระยะไกลไปยังผู้ใช้ (ต้องมีการเชื่อมต่ออินเทอร์เน็ตที่ใช้งานได้)

ข้อมูลเพิ่มเติมเกี่ยวกับ MQTT สามารถเข้าถึงได้จากลิงค์ต่อไปนี้: MQTT

เพื่อเริ่มใช้ MQTT เราต้องลงทะเบียนก่อน สำหรับบทช่วยสอนที่ฉันใช้ cloudmqtt (www.cloudmqtt.com) มีแผนฟรีภายใต้ "แมวน่ารัก" นั่นคือทั้งหมด

หลังจากลงทะเบียนแล้ว ให้สร้างอินสแตนซ์ที่พูดว่า "pi" หลังจากนั้นคุณจะได้รับรายละเอียดดังต่อไปนี้

  • ชื่อเซิร์ฟเวอร์
  • ท่า
  • ชื่อผู้ใช้
  • รหัสผ่าน

จำเป็นต้องระบุด้านบนเมื่อสมัครผ่านมือถือ/pc

สำหรับแอปพลิเคชันของฉัน ฉันใช้แอปพลิเคชัน MQTT จาก google play store (เวอร์ชัน Android)

ขั้นตอนที่ 14: MQTT: Subscriber

MQTT: สมาชิก
MQTT: สมาชิก

แอปพลิเคชัน MQTT ที่ทำงานบนมือถือ (เวอร์ชัน Android)

ผลกระทบที่ตรวจพบบน pi จะถูกส่งกลับ

ขั้นตอนที่ 15: MQTT: การแก้ไขคุณสมบัติใน Node-red

MQTT: การแก้ไขคุณสมบัติใน Node-red
MQTT: การแก้ไขคุณสมบัติใน Node-red

ใน node-red หลังจากเลือก MQTT node, "Server name" และ "topic" ที่จะกล่าวถึง ควรจะเหมือนกันเมื่อสิ้นสุดสมาชิก

ขั้นตอนที่ 16: รหัส Python:

การทำงานของโค้ดเป็นไปตามผังงานที่แนบมาด้วย

ขั้นตอนที่ 17: รหัสสุดท้าย

แนบรหัสหลาม

เพื่อให้สคริปต์ python ของเราเรียกใช้จากเทอร์มินัล เราจำเป็นต้องทำให้ปฏิบัติการเป็น chmod +x datalogger.py มากกว่าที่ด้านบนของโค้ดควรมีบรรทัด "shebang" #! /usr/bin/python3 (จำเป็นเพื่อเรียกใช้ฟังก์ชันจาก node-red)

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

ความรู้สึก = SenseHat()

นำเข้า csv

เวลาประทับ = datetime.now()

หน่วงเวลา = 5 // หน่วงเวลาถูกกำหนดให้เก็บข้อมูลในไฟล์ data.csv สีแดง = (255, 0, 0) สีเขียว = (0, 255, 0) สีเหลือง = (255, 255, 0)

#GPIO.setmode(GPIO. BCM)

#GPIO.setup(17, GPIO.ออก)

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

ความรู้สึกกลับ_impact

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)

ไจโร = sense.get_gyroscope_raw()

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

gyrox = รอบ (gyrox, 2)

gyroy = รอบ (gyroy, 2) gyroz = รอบ (gyroy, 2)

ผลกระทบ = get_sense_impact()

ถ้า x > 1.5 หรือ y > 1.5 หรือ z > 1.5: // ค่าจะถูกตั้งค่าหลังจากการวนซ้ำบนถนนจริง สามารถเปลี่ยนได้ตามประเภทและทักษะการขับขี่แบบ open('impact.csv', 'w', newline=' ') เป็น f: data_writer = 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(ผลกระทบ)

elif gyrox > 1.5 หรือ gyroy > 1.5 หรือ gyroz > 1.5: // ค่าต่างๆ ถูกกำหนดโดยพิจารณาจากความเร็วที่การเลี้ยวเริ่มต้นด้วย open('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. สูง) 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())

ปฐมนิเทศ = sense.get_orientation()

sense_data.append(การวางแนว["yaw"]) sense_data.append(การวางแนว["pitch"]) sense_data.append(การวางแนว["roll"])

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(gyro["z"])

Sense_data.append(datetime.now())

ส่งคืน sense_data

ด้วย 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', 'วันที่และเวลา'])

ในขณะที่จริง:

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=รอบ(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.clear() t = sense.get_temperature() t = รอบ (t, 1) ข้อความ = "T: " + str(t) sense.show_message (ข้อความ text_colour = สีแดง, 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) ข้อความ = "P: " + str (p) sense.show_message (ข้อความ text_colour = สีเหลือง 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)

# อัปเดตการหมุนของจอแสดงผลขึ้นอยู่กับทางขึ้น // ไม่ใช้และควบคุมโดย 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") # ลูกศรซ้าย # elif event.direction == "right": # sense.show_letter ("K") # ลูกศรขวา # elif event.direction == "middle": # sense.clear()

ผลกระทบ()

ข้อมูล = get_sense_data()

dt = data[-1] - timestamp if dt.seconds > delay: data_writer.writerow(data) timestamp = datetime.now()

ขั้นตอนที่ 18: การตรวจสอบวิดีโอสด

Impact Recorder ยังใช้ตรวจสอบวิดีโอสดได้ด้วย เนื่องจากวิดีโอสามารถเริ่มได้ทุกที่ทุกเวลาผ่าน MQTT

เราจะใช้ VLC player เพื่อสตรีมวิดีโอ โดยค่าเริ่มต้นใน raspbian ล่าสุด VLC ได้รับการติดตั้งไว้ล่วงหน้า มิฉะนั้นให้ติดตั้ง vlc ตามด้านล่าง

ข้อมูลเพิ่มเติมเกี่ยวกับการดูสตรีมเครือข่ายสามารถเข้าถึงได้ผ่าน VLC Network stream

ขอบคุณสำหรับการอ่าน!!

ยังมีอะไรอีกมากมายที่เครื่องบันทึกแรงกระแทกสามารถทำได้..

ระวังพื้นที่ถัดไปสำหรับการวิเคราะห์สนามแม่เหล็กในการทำแผนที่สิ่งกีดขวาง

แนะนำ: