โปรเจกต์วัดรอบมอเตอร์: DC Motor Speed (RPM) ด้วย Arduino + Encoder

เคยสงสัยไหมเวลาเราทำโปรเจกต์รถบังคับหรือหุ่นยนต์ เราจะรู้ได้ยังไงว่ามอเตอร์กำลังหมุนด้วยความเร็วเท่าไหร่? วันนี้เรามีโปรเจกต์สาย DIY ที่จะมาสอนวิธีวัดความเร็วรอบมอเตอร์ DC (หน่วยเป็น RPM) แบบเรียลไทม์ ด้วยบอร์ด Arduino Uno และเซนเซอร์ Rotary Encoder ที่ติดมากับท้ายมอเตอร์กันครับ!

Arduino Motor Speed Project

Step 1: Encoder ทำงานยังไง?

มอเตอร์ที่เราใช้จะมีตัว Encoder ติดอยู่ด้านหลัง แกนของมันจะหมุนไปพร้อมกับมอเตอร์ โดยข้างในจะมีแผ่นจานเจาะรูและเซนเซอร์แสง พอแกนหมุน มันจะบังและเปิดแสงสลับกันไปมา ทำให้เกิด สัญญาณพัลส์ (Pulses) ไฟฟ้าออกมา 2 ช่อง (ช่อง A และ B)

สัญญาณ 2 ช่องนี้จะเหลื่อมกันอยู่ 90 องศา ทำให้เราไม่ได้รู้แค่ "จำนวนรอบ" แต่ยังรู้ "ทิศทางการหมุน" (หมุนซ้ายหรือขวา) ได้ด้วย

How Encoder Works

Step 2: สเปกมอเตอร์ที่ใช้ (JGB37-520)

เราใช้มอเตอร์เกียร์รุ่น JGB37-520 ซึ่งมีสเปกเบื้องต้นดังนี้:

  • อัตราทดเกียร์: 9.6:1
  • แรงดันไฟ: 6 V
  • ความเร็วตัวเปล่า (No-load): 620 RPM / กินกระแส 0.1 A
  • ความเร็วตอนมีโหลด: 450 RPM / กินกระแส 0.45 A
  • ความละเอียด Encoder: 11 พัลส์ ต่อการหมุนแกนมอเตอร์ 1 รอบ (11 CPR)

💡 ข้อควรรู้: เมื่อรวมกับอัตราทดเกียร์ 9.6:1 แล้ว ความละเอียดที่แกนล้อจริง ๆ จะเท่ากับ
11 x 9.6 = 105.6 พัลส์ต่อรอบ (CPR_TOTAL)

Motor Specifications

Step 3 & 4: การคำนวณ RPM และการต่อสายไฟ

สูตรการคำนวณความเร็วคือ เอาจำนวนพัลส์ที่นับได้ในช่วงเวลาหนึ่ง มาแปลงเป็นนาที แล้วหารด้วยความละเอียดรวม (105.6) เราก็จะได้ความเร็วระดับ RPM ออกมา

ส่วนการต่อสายไฟจาก Encoder เข้าบอร์ด มี 6 เส้นตามนี้เลย:

  • 🔴 M1 (สีแดง): ไฟบวกเข้ามอเตอร์ (+)
  • M2 (สีขาว): ไฟลบเข้ามอเตอร์ (-) *สลับแดง-ขาว ทิศทางหมุนจะเปลี่ยน
  • 🟡 C1 (สีเหลือง): สัญญาณ Encoder ช่อง 1
  • 🟢 C2 (สีเขียว): สัญญาณ Encoder ช่อง 2
  • 🔵 3.3V - 5V (สีน้ำเงิน): ไฟเลี้ยงบวกให้ Encoder (+)
  • GND (สีดำ): ไฟเลี้ยงลบให้ Encoder (-)
Encoder Wiring

Step 5: วงจรและ Source Code

เราจะใช้โมดูล L298N ในการขับมอเตอร์ โดยต่อวงจรร่วมกับแบตเตอรี่ 18650 (3.7V) จำนวน 2 ก้อน และบอร์ด Arduino Uno

Circuit Diagram

Step 6: ตัวกรองสัญญาณ (Low-Pass Filter)

บางครั้งค่า RPM ที่อ่านได้มันจะแกว่งหรือมีสัญญาณรบกวน (Noise) เราเลยต้องใช้สมการทางคณิตศาสตร์แบบ Low-Pass Filter (อันดับ 1) ในโค้ด เพื่อเกลี่ยตัวเลขให้สมูทและแม่นยำขึ้น โดยมีสมการคือ:

$y[n]=\alpha \cdot y[n-1]+(1-\alpha) \cdot x[n]$

(โดยที่ y[n] คือค่าที่กรองแล้ว, x[n] คือค่าที่อ่านได้ตอนแรก และ $\alpha$ คือค่าคงที่)

Low Pass Filter

Step 7 & 8: การแสดงผลและผลลัพธ์

เมื่ออัปโหลดโค้ดเสร็จ เราสามารถดูความเร็วรอบได้ผ่าน Serial Monitor (ดูเป็นตัวเลข) หรือ Serial Plotter (ดูเป็นกราฟ) บนโปรแกรม Arduino IDE กราฟจะช่วยให้เราเห็นได้ชัดเลยว่ามอเตอร์หมุนได้นิ่งแค่ไหน

สรุปผลลัพธ์: เมื่อนำเครื่องวัดความเร็วรอบ (Tachometer) มายิงเทียบกับล้อของจริง พบว่าค่าตรงกันเป๊ะ! (ได้ประมาณ 327 RPM ที่ Duty Cycle 150) ถือว่าระบบคำนวณได้แม่นยำมากๆ ครับ

Serial Monitor Settings Tachometer Result

Step 9: วิดีโอสาธิตการทำงาน

ถ้าใครอยากแอดวานซ์ ดึงข้อมูล RPM ไปแสดงผลและเก็บสถิติลงใน Google Sheets แบบเรียลไทม์ สามารถดูวิธีทำแบบ Step-by-step ได้ในวิดีโอนี้เลยครับ


คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา

อ้างอิงและเรียบเรียงโดย: Globalbyteshop Blog

แหล่งที่มาต้นฉบับ: บทความโดย sss2022
- Instructables: DC Motor Speed Measurement Using Arduino and Encoder
- อ่านเพิ่มเติม: เอกสารอ้างอิงต้นฉบับ (PDF)

แท็ก


Blog posts

© 2026 บริษัท โกลบอลโทรนิค อินเตอร์เทรด จํากัด, ขับเคลื่อนโดย Shopify

    • PayPal

    เข้าสู่ระบบ

    ลืมรหัสผ่านใช่ไหม?

    ยังไม่มีบัญชีใช่ไหม?
    สร้างบัญชี