โปรเจครถติดตามวัตถุ (Car Tracking) พัฒนาโดยโมดูลกล้อง Pixy CMUcam5 และบอร์ด Arduino Mega 2560

โปรเจครถติดตามวัตถุ (Car Tracking)

พัฒนาโดยโมดูลกล้อง Pixy CMUcam5 และบอร์ด Arduino Mega 2560

01

   ในบทความ โปรเจครถติดตามวัตถุ (Car Tracking) พัฒนาโดยโมดูลกล้อง Pixy CMUcam5 และบอร์ด Arduino Mega 2560 นี้ วัตถุประสงค์คือการประยุกต์การใช้งานกล้อง Pixy CMUcam5 เชื่อมต่อกับไมโครคอนโทรลเลอร์เพื่อทำแอพพลิเคชั่นเป็นรถติดตามวัตถุ ศึกษาเรียนรู้การทำงานของกล้อง Pixy CMUcam5 เชื่อมต่อสื่อสารกับไมโครคอนโทรลเลอร์ โดยผู้ใช้ต้องกำหนดลักษณะสีที่ต้องการตรวจจับจากคอมพิวเตอร์ให้กับกล้องก่อน แล้วเมื่อกล้องทำงานจะส่งผลลัพธ์ไปยังไมโครคอนโทรลเลอร์เพื่อควบคุมการทำงานของมอเตอร์ที่ควบคุมการเคลื่อนที่ของรถ รวมทั้งตัวกล้องเองก็จะส่งคำสั่งไปควบคุมมอเตอร์ในการหมุนซ้าย-ขวาและปรับก้ม-เงยตัวกล้องด้วย

อุปกรณ์ที่ใช้ในบทความนี้ประกอบด้วย
1. Pixy CMUcam5 (EFDV347) จำนวน 1 pcs กล้องที่ใช้เป็นเซ็นเซอร์ในการทำตรวจจับและหาตำแหน่งของสีที่ต้องการเพื่อส่งข้อมูลไปสั่งงานมอเตอร์ต่อไป

2. FPV Nylon Head (EFDV341) จำนวน 1 pcs ขาตั้ง 2 แกน ใช้งานคู่กับ Servo 9g, 12g สามารถเคลื่อนที่ได้ทั้ง 2 แกนนำไปประยุกต์ใช้งานเป็นขาตั้งกล้อง Webcam ที่สามารถหมุนและปรับทิศทางได้

3. Tower Pro Micro Servo Motor SG90 (EFDV242) จำนวน 2 pcs มอเตอร์ปรับทิศทางหันกล้องใช้งานคู่กับขาตั้ง

4. Arduino Mega 2560 (EADN015) จำนวน 1 pcs โมโครคอนโทรลเลอร์ที่ใช้ในการควบมอเตอร์ขับเคลื่อนตัวรถ

5. Ardumoto Motor Driver Shield L298P (EFDV278) จำนวน 1 pcs Shield สำหรับขับกระแสให้มอเตอร์

6. Smart Car with Battery Case (EFDV396) ชุดโครงรถอะคริลิคใสพร้อมอุปกรณ์ จำนวน 1 pcs ตรงนี้ผู้ใช้สามารถทำขึ้นเองได้ ใช้มอเตอร์กระแสตรง 2 ตัว

         จากบทความที่แล้ว Unboxing preview Pixy CMUcam5 คือกล้องจากทาง CMUcam ที่มีการคิดค้นและพัฒนาอย่างต่อเนื่อง Pixy CMUcam5 เป็นตัวล่าสุดที่เพิ่งออกจำหน่ายเมื่อไม่นานนี้ โดยเพิ่มความสามารถในการประมวลผลภาพที่ได้เข้าไปด้วยทำให้มีความสามารถเพิ่มมากขึ้นและใช้งานง่ายขึ้น สามารถเอาผลลัพธ์ของการทำงานไปใช้ได้ทันที สิ่งที่ Pixy CMUcam5 ทำได้ก็คือ

  • การสื่อสารกับไมโครคอนโทรลเลอร์ต่างๆ ผ่านทาง UART Serial, SPI, I2C, USB, etc..
  • ตรวจจับวัตถุสีต่างๆ ได้จำนวนหลายชิ้นในเวลาเดียวกัน
  • ควบคุมการทำงานด้วย LPC4330 ARMCortex-M4 เป็น Processor หลักในการทำ Digital Signal Processing ยังสามารถควบคุม Servo ได้ในตัวด้วย

         ขั้นตอนในการเริ่มต้นใช้งานและเชื่อมต่อ Pixy CMUcam5 สามารถดูได้จากบทความที่แล้ว Unboxing preview Pixy CMUcam5 สำหรับในบทความนี้ เราจะอธิบายเริ่มต้นตั้งแต่ส่วนประกอบต่างๆบนโมดูลกล้อง, การประกอบขาตั้งกล้องที่สามารถแพนได้ และการตั้งค่า Configure ต่างๆในการใช้งานกับไมโครคอนโทรลเลอร์ Arduino Mega 2560
         ลำดับแรกในการเริ่มต้นเราจะมาทดสอบเจ้ากล้อง Pixy กันครับ ให้เราต่อกล้องเข้ากับคอมพิวเตอร์ก่อนเพื่อทำการทดสอบการทำงาน

         หลังจากนั้นทำการเปิดโปรแกรม PixyMon ที่ลงไว้ก่อนหน้านี้ขึ้นมาดังภาพด้านล่าง

