การควบคุมแบบ Digital: Incremental Rotary Encoders
Potentiometer ทั่วไปสามารถหมุนได้เพียง 270 องศาก่อนที่จะชนกับขีดจำกัดทางกายภาพ ทำให้ไม่เหมาะอย่างยิ่งสำหรับการเลื่อนรายการยาวๆ หรือปรับค่าตัวแปรที่ไม่มีที่สิ้นสุด ในขณะที่ KY-040 Incremental Rotary Encoder สามารถหมุนได้ไม่จำกัดในทั้งสองทิศทาง โดยจะส่งออกสัญญาณ "clicks" แบบ Digital แทนที่จะเป็นแรงดันไฟฟ้าแบบ analog

หลักการทำงานของ Quadrature Output
Arduino รู้ได้อย่างไรว่าลูกบิดกำลังหมุนไปทางซ้ายหรือขวา? Encoder มีสวิตช์สองตัวอยู่ภายใน (Pin A และ Pin B) ซึ่งมีการเยื้องเล็กน้อย
- เมื่อคุณหมุนลูกบิดไปทาง ขวา (ตามเข็มนาฬิกา) สวิตช์ A จะเปลี่ยนเป็น
HIGHเล็กน้อย ก่อนที่ สวิตช์ B จะเปลี่ยนเป็นHIGH - เมื่อคุณหมุนไปทาง ซ้าย (ทวนเข็มนาฬิกา) สวิตช์ B จะเปลี่ยนเป็น
HIGHเล็กน้อย ก่อนที่ สวิตช์ A - โค้ด Arduino จะตรวจสอบสถานะของสอง pin นี้อยู่ตลอดเวลา โดยการเปรียบเทียบสถานะดังกล่าว โค้ดจะรู้ได้อย่างแม่นยำว่าแกนหมุนไปทางทิศใด!
Hardware Interrupts (ทางออกที่แท้จริง)
หากคุณใช้ digitalRead() ภายในฟังก์ชัน loop() คุณอาจพลาดการนับ "click" ได้ หาก Arduino กำลังยุ่งอยู่กับการทำงานอื่น (เช่น การแสดงผลบน LCD)
- คุณต้องใช้ Hardware Interrupts:
attachInterrupt(digitalPinToInterrupt(2), updateEncoder, CHANGE); - ทีนี้ ไม่ว่า Arduino กำลังทำอะไรอยู่ก็ตาม ทันทีที่ลูกบิดหมุนไปเพียงเล็กน้อย ตัวประมวลผลจะหยุดงานปัจจุบันชั่วคราว อัปเดตตัวแปรนับทันที แล้วกลับมาทำงานต่อได้ การติดตามจะสมบูรณ์แบบไร้ที่ติ!
ข้อกำหนดด้าน Hardware
- Arduino Uno/Nano
- KY-040 Rotary Encoder Module (โมดูลนี้มี pull-up resistors ที่จำเป็นอยู่บนบอร์ดแล้ว)
- LED หรือ LCD Screen สำหรับแสดงผลตัวเลขการนับ
การใช้งาน rotary ให้เชี่ยวชาญเป็นสิ่งสำคัญสำหรับการสร้างอินเทอร์เฟซสำหรับ 3D Printer หรือ digital synthesizers