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

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

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

อุปกรณ์ที่ใช้ในบทความนี้ประกอบด้วย

1. Pixy2 CMUcam5 Image Sensor (EFDV686) จำนวน 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. Round Smart Car (EFDV485) ชุดโครงรถอะคริลิคใสพร้อมอุปกรณ์ จำนวน 1 pcs ตรงนี้ผู้ใช้สามารถทำขึ้นเองได้ ใช้มอเตอร์กระแสตรง 2 ตัว

7. แบตเตอร์รี่ 18650(EPWS067) จำนวน 2 pcs , รางถ่าน(EFDV634)จำนวน 1 pcs และ 18650 Lithium-ion Battery Charger (EFDV621) จำนวน 1 pcs

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

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

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

ลำดับแรกในการเริ่มต้นเราจะมาทดสอบเจ้ากล้อง Pixy2 CMUcam5 Image Sensor กันครับ ให้เราต่อกล้องเข้ากับคอมพิวเตอร์ก่อนเพื่อทำการทดสอบการทำงาน

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

เปิดภาพขึ้นมาดูก่อนโดยเลือกที่เมนู Display raw video

เลือกโหมด color_comnected_components โดยเลือกที่ Program -> color_comnected_components 

ลำดับต่อมาทดสอบการตรวจจับวัตถุ โดยเลือกที่ 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

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

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

– Tower Pro Micro Servo Motor SG90 (EFDV242) จำนวน 2 pcs
– FPV Nylon Head (EFDV341) จำนวน 1 pcs
– Screws x 10 (มากับชุด FPV nylon head)

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

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

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

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

* ขณะประกอบพยายามให้มุมกึ่งกลางของ servo motor อยู่กลางระนาบที่จะหมุน

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

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

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

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

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

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

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

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

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

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

  • Max blocks (กำหนดจำนวนวัตถุที่ตรวจพบสูงสุดในหนึ่งเฟรม) (ต้องตั้งค่าตามความเหมาะสมขึ้นอยู่กับจำนวนวัตถุที่ต้องการตรวจจับ)
    – Sets the maximum total blocks sent per frame.
    – default: 100
  • Max blocks per signature (กำหนดจำนวนวัตถุที่ตรวจพบสูงสุดต่อ 1 สี) (ต้องตั้งค่าตามความเหมาะสมขึ้นอยู่ดับความต้องการข้อมูล)
    – Sets the maximum blocks for each color signature sent for each frame.
    – default: 100
  • 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: 750
  • Data out port (กำหนดพอร์ตสำหรับใช้ในการสื่อสาร) (ต้องตั้งค่าตามความเหมาะสม)
    – Selects the port that’s is used to output data. 
    0 = Arduino ICSP SPI
    1 = SPI witch ss
    2 = I2C
    3 = UART,
    4 = analog/digital x
    5 = analog/digitaly
    6 = LEGO I2C
    –  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 baud rate if you are using UART data out port.
    – default: 19200

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

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

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

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

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

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

– 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).

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

ดาวน์โหลด Pixy2 Library

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

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

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

รายละเอียดของข้อมูลที่ได้ออกมาประกอบไปด้วย

Detected 1:

block 0: sig: 1 x: 161 y: 91 width: 118 height: 62 index: 240 age: 255

– Detected 1 คือ จำนวนที่ตรวจพบ จำนวน 1 กรอบ
– block 0 คือ กรอบที่ 0
– sig 1 คือ Signature ที่ 1
– x คือ ตำแหน่งที่ตรวจพบในแนวแกน x
– y คือ ตำแหน่งที่ตรวจพบในแนวแกน y
– width คือ ความกว้างของสิ่งที่ตรวจพบ
– height คือ ความสูงของสิ่งที่ตรวจพบ
– index คือ ค่าดัชนีของสีที่ 240
– age คือ ค่าจำนวนของ frame ที่แสดงบนโปรแกรม Pixymon หลังจากที่ตรวจพบสี

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