วันเสาร์ที่ 15 ธันวาคม พ.ศ. 2555

การเก็บค่าแสงของโปรแกรม Robolab ในหุ่นยนต์ Lego Mindstorms


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


ภาพแสดงการวัดแสงเพื่อหาค่าแสงนำไปใช้เปรียบเทียบ


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

ขั้นตอนการทำงานของโปรแกรมให้หุ่นยนต์เก็บค่าของแสงอัตโนมัติ
ภาพแสดงขั้นตอนการวัดแสงเพื่อหาค่าแสงนำไปใช้เปรียบเทียบ



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

ภาพแสดงโปรแกรมให้หุ่นยนต์เคลื่อนที่ไปหยุดที่เส้นดำ โดยเก็บค่าของแสงอัตโนมัติ


ความหมายของโปรแกรมมีดังนี้


1) เริ่มต้นโปรแกรม
2) ให้ค่าแสงที่พอร์ตครั้งแรกเป็น 0
3) แสดงตัวหนังสือ “Check White”ตรงกลางหน้าจอ LCD บรรทัดที่ 0
4) คอยจนกว่าจะมีการกดเซนเซอร์สัมผัสที่พอร์ต 3
5) มีเสียงเตือน
6) กล่องบรรจุสีแดงรับค่าแสงจากเซนเซอร์แสงที่พอร์ต 1
7) ให้ค่าแสงจากกล่องบรรจุสีแดงเซนเซอร์แสงที่พอร์ต 1 มีชื่อว่า w1
8) แสดงค่าชอง w1 ตรงกลางหน้าจอ LCD บรรทัดที่ 3


9) แสดงตัวหนังสือ “Check Black”ตรงกลางหน้าจอ LCD บรรทัดที่ 0
10) คอยจนกว่าจะมีการกดเซนเซอร์สัมผัสที่พอร์ต 3
11) มีเสียงเตือน
12) กล่องบรรจุสีแดงรับค่าแสงจากเซนเซอร์แสงที่พอร์ต 1
13) ให้ค่าแสงจากกล่องบรรจุสีแดงเซนเซอร์แสงที่พอร์ต 1 มีชื่อว่า b1
14) แสดงค่าชอง b1 ตรงกลางหน้าจอ LCD บรรทัดที่ 4
15) แสดงตัวหนังสือ “Light Reference”ตรงกลางหน้าจอ LCD บรรทัดที่ 0
16) นำค่าของ w1 และ b1 มาคำนวณหาค่าแสงเพื่อจะนำไปใช้เปรียบเทียบ สมการ (w1+b1)/2 แล้วเก็บค่าไว้ในกล่องบรรจุสีแดง
17) แสดงการคำนวณที่ได้ตรงกลางหน้าจอ LCD บรรทัดที่ 6 เก็บค่าไว้ในกล่องบรรจุสีแดง







18) คอยจนกว่าจะมีการกดเซนเซอร์สัมผัสที่พอร์ต 3
19) หุ่นยนต์เคลื่อนที่ไปข้างหน้า
20) หุ่นยนต์เคลื่อนที่ไปข้างหน้า
21) คอยจนกว่าค่าแสงที่เซนเซอร์แสงที่พอร์ต 1 มีค่าน้อยกว่าค่าแสงที่เก็บในกล่องบรรจุสีแดง
22) หุ่นยนต์หยุดเคลื่อนที่
23) จบโปรแกรม

เครื่องมือไอคอนที่จะต้องใช้ในการเขียนโปรแกรมมีดังนี้

 
Begin                  เริ่มต้นโปรแกรม

Zero Light Sensor ให้ค่าแสงเป็น 0

Wait for Push         คอยจนกว่าจะมีการกด

Write Text          แสดงตัวหนังสือที่หน้าจอ LCD
 

Formatted Text          แสดงค่าของตัวแปรที่หน้าจอ LCD
 

Fill Container          กล่องบรรจุรับค่าที่ใส่เข้าไป
 
Light Container          กล่องบรรจุรับค่าแสง
 


Formula Container  กล่องบรรจุรับค่าที่คำนวณ
 


Motor B                  มอเตอร์ B เคลื่อนที่ไปข้างหน้า
 

Motor C                  มอเตอร์ C เคลื่อนที่ไปข้างหน้า
 

Wait for Dark    รอจนกระทั่งเซนเซอร์ที่พอร์ต 1 อ่านค่าแสงได้มืดกว่าค่าที่ตั้งไว้ ในที่นี้คือ ค่าจากกล่องบรรจุสีแดงที่รับค่ามาจากการคำนวณอัตโนมัติ
 



Stop All Output หยุดการทำงานของทุกอุปกรณ์ Output เช่น มอเตอร์ หลอดไฟ
 

