สารบัญ:
- ขั้นตอนที่ 1: อะไหล่และอุปกรณ์เสริม
- ขั้นตอนที่ 2: คำอธิบายชิ้นส่วน: Sense Hat
- ขั้นตอนที่ 3: การประกอบ: Impact Recorder
- ขั้นตอนที่ 4: การประกอบ: Impact Recorder บน Dash Board of Car
- ขั้นตอนที่ 5: ตัวบันทึกผลกระทบ: การทำงานและแอปพลิเคชัน
- ขั้นตอนที่ 6: คำอธิบายซอฟต์แวร์: Node Red
- ขั้นตอนที่ 7: พื้นฐานโหนดสีแดง
- ขั้นตอนที่ 8: Node-red: Flow _1a
- ขั้นตอนที่ 9: โหนดสีแดง: Flow_1b
- ขั้นตอนที่ 10: โหนดสีแดง: Flow_2a
- ขั้นตอนที่ 11: โหนดสีแดง: Flow_2b
- ขั้นตอนที่ 12: โหนดสีแดง; Flow_3
- ขั้นตอนที่ 13: MQTT
- ขั้นตอนที่ 14: MQTT: Subscriber
- ขั้นตอนที่ 15: MQTT: การแก้ไขคุณสมบัติใน Node-red
- ขั้นตอนที่ 16: รหัส Python:
- ขั้นตอนที่ 17: รหัสสุดท้าย
- ขั้นตอนที่ 18: การตรวจสอบวิดีโอสด
วีดีโอ: เครื่องบันทึกแรงกระแทกสำหรับรถยนต์: 18 ขั้นตอน (พร้อมรูปภาพ)
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:05
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 มีเมทริกซ์ LED RGB 8 × 8 จอยสติ๊กห้าปุ่มและมีเซ็นเซอร์ดังต่อไปนี้:
- ไจโรสโคป
- มาตรความเร่ง
- เครื่องวัดค่าความเข้มข้นของสนามแม่เหล็ก
- อุณหภูมิ
- ความกดอากาศ
- ความดัน
- ความชื้น
ข้อมูลเพิ่มเติมเกี่ยวกับการทำงานกับ Sense Hat สามารถหาได้จากลิงค์ต่อไปนี้: Sense_Hat
API สำหรับ Sense Hat โฮสต์ที่: Sense_hat_API
รหัสสำหรับการเขียนโปรแกรม Sense-hat จะครอบคลุมในขั้นตอนต่อไป นอกจากนี้ยังสามารถจำลองรหัส Sense Hat บนเครื่องจำลองที่โฮสต์ได้ที่: Sense-hat simulator
ขั้นตอนที่ 3: การประกอบ: Impact Recorder
- การประกอบจะง่ายกว่าเนื่องจากต้องวาง Sense Hat ไว้เหนือ pi (สลักเกลียวสำหรับติดตั้งที่กำหนดมาพร้อมกับ Sense Hat)
- สามารถเชื่อมต่อกล้อง USB หรือกล้อง pi ได้ ในบทช่วยสอน กล้อง pi จะได้รับการพิจารณาและดำเนินการเข้ารหัสตามนั้น
- ใส่การ์ดหน่วยความจำและกำหนดค่ารหัสหลามและโหนด -red (การกำหนดค่าและรหัสจะครอบคลุมในขั้นตอนต่อไป)
ภาพด้านบนแสดงกล้อง pi ที่เชื่อมต่อผ่านสายแพแบบแบนกับ pi
ขั้นตอนที่ 4: การประกอบ: Impact Recorder บน Dash Board of Car
สำหรับการติดตั้งเครื่องบันทึก ฉันใช้เทปกาวสองหน้า ข้อดีคือสามารถเปลี่ยนเครื่องบันทึกในตำแหน่งต่างๆ ได้อย่างง่ายดาย แล้วแต่ว่าจะเหมาะกับรถของคุณแบบใดมากที่สุด
ติดตั้งกล้องเพิ่มเติมในแนวตั้งตามที่แสดง โดยใช้เทปกาวสองหน้าแบบเดียวกัน
ลำดับต่อไปคือการเชื่อมต่อแหล่งพลังงาน (ธนาคารพลังงาน 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
Flow _1a ตรวจสอบการเปลี่ยนแปลงใดๆ ในไฟล์ CSV และตามการเปลี่ยนแปลง เช่น ตรวจพบผลกระทบ การบันทึกวิดีโอของกล้องถูกตั้งค่าเป็นโหมด และผู้ใช้จะได้รับแจ้งเพิ่มเติมทางอินเทอร์เน็ตว่ามีผลกระทบ
ขั้นตอนที่ 9: โหนดสีแดง: Flow_1b
ในโฟลว์ดังกล่าว สามารถเริ่มบันทึกวิดีโอได้ทุกเมื่อเพียงแค่กดจอยสติ๊ก
ขั้นตอนที่ 10: โหนดสีแดง: Flow_2a
ในโฟลว์ดังกล่าว เมื่อใดก็ตามที่รูปภาพหรือวิดีโอใหม่ถูกจัดเก็บ/อัปโหลดไปยังไดเร็กทอรี ข้อมูลจะถูกส่งไปยังผู้ใช้ที่ลงทะเบียนผ่านทางอินเทอร์เน็ต
ขั้นตอนที่ 11: โหนดสีแดง: Flow_2b
โฟลว์นี้ได้รับการออกแบบมาสำหรับผู้ใช้ระยะไกลเป็นหลัก เพื่อควบคุมอุปกรณ์ในลักษณะดังต่อไปนี้
(ก) อุปกรณ์ปิดเครื่อง
(ข) ถ่ายรูป
(ค) บันทึกวิดีโอ
(d) เริ่มรหัสหลัก (รหัส datalogger คือรหัสหลักที่คำนวณผลกระทบ)
ขั้นตอนที่ 12: โหนดสีแดง; 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 ที่ทำงานบนมือถือ (เวอร์ชัน Android)
ผลกระทบที่ตรวจพบบน pi จะถูกส่งกลับ
ขั้นตอนที่ 15: 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
ขอบคุณสำหรับการอ่าน!!
ยังมีอะไรอีกมากมายที่เครื่องบันทึกแรงกระแทกสามารถทำได้..
ระวังพื้นที่ถัดไปสำหรับการวิเคราะห์สนามแม่เหล็กในการทำแผนที่สิ่งกีดขวาง
แนะนำ:
DIY 37 Leds เกมรูเล็ต Arduino: 3 ขั้นตอน (พร้อมรูปภาพ)
DIY 37 Leds เกมรูเล็ต Arduino: รูเล็ตเป็นเกมคาสิโนที่ตั้งชื่อตามคำภาษาฝรั่งเศสหมายถึงวงล้อเล็ก
หมวกนิรภัย Covid ส่วนที่ 1: บทนำสู่ Tinkercad Circuits!: 20 ขั้นตอน (พร้อมรูปภาพ)
Covid Safety Helmet ตอนที่ 1: บทนำสู่ Tinkercad Circuits!: สวัสดีเพื่อน ๆ ในชุดสองตอนนี้ เราจะเรียนรู้วิธีใช้วงจรของ Tinkercad - เครื่องมือที่สนุก ทรงพลัง และให้ความรู้สำหรับการเรียนรู้เกี่ยวกับวิธีการทำงานของวงจร! หนึ่งในวิธีที่ดีที่สุดในการเรียนรู้คือการทำ ดังนั้น อันดับแรก เราจะออกแบบโครงการของเราเอง: th
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): 6 ขั้นตอน (พร้อมรูปภาพ)
Bolt - DIY Wireless Charging Night Clock (6 ขั้นตอน): การชาร์จแบบเหนี่ยวนำ (เรียกอีกอย่างว่าการชาร์จแบบไร้สายหรือการชาร์จแบบไร้สาย) เป็นการถ่ายโอนพลังงานแบบไร้สาย ใช้การเหนี่ยวนำแม่เหล็กไฟฟ้าเพื่อจ่ายกระแสไฟฟ้าให้กับอุปกรณ์พกพา แอปพลิเคชั่นที่พบบ่อยที่สุดคือ Qi Wireless Charging st
4 ขั้นตอน Digital Sequencer: 19 ขั้นตอน (พร้อมรูปภาพ)
4 ขั้นตอน Digital Sequencer: CPE 133, Cal Poly San Luis Obispo ผู้สร้างโปรเจ็กต์: Jayson Johnston และ Bjorn Nelson ในอุตสาหกรรมเพลงในปัจจุบัน ซึ่งเป็นหนึ่งใน “instruments” เป็นเครื่องสังเคราะห์เสียงดิจิตอล ดนตรีทุกประเภท ตั้งแต่ฮิปฮอป ป๊อป และอีฟ
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: 13 ขั้นตอน (พร้อมรูปภาพ)
ป้ายโฆษณาแบบพกพาราคาถูกเพียง 10 ขั้นตอน!!: ทำป้ายโฆษณาแบบพกพาราคาถูกด้วยตัวเอง ด้วยป้ายนี้ คุณสามารถแสดงข้อความหรือโลโก้ของคุณได้ทุกที่ทั่วทั้งเมือง คำแนะนำนี้เป็นการตอบสนองต่อ/ปรับปรุง/เปลี่ยนแปลงของ: https://www.instructables.com/id/Low-Cost-Illuminated-