เมื่องาน OSSFestival 2014 ที่ผ่านมา มี workshop เกี่ยวกับ Arduino DIY ได้รับความสนใจมากจากหลายคนที่สนใจด้าน OpenSource Hardware ซึ่งโครงการอย่าง Arduino และ Raspberry Pi เป็นโครงการ OpenSource Hardware ที่ประสบความสำเร็จมาก เรียกได้ว่าใช้เครื่องมือทุกอย่างที่เป็น OpenSource ในการทำงานได้ ตั้งแต่การประกอบแบบ DIY,Arduino Bootloader สำหรับ Burn ลงในชิบ ATMEGA328, IDE ที่ใช้เขียนโปรแกรมและระบบปฏิบัติการที่ใช้งานได้ เรียกได้ว่าใช้งานเครื่องมือแบบ OpenSource ได้ในทุกกระบวนการเลยทีเดียว ดีจัง :) ใน workshop ได้แนวคิดหลายอย่าง ไม่ว่าจะเป็นบอลลูนติด Arduino ควบคุมด้วย Remote Control แบบ Infra Red หรือการใช้งาน Arduino DIY กับ RFID เป็นต้น เรียกได้ว่าทำได้หลายอย่างมากๆ

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

  • Robot Chassis Kit (Chassis + Motor + Wheel)
  • Arduino UNO
  • Motor Drive Shield (L298P)
  • Bluetooth Module HC-05
  • Battery ขนาด AA 6 ก้อน
  • Battery Box ขนาด AA 6 ก้อน

ประกอบ Robot Chassis Kit กับ Motor และล้อให้เรียบร้อย

การต่อวงจรก็ง่ายๆ แบบนี้

จากนั้นมาเขียนโปรแกรมเพื่อควบคุม Motor ผ่าน Motor Driver Shield กัน เนื่องจาก Shield กำหนด pin ที่ต้องใช้มาแล้ว ก็ให้เขียนโปรแกรมตาม pin ที่ต้องใช้ Motor Driver Shield ที่ผมเลือกใช้ มี pin ที่ต้องใช้อยู่ 4 pin ควบคุม dc motor 2 ตัว ผ่าน digital pin 4,7 และควบคุมความเร็วได้อีก 2 pin ผ่าน pwm pin 3,6 การควบคุมการหมุน motor ทำได้ง่ายๆ ผ่านค่า low, high สมมุติว่า M1,M2 คือ motor ตัวที่ 1 และ 2 ส่วน E1, E2 คือค่า pwm เพื่อกำหนดความเร็วการหมุนของ motor การบังคับทิศทางทำได้ดังนี้

  • เดินหน้า กำหนดค่าเป็น M1=low, M2=low, E1=120, E2=120
  • ถอยหลัง กำหนดค่าเป็น M1=high, M2=high, E1=120, E2=120
  • หมุนตัวช้าย กำหนดค่าเป็น M1=high, M2=low, E1=120, E2=120
  • หมุนตัวขวา กำหนดค่าเป็น M1=low, M2=high, E1=120, E2=120
  • เลี้ยวช้าย กำหนดค่าเป็น M1=high, M2=low, E1=0, E2=120
  • เลี้ยวขวา กำหนดค่าเป็น M1=low, M2=high, E1=120, E2=0
  • หยุด กำหนดค่าเป็น E1=0, E2=0

สำหรับการบังคับ robot เราจะบังคับผ่าน Bluetooth จาก Android App ดังนั้น เราต้องเขียนโปรแกรมภาครับไว้ที่ Arduino ว่ารับค่าที่ส่งมาจาก Android App แล้วจะให้ทำอะไร เช่น เดินหน้า, ถอยหลัง เป็นต้น ผมใช้โค้ดเดิมของ ArduDroid แล้วแก้ไขค่า 2 ส่วนคือค่าความเร็ว (pwm) ที่ส่งผ่าน digital pin 3 เก็บไว้ในตัวแปรเพื่อใช้ในการควบคุม การส่งค่าผ่าน Bluetooth ก็จะใช้ pattern ของ ArduDroid เพราะเราไม่ได้แก้โค้ดอะไรเลย การส่งค่าก็จะเป็นดังนี้

  • เดินหน้า ความเร็ว *11|3|200# ตำสั่ง *10|13|3#
  • ถอยหลัง ความเร็ว *11|3|200# ตำสั่ง *10|12|3#

ไปเรื่อยๆ โค้ดในส่วน Arduino แก้ไขแบบลวกๆ จะเป็นดังนี้

สำหรับ Joystick Controller คุณ Akexorcist ได้อธิบายการเขียน Joystick Controller ไว้ได้ดีมาก ทั้งการวาดภาพ การกำหนดขอบเขตของการแสดงผล การวัดระยะทาง และตำแหน่งของ Joystick ผมคงจะไม่อธิบายซ้ำนะครับ แต่ค่าที่เราจะใช้คือ

  • ตำแหน่งของ Joystick เพื่อบังคับทิศทาง ผมใช้แค่ 6 ตำแหน่งคือ บน, ล่าง, ซ้าย, ขวา, ว่าง และ กลาง
  • ระยะทาง คือ ระยะทางของตำแหน่งที่ห่างจาก center เอามาใช้เป็นค่า pwm

สำหรับการส่งข้อมูลผ่าน Bluetooth ก็ใช้ Bluetooth SPP Library ของคุณ Akexorcist เหมือนเดิม เพื่อส่งค่าไปยัง Bluetooth Module ที่อยู่กับ Arduino แก้ไข Joystick Controller เพิ่ม Bluetooth Library เข้าไป แล้วส่งค่าตามที่เรากำหนดดังนี้

เราก็จะได้ Arduino Robot บังคับผ่าน Android App Bluetooth Joystick เล่นกันได้แล้ว :)

Comments are closed.