Arduino筆記(二十二):LM393 光電對射式計數器模組測馬達轉速

[2017/04/16]
趁著今天休假,將小車的壓克力板切割出一塊約1cm * 3cm的區域,可以放置 20 柵格的測速轉輪,讓它不會卡在車板上。我買這個智慧小車模組時,沒有留意不能安裝測速的模組,連安裝 20柵格的輪子也不行,只好自己動手加以改造 (如下圖)。

智慧小車安裝完成後,因不確定使用兩個 18650電池 (7.4V) 的電壓可跑多快,只好加裝以 LM393 這顆 IC 為主的光電對射式測速模組,來測得輪子的轉速。以下是我用Arduino Mega安裝 L293D 馬達驅動擴展板,來驅動四個輪子,再用Arduino nano接 LM393測速模組,從監控視窗上得知目前輪子每分鐘轉幾圈,以下是執行的過程與結果:



[材料]

• Arduino Nano  x 1
• LM393 光電對射式計數器模組   x1
• 連接線 x 3
• 智慧小車模組 x1
• Arduino Mega x1
• L293D 馬達驅動擴展板 x1
• 18650 電池盒及電池 x2

[接線圖]

• LM393 光電對射式計數器模組連接線路
LM393 光電對射式計數器模組
Arduino
1 - VCC
VCC
2 - GND
GND
3 - D0
Pin 2
4 - A0
-


[程式]

unsigned int count=0;
int counterPin = 2;
unsigned long time2;
unsigned int rpm;      
unsigned int grid_num = 20;

void counter() {
   count++;
}

void setup() {
   Serial.begin(9600);
   pinMode(counterPin, INPUT);
   attachInterrupt(0, counter, FALLING);
   count = 0;
   rpm = 0;
   time2 = 0;
}

void loop() {
 if (millis() - time2 >= 1000){   /* 每秒更新 */
 
     // 計算 rpm 時,停止計時
     detachInterrupt(0);

     // 偵測的格數count * (60 * 1000 / 一圈網格數20)/ 時間差) 
     rpm = (60 * 1000 / grid_num )/ (millis() - time2)* count;
     time2 = millis();
     count = 0;
 
     // 輸出至Console
     Serial.print("RPM = ");
     Serial.println(rpm,DEC);
     //Restart the interrupt processing
     attachInterrupt(0, counter, FALLING);
  }
}

[執行結果]


[參考資料]

TAIWANIOT:LM393 光電對射式計數感測器模組 10mm槽寬

Share on Google Plus
    Blogger Comment
    Facebook Comment

0 意見 :

張貼留言