วันอาทิตย์ที่ 8 มีนาคม พ.ศ. 2558

RPM Measurement by Arduino

RPM Measurement by Arduino


                การใช้ Arduino วัดความเร็วรอบมอเตอร์นั้นสามารถใช้หลักการวัดได้หลายหลักการด้วยกันครับ วันนี้ผมมาเสนออีกหลักการหนึ่ง นั่นคือการใช้ Interrupt ควบคู่กับฐานเวลาในบอร์ด Arduino กัน ซึ่งเป็นวิธีการที่ง่าย และก็ใช้งานได้ดีมากเลยทีเดียวครับ เรามาดูวงจรกันครับ
ภาพ วงจรที่ต่อทดลองวัดความเร็วรอบมอเตอร์ด้วย Arduino

                จะเห็นว่าวงจรผมใช้งานขา 2 เป็น Input เพื่อรับพัลส์จาก Encoder ซึ่งผมกำหนดเอาไว้ที่ 15 PPR นั่นแสดงว่าเมื่อมอเตอร์หมุนไป 1 รอบจะได้พัลส์ออกมา 15 พัลส์นั่นเอง ส่วนเหตุผลที่เลือกขา 2 เป็นขา Input นั้นเนื่องจกขา 2 ของ Arduino นั้นมีคุณสมบัติเป็นขา Interrupt Chanel 0 นั่นเองครับ เพราะเราต้องการคุณสมบัติของขา Interrupt มาใช้งาน จึงเลือกใช้ขานี้ครับ

โค้ดโปรแกรมที่ใช้งานใน Arduino UNO


                จากโค้ดจะเห็นว่าจะใช้ Interrupt ของขา 2 ในขอบขาลง Falling ซึ่งเมื่อพัลส์มาลูกแรกจะเก็บค่า Timer เริ่มต้นเอาไว้โดยการอ่านค่าจากฟังก์ชัน millis() ซึ่งจะคืนค่า milliseconds มาให้ ซึ่งในที่นี้ผมจะใช้นำมาหาค่า Period ของพัลส์ที่ออกมาจาก encoder โดยเก็บค่า Period ไว้ที่ตัวแปร dt ซึ่งมีหน่วยเวลาเป็น milliseconds
                หากเราจะนำมาคำนวณเป็น RPM กชก็สามารถคำนวณได้จาก
                RPM = 60 / (Period Time * PPR)
              60 คือค่าวินาที
                Period Time คือค่า Period ที่อ่านจากพัลส์ที่ออกมาจาก Encoder
              PPR คือค่าจำนวนพัลส์ต่อรอบของ Encoder

ในโค้ดจะเห็นว่าใช้ค่า 60000 milliseconds เนื่องจาก dt มีหน่วยเป็น millisecond

ผลการทำงานของโปรแกรม

ขอบคุณไฟล์ Library Arduino for Proteuse จากเว็ปของครูประภาส สุวรรณเพชร
http://www.praphas.com/index.php/2008-11-03-14-25-25/51-arduino/89-arduino-4-arduino-proteus

ไฟล์โปรแกรม Proteus และ Arduino: Download
หากมีปัญหาหรือว่าต้องการสอบถามอะไรรบกวน Email มาที่ mr.ozuke@gmail.com นะครับ

ขอบคุณครับ
วิทวัส สมพงษ์

1 ความคิดเห็น:

  1. ไม่ระบุชื่อ17 มกราคม 2563 เวลา 08:20

    ขอบคุณมากครับสำหรับความรู้ที่ให้มาครับ

    ตอบลบ