IOIO-Bot

Page 1

Android/ Proto-Invention Robotics Ake Exorcist

IOIO-Bot

หุนยนตควบคุมดวยอุปกรณแอนดรอยดผานบลูทูธ

มาแววววววว กับโครงงานที่ถามถึง หุนยนต ที่ควบคุมการเคลื่อนที่ดวยอุปกรณแอนดรอยด โดยใชบอรด IOIO-Q ผานทางพอรต USB หรือไรสายดวยบลูทธู แถมยังตอยอดไดไมสนิ้ สุด เมือ่ บอรดควบคุมจัดมาครบทัง้ จุดตอตัวตรวจจับ วงจรขับมอเตอรไฟตรงได 6 ตัว ขับเซอรโวมอเตอรไดอีก 4 ชอง มาพรอมกับแอปควบคุมที่ดูเนียนตา คุณๆ ทีเ่ ป็นนักเล่นนักทดลองเกีย่ วกับกำรเชือ่ มต่ออุปกรณ์แอนดรอยด์กบั อุปกรณ์ภำยนอกคงรูจ้ กั บอร์ด IOIO หรือ IOIO-Q กันดีพอสมควร ด้วยควำม สำมำรถในกำรเชือ่ มต่อกับอุปกรณ์แอนดรอยด์โดยเฉพำะ จึงท�ำให้ได้เปรียบ กว่ำบอร์ดอืน่ ๆ ตรงทีไ่ ม่ตอ้ งเขียนโปรแกรมทำงฝง ไมโครคอนโทรลเลอร์ มีเพียง กำรพัฒนำแอปพลิเคชัน่ บนอุปกรณ์แอนดรอยด์เท่ำนัน้ ด้วยคุณสมบัตดิ งั กล่ำว บอร์ด IOIO-Q จึงเหมำะไม่นอ้ ยทีจ่ ะน�ำมำท�ำเป็นหุน่ ยนต์ทคี่ วบคุมกำรเคลือ่ นที่ ด้วยอุปกรณ์แอนดรอยด์ได้ เพรำะเชือ่ มต่อกันแบบไร้สำยผ่ำนบลูทธู ได้ ทัง้ ยังน�ำ ไปประยุกต์ใส่ลกู เล่นหรืออุปกรณ์ตำ่ งๆ ให้กบั ตัวหุน่ ยนต์ได้ไม่ยงุ่ ยำก นัน่ จึงเป็น ทีม่ ำของ IOIO-Bot หุน ยนตควบคุมดวยอุปกรณแอนดรอยด

24

The Prototype Electronics

¤Ø³ÊÁºÑµÔ·Ò§à·¤¹Ô¤·Õ่ÊํÒ¤Ñޢͧ IOIO-Bot • ควบคุมกำรเคลื่อนที่ด้วยอุปกรณ์แอนดรอยด์ผ่ำนพอร์ต USB หรือแบบ ไร้สำยผ่ำนบลูทูธ • ใช้บอร์ด IOIO-Q เป็นอุปกรณ์หลักในกำรติดต่อกับอุปกรณ์แอนดรอยด์ • ขับเคลื่อนด้วยมอเตอร์ไฟตรงพร้อมชุดเฟองขับที่มีอัตรำทด 48:1 จ�ำนวน 4 ตัว แยกกำรควบคุมอย่ำงเป็นอิสระ • ใช้ล้อหนำม 4 เส้นในกำรสนับสนุนกำรเคลื่อนที่ • มีจุดต่อเพื่อขับเซอร์โวมอเตอร์ขนำดเล็ก 6V เพิ่มเติมได้อีก 4 ตัว • มีจุดต่อตัวตรวจจับอะนำลอกที่ใช้ไฟเลี้ยง +3.3V รวม 6 ช่อง และที่ใช้ ไฟเลี้ยง +5V เพิ่มเติมอีก 2 ช่อง • มีจุดต่อแบตเตอรี่ 2 แบบคือ ใช้เทอร์มินอลบล็อกแบบขันสกรู และแบบ คอนเน็กเตอร์ DEAN เพื่อใช้กับแบตเตอรี่แบบ LiPo 7.4V 1000mAH ขึ้น ไป • มีไฟแจ้งเตือนสถำนะแบตเตอรี่ • โครงหุ่นยนต์ ATX เป็นอะลูมินียมชุบอะโนไดซ์ จึงทนทำน แข็งแรง • ไฟเลี้ยงหุ่นยนต์ +6V ถึง +9V กระแสไฟฟำอย่ำงน้อย 1000mAH


