ชื่อโปรเจกต์: แพลตฟอร์มปรับระนาบ
ผมได้ดูบทเรียนเกี่ยวกับ servo จาก Nicholas และบทเรียนเกี่ยวกับ MPU จาก Josh แล้วผมก็เกิดความคิดที่จะนำทั้งสองอย่างนี้มารวมกันทันที ผมได้สร้างแพลตฟอร์มเล็กๆ ที่สามารถเคลื่อนที่ได้สองทิศทาง (X และ Y) บนแพลตฟอร์มมี MPU ที่ทำหน้าที่บันทึกค่า pitch และ roll ของแพลตฟอร์ม Arduino จะประมวลผลข้อมูลเหล่านี้และควบคุม servo ให้เคลื่อนที่ในทิศทางที่ทำให้แพลตฟอร์มรักษาระดับอยู่ในแนวราบ
มันอาจจะไม่ได้เคลื่อนที่เร็วมากนัก แต่ก็ใช้งานได้
เพื่อแสดงให้เห็นว่ามันประมวลผลข้อมูลอย่างไร ผมได้เพิ่ม LED 5 ตัว (สีแดง 4 ดวง) จัดเรียงเป็นสี่เหลี่ยม และ (สีเขียว 1 ดวง) อยู่ตรงกลาง เมื่อแพลตฟอร์มอยู่ในแนวราบ จะมีเพียง LED สีเขียวเท่านั้นที่ติดสว่าง มิฉะนั้น จะมี LED อื่นๆ หลายดวงที่แสดงทิศทางที่แพลตฟอร์มเอียง ตัวแปร "norm" จะบอกจำนวนองศาที่แพลตฟอร์มอาจจะเอียงไปจากตำแหน่งแนวราบที่สมบูรณ์
ใน sketch มีบรรทัดคำสั่งเช่น: `servox=servox+1` และ:
`servox=servox-1`
การเพิ่มหรือลบขึ้นอยู่กับวิธีการติดตั้ง servo และจำเป็นต้องมีการทดลองบางส่วน ควบคู่ไปกับบรรทัดที่กล่าวถึงข้างต้น บรรทัดที่อยู่ก่อนหน้า (เช่น `if (servox<179)` และ `if (servox>0)`) ก็จำเป็นต้องถูกแทนที่ด้วยเช่นกัน
รายละเอียดทางเทคนิคเพิ่มเติม
การปรับระดับและการทรงตัวอัตโนมัติ
โปรเจกต์นี้คือแพลตฟอร์ม "Self-Leveling" แบบ 1 แกน หรือ 2 แกน ที่ออกแบบมาเพื่อรักษาระดับของเซ็นเซอร์หรือกล้องให้อยู่ในแนวราบ โดยไม่คำนึงถึงการเอียงของฐาน
- การแก้ไขทิศทางของ IMU: ใช้ MPU-6050 accelerometer/gyroscope Arduino จะจับค่ามุม "Roll" และ "Pitch" และใช้ Complimentary Filter เพื่อกำจัดสัญญาณรบกวนจากการสั่นสะเทือนของเซ็นเซอร์
- การขับเคลื่อน Servo เพื่อชดเชย: Arduino จะส่งค่ามุมที่ปรับแก้แล้วไปยัง MG996R servos แรงบิดสูง หากฐานเอียงไปทางซ้าย 10 องศา Arduino จะขยับ servo ไปทางขวา 10 องศา เพื่อรักษาระนาบแนวราบที่สมบูรณ์แบบ
ประสิทธิภาพ
- การนำ PID Loop มาใช้: (เวอร์ชันขั้นสูง) ใช้อัลกอริทึม Proportional-Integral-Derivative เพื่อให้แน่ใจว่าแพลตฟอร์มตอบสนองได้อย่างราบรื่นและไม่เกิดการเคลื่อนที่เกินเป้าหมาย (overshooting) ระหว่างการเอียงอย่างรวดเร็ว