แผนผังโรงเรียนสิรินธร จังหวัดสุรินทร์

ครูอนุสรณ์ จันสุข ผู้สร้างแผนผัง ยินดีให้ทุกๆคน นำไปใช้ได้ในทุกๆ กรณี

อบรมหุ่นยนต์ POP-BOT XT นักเรียน ม.1

          หลังจากได้ดูตัวอย่างภาพยนตร์เกี่ยวกับหุ่นยนต์แล้ว นักเรียนก็มาเขียนขั้นตอนการต้มบะหมี่กึ่งสำเร็จรูปจากนั้นก็มาเล่นเกมส์การแก้ปัญหา
20130425_100459
20130425_100356
20130425_100416
20130425_100531
ตั้งใจกันทุกคน
5661e-20130425_105623 db39d-20130425_105652
4b934-20130425_105549
วางแผน Light Bot
d8288-20130426_114911 a735a-20130426_132128
1ad18-20130426_132142 3a775-20130426_132147
b16fb-20130426_132152 87167-20130426_132224
เขียนโปรแกรมควบคุมหุ่นยนต์ POP-BOT XT

อบรมหุ่นยนต์ POP-BOT XT นักเรียนโปรแกรม EP ชั้น ม.4

บรรยากาศการอบรม
932f2-20130424_093440
8f1e1-20130424_093525
e2e7e-20130424_093452
bba7a-20130424_093516
156c9-20130424_093500
9d16c-20130424_093544 e8df7-20130424_093614
1d00c-20130424_093644

หุ่นยนต์เคลื่อนที่ไปตามเส้นดำ

หุ่นยนต์และมนุษย์มีหลักการทำงานที่เหมือนกัน คือ หน่วยรับข้อมูลเข้า (Input Unit) หน่วยประมวลผล (Process Unit) และหน่วยแสดงผล (Output Unit) ดังนั้นการที่หุ่นยนต์จะเคลื่อนที่ไปให้ตรงเป้าหมาย หุ่นยนต์จะต้องมีอุปกรณ์ที่จะตรวจสอบตำแหน่งและส่งข้อมูลที่ได้ไปยังหน่วยประมวลผล เพื่อให้มอเตอร์ทำการแสดงผลโดยการไปยังเป้าหมายต่อไป อุปกรณ์พื้นฐานที่ใช้ในการตรวจสอบตำแหน่งนั้น คือ เซนเซอร์แสง (Light Sensor)

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

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

linefollower001

ภาพแสดงรูปแบบการเคลื่อนที่ของหุ่นยนต์เมื่อใช้ 1

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

linefollower002

ภาพแสดงการแบ่งค่าแสงของเซนเซอร์ออกเป็น 2 ส่วนสัมพันธ์กับการเคลื่อนที่ของหุ่นยนต์

linefollower003

ตัวอย่างโปรแกรม

linefollower004

เมื่อนำโปรแกรมไปใช้จริงจะต้องปรับแต่งอีกครั้งดังนี้
1. ค่าแสงที่จะนำมาใช้เปรียบเทียบ (ค่าของตัวแปร Light) ซึ่งจะต้องหาค่าใหม่อีกครั้งตามสภาพแวดล้อมที่เปลี่ยนไป
2. อัตราส่วนความเร็วของมอเตอร์ B และมอเตอร์ A มีผลทำให้การเคลื่อนที่ของหุ่นยนต์ส่ายไปมา จนอาจจะทำให้หุ่นยนต์หลุดจากเส้นได้

linefollower005

ภาพแสดงการเลี้ยวของหุ่นยนต์ที่สัมพันธ์กับความเร็ว A มาก, B ปานกลางและ C น้อย

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

linefollower006

ภาพแสดงการแบ่งค่าแสงของเซนเซอร์ออกเป็น 3 ส่วนสัมพันธ์กับการเคลื่อนที่ของหุ่นยนต์


วิธีการทำงานมีขั้นตอนดังนี้
1. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีดำ หุ่นยนต์จะเลี้ยวออกออกจากเส้นดำ
2. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีเทา หุ่นยนต์เคลื่อนที่ไปข้างหน้า
3. เมื่อเซ็นเซอร์แสงวัดค่าแสงได้สีขาว หุ่นยนต์เคลื่อนที่กลับไปหาเส้นดำ

การเคลื่อนที่ของหุ่นยนต์ที่ได้จากการจากการแบ่งค่าแสงออกเป็น 3 ส่วน คือ จะทำให้หุ่นยนต์เคลื่อนที่ได้นุ่มนวล ส่ายไปมาน้อยลง เกาะติดเส้นไปตลอดการเคลื่อนที่

linefollower007

ตัวอย่างโปรแกรม

linefollower008

linefollower009