¼ÙŒช‹ÇÂพรÐเอกทÕ่Ëล‹อäÁ‹นŒอÂ..IOIO-Robotic Activity Board : IOIO-RAB ส�าหรับหุ่นยนต์ที่ใช้บอร์ด IOIO-Q เป็นตัวจัดการหลักจะต้องพึ่งพา ความสามารถของเพื่ อ นพระเอก นั่ น คื อ บอร์ ด IOIO-RAB หรื อ IOIORobotic Activity Board ที่มีวงจรขับมอเตอร์ไฟตรงในตัวมากถึง 6 ช่อง โดย ในโครงงานนี้จะใช้ 4 ช่อง เพื่อขับมอเตอร์ 4 ตัว แสดงหน้าตาในรูปที่ 1 ส่วน โครงหุ่นยนต์เลือกใช้แผ่นฐาน ATX ที่ท�าจากอะลูมิเนียม ซึ่งทาง TPE เคยน�า แบบของแผ่นฐาน ATX มาตีพิมพ์แล้ว แต่หากหาหันไม่พบหรือลืมเลือนกัน ไปแล้ว ก็เปดไปที่ท้ายเล่ม ก็มีแบบให้น�าไปใช้ได้

(2) ติดตั้งบอร์ด IOIO-RAB เข้ากับชิ้นส่วนบานพับของโครงหุ่นยนต์ 3.1

ส่วนรายละเอียดของบอร์ด IOIO-RAB หาอ่านได้ใน TPE ฉบับเดียว กันนี้

เµรÕÂÁอØปกร³

3.2

ประกอบด้วย

1. โครงหุ่นยนต์ AT-BOT 2. แผงวงจร IOIO-Robotics Activity Board (IOIO-RAB) ที่ติดตั้ง บอร์ด IOIO-Q แล้ว 3. แบตเตอรี่อัลคาไลน์หรือแบบประจุได้ Ni-MH 2000mAH ขึ้นไป ขนาด AA 6 ก้อน หรือลิเธียมโพลีเมอร์ 7.4V 2000mAH

4. อุปกรณ์แอนดรอยด์ จะเป็นแท็บเล็ตหรือสมาร์ตโฟนก็ได้

5. บลูทูธดองเกิลส�าหรับบอร์ด IOIO-Q

รูปที่ 3 ติดตั้งบอร์ด IOIO-RAB กับโครงหุ่นยนต์ (3) ถอดชุดเฟองขับมอเตอร์สองตัวหน้าออกชั่วคราว เนื่องจากต้อง เปลี่ยนสกรูส�าหรับยึดเป็นแบบตัวยาวแทนส�าหรับรองบอร์ด IOIO-RAB จากนั้นติดตั้งชุดเฟองขับมอเตอร์กลับลงไป แล้วยึดบอร์ดด้วยสกรูมือหมุน 4.1

รูปที่ 1 IOIO-Robotics Activity Board ที่ใช้ในโครงงานนี้ 4.2

¡ÒÃÊÌҧ (1) จัดหาอุปกรณ์มาสร้างโครงหุ่นยนต์ ซึ่งในที่นี้เลือกใช้โครงหุ่น ยนต์ AT-BOT จากชุด Robo-Creator (www.inex.co.th) หรือดูจากหน้า TPE shop ท�าการประกอบตามเอกสารที่ดาวน์โหลดจาก http://issuu. com/innovativeexperiment/docs/at-bot_building โดยประกอบเฉพาะ โครงหุ่นยนต์, ล้อ มอเตอร์ และกะบะถ่าน อาจเปลี่ยนกะบะถ่านเป็นชุด แบตเตอรี่ลิเธียมโพลีเมอร์ 2 เซล ขนาด 7.4V 2000mAH แทนได้

4.3

รูปที่ 4 เปลี่ยนสกรูส�าหรับติดตั้งบอร์ด IOIO-RAB รูปที่ 2 แสดงหน้าตาของโครงหุ่นยนต์ที่ประกอบขึ้น

