計數(shù)傳感器 Arduino VCC 5V GND GND OUT D3 ==接線示意圖== ==例子程序== Int speedPin=3;//定義數(shù)字3接口
int cntValue=0; void setup ()
{
pinMode(speedPin,INPUT);//3號數(shù)字口設(shè)置為輸入狀態(tài) Serial.begin(9600); Serial.println("Speed Count\n"); } void loop()
{ //判斷是否被遮擋 if(digitalRead(speedPin)==0) {cntValue++;//計數(shù)增加 Serial.println(cntValue);//串口輸出計數(shù)值 while(digitalRead(speedPin)==0);//等待遮擋結(jié)束 } } ==程序效果== 通過遮擋槽型光耦傳感器,不斷計數(shù)。 U型測速模塊的使用
今天做了一個電機測速實驗!實驗元件: U型測速模塊 TT馬達和測速碼盤 標準電源(3V和6V)
使用了淘寶上很便宜的TT馬達,下圖為TT馬達的幾個基本參數(shù): 我本次使用的是1:48的減速比電機,其他兩個都沒有測試~~~
下面是U型測速模塊圖片:
電路:(電路圖就不畫了,接線很簡單)
將上面的U型測速模塊接好,G接GND、V接5V、S接數(shù)字引腳2或者3(使用中斷,只能接這兩個腳),
然后將碼盤和TT馬達安裝在一起,就可以試驗了。
接好后,用一個遮擋物放在U型開關(guān)之間,模塊上的LED點亮,無遮擋物時,LED不亮;
利用這一原理,當信號輸出變化一次就計數(shù)一次,再經(jīng)過一些列的換算就可以得到轉(zhuǎn)速了~~
下面我們看下程序,將其復(fù)制到Arduino IDE中,燒寫入UNO中:/*********************************************************************** * 電機測速 * 使用millis()函數(shù),記錄時間,單位為毫秒 * 使用中斷函數(shù),當引腳電平改變時觸發(fā),計數(shù)一次 * 以1:48減速電機、20孔的碼盤為例 * 將得到的值Val除以40,得到轉(zhuǎn)動圈數(shù) * 除以當時的時間,因為時間單位為毫秒,除以60000轉(zhuǎn)換為分 * 這時候得到電機轉(zhuǎn)速Speed ,單位 轉(zhuǎn)/分 * 注意;測出來的值會有些誤差,比實際值大,是因為碼盤與電機軸有一定距離 * BY YFROBOT ************************************************************************/ //設(shè)置模塊引腳接到數(shù)字引腳2(程序用到中斷函數(shù),UNO中斷引腳為數(shù)字引腳2和3) int U_Pin = 2; float Val = 0; //設(shè)置變量Val,計數(shù) float time; //設(shè)置變量time,計時 float Speed; //設(shè)置變量Speed,存儲轉(zhuǎn)速 void setup(){ Serial.begin(9600); attachInterrupt(0,count,CHANGE); //引腳電平發(fā)生改變時觸發(fā) } void loop(){ time = millis(); Speed = (Val/40)/(time/60000) ; Serial.println(Speed); } void count(){ Val += 1; } |