robot

ก่อนเข้าเรื่องก็จะมาเล่าเรื่อง alcohol ต่อนิดหน่อย เมื่อวานก็กินเบียร์ครั้งแรก 555 ไม่เข็ด ขมจริง วันก่อนก็พึ่งไปบาร์มา แล้วก็ดื่ม magarita ที่เป็น strawberry ผสมกับ tequila น่ะ

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

line follower ที่ใช้ได้ในกรณีนี้ก็เพราะว่าที่พื้นมันมีเส้นตัดกันตลอดน่ะ และก็เป็นเส้นตรง ก็เลยน่าจะเป็นวิธีที่ดีกว่าใช้ IR sensor แถม sensor มันก็ยังแพงกว่าซะด้วย แล้ว line follower ทำยังไงเหรอ....

ก็สร้างขึ้นมาเป็น circuit ง่ายๆ ส่วนประกอบก็คือ
  • IR photoreflector เอาไว้ใช้สำหรับ detect ว่าเป็นสีดำหรือสีขาว
  • resistor
  • capacitor

แค่นี้ก็ได้ black/white sensor มาตัวนึง ส่วน config ที่เราใช้สำหรับทำ line sensor ก็ใช้ black/white sensor 5 ตัว โดย 4 ตัวเรียงกันบนเส้นตรงอยู่แถวหลัง ส่วนอีกตัวอยู่ตรงกลางของแถวแรก

เวลาใช้ก็เขียน code จาก pseudocode ดังนี้ โดยกำหนดให้ตัวแถวหน้าคือ sensor0 แล้วแถวหลังคือ sensor1 ~ sensor4 เรียงจากซ้ายไปขวา ก็จะได้

if sensor0 is on
{
flag = 1;
}

if sensor 1 is on AND flag == 1
{
if sensor 3 is on AND sensor4 is off
slow down left wheel;
else if sensor2 is on AND sensor3 is off
slow down left wheel even more;
else if sensor2 is off
slow down left wheel a lot more;
flag = 0; //reset flag
}

if sensor 4 is on AND flag == 1
{
if sensor 2 is on AND sensor1 is off
slow down right wheel;
else if sensor3 is on AND sensor2 is off
slow down right wheel even more;
else if sensor3 is off
slow down right wheel a lot more;
flag = 0; //reset flag
}

อธิบายง่ายๆก็ถ้าไม่เห็น sensor0 ก็ไม่ต้องเช็ค sensor ตัวอื่น

เขียน code เสร็จแล้วก็ต้องไป set interrupt routine ต่อ โดยไปแก้ vector table ให้ refer ถึง function ที่เขียนข้างบนเวลาพบ interrupt signal บน pin อะไรก็ว่าไป

อ้างอิง
photoreflector datasheet
ตอนนี้งบเริ่มบานขนาดหนักด้วยเหตุที่ว่าลืมคิดถึงเรื่องสำคัญเกี่ยวกับหุ่นยนต์ที่ต้องทำ navigation ไป... ก็คือ... ลืมคิดไปว่าจะทำยังไงให้มันเดินเป็นเส้นตรงไม่โค้ง แล้วจะทำ error correction ยังไง T_T

โดยทั่วไปมีทางเลือกที่คิดได้ 3 ทาง เริ่มจากถูกสุดไปแพงสุด
1. ใช้ touch sensor โดยให้หุ่นยนต์ยิ่งไปจนชนกำแพงแล้วเลี้ยว 90 องศา ซึ่งการวิ่งเข้าชนกำแพงจะปรับองศาอัตนโนมัติถ้าเกิดมันไม่ตรง แต่ใช้ไม่ได้ในกรณีของเราเพราะว่าเขาวงกตของเราเป็นแบบ sparse ก็คือมีกำแพงน้อย ทำให % ้การที่จะต้องเลี้ยวก่อนถึงกำแพงมีสูง

2. ใช้ line sensor / line follower
line sensor ราคาค่อนข้างถูก ในขณะที่ line follower แพงกว่ามาก แต่ใช้ง่ายกว่า แต่ปัญหาหลักๆในกรณีนี้ก็คือถ้าไม่มีเส้น หรือถ้ามี แต่เส้นไม่ได้อยู่ในตำแหน่งเดียวกันทุกช่องก็จะเป็นปัญหาได้ แต่ก็สามารถแก้ได้โดยการใช้ line sensor หลายๆตัว ซึ่งปัญหาที่จะตามก็คือ hardware-software interface จะยุ่งยากขึ้นเยอะ

3. compass sensor
แพงมากถึงแพงที่สุด แต่แม่นยำ และบอกทิศทางได้ แต่ประเด็นคือ... มันคุ้มหรือเปล่า

ซึ่งจนถึงตอนนี้ก็ยังคิดไม่ตก เพราะห่วงเรื่องงบจริงๆ

แต่ที่แน่ๆ ท่าทาง color sensor จะมีปัญหา เพราะว่า wavelength ของสีเหลืองกับสีเขียวใกล้กันจนเกินไป algorithm ที่คิดไว้ก็แทบจะต้องโยนลงถังขยะ ได้เวลาคิด algorithm ใหม่แล้วเด้อ
ก็เขียน proposal เสร็จมาได้พักนึงแล้ว ตอนนี้ก็กำลัง develop AI algorithm อยู่ ไม่รู้จะใช้ได้ป่าว :'(

ก็มีเกี่ยวกับว่าทำไมถึงเลือกทำในแบบที่ทำ เกี่ยวกับ budget แล้วก็การแบ่ง task ถ้าสนใจก็ลองดูแล้วกัน แต่ว่าเป็นภาษาอังกฤษอย่างเดียวนะ

http://www.gigamag.net/yabb/index.php?topic=4708.msg38202#msg38202