การขับเคลื่อนหุ่นยนต์อัตโนมัติ โดยปกติมักจะใช้เส้นเป็นตัวกำหนดทิศทางการเคลื่อนที่ แต่ถ้าต้องการระยะการเคลื่อนที่ที่แน่นอนเมื่อใช้มอเตอร์ไฟตรง จะระบุได้เพียงแค่เวลา Encoder หรือตัวนับรหัสล้อ จะช่วยให้การกำหนดระยะทางการเคลื่อนที่ของหุ่นยนต์มีความแม่นยำขึ้น
อุปกรณ์ที่ใช้ติดตั้ง
สายสัญญาณที่ใช้เสียบใช้ สีแดงต่อกับขั้ว VCC สีดำต่อกับขั้ว GND สีขาวต่อกับขั้ว AO
ติดตั้งแผ่นรหัสล้อเข้าที่แกนมอเตอร์ BO1
การคำนวณระยะทางจาก Encoder
เมื่อจำนวนช่องเท่ากับ 20 ช่อง
เส้นผ่านศูนย์กลางของล้อเท่ากับ 5.7 เซนติเมตร
เส้นรอบวง คำนวณได้จาก 3.1415 x 5.7 = 17.75 เซนติเมตร
การเขียนโปรแกรมอย่างง่าย
การทำงานของโปรแกรม
จากโปรแกรม Encoder จะต้องนับขาว 1 ครั้งและดำ 1 ครั้ง ต่อการนับ 1 ค่า ดังนั้น while(in(18)); จะเป็นการวนรอจนกระทั่งอ่านได้เป็นดำ ส่วน while(!in(18)); จะวนรอจนกระทั่งอ่านได้เป็นขาว เมื่อครบก็เพิ่มค่าการนับขึ้น 1 ค่า (x++) ทำแบบนี้ 20 ครั้งล้อก็จะหมุนครบ 1 รอบพอดี
การใช้ฟังก์ชั่นภายในไลบรารี่ ATX2_enc.h
ไลบรารี่ ATX2_enc.h จะรองรับการใช้ Encoder ทั้งหมด 3 ขาคือ 18 ,2 และขา 3 โดยจะทำงานด้วยอินเตอร์รัปต์อยู่เบื้องหลังของโปรแกรมหลัก
ก่อนการใช้งานจะต้องเรียกใช้คำสั่งเพื่อเริ่มต้นการทำงานประกอบด้วย
encoder(18); สำหรับเริ่มต้นใช้งาน Encoder ที่ขา 18
encoder(3); สำหรับเริ่มต้นใช้งาน Encoder ที่ขา 3
encoder(2); สำหรับเริ่มต้นใช้งาน Encoder ที่ขา 2
การอ่านค่า encoder สามารถใช้คำสั่ง
readEnc18() สำหรับอ่านค่าจากขา 18
readEnc2() สำหรับอ่านค่าจากขา 2
readEnc3() สำหรับอ่านค่าจากขา 3
นอกจากนี้ยังสามารถอ่านค่าจากตัวแปรโดยตรงได้ด้วยคือ
encCnt18
encCnt2
encCnt3
ก่อนการใช้งานควรจะเคลียร์ค่าตัวแปรเหล่านี้ให้เป็น 0 ก่อนด้วยการกำหนดค่า
encCnt18=0;
encCnt2=0;
encCnt3=0;
หรือเรียกใช้งานฟังก์ชั่น
resetEnc18()
resetEnc2()
resetEnc3()
ตัวอย่างการอ่านค่าจาก encoder ช่อง 18 แสดงผลที่หน้าจอ GLCD
การทำงานของโปรแกรม
ตัวอย่างนี้ใช้ Encoder ที่ขา 18 จากนั้นอ่านค่ามาแสดงที่หน้าจอ GLCD ด้วยคำสั่ง readEnc18();
ตัวอย่างการขับเคลื่อนหุ่นยนต์ระยะทาง 17.75 CM
การทำงานของโปรแกรม
เมื่อกดสวิตช์ OK หุ่นยนต์จะเคลื่อนที่ไปด้านหน้า โดยโปรแกรมจะคอยตัวสอบค่าตัวแปร encCnt18 ถ้ามีค่ามากกว่าหรือเท่ากับ 40 จะสั่งให้หุ่นยนต์หยุด โค้ดส่วนนี้เก็บไว้ใน void loop ซึ่งพร้อมจะให้ทดสอบใหม่ตลอดเวลา