ชมรมโดรน

1. ติดตั้ง Arduino IDE และอัปโหลดโค้ด

ติดตั้งบน Windows, macOS, Linux เพิ่มไลบรารี เลือกบอร์ด Nano อัปโหลด และแก้ error ที่เจอบ่อย

Arduino IDE คือโปรแกรมที่ใช้เขียนโค้ด แปลงเป็นภาษาเครื่อง (คอมไพล์) แล้วส่งเข้าบอร์ด (อัปโหลด) มีสองรุ่น 1.8.x แบบเก่า และ 2.x แบบใหม่ที่ช่วยเติมคำและขีดเส้นใต้ error ให้ แนะนำ 2.x

ขั้นตอนจากโค้ดถึงบอร์ดเขียนโค้ด คอมไพล์ อัปโหลด แล้ว Nano รันโปรแกรม พร้อมการตั้งค่าบอร์ดสามข้อก่อนอัปโหลดเขียนไฟล์ .inoคอมไพล์เป็นรหัสเครื่องอัปโหลดผ่านสาย USBรันบน Nanosetup() → loop()ก่อนกดอัปโหลด ตั้งสามอย่างในเมนู Tools:BoardArduino NanoProcessorATmega328P (Old Bootloader)Portพอร์ตที่เพิ่งเสียบลืม Old Bootloader → ขึ้น "not in sync"
เส้นทางของโค้ดตั้งแต่เขียนจนรันบนบอร์ด และการตั้งค่าสามข้อในเมนู Tools ที่ต้องถูกก่อนกดอัปโหลด

1. ติดตั้ง

โหลดจาก arduino.cc/en/software เลือกให้ตรงกับระบบของเครื่อง

เลือก "Windows Win 10 and newer, 64 bits" แล้วกด Download

เปิดไฟล์ .exe ที่โหลดมา กด Next จนจบ

ถ้ามีหน้าต่างถามติดตั้งไดรเวอร์ (driver) ให้กด Install ทุกอัน

เปิดโปรแกรม ควรเห็นหน้าต่างโค้ดว่างที่มี setup() กับ loop()

พอร์ตจะขึ้นเป็น COM3, COM4 ฯลฯ ถ้าเสียบสายแล้วไม่เห็นพอร์ต ดูที่ Device Manager ว่ามีอุปกรณ์ใหม่โผล่ตอนเสียบไหม

2. ดาวน์โหลดโค้ดตัวอย่างของชมรม

โค้ดที่ทั้งเว็บนี้อ้างถึงคือโปรเจกต์ drone_sanam5 รวมไว้เป็นไฟล์เดียวให้โหลดได้เลย ทุกอย่างที่บทเรียนสอนอยู่ในนี้ ตัดแค่ไฟล์และโค้ดที่ไม่มีใครเรียกใช้ออกแล้ว

ดาวน์โหลด drone_sanam5.zip (ประมาณ 23 KB)

ในไฟล์มี 18 ไฟล์: ไฟล์หลัก drone_sanam5.ino, ชุดคำสั่ง (protocol.hpp/.cpp, DroneEasy.hpp/.cpp), ค่าตั้ง (config.hpp, mode_config.hpp), ภารกิจของแต่ละโหมด และไฟล์เซอร์โว/ยิง/เจาะลูกโป่ง ไม่มีไฟล์คู่มือผู้ผลิตหรือตัวสร้างเอกสาร หน้าที่ของแต่ละไฟล์อยู่ใน โครงสร้างโปรเจกต์

กดปุ่มด้านบนเพื่อโหลดไฟล์ drone_sanam5.zip

คลิกขวาที่ไฟล์ เลือก Extract / แตกไฟล์ (Windows: Extract All, macOS: ดับเบิลคลิก)

