[ATX2] การใช้ Encoder กับบอร์ด ATX2

 

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

 

Facebook Comments