เมื่อนำโปรแกรมไปใช้จริงจะต้องปรับแต่งอีกครั้งดังนี้
1. ค่าแสงที่จะนำมาใช้เปรียบเทียบทั้ง 2 ค่า จะต้องหาค่าใหม่อีกครั้งตามสภาพแวดล้อมที่เปลี่ยนไป หรือช่วงความห่างของค่าทั้ง 2 ค่า หากมีช่วงห่างกันมากก็จะทำให้การตรวจพบเส้นดำช้า อาจเป็นสาเหตุให้เกิดการหลุดจากเส้นดำได้
2. อัตราส่วนความเร็วของมอเตอร์ B และมอเตอร์ A ในการเลี้ยวขวาและเลี้ยวซ้าย ซึ่งพบว่า ถ้ามีอัตราส่วนต่างกันมากก็จะมีผลทำให้การเคลื่อนที่ของหุ่นยนต์ส่ายไปมาน้อยลง เคลื่อนที่ได้เรียบและนุ่มนวลมากขึ้น

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

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

linefollower011
หรือ

linefollower010

 

 

เอกสารอ้างอิง
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) โดยมอเตอร์จะควบคุมการทำงานของระบบแมคคานิคให้ทำงานตามที่สั่งการ

motor001

ภาพแสดง Servo motor

การควบคุมให้หุ่นยนต์เคลื่อนที่เดินหน้าและถอยหลัง สามารถกำหนดได้ 2 วิธี คือ
วิธีที่ 1 การควบคุมการเคลื่อนที่ด้วยเวลา ดังนี้

motor019

จากโปรแกรมมีฟังก์ชันที่เกี่ยวข้องกับการเขียนโปรแกรม คือ

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 การควบคุมการเคลื่อนที่ด้วยองศาการหมุนของมอเตอร์

motor004

มอเตอร์ของชุดหุ่นยนต์จะเป็น Servo motor ซึ่งมีเซนเซอร์อยู่ภายในแล้ว โดยเซนเซอร์จะใช้การวัดเป็นองศา 1 รอบการหมุนจะเท่ากับ 360 องศา

motor016

เราสามารถดูค่าของเซนเซอร์ได้ที่เมนู View

motor016

1. เลือกไอคอน Motor degree
2. เลือกพอร์ตที่เชื่อมต่อกับเซนเซอร์
3. ลองดันมอเตอร์ไปกับพื้น
4. ดูค่าที่ได้รับที่หน้าจอ จะเป็นค่าของจำนวนองศาที่ล้อหมุน

สามารถเขียนโปรแกรมได้ดังนี้

motor017

จากโปรแกรมมีฟังก์ชันที่เกี่ยวข้องกับการเขียนโปรแกรม คือ

RotateMotor(Outputs Port,Power,Angle) (Outputs Port พอร์ตที่ติดต่อกับมอเตอร์ื, Power ค่าตั้งแต่ 0 ถึง 100 สามารถใส่เป็นค่าลบหากต้องการทิศตรงข้าม , Angle สามารถใส่เป็นค่าลบหากต้องการทิศทางตรงกันข้าม)

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

แบบที่ 1 มอเตอร์ด้านเดียวหมุนไปข้างหน้า

motor009

ภาพแสดงการเลี้ยวแบบที่ 1 มอเตอร์ด้านเดียวหมุนไปข้างหน้า

แบบที่ 2 มอเตอร์ด้านเดียวหมุนถอยหลัง

motor012

ภาพแสดงการเลี้ยวแบบที่ 2 มอเตอร์ด้านเดียวหมุนถอยหลัง

แบบที่ 3 มอเตอร์ทั้งสองด้านหมุนพร้อมกันในทิศตรงกันข้าม

motor013

ภาพแสดงการเลี้ยวแบบที่ 3 มอเตอร์ด้านเดียวหมุนพร้อมกันในทิศตรงกันข้าม

แบบที่ 4 มอเตอร์ทั้งสองด้านหมุนพร้อมกันไปหน้าในทิศเดียวกันแต่กำลังต่างกัน

motor014

ภาพแสดงการเลี้ยวแบบที่ 4 มอเตอร์ด้านเดียวหมุนพร้อมกันไปหน้าในทิศเดียวกันแต่กำลังต่างกัน

แบบที่ 5 มอเตอร์ทั้งสองด้านหมุนพร้อมกันถอยหลังในทิศเดียวกันแต่กำลังต่างกัน

motor015

ภาพแสดงการเลี้ยวแบบที่ 5 มอเตอร์ด้านเดียวหมุนพร้อมกันถอยหลังในทิศเดียวกันแต่กำลังต่างกัน

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

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

turn003

ภาพแสดงการเปรียบเทียบรูปแบบการเลี้ยวในแบบที่ 1 และ 4

 

 

เอกสารอ้างอิง
ทีมงานสมาร์ทเลิร์นนิ่ง. (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.].