10

         ให้เราเปิดภาพขึ้นมาดูก่อนโดยเลือกที่เมนู Action > Raw Video

หลังจากนั้นให้ทำการปรับโฟกัสที่เลนส์หน้ากล้องเพื่อใช้ในการตรวจจับวัตถุที่แม่นยำมากขึ้น

ลำดับต่อมาทดสอบการตรวจจับวัตถุกันเลย โดยเลือกที่ Action> Set Signature 1… กำหนดวัตถุที่ต้องการตรวจจับวัตถุที่ 1

หลังจากภาพหยุดนิ่ง ให้เราเลือกบริเวณสีที่เราต้องตรวจจับดังภาพด้านล่าง

เมื่อทำการเลือกสีที่ต้องการ กล้องจะทำการตรวจจับทันที จากภาพด้านล่างจะเห็นได้ว่ามีกอบสีขาวเมื่อตรวจพบสีที่กำหนดไว้ S=1

ทดสอบขยับวัตถุเพื่อตรวจสอบว่ากล้องสามารถใช้งานได้ปกติ

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

1. Button คือ ปุ่มที่ใช้เลือกวัตถุที่ต้องการตรวจจับ ตามรูปแบบที่บันทึกไว้ 1-7 และเป็นปุ่มที่ใช้เริ่มและหยุดการตรวจจับอีกด้วย
2. USB คือ พอร์ตที่ใช้ในการเชื่อมต่อไปยังคอมพิวเตอร์หรืออุปกรณ์อื่นๆ เพื่อกำหนดค่าต่างๆ
3. I/O Port (UART, SPI, I2C etc.) คือ พอร์ตที่ใช้ในการเชื่อมต่อกับไมโครคอนโทรเลอร์ในรูปแบบต่างๆ สามารถดูลายละเอียดจากภาพด้านล่าง
4. RC Servo(2) คือ พอร์ตที่ใช้ในการเชื่อมต่อกับ Servo สามารถต่อได้สูงสุดถึง 2 Servo
5. Power In(6-10V) คือ พอร์ตสำหรับจ่ายไฟเลี้ยง 6-10V เราสามาใช้จ่ายไฟเลี้ยงได้หลายช่องทางทั้ง USB และ I/O Port

พอร์ตเชื่อมต่อกับ Servo สามารถเชื่อมต่อได้ถึง 2 Servo และมีฟังก์ชั่นในการควบคุมให้อีกด้วย

19

การประกอบขาตั้ง Servo อุปกรณ์ที่ใช้มีดังนี้

20

Step 1: ตัดแขนของ Servo ให้ได้ขนาดดังภาพด้านล่าง

Step 2: เริ่มประกอบส่วนแรก ส่วนของฐานดูได้จากภาพด้านล่าง

Step 3: ประกอบแขนของ Servo เข้ากับช่องที่กำหนดไว้ดังภาพด้านล่าง

Step 4: ประกอบ Servo ตัวที่ 2 เข้ากับแขนที่ประกอบไว้ก่อนหน้านี้ตามภาพด้านล่าง

Step 5: ประกอบส่วนบนสุดเข้ากับ Servo ตัวที่ 2

Step 5.1: ประกอบส่วนบนสุดเข้ากับ Servo ตัวที่ 2 ถูกต้องจะเป็นดังภาพด้านล่าง

