9. ภารกิจแรก บินไปปล่อยบอล
เขียนโค้ดสั่งโดรนทีละ 7 ขั้น ตั้งแต่ calibrate จนลงจอด ด้วยคำสั่งจริงของชมรม
คำสั่งของชมรมสั้นเหมือนพูด drone.fw(250) แปลว่า "ไปข้างหน้า 250 ซม." โดรนไม่ได้วัดระยะ มันนับ เวลา บินนานเท่าไรก็ไปไกลเท่านั้น เหมือนเดินนับก้าวโดยหลับตา หน้านี้พาเขียนภารกิจเต็มหนึ่งรอบ ทีละขั้น ถ้ายังไม่เคยอ่าน เชื่อมต่อ และ คำสั่งแรก ให้กลับไปอ่านสองหน้านั้นก่อน เพราะที่นี่จะไม่อธิบายเหตุผลของ delay ซ้ำ
drone.calibration();ลูกศรแดง = ทิศหัวโดรน · เส้นฟ้า = เส้นทาง · ภาพช่วยเข้าใจ ไม่ใช่สเกลจริง
1calibrate ตั้งศูนย์ไจโร
โดรนนอนนิ่งบนพื้น มอเตอร์ไม่หมุน ไจโรอ่านค่าตอนนิ่งเก็บไว้เป็น "ศูนย์" ห้ามจับหรือขยับจนกว่าจะรอครบ (ชมรมใช้ 3 วินาที)
เวลาจริงบนโดรนประมาณ 3.00 วินาที (ในภาพเร่งให้ดูง่าย)
1. เขียนทีละขั้น
โค้ดย่อมาจาก KEY1_mode1() ใน Drone_Mission.ino (ตัดส่วนที่ลองแล้วถูกคอมเมนต์ทิ้งออกให้อ่านง่าย)
1. Calibrate: วางโดรนนิ่งๆ แล้วรอ
drone.calibration();
delay(3000);โดรนต้องตั้งศูนย์ไจโรบนพื้นที่นิ่ง ห้ามจับ ห้ามขยับ รอ 3 วินาทีให้เสร็จก่อนค่อยสั่งต่อ ถ้าอยากรวมสองบรรทัดเป็นบรรทัดเดียว ใช้ drone.calibrateAndDelay(3000);
2. Take off: ขึ้นบิน
drone.takeOff();
delay(4000);คำสั่งนี้แค่ส่งสัญญาณ "ขึ้น" แล้วจบทันที โดรนยังไม่ทันลอยถึงที่ จึงต้อง delay รอ ถ้าไม่รอ คำสั่งถัดไปจะซ้อนทับตอนโดรนกำลังขึ้น
3. ตั้งความสูง
drone.sh(HEIGHT_TAKEOFF); // 110 ซม. จาก config.hppsh ย่อมาจาก set height ส่งเป้าความสูงแล้วรอ 400 ms ให้โดรนไปถึง
4. เดินหน้า
drone.fw(250);ใช้เวลา 250 × 15.46 = 3865 ms แล้วเบรกอีก 400 ms (อ่านรายละเอียดที่ distance-time)
6. ปล่อยบอล
mission_drop_ch1_ch4();ฟังก์ชันนี้เขียนเองใน Drone_Mission.ino เปิดช่อง 1 กับ 4 รอ 300 ms (MISSION_DROP_WAIT_MS) แล้วปิดประตู กลไกเซอร์โวอยู่ใน ปล่อยสัมภาระ
2. ประกอบเป็นฟังก์ชันเดียว
void MyFirstMission() {
drone.calibration();
delay(3000);
drone.takeOff();
delay(4000);
drone.sh(HEIGHT_TAKEOFF);
drone.fw(250);
drone.ml(255);
mission_drop_ch1_ch4();
drone.autoLand();
}ผูกกับปุ่ม KEY11 ซึ่งโหมด Mission ยังไม่ได้ใช้ ใส่ในฟังก์ชัน loopDroneMissionMode():
drone.onKey11(MyFirstMission);เวลารวมก่อนลงจอดประมาณ 3000 + 4000 + 400 + (3865 + 400) + (3991 + 400) + 400 ≈ 16.5 วินาที จับเวลาดูว่าตรงไหม
ตัวจำลองใช้ชุดคำสั่งย่อของมันเอง (takeOff(), fw(), drop()) ชื่อคล้ายแต่ไม่ใช่โค้ด Arduino จริง ใช้ดูภาพรวมของลำดับเท่านั้น
ก่อนบินจริง
ต้องมีที่โล่ง แบตเต็ม และคนยืนห่างพอ อ่านหน้า ความปลอดภัย ก่อนทุกครั้ง ถ้าโดรนไปผิดทาง กดลงจอดบนรีโมททันที
ลองทำ
- ลดระยะเป็น
drone.fw(100)และdrone.ml(100)บินก่อนเพื่อดูว่าไปตรงไหม - เพิ่ม
drone.bw(250)ก่อนautoLand()ให้โดรนกลับมาลงที่เดิม - ลองสลับ ขั้น 2 กับ ขั้น 3 แล้วคิดว่าจะเกิดอะไรขึ้น (ตอบ: สั่งความสูงตอนยังอยู่บนพื้นไม่ได้ผล)
พังตรงไหนบ่อย
- โดรนไม่ขึ้น ลืม calibrate หรือขยับโดรนระหว่าง calibrate
- ขึ้นแล้วกระตุกหรือเอียง
delayหลังtakeOff()สั้นไป - ไปไม่ถึงจุดปล่อย ค่า ms/cm ไม่ตรงกับโดรนตัวนั้น ให้วัดใหม่
- กดปุ่มแล้วไม่เกิดอะไร ลืมผูกด้วย
onKey11(...)ใน loop หรือเลือกโหมดผิด ดู เลือกโหมดบิน