The Prototype Electronics

25


(4) ต่อสายไฟเลี้ยงจากแบตเตอรี่เข้ากับบอร์ด IOIO-RAB แล้วบรรจุ แบตเตอรี่

แอปพลเคชั่น IOIO-Bot แอปพลิเคชั่น IOIO-Bot ที่ใช้ในโครงงานนี้ท�ำงานบนระบบปฏิบัติ การแอนดรอยด์ได้ตั้งแต่เวอร์ชัน 2.2 ขึ้นไป ดาวน์โหลดได้ที่ play store ใช้ คีย์เวิร์ด IOIO-Bot ในการค้นหา โดยแอปพลิเคชั่นนี้เลือกใช้วิธีควบคุมที่ ค่อนข้างยืดหยุ่น โดยปกติจะใช้ปุ่มก�ำหนดทิศทาง เมื่อกดปุ่มใดก็เคลื่อนที่ ตามทิศทางนั้นๆ แต่ปัญหาคือ ก�ำหนดความเร็วได้ยาก และบังคับให้เลี้ยว ขณะเคลื่อนที่ได้ยาก จึงเปลี่ยนวิธีควบคุมเป็นวิธีใหม่เพื่อให้ควบคุมได้ง่าย มากขึ้น จากเดิมที่ทำ� เป็นปุ่มทิศทางต่างๆ ก็จะแบ่งเป็นสองฝั่งตามต�ำแหน่ง ของมอเตอร์ที่ติดตั้งใน IOIO-Bot แล้วควบคุมแยกกัน

รูปที่ 5 ต่อสายจากกะบะถ่านเข้ากับบอร์ด IOIO-RAB (5) ต่อสายมอเตอร์เข้ากับจุดต่อมอเตอร์บนบอร์ด IOIO-RAB โดยต่อ มอเตอร์ฝั่งขวาเข้ากับจุดต่อ M1 และ M2 ส่วนฝั่งซ้ายต่อเข้ากับจุดต่อ M5 6.1 รูปที่ 7 หน้าตาของแอปพลิเคชั่น IOIO-Bot

6.2

รูปที่ 8 แนวทางการใช้งานปุ่มควบคุมบนแอปพลิเคชั่น IOIO-Bot ส�ำหรับการควบคุมมอเตอร์ใช้การเลื่อนคันโยกขึ้นลงแทน เพื่อให้ ก�ำหนดความเร็วของมอเตอร์ได้ง่าย โดยต�ำแหน่งกึ่งกลางเป็นต�ำแหน่งที่ เลือกให้มอเตอร์ไม่หมุน ส่วนบนสุดและล่างสุดเป็นการเลือกให้หมุนด้วย ความเร็วสูงสุดในทิศทางที่ตรงข้ามกัน ส�ำหรับการเลื่อนคันโยกขึ้นด้านบน เป็นการสั่งให้มอเตอร์หมุนไปข้างหน้า และการเลื่อนคันโยกลงด้านล่าง เป็นการสั่งงานให้มอเตอร์หมุนถอยหลัง

รูปที่ 6 ต่อสายมอเตอร์ทั้ง 4 ตัวเข้ากับบอร์ด IOIO-RAB

26

The Prototype Electronics

รูปที่ 9 ความหมายของคันโยกที่ใช้ควบคุมความเร็วและทิศทาง การหมุนของมอเตอร์


จากการที่แอปพลิเคชั่นสามารถควบคุมมอเตอร์ทั้งสองฝั่ง แยกกันได้ ท�ำให้เกิดรูปแบบการควบคุมทิศทางการเคลื่อนที่ของ หุ่นยนต์ IOIO-Bot ได้หลายทิศทาง ทั้งยังก�ำหนดความเร็วไปใน ตัวได้ด้วย สรุปได้ดังรูปที่ 10

การท�ำงานของแอปพลิเคชั่น IOIO-Bot แบ่งอธิบายเป็น 2 ส่วนคือ ส่วนการท�ำงานหลักบนอุปกรณ์ แอนดรอยด์ และส่วนควบคุมบอร์ด IOIO-Q ดังนี้ รูปที่ 10 รูปแบบการควบคุมทิศทางการ เคลื่อนที่ของแอปพลิเคชั่น IOIO-Bot