Step 6: ประกอบขาตั้งส่วนฐานล่างสุดเข้ากับแขนของ Servo

Step 7: ประกอบขาตั้งส่วนฐานล่างสุดเข้ากับ ชุดส่วนบนที่ประกอบเสร็จแล้ว

Step 8: ทำการตัดพลาสติกส่วนด้านบนออก พร้อมทั้งเจาะรูสำหรับยึดน็อต

Step 9: ทำการประกอบกล้องเขากับขาตั้งดังภาพด้านล่าง

30
31

Step 10: ทำการต่อสาย Servo เข้ากับกล้อง Pixyดังนี้

  • Servo ตัวฐานต่อเข้ากับ >>> ช่อง RC-Servo PWM0
  • Servo ตัวบนต่อเข้ากับ >>> ช่อง RC-Servo PWM1
32

         ลำดับต่อมาทำการตั้งค่าเจ้า Pixy ของเราเพื่อเตรียมเชื่อมต่อเข้ากับไมโครคอนโทรลเลอร์โดยเลือกที่เมนู File > Configure…

จากนั้นจะเห็นหน้าต่างใหม่ที่ใช้ในการตั้งค่าส่วนต่างๆ สามารถดูลายละเอียดการตั้งค่าได้จากข้อมูลด้านล่าง

34
  • Max blocks (กำหนดจำนวนวัตถุที่ตรวจพบสูงสุดในหนึ่งเฟรม) (ต้องตั้งค่าตามความเหมาะสมขึ้นอยู่กับจำนวนวัตถุที่ต้องการตรวจจับ)
    • Sets the maximum total blocks sent per frame.
    • default: 1000
  • Max blocks per signature (กำหนดจำนวนวัตถุที่ตรวจพบสูงสุดต่อ 1 สี) (ต้องตั้งค่าตามความเหมาะสมขึ้นอยู่ดับความต้องการข้อมูล)
    • Sets the maximum blocks for each color signature sent for each frame.
    • default: 1000
  • Min block area (กำหนดขนาดของวัตถุที่ตรวจพบเล็กที่สุดและจะไม่ถูกส่งข้อมูลออก)
    • Sets the minimum required area in pixels for a block. Blocks with less area won’t be sent.
    • default: 20
  • Default program (กำหนดหมายเลขโปรแกรมเมื่อทำการเปิดขึ้น)
    • Selects the program number that’s run by default upon power-up.
    • default: 0
  • Brightness (กำหนดค่าความสว่าง) (ต้องตั้งค่าตามความเหมาะสมขึ้นอยู่กับสถานที่)
    • Sets the average brightness of the camera, can be between 0 and 255.
    • default: 80
35
  • Min saturation (กำหนดขั้นต่ำค่าความอิ่มตัวของสีขณะกำหนด Signatures)
    • Sets the minimum allowed color saturation for when generating color signatures. Applies during teaching.
    • default: 10.0
  • Hue spread (กำหนดการรวมตัวของจุดสี)
    • Sets how inclusive the color signatures are with respect to hue. Applies during teaching.
    • default: 1.0
  • Saturation spread (กำหนดการรวมตัวของการอิ่มตัว)
    • Sets how inclusive the color signatures are with respect to saturation. Applies during teaching.
    • default: 1.0
36
  • Data out port (กำหนดพอร์ตสำหรับใช้ในการสื่อสาร) (ต้องตั้งค่าตามความเหมาะสม)
    • Selects the port that’s is used to output data. 0=SPI, 1=I2C, 2=UART, 3=analog/digital x, 4=analog/digital y
    • default: 0
  • I2C address (กำหนดหมายเลขที่อยู่สำหรับการสื่อสารรูปแบบ I2C) (ต้องตั้งค่าตามความเหมาะสม)
    • Sets the I2C address if you are using I2C data out port.
    • default: 0x54
  • UART baudrate (กำหนดความเร็วการสื่อสารในรูปแบบ UART) (ต้องตั้งค่าตามความเหมาะสม)
    • Sets the UART baudrate if you are using UART data out port.
    • default: 19200
37

Pan P gain , Pan D gain , Tilt P gain , Tilt D gain (กำหนดขอบเขตการเคลื่อนที่ของการแพน Servo)

         เมื่อทำการตั้งค่าส่วนต่างๆ เสร็จแล้ว (ตั้งตามค่าเดิมของโรงงานก่อน) เราต้องทำการทดสอบการประกอบกล้องกับขาตั้งนั้นใช้งานได้หรือไม่ โดยไปที่เมนู Action >Run pan/tilt demo (กำหนดสีที่ต้องการตรวจจับไว้ก่อนหน้านี้คือสีแดง)

