เคยสงสัยไหมเวลาเราทำโปรเจกต์รถบังคับหรือหุ่นยนต์ เราจะรู้ได้ยังไงว่ามอเตอร์กำลังหมุนด้วยความเร็วเท่าไหร่? วันนี้เรามีโปรเจกต์สาย DIY ที่จะมาสอนวิธีวัดความเร็วรอบมอเตอร์ DC (หน่วยเป็น RPM) แบบเรียลไทม์ ด้วยบอร์ด Arduino Uno และเซนเซอร์ Rotary Encoder ที่ติดมากับท้ายมอเตอร์กันครับ!
Step 1: Encoder ทำงานยังไง?
มอเตอร์ที่เราใช้จะมีตัว Encoder ติดอยู่ด้านหลัง แกนของมันจะหมุนไปพร้อมกับมอเตอร์ โดยข้างในจะมีแผ่นจานเจาะรูและเซนเซอร์แสง พอแกนหมุน มันจะบังและเปิดแสงสลับกันไปมา ทำให้เกิด สัญญาณพัลส์ (Pulses) ไฟฟ้าออกมา 2 ช่อง (ช่อง A และ B)
สัญญาณ 2 ช่องนี้จะเหลื่อมกันอยู่ 90 องศา ทำให้เราไม่ได้รู้แค่ "จำนวนรอบ" แต่ยังรู้ "ทิศทางการหมุน" (หมุนซ้ายหรือขวา) ได้ด้วย
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)
Step 3 & 4: การคำนวณ RPM และการต่อสายไฟ
สูตรการคำนวณความเร็วคือ เอาจำนวนพัลส์ที่นับได้ในช่วงเวลาหนึ่ง มาแปลงเป็นนาที แล้วหารด้วยความละเอียดรวม (105.6) เราก็จะได้ความเร็วระดับ RPM ออกมา
ส่วนการต่อสายไฟจาก Encoder เข้าบอร์ด มี 6 เส้นตามนี้เลย:
🔴 M1 (สีแดง): ไฟบวกเข้ามอเตอร์ (+)
⚪ M2 (สีขาว): ไฟลบเข้ามอเตอร์ (-) *สลับแดง-ขาว ทิศทางหมุนจะเปลี่ยน
🟡 C1 (สีเหลือง): สัญญาณ Encoder ช่อง 1
🟢 C2 (สีเขียว): สัญญาณ Encoder ช่อง 2
🔵 3.3V - 5V (สีน้ำเงิน): ไฟเลี้ยงบวกให้ Encoder (+)
⚫ GND (สีดำ): ไฟเลี้ยงลบให้ Encoder (-)
Step 5: วงจรและ Source Code
เราจะใช้โมดูล L298N ในการขับมอเตอร์ โดยต่อวงจรร่วมกับแบตเตอรี่ 18650 (3.7V) จำนวน 2 ก้อน และบอร์ด Arduino Uno
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$ คือค่าคงที่)
Step 7 & 8: การแสดงผลและผลลัพธ์
เมื่ออัปโหลดโค้ดเสร็จ เราสามารถดูความเร็วรอบได้ผ่าน Serial Monitor (ดูเป็นตัวเลข) หรือ Serial Plotter (ดูเป็นกราฟ) บนโปรแกรม Arduino IDE กราฟจะช่วยให้เราเห็นได้ชัดเลยว่ามอเตอร์หมุนได้นิ่งแค่ไหน
สรุปผลลัพธ์: เมื่อนำเครื่องวัดความเร็วรอบ (Tachometer) มายิงเทียบกับล้อของจริง พบว่าค่าตรงกันเป๊ะ! (ได้ประมาณ 327 RPM ที่ Duty Cycle 150) ถือว่าระบบคำนวณได้แม่นยำมากๆ ครับ
Step 9: วิดีโอสาธิตการทำงาน
ถ้าใครอยากแอดวานซ์ ดึงข้อมูล RPM ไปแสดงผลและเก็บสถิติลงใน Google Sheets แบบเรียลไทม์ สามารถดูวิธีทำแบบ Step-by-step ได้ในวิดีโอนี้เลยครับ
VIDEO
พร้อมลงมือทำโปรเจกต์เจ๋งๆ ของตัวเองหรือยัง?
คำเตือน: เนื้อหานี้เป็นการสรุปและเรียบเรียงจากบทความต้นฉบับภาษาอังกฤษ ข้อมูลฉบับภาษาไทยอาจมีความคลาดเคลื่อนบางประการจากการตีความหรือย่อเนื้อหา