กลับไปหน้ารวมไฟล์
how-to-use-incremental-encoders-338566.md

การควบคุมแบบ Digital: Incremental Rotary Encoders

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

button_led_basic_interaction_1772681969235.png

หลักการทำงานของ 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

ข้อมูล Frontmatter ดั้งเดิม

title: "How to Use Incremental Encoders"
description: "Spin to infinity! Replace frustrating analog potentiometers with digital rotary encoders to build endlessly scrolling menus and precision volume knobs."
category: "Basic Electronics"
difficulty: "Intermediate"