2016年4月12日 星期二

光電轉速計和arduino 的結合


之前在掏寶買的光電轉速計....剛好最近有量馬達的需求...就把他裝起來...

掏寶連結如下:   https://world.taobao.com/item/20059648052.htm?fromSite=main&spm=a312a.7700846.0.0.OPM0NM&_u=d2bnm38caed7


架設起來的照片如下:


那個綠色的電路板就是光電轉速計.....

他其實就是三個訊號....VCC,GND,SIG

SIG會輸出類似方波的訊號.....當碼盤來到有洞的地方....會輸出 0.....來到沒有洞的地方... 會輸

出1....利用這個特性...我們就可以測試轉速.....

目前我是用arduino 來接收訊號....程式碼如下:

利用中斷的作法...當 sig 產生一個正緣的訊號...就把  total_cnt ++;

然後每隔一秒printf 出來total_cnt......

量測出來的結果如下

Back Rear motor:
 PWM  -> rpm 
1200 -> 1790
1250 -> 2266
1300 -> 2550
1350 -> 2800
1400 -> 2970
1500 -> 3228
1550 -> 3305
1600 -> 3388
1650 -> 3442
1700 -> 3480
1800 -> 3560
1900 -> 3760


Front Rear motor :
 PWM  -> rpm 
1200 -> 1720
1250 -> 2099
1300 -> 2400
1350 -> 2623
1400 -> 2823
1450 -> 3000
1500 -> 3080
1550 -> 3169
1600 -> 3255
1650 -> 3308
1700 -> 3350
1750 -> 3400
1800 -> 3442
1850 -> 3574
1900 -> 3636

=====================================================================
#include <PinChangeInt.h>

int Pin = 2;
int val;


unsigned int total_cnt=0;
unsigned int older_cnt=0;
void setup()
{
   Serial.begin(9600); //for debugging...
   
   pinMode(Pin, INPUT);
   
   PCintPort::attachInterrupt(Pin, calc,RISING);
   total_cnt =0;
   older_cnt =0;
}


void loop()
{

  
//  val = digitalRead(Pin);
  
  //Serial.println(val);             // debug value 
  
  delay(1000);
  //   Serial.println(end_time);  
  if(total_cnt > older_cnt)
  {
      Serial.println(total_cnt - older_cnt);    
  }
  older_cnt = total_cnt;
}

void calc()
{

  total_cnt++ ;
  
}





1 則留言:

  1. 請問你的函式庫要怎麼使用呢
    我下載好放進library是灰色的
    我是使用CNY70代替你文中的感應器
    想要藉此達到測量轉速工具
    但是真的不知道接下來怎麼作

    回覆刪除