รูปที่ 11 แสดงโฟลวชาร์ตการท�ำงานของแปอปพลิเคชั่น IOIO-Bot B

The Prototype Electronics

27


ʋǹ¡Ò÷íÒ§Ò¹ËÅÑ¡º¹ÍØ»¡Ã³ á͹´ÃÍ´

ʋǹ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ IOIO-Q

ในส่วนของการท�างานหลักเป็นการแสดงภาพคันโยกและก�าหนด ทิศทางมอเตอร์ การท�าคันโยกไม่เหมือนกับปุ่ม Button ที่ใช้กันทั่วไป โดย Button ใช้ Event Listener ในแบบ OnClickListener ซึ่งจะท�างานเมื่อผู้ใช้ แตะปุ่ม แต่จะไม่รวมไปถึงเวลาที่ผู้ใช้เลื่อนนิ้วไปมา ผู้เขียนจึงเปลี่ยนมาใช้ เป็น Linear Layout แทน ซึ่งเดิมทีเอาไว้ใช้เป็นพื้น Layout เพื่อวางปุ่ม หรือ ข้อความลงไป แต่ในการพัฒนาแอปพลิเคชั่นนี้จะน�า Linear Layout มาใช้ เป็นพื้นที่ส�าหรับแสดงคันโยกแทน โดยภาพที่ใช้มีสองภาพคือ ภาพที่เป็น พื้นที่ส�าหรับคันโยกซึ่งใช้เป็นภาพพื้นหลังให้กับ Linear Layout และภาพ ตัวคันโยกที่จะเคลื่อนที่ตามนิ้วของผู้ใช้งาน โดยอยู่ภายในพื้นที่ของ Linear Layout เท่านั้น ถ้าผู้ใช้งานลากนิ้วออกนอกพื้นที่ Linear Layout ภาพคัน โยกก็จะไม่เคลื่อนที่ออกนอก Linear Layout แต่ก็จะยังไม่กลับไปยังจุด กึ่งกลาง จนกว่าจะปล่อยนิ้วออกจากจอ หรือลากนิ้วกลับมาในพื้นที่ของคัน โยก ดังรูปที่ 12

ในส่วนนี้จะก�าหนดขาของ IOIO หรือ IOIO-Q ที่ใช้ควบคุมมอเตอร์ ส�าหรับบอร์ด IOIO-RAB ต่อขาของ IOIO-Q เข้ากับวงจรขับมอเตอร์ไว้แล้ว จึงสั่งงานผ่านแอปพลิเคชั่นได้เลย โดยใช้มอเตอร์ช่อง M1, M2, M5 และ M6 ส�าหรับขาพอร์ตที่ใช้งานทั้งหมดมีดังนี้

รูปที่ 12 แสดงภาพพื้นและก้านของคันโยกที่ใช้ในแอปพลิเคชั่น IOIO-Bot ส�าหรับ Event Listener ทีใ่ ช้กบั Linear Layout เป็น OnTouchListener ที่จะท�างานเมื่อเกิดเงื่อนไขต่างๆ ในการแตะหน้าจอ เช่น เมื่อผู้ใช้งานแตะ นิ้วลงบน Linear Layout ก็จะท�าให้ Listener ท�างานได้ โดยการแตะหน้า จอจะเรียกว่า Down เมื่อผู้ใช้งานลากนิ้วไปมาบนจอหลังจากที่ท�าการ Down แล้วเรียกว่า Move และเมื่อผู้ใช้งานยกนิ้วออกจากหน้าจอก็จะเรียก ว่า Up ในแอปพลิเคชั่นจะท�างานตาม 3 กรณีนี้ เมื่อเกิดกรณี Down และ Move จะดึงค่าพิกัดแกน Y ที่นิ้วแตะลง บนจอ แล้ววาดภาพคันโยกด้วย Canvas ลงบน Linear Layout พร้อมกับ ค�านวณว่า จุดที่สัมผัสห่างจากกึ่งกลางแกน Y ของ Linear Layout เท่าใด แล้วคิดออกมาเป็นความเร็ว โดยมีความเร็วสูงสุดเท่ากับ 100 ซึ่งก็คือค่าดิว ตี้ไซเกิลของมอเตอร์พอดีนั่นเอง แต่ส�าหรับบอร์ด IOIO-Q การสั่งงาน PWM เพื่อก�าหนดความเร็วมอเตอร์ จะใช้ค่าเป็นช่วง 0 ถึง 1 นั่นคือ ค่าที่ได้ต้องน�า มาหารด้วย 100 หากดิวตี้ไซเกิลเท่ากับ 50% ต้องก�าหนดค่าเป็น 0.5 กรณี Up จะถือว่าหยุดการควบคุม จึงก�าหนดให้ค่า Duty เป็น 0 เพื่อ ให้มอเตอร์หยุดท�างาน และก�าหนดให้คันโยกกลับไปอยู่จุดกึ่งกลางของ Linear Layout ส�าหรับค่า Duty ที่ได้ก็จะเก็บไว้ในตัวแปร dutyLeft และ dutyRight ขึ้นอยู่กับว่าผู้ใช้งานแตะลงบน Linear Layout ฝั่งใด โดยฝั่งซ้าย เก็บค่าที่ได้ในตัวแปร dutyLeft และฝั่งขวาเก็บค่าที่ได้ในตัวแปร dutyRight