38

   การเชื่อมต่อระหว่างไมโครคอนโทรลเลอร์และกล้อง Pixy CMUcam5 ซึ่งในบทความนี้เราจะต่อกับ Arduino Mega 2560 เป็นไมโครคอนโทรลเลอร์เบอร์ Atmel ATmega2560 จัดเป็น MCU AVR อีกหนึ่งรุ่นที่มี I/O มาให้เยอะพอสมควรสามารถต่ออุปกณ์ภายนอกได้มากขึ้น
         พอร์ตที่ใช้ในการเชื่อมต่อก็คือ I/O Port (SPI) ของกล้อง Pixy ลำดับแรกให้ทำการต่อสายที่บรรจุอยู่ภายในกล่องของ Pixy เข้ากับตัวกล้องทางพอร์ต I/O Port เชื่อมต่อไปยัง Arduino โดยการนำสายอีกฝั่งไปต่อกับกับ Arduino Mega 2560 ทางพอร์ต ICSP ดังภาพด้านล่าง

ต่อไปให้โหลด LibraryPixyFor Arduino และแตกไฟล์ไปยังโฟล์เดอร์ libraries ของ Arduino IDE ที่ได้ทำการลงไว้ ตัวอย่างเช่น C:\Program Files (x86)\Arduino\libraries

         ตั้งค่าการเชื่อมต่อระหว่าง Arduino กับ Pixy โดยทำการเปิดโปรแกรม PixyMon > File > Configure… : Data out port= 0 (SPI) รายละเอียดการตั้งค่าสามารถดูได้จากข้อมูลด้านล่างของภาพ

41
  • 0: SPI – this is the default port that uses 3 wires (pins 1, 3, and 4 of the I/O connector) and is used to communicate with Arduino
  • 1: I2C – this is a multi-drop 2-wire port (pins 5 and 9 of the I/O connector) that allows a single master to communicate with up to 127 slaves (up to 127 Pixys).
  • 2: UART – this is the common “serial port” (pins 1 and 4 of the I/O connector). Pixy receives data via pin 1 (input) and transmits data via pin 4 (output).
  • 3: analog/digital x – this will output the x value of the largest detected object as an analog value between 0 and 3.3V      (pin 3). It also outputs whether an object is detected or not as a digital signal (pin 1 of the I/O connector).
  • 4: analog/digital y – this will output the y value of the largest detected object as an analog value between 0 and 3.3V       (pin 3). It also outputs whether an object is detected or not as a digital signal (pin 1 of the I/O connector).

         ทำการทดสอบการเชื่อมต่อระหว่าง Pixy และ Arduino โดยทำการเปิดโปรแกรม Arduino เลือกที่เมนู File > Example > Pixy > hello_world ทำการอัพโหลดไปยัง Arduino พร้อมทั้งเปิด Serial Monitor ไว้ดังภาพด้านล่าง

42

         หลังจากนั้นไปยังหน้าจอ PixyMon ทำการกำหนดสีที่ต้องการตรวจจับและเลือกที่เมนู Action > Run default program ดังภาพด้านล่าง

กลับไปยังหน้าต่าง Serial Monitor ของ Arduino เราจะได้ข้มูลจากกล้อง Pixy ดังภาพด้านล่างสรุปได้ว่าการเชื่อมต่อสำเร็จ

รายละเอียดของข้อมูลที่ได้ออกมาประกอบไปด้วย
Detected 1:
block 0: sig: 1 x: 159 y: 109 width: 61 height: 61

  • Detected 1 คือ จำนวนที่ตรวจพบ จำนวน 1 กรอบ
  • block 0 คือ กรอบที่ 0
  • sig 1 คือ Signature ที่ 1
  • x คือ ตำแหน่งที่ตรวจพบในแนวแกน x
  • y คือ ตำแหน่งที่ตรวจพบในแนวแกน y
  • width คือ ความกว้างของสิ่งที่ตรวจพบ
  • height คือ ความสูงของสิ่งที่ตรวจพบ

โปรเจครถติดตามวัตถุ (Car Tracking)พัฒนาโดยโมดูลกล้อง Pixy CMUcam5 และบอร์ด Arduino Mega 2560 ตอนที่ 2