ครูอนุสรณ์ จันสุข ผู้สร้างแผนผัง ยินดีให้ทุกๆคน นำไปใช้ได้ในทุกๆ กรณี
อบรมหุ่นยนต์ POP-BOT XT นักเรียน ม.1
อบรมหุ่นยนต์ POP-BOT XT นักเรียนโปรแกรม EP ชั้น ม.4
หุ่นยนต์เคลื่อนที่ไปตามเส้นดำ
หุ่นยนต์และมนุษย์มีหลักการทำงานที่เหมือนกัน คือ หน่วยรับข้อมูลเข้า (Input Unit) หน่วยประมวลผล (Process Unit) และหน่วยแสดงผล (Output Unit) ดังนั้นการที่หุ่นยนต์จะเคลื่อนที่ไปให้ตรงเป้าหมาย หุ่นยนต์จะต้องมีอุปกรณ์ที่จะตรวจสอบตำแหน่งและส่งข้อมูลที่ได้ไปยังหน่วยประมวลผล เพื่อให้มอเตอร์ทำการแสดงผลโดยการไปยังเป้าหมายต่อไป อุปกรณ์พื้นฐานที่ใช้ในการตรวจสอบตำแหน่งนั้น คือ เซนเซอร์แสง (Light Sensor)
หุ่นยนต์ใช้เซนเซอร์แสงเปรียบเสมือนตาของมนุษย์ โดยมีเส้นสีดำเป็นทางเดินไปหาเป้าหมาย หุ่นยนต์จะต้องตรวจสอบว่าขณะที่เคลื่อนที่หุ่นยนต์ยังอยู่บนเส้นดำหรือไม่ เราสามารถนำเซนเซอร์แสงมาใช้กับการเดินของหุ่นยนต์
การเดินตามเส้นของหุ่นยนต์ โดยใช้เซนเซอร์ 1 ตัวมีวิธีการว่า เราจะต้องให้หุ่นยนต์ตรวจสอบเส้นดำเป็นช่วงๆ เพื่อไม่ให้หลุดจากเส้นดำที่กำหนด การตรวจสอบเส้นดำเป็นช่วงๆ มีวิธีการดังภาพ
เซนเซอร์วิธีการทำงานมีขั้นตอนดังนี้
1. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีดำ หุ่นยนต์จะเลี้ยวออกออกจากเส้นดำ
2. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีขาว (ไม่ใช่สีดำ) หุ่นยนต์เคลื่อนที่กลับไปหาเส้นดำ
ตัวอย่างโปรแกรม
เมื่อนำโปรแกรมไปใช้จริงจะต้องปรับแต่งอีกครั้งดังนี้
1. ค่าแสงที่จะนำมาใช้เปรียบเทียบ (ค่าของตัวแปร Light) ซึ่งจะต้องหาค่าใหม่อีกครั้งตามสภาพแวดล้อมที่เปลี่ยนไป
2. อัตราส่วนความเร็วของมอเตอร์ B และมอเตอร์ A มีผลทำให้การเคลื่อนที่ของหุ่นยนต์ส่ายไปมา จนอาจจะทำให้หุ่นยนต์หลุดจากเส้นได้
การเคลื่อนที่ไปตามเส้นของหุ่นยนต์ที่กล่าวมาข้างต้นประสิทธิภาพยังไม่ดีนัก หุ่นยนต์สามารถเคลื่อนที่ไปบนเส้นตรงได้ดี แต่อาจจะส่ายไปมาหรืออาจจะทำให้หุ่นยนต์หลุดจากเส้นได้ในกรณีที่มีเส้นโค้ง เพราะเซนเซอร์แสงจะตรวจสอบได้เฉพาะสีขาวและสีดำเท่านั้น ดังนั้นเพื่อให้การเคลื่อนที่ไปบนเส้นตรงได้ดีและมีประสิทธิภาพ ไม่ว่าจะเป็นเส้นตรงหรือเส้นโค้ง จึงแบ่งค่าการอ่านค่าแสงออกเพิ่มขึ้นเป็น 3 ส่วน ได้แก่ สีขาว สีเทาและสีดำ ดังภาพ
วิธีการทำงานมีขั้นตอนดังนี้
1. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีดำ หุ่นยนต์จะเลี้ยวออกออกจากเส้นดำ
2. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีเทา หุ่นยนต์เคลื่อนที่ไปข้างหน้า
3. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีขาว หุ่นยนต์เคลื่อนที่กลับไปหาเส้นดำ
การเคลื่อนที่ของหุ่นยนต์ที่ได้จากการจากการแบ่งค่าแสงออกเป็น 3 ส่วน คือ จะทำให้หุ่นยนต์เคลื่อนที่ได้นุ่มนวล ส่ายไปมาน้อยลง เกาะติดเส้นไปตลอดการเคลื่อนที่
ตัวอย่างโปรแกรม
เมื่อนำโปรแกรมไปใช้จริงจะต้องปรับแต่งอีกครั้งดังนี้
1. ค่าแสงที่จะนำมาใช้เปรียบเทียบทั้ง 2 ค่า จะต้องหาค่าใหม่อีกครั้งตามสภาพแวดล้อมที่เปลี่ยนไป หรือช่วงความห่างของค่าทั้ง 2 ค่า หากมีช่วงห่างกันมากก็จะทำให้การตรวจพบเส้นดำช้า อาจเป็นสาเหตุให้เกิดการหลุดจากเส้นดำได้
2. อัตราส่วนความเร็วของมอเตอร์ B และมอเตอร์ A ในการเลี้ยวขวาและเลี้ยวซ้าย ซึ่งพบว่า ถ้ามีอัตราส่วนต่างกันมากก็จะมีผลทำให้การเคลื่อนที่ของหุ่นยนต์ส่ายไปมาน้อยลง เคลื่อนที่ได้เรียบและนุ่มนวลมากขึ้น
การแบ่งช่วงของค่าแสงออกเป็นช่วงๆ ยิ่งมีช่วงมาก ก็จะทำให้การควบคุมหุ่นยนต์ให้เคลื่อนที่ไปตามเส้นดำที่กำหนดจนถึงเป้าหมาย นอกจากวิธีการแบ่งช่วงค่าแสงแล้วการเพิ่มจำนวนของเซนเซอร์แสงก็เป็นอีกวิธีหนึ่งที่ทำให้ควบคุมหุ่นยนต์เคลื่อนที่ให้เกิดประสิทธิภาพมากยิ่งขึ้น
ข้อเสนอแนะจากประสบการณ์
หุ่นยนต์เคลื่อนที่ไปตามเส้นดำ คือ ให้หุ่นยนต์เคลื่อนที่เกาะติดเส้นดำไปทุกแห่งไม่ว่าเส้นดำจะตรงไป เลี้ยวซ้ายหรือเลี้ยวขวา
หุ่นยนต์ คือ การออกแบบโลกแห่งความจริง ผู้เล่นจะสามารถเริ่มต้นตั้งแต่ขั้นตอนการออกแบบ ซึ่งทำให้โลกจินตนาการกลายเป็นความจริง ต้องแก้ไขและปรับปรุงข้อผิดพลาด วางแผนและแก้ปัญหาจนสำเร็จ ในบางสถานการณ์ที่ใช้โปรแกรมเหมือนกันแต่ทำไมผลลัพธ์ที่ได้จึงออกมาไม่เหมือนกัน ดังนั้นผู้เล่นจึงต้องเป็นคนที่ปรับแต่งโปรแกรมให้เหมาะกับสถานการณ์
สิ่งที่เกิดขึ้นในห้องเรียนหุ่นยนต์ของข้าพเจ้า คือ นักเรียนได้เรียนรู้ชุดคำสั่งให้หุ่นยนต์วิ่งตามเส้นดำพื้นฐานแล้ว และนักเรียนคือผู้ที่จะต้องแก้ไขและปรับปรุงข้อผิดพลาด วางแผนและแก้ปัญหาจนกระทั่งหุ่นยนต์ของตนเองสามารถเคลื่อนที่ไปอย่างสมบูรณ์
จากโปรแกรมหุ่นยนต์วิ่งตามเส้นดำพื้นฐาน
เอกสารอ้างอิง
Jim Sluka. (2009). A PID Controller For Lego Mindstorms Robots. ค้นเมื่อวันที่ 30 พฤศจิกายน 2555. จาก http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html
Martha N. Cyr. (2002). LEGO MindStorms for School Using ROBOLAB. Massachusetts: [n.p.].
รูปแบบการเลี้ยวของหุ่นยนต์
มอเตอร์ เป็นอุปกรณ์ที่เปรียบเสมือนกล้ามเนื้อของมนุษย์ กล่าวคือเมื่อร่างกายของมนุษย์รับข้อมูลจากตาหรือหูแล้ว สมองจะทำการตัดสินใจจะส่งสัญญาณผ่านระบบประสาทไปยังกล้ามเนื้อ โดยกล้ามเนื้อจะทำหน้าที่ควบคุมให้อวัยวะแขน ขา ทำงาน ในหุ่นยนต์ก็เช่นเดียวกัน มอเตอร์จะทำหน้าที่รับสัญญาณไฟฟ้าจากภาคควบคุม (Controller) โดยมอเตอร์จะควบคุมการทำงานของระบบแมคคานิคให้ทำงานตามที่สั่งการ
การควบคุมให้หุ่นยนต์เคลื่อนที่เดินหน้าและถอยหลัง สามารถกำหนดได้ 2 วิธี คือ
วิธีที่ 1 การควบคุมการเคลื่อนที่ด้วยเวลา ดังนี้
จากโปรแกรมมีฟังก์ชันที่เกี่ยวข้องกับการเขียนโปรแกรม คือ
OnFwd(Outputs Port, Power) คือ ฟังก์ชันที่ใช้ควบคุมให้มอเตอร์เดินหน้า (Outputs Port พอร์ตที่ติดต่อกับมอเตอร์, Power ค่าตั้งแต่ 0 ถึง 100 สามารถใส่เป็นค่าลบหากต้องการทิศตรงข้าม)
OnRev(Outputs Port, Power) คือ ฟังก์ชันที่ใช้ควบคุมให้มอเตอร์ถอยหลัง (Outputs Port พอร์ตที่ติดต่อกับมอเตอร์, Power ค่าตั้งแต่ 0 ถึง 100 สามารถใส่เป็นค่าลบหากต้องการทิศตรงข้าม)
Wait(milliseconds) คือ ฟังก์ชันที่ใช้สำหรับกำหนดเวลาในการทำงาน (Milliseconds เวลาเป็นมิลลิวินาที (วินาที x 1000))
Off(Outputs Port) คือ ฟังก์ชันที่ใช้ปิดการทำงานมอเตอร์ พร้อมกับหยุด (Outputs Port พอร์ตที่ติดต่อกับมอเตอร์)
วิธีที่ 2 การควบคุมการเคลื่อนที่ด้วยองศาการหมุนของมอเตอร์
มอเตอร์ของชุดหุ่นยนต์จะเป็น Servo motor ซึ่งมีเซนเซอร์อยู่ภายในแล้ว โดยเซนเซอร์จะใช้การวัดเป็นองศา 1 รอบการหมุนจะเท่ากับ 360 องศา
เราสามารถดูค่าของเซนเซอร์ได้ที่เมนู View
1. เลือกไอคอน Motor degree
2. เลือกพอร์ตที่เชื่อมต่อกับเซนเซอร์
3. ลองดันมอเตอร์ไปกับพื้น
4. ดูค่าที่ได้รับที่หน้าจอ จะเป็นค่าของจำนวนองศาที่ล้อหมุน
สามารถเขียนโปรแกรมได้ดังนี้
จากโปรแกรมมีฟังก์ชันที่เกี่ยวข้องกับการเขียนโปรแกรม คือ
RotateMotor(Outputs Port,Power,Angle) (Outputs Port พอร์ตที่ติดต่อกับมอเตอร์ื, Power ค่าตั้งแต่ 0 ถึง 100 สามารถใส่เป็นค่าลบหากต้องการทิศตรงข้าม , Angle สามารถใส่เป็นค่าลบหากต้องการทิศทางตรงกันข้าม)
นอกจากการควบคุมให้หุ่นยนต์เดินหน้าและถอยหลังแล้ว หุ่นยนต์จะมีการเคลื่อนที่ด้วยการเลี้ยว ซึ่งสามารถจำแนกลักษณะการเลี้ยวตามการควบคุมของมอเตอร์ได้ 5 รูปแบบ ดังนี้
แบบที่ 1 มอเตอร์ด้านเดียวหมุนไปข้างหน้า
แบบที่ 2 มอเตอร์ด้านเดียวหมุนถอยหลัง
แบบที่ 3 มอเตอร์ทั้งสองด้านหมุนพร้อมกันในทิศตรงกันข้าม
แบบที่ 4 มอเตอร์ทั้งสองด้านหมุนพร้อมกันไปหน้าในทิศเดียวกันแต่กำลังต่างกัน
แบบที่ 5 มอเตอร์ทั้งสองด้านหมุนพร้อมกันถอยหลังในทิศเดียวกันแต่กำลังต่างกัน
สิ่งที่สำคัญที่สุดในการเคลื่อนที่ไปทางซ้ายหรือขวาของหุ่นยนต์ คือ การควบคุมการจ่ายพลังงานของมอเตอร์ มอเตอร์ไฟฟ้าที่ใช้ในการสร้างหุ่นยนต์ส่วนใหญ่จะเป็นแบบมอเตอร์ไฟฟ้ากระแสตรง เนื่องจากสามารถควบคุมความเร็วในการหมุนและทิศทางของการหมุนได้ง่าย โดยใช้แหล่งจ่ายที่เป็นแบตเตอรี่ที่สามารถหาได้ไม่ยาก และต้องเลือกขนาดของความเร็วรอบและแรงบิดให้เหมาะสมกับงาน
ข้อเสนอแนะจากประสบการณ์
รูปแบบการเลี้ยว 5 แบบที่ได้กล่าวมาข้างต้น จะทำงานได้มีประสิทธิภาพ เกิดจากการนำไปใช้ให้เหมาะสมกับสถานการณ์ เช่น เมื่อต้องการเลี้ยวในพื้นที่แคบ ควรเลือกใช้การเลี้ยวแบบที่ 3 มอเตอร์ทั้งสองด้านหมุนพร้อมกันในทิศตรงกันข้าม เพราะการเลี้ยวแบบนี้มอเตอร์ทั้งสองด้านจะทำงานพร้อมกันทำให้เกิดรัศมีการเลี้ยวที่สั้นที่สุด สามารถเลี้ยวได้รวดเร็วใช้เวลาสั้น ถ้ามีพื้นที่ค่อนข้างกว้าง อาจจะเลือกใช้แบบที่ 4 หรือแบบที่ 5 เพราะทั้งสองแบบมีรูปแบบการเลี้ยวที่คล้ายกับการเข้าโค้ง
เอกสารอ้างอิง
ทีมงานสมาร์ทเลิร์นนิ่ง. (2549). เรียนรู้การสร้างหุ่นยนต์ Step by Step. กรุงเทพฯ: บริษัท ด่านสุทธาการพิมพ์ จำกัด.
Daniele Benedettelli. (2007). Programming LEGO NXT Robots using NXC. [n.p.]: [n.p.].
John C. Hansen. (2009). LEGO NXT power programming : robotics in C. 2nd ed. United States: Variant Press.
The LEGO Group. (2006). Quick Start Guide : Using The NXT with Robolab 2.9. [n.p.]: [n.p.].