3D Artificial Horizon/ Gyroscope ใช้ Arduino กับ Processing3+
อยากใช้เมาส์ควบคุมก็จัดไปได้นะวัยรุ่น
ใช้กับเซ็นเซอร์ ADXL345 และ MPU6050/GY-521 Accelerometer/Gyroscope รุ่นอื่นๆ ก็ได้เหมือนกัน
หมายเห็ด: โปรเจกต์นี้ยังไม่เสร็จสมบูรณ์นะน้อง เก็บโค้ดไว้ใน HDD กลัวหายเฉยเลย
Azimuth ยังไม่ทำงาน แต่ก็ใช้การได้ปกติโดยไม่ต้องพึ่งมัน
ภาพยังกระตุกนิดหน่อย ส่วน Altitude ก็ยังไม่เวิร์ค... เดี๋ยวค่อยมาทำกันต่อ
ไอเดียมาจากเกม Kerbal Space Program (KSP)
เวลาทำงาน ให้หันหน้าโมดูล ไปทางนี้ นะ จ๊ะ

Aerospace Navigational Geometry: 3D Artificial Horizon
เวลาที่เครื่องบินบินเข้าไปในเมฆ นักบินจะมองไม่เห็นพื้นดินเป็นหลักอ้างอิง ถ้าปีกเอียงนิดเดียว อาจจะเผลอบินคว่ำหัวลงพื้นโดยไม่รู้ตัวก็ได้! 3D Artificial Horizon นี่คือสุดยอดผลงานวิศวะเลยนะ มันดึงข้อมูล Cartesian Acceleration กับ Gyroscopic vectors ออกมาจาก MPU6050 (GY-521) IMU ชิปเล็กๆ นี่แหละ แล้วส่งค่าผ่าน Serial ไปให้ Processing IDE คำนวณต่อจนวาดกล่อง 3D ขนาดใหญ่ที่ขยับได้ลื่นไหลบนหน้าจอคอมเราได้!
The I2C MPU6050 Quaternion Output Framework
ข้อมูลดิบจาก Accelerometer (X=15000, Y=3000, Z=-1500) มันวุ่นวายมาก ถ้า Uno สั่นนิดหน่อยบนโต๊ะ ตัวเลขก็จะกระเพื่อมรัวๆ จนทำให้เครื่องบิน 3D บนหน้าจอแตกเป็นเสี่ยงๆ ได้เลย!
- MPU6050 มันมีฟีเจอร์ขั้นเทพซ่อนอยู่ชื่อ DMP (Digital Motion Processor)
- Arduino ของเราต้องใช้ไลบรารี่ตัวใหญ่ยักษ์อย่าง
I2Cdev.hและMPU6050_6Axis_MotionApps20.hเพื่อเข้าถึงพลังในชิปตัวนี้! - DMP ข้างในจะรวมข้อมูลแรงโน้มถ่วงจาก Accelerometer กับโมเมนตัมการหมุนจาก Gyroscope เข้าด้วยกัน แล้วคำนวณออกมาเป็น Quaternions และ Euler Angles!
- มันจะส่งค่าออกมาเป็นทศนิยมที่ลื่นปรื๊ดๆ แบบนี้:
Pitch: 14.5 degrees, Roll: 32.1 degrees, Yaw: 180.0 degrees
สะพาน Serial สู่ Processing IDE (เรนเดอร์ด้วย Java)
Uno ตัวนี้มันวาดเครื่องบิน 3D โคตรเท่ไม่ได้หรอกน้อง
- Uno ทำหน้าที่เป็นท่อส่งข้อมูลอย่างเดียว มันพ่นตัวเลขทศนิยมที่แม่นยำสุดๆ ออกมา
Serial.println(String(ypr[0]) + "," + String(ypr[1]) + "," + String(ypr[2]));ด้วยความเร็วสูงสุด 115200 baud! - สถาปัตยกรรม Java บน PC: โปรแกรมเมอร์เปิดโปรเจค Java ใน Processing IDE ที่โคตรซับซ้อนขึ้นมา
- ผ่านสาย USB, Processing จะดักจับสตริงข้อมูลนั้น!
// Java code applying physical rotation directly to a 3D geometry shape!
rotateZ(radians(roll));
rotateX(radians(pitch));
rotateY(radians(yaw));
box(200, 10, 200); // วาดปีกเครื่องบิน 3D แบบอัพเดทค่าต่อเนื่อง 60 เฟรมต่อวินาที!
เมทริกซ์ชิ้นส่วน Inertial
- Arduino Uno/Nano (ฟังก์ชันมาตรฐาน)
- โมดูล MPU6050 (GY-521) 6-Axis Accelerometer/Gyroscope (ต้องมั่นใจว่าเชื่อมสาย I2C
SDAและSCLแน่นหนานะ! สายหลวมนิดเดียว DMP initialization array พังยกใหญ่!) - ซอฟต์แวร์ Processing IDE (ติดตั้งบน PC/Mac เพื่อจัดการการเรนเดอร์ 3D แบบ WebGL ที่หนักหน่วง!)
- สาย USB ขนาด 12 นิ้ว ที่เชื่อมโยงสถาปัตยกรรมทั้งหมดเข้ากับหน้าจอโฮสต์อย่างราบรื่น!
เชื่อมต่อ ADXL345 หรือ MPU6050/GY-521 เข้ากับ Arduino
เราจะใช้ A4 และ A5 ตรงนี้
SCL - A5
SDA - A4