ตรวจว่าได้โฟลเดอร์ชื่อ drone_sanam5 และข้างในมี drone_sanam5.ino ชื่อโฟลเดอร์ต้องตรงกับชื่อไฟล์ .ino หลักเป๊ะๆ ถ้าโฟลเดอร์ซ้อนกันสองชั้น (drone_sanam5/drone_sanam5/) ให้ใช้ชั้นใน หรือเปลี่ยนชื่อโฟลเดอร์ให้ตรง ไม่งั้น IDE จะถามว่าจะสร้างโฟลเดอร์ใหม่ให้

ย้ายโฟลเดอร์ไปไว้ที่เก็บ Sketch ของ Arduino (ปกติคือ Documents/Arduino/) แล้วเปิดไฟล์ drone_sanam5.ino ด้วย Arduino IDE ไฟล์อื่นในโฟลเดอร์จะเปิดเป็นแท็บให้เอง

เปิดแท็บ mode_config.hpp เลือกโหมดบินโดยแก้บรรทัด ACTIVE_FLIGHT_MODE (อธิบายใน โหมดบิน) แล้วบันทึก

ทดสอบคอมไพล์กับ Arduino Nano (ATmega328P Old Bootloader) ครบทั้ง 3 โหมดผ่านหมด โหมด Mission ใช้พื้นที่โปรแกรม 7,032 ไบต์ (22% ของ 30,720) โหมด Aviation Mastery 5,654 ไบต์ โหมด Innovation Challenge 6,768 ไบต์ ส่วนหน่วยความจำตัวแปรใช้ 389 ไบต์ (18% ของ 2,048) ยังไม่ได้ทดสอบบินกับโดรนจริงในรอบนี้ ทดสอบในที่โล่งก่อนทุกครั้ง

โหลดจากที่อื่นมา ให้เปิดอ่านก่อนอัปโหลด

ไฟล์ zip นี้เป็นของชมรมและเผยแพร่ในเว็บนี้ ถ้าได้โค้ดจากเพื่อนหรือเว็บอื่น ให้อ่าน .ino หลักและ config.hpp ก่อนอัปโหลดทุกครั้ง โดยเฉพาะค่าที่เกี่ยวกับมอเตอร์ เซอร์โว และความสูง

3. เพิ่มไลบรารี

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

โค้ดชุดล่าสุดของชมรมที่ใช้ศึกษาในเว็บนี้ (drone_sanam5) ไม่มีบรรทัด #include <IRremote.h> เลย และคอมไพล์ผ่านบนเครื่องที่ไม่ได้ลง IRremote แต่ถ้าโปรเจกต์ของคุณ include มัน ให้ติดตั้งดังนี้

เมนู Sketch → Include Library → Manage Libraries

พิมพ์ IRremote ในช่องค้นหา

เลือก "IRremote by shirriff, z3t0, ArminJo" กด Install

4. ตั้งค่าบอร์ดก่อนอัปโหลด

เสียบสาย Type-C เข้าช่อง Nano ที่ข้างโดรน (อย่าเสียบช่อง FC ที่ด้านหน้า) แล้วเลือกในเมนู Tools

เมนูเลือก
BoardArduino Nano
ProcessorATmega328P (Old Bootloader)
Portพอร์ตที่เพิ่งโผล่ตอนเสียบสาย

เรื่อง Old Bootloader: Nano รุ่นใหม่และบอร์ดโคลนส่วนใหญ่ใช้ตัวเก่า เลือกผิดจะอัปโหลดไม่ผ่าน ขึ้นข้อความ "not in sync" ถ้ายังไม่ผ่านให้ลองสลับเป็น "ATmega328P" ธรรมดา

ตัวอย่างชีวิตจริง: เลือกซองจดหมายให้ตรงขนาด

ซองผิดขนาด จดหมายก็เข้าไม่ได้ แม้ที่อยู่ถูก บอร์ดกับ Processor เหมือนกัน ที่อยู่คือ Port ต้องถูกทั้งสามอย่าง