28

The Prototype Electronics

ในการสั่งงานมอเตอร์ จะตรวจสอบค่าของตัวแปร dutyLeft และ dutyRight ที่ใช้เก็บค่าความเร็วชองมอเตอร์ไว้ ถ้าค่ามากกว่า 0 จะก�าหนด ให้มอเตอร์ฝั่งนั้นๆ หมุนไปข้างหน้า ถ้าน้อยกว่า 0 ก็จะให้หมุนถอยหลัง ถ้า เท่ากับ 0 จะเป็นการควบคุมให้มอเตอร์หยุดท�างาน โดยการสั่งงานมอเตอร์

¡Ò÷´Êͺ ในการทดสอบการท�างานของแอปพลิเคชัน่ และหุน่ ยนต์ IOIO-Bot เมือ่ รันแอปพลิเคชัน่ จะต้องท�าการเชือ่ มต่อกันผ่านบลูทธู จากนัน้ ทดลองสัง่ งาน เพือ่ ควบคุมการเคลือ่ นทีข่ องหุน่ ยนต์ ถ้าสัง่ งานมอเตอร์แล้วไม่ทา� งาน ให้ตรวจสอบทีบ่ อร์ด IOIO-RAB โดย บนบอร์ดจะมี LED แสดงทิศทางการท�างานของมอเตอร์อยู ่ อย่างน้อยจะต้อง แสดงไฟสถานะให้เห็น (แนะน�าให้ถอดสายมอเตอร์ออกก่อน แล้วสัง่ งานดูวา่ ไฟแสดงสถานะหรือไม่) ถ้าสั่งงานแบบไม่ต่อกับมอเตอร์แล้วท�างานได้ปกติ แต่เมือ่ ต่อกับมอเตอร์แล้วไม่ทา� งาน มีอาการรีเซตตัวเอง หรือว่าไฟแสดงผล มีการกะพริบชัว่ ครู ่ อาจเกิดจากกระแสไฟฟาไม่พอ เนือ่ งจากแบตเตอรีใ่ กล้ หมด เพียงเทานี้ก็เสร็จเรียบรอยแลวกับโครงงาน IOIO-Bot ที่ไดมาจากการ ตอใชงานรวมกันของ IOIO-Q, มินิบอรด mini-TB6612 และบอรด IOIORAB ไดเปนหุนยนตที่ควบคุมการเคลื่อนที่ดวยอุปกรณแอนดรอยดผานบ ลูทูธ ทั้งยังรองรับการเชื่อมตอตัวตรวจจับแบบตางๆ เพิ่มได เชน ตอกับ โมดูลวัดระยะทางแลวนําคามาแสดงบนหนาจอของอุปกรณแอนดรอยด เปนตน จากนี้ก็คงเปนหนาที่และความสามาถของคุณๆ แลวละวา จะนําไป ประยุกตใชงานกันไดอยางไรบาง

www.tpemagazine.com


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.