End                         จบโปรแกรม



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


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

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



เอกสารอ้างอิง
Martha N. Cyr. (2002). LEGO MindStorms for School Using ROBOLAB. Massachusetts: [n.p.].

วันพุธที่ 12 ธันวาคม พ.ศ. 2555

การใช้เซนเซอร์แสงตรวจสอบเส้นดำ


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

เซนเซอร์แสง


          การรับรู้ของตามนุษย์ต่อสีเมื่อเปรียบเทียบกับเซนเซอร์แสง



          การแสดงค่าแสงของเซนเซอร์แสง สามารถทำได้โดยเปิด NXT Controller ไปที่เมนู View



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



          แต่ถ้าเลือกวิธีการวัดค่าแสงแบบ Ambient Light จะไม่มีการฉายแสงสีแดงออกมาจากเซนเซอร์แสง โดยเซนเซอร์แสงจะวัดแสงที่เกิดจากการสะท้อนแสงจากวัตถุโดยรอบเท่านั้น

          ค่าของแสงที่ได้จากการวัดของเซนเซอร์แสงจะเริ่มต้นตั้งแต่ 0% ซึ่งหมายถึงดำสนิทหรือมืด ถึง 100% ซึ่งหมายถึงสว่างมากหรือขาว โดยสามารถแสดงค่าของแสงได้ดังภาพ

การเปรียบเทียบระหว่างค่าเซนเซอร์แสงและเซนเซอร์สี


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

วิํํธีการหาค่าแสงเืพื่อนำไปใช้เปรียบเทียบ



ตัวอย่างการให้หุ่นยนต์ตรวจสอบเส้นดำ



ขั้นตอนการทำงาน





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


สำหรับโปรแกรม Bricx Command Center


สำหรับโปรแกรม Robolab


ชื่อและการทำงานของไอคอน

 Begin         เริ่มต้นในการเขียนโปรแกรม
 Motor  B มอเตอร์ B เคลื่อนที่ไปข้างหน้า
 Motor C มอเตอร์ C เคลื่อนที่ไปข้างหน้า
 Wait for Dark รอจนกระทั่งเซนเซอร์ที่พอร์ต 1 อ่านค่าแสงได้มืดกว่าค่าที่ตั้งไว้ ในที่นี้คือ 45
 Stop All Output หยุดการทำงานของทุกอุปกรณ์ Output เช่น มอเตอร์ หลอดไฟ
 End เมื่อต้องการจบโปรแกรม


เมื่อหุ่นยนต์สามารถตรวจสอบเส้นดำได้แล้วหนึ่งเส้น ต่อไปก็สามารถประยุกต์ให้หุ่นยนต์สามารถตรวจสอบและนับจำนวนเส้นที่ตรวจพบที่มากกว่าหนึ่งเส้น


ผังงานขั้นตอนการตรวจสอบเส้นดำมากกว่าหนึ่งเส้นและสามารถนับจำนวนเส้นได้มีขั้นตอนดังนี้


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


ชื่อและการทำงานของไอคอน

 Zero Light Sensor ตั้งค่าของเซนเซอร์แสงให้เป็นศูนย์
 Empty Container ตั้งค่าของกล่องบรรจุให้เป็นศูนย์
 Loop Forever         เริ่มต้นการวนซ้ำตลอดไป
 End of Forever Loop สิ้นสุดการวนซ้ำตลอดไป
 Light Sensor Fork ทางแยกของเซนเซอร์
 Fork Merge ตัวประสานเซนเซอร์
 Add to Container เพิ่มค่าใส่ในกล่องบรรจุ
 Formatted Text แสดงค่าของตัวแปรที่หน้าจอ LCD

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

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


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

หรือ

แต่หน้าสถานการณ์เป็นดังภาพ คือ เส้นหมายเลข 1 มีความหนามากกว่าเส้นอื่นๆ (เส้นที่ 2, 3)


          โปรแกรมจะต้องปรับเปลี่ยนไป คือ ค่า Wait(……..); ในบรรทัดที่ 17 ไม่เช่นนั้นหุ่นยนต์จะนับเส้นจำนวนผิด โดยนับมากกว่า 1 เส้น จนกว่าจะหลุดพ้นจากเส้นที่ 1 ดังรูปตัวอย่าง


หรือที่หมายเลข 1



เอกสารอ้างอิง
ทีมงานสมาร์ทเลิร์นนิ่ง. (2549). เรียนรู้การสร้างหุ่นยนต์ Step by Step. กรุงเทพฯ: บริษัท ด่านสุทธาการพิมพ์ จำกัด.
Martha N. Cyr. (2002). LEGO MindStorms for School Using ROBOLAB. Massachusetts: [n.p.].
The LEGO Group. (2006). NXT User Guide. [n.p.]: [n.p.].