5. อัปโหลด

  1. เปิดโฟลเดอร์ drone_sanam5 ดับเบิลคลิก drone_sanam5.ino
  2. กดปุ่มติ๊กถูก (Verify) เพื่อคอมไพล์ก่อน ถ้าไม่มี error สีแดง ไปต่อ
  3. กดปุ่มลูกศรขวา (Upload) หรือ Ctrl+U
  4. รอจนขึ้น "Done uploading."

ผลคอมไพล์ของโปรเจกต์ชมรมทั้งชุด (ที่ทดสอบด้วย arduino-cli สำหรับ Nano แบบ Old Bootloader) ได้ว่า

Sketch uses 7032 bytes (22%) of program storage space. Maximum is 30720 bytes.
Global variables use 389 bytes (18%) of dynamic memory, leaving 1659 bytes for local variables. Maximum is 2048 bytes.

โปรแกรมใช้ Flash 22% และ RAM 18% ยังเหลือพอให้เพิ่มโค้ด

ใช้บรรทัดคำสั่งแทนได้

arduino-cli ทำสิ่งเดียวกับปุ่ม Verify/Upload จากเทอร์มินัล คอมไพล์: arduino-cli compile -b arduino:avr:nano:cpu=atmega328old drone_sanam5 อัปโหลดเพิ่ม -u -p /dev/ttyUSB0

6. error ที่เจอบ่อย

ข้อความสาเหตุวิธีแก้
avrdude: ser_open(): can't open deviceยังไม่ได้เลือก Port หรือไม่มีสิทธิ์Tools → Port เลือกใหม่ ลินุกซ์ให้ตรวจกลุ่ม dialout
not in sync: resp=0x00เลือก Processor ผิด หรือ Serial Monitor เปิดค้างลองสลับ Old Bootloader ปิด Serial Monitor
'xxx' was not declared in this scopeสะกดชื่อผิด หรือยังไม่ได้ประกาศตรวจตัวพิมพ์เล็ก/ใหญ่ ตรวจว่าไฟล์ที่ประกาศอยู่ในโฟลเดอร์เดียวกัน
No such file or directory ตอน includeไม่ได้ลงไลบรารี หรือชื่อไฟล์ผิดติดตั้งผ่าน Library Manager
Low memory availableตัวแปรใช้ RAM ใกล้เต็มลดตัวแปรโกลบอล ย้ายข้อความไป PROGMEM
ไม่มี Port ให้เลือกสายชาร์จอย่างเดียว ช่อง USB ผิด ไม่มีไดรเวอร์เปลี่ยนสาย เสียบช่อง Nano ลงไดรเวอร์ CH340

ลองทำ

  1. ติดตั้ง IDE แล้วเปิดตัวอย่าง File → Examples → 01.Basics → Blink เลือก Board กับ Port กด Verify อย่างเดียวก่อน ดูว่าขึ้นขนาดโปรแกรมกี่ไบต์
  2. เปิด drone_sanam5 กด Verify เทียบตัวเลขกับด้านบน
  3. ถอดสาย USB แล้วเสียบใหม่ ดูว่า Port ไหนหายไปแล้วโผล่กลับมา นั่นคือพอร์ตของ Nano

พังตรงไหนบ่อย

  • เสียบ Type-C ผิดช่อง อัปโหลดค้าง หรือไม่เห็นพอร์ต
  • Serial Monitor เปิดอยู่ตอนอัปโหลด พอร์ตถูกจอง ปิดหน้าต่างนี้ก่อน
  • มี error ในไฟล์โหมดที่ไม่ได้เลือก ทุกไฟล์ .ino ในโฟลเดอร์ถูกรวมคอมไพล์ด้วยกัน error ที่ไหนก็ล้มทั้งชุด ดูหน้า โครงสร้างโปรเจกต์
  • ใช้สายที่ชาร์จได้อย่างเดียว ไม่มีสายข้อมูล คอมไม่เห็นบอร์ด

On this page