步驟1:游標(biāo)卡子
我一直在使用的游標(biāo)卡尺是Precision Gold的電子數(shù)字游標(biāo)卡尺。我從英國的Maplin(項目代碼N48AA)購買了卡尺,價格不到20英鎊。
在嘗試了萬用表和jyetech示波器(一種非常便宜的基本示波器,可以以套件價格購買,價格低于£20)之后。 40)我發(fā)現(xiàn)引腳如圖所示。
步驟2:電壓:邏輯和電源
Arduino使用5V邏輯,但卡尺輸出1.5V邏輯。這有點困難,可能并不總是有效,確實應(yīng)該使用適當(dāng)?shù)倪壿嬰娖睫D(zhuǎn)換電路,但是流暢的操作是一個簡單的技巧,與我的Arduino配合得很好:
我的Arduino在邏輯高和邏輯低之間切換大約2.5V(這在板之間可能會有所不同)。
將卡尺的正引腳連接到3.3V電源意味著當(dāng)時鐘和數(shù)據(jù)引腳連接到arduino時,它們的電壓似乎在3.3V和1.8之間變化V,分別是Arduino的邏輯高電平和低電平。
使用Arduino為卡尺供電:
為避免在卡尺中使用電池,可以使用圖示的電源電路(卸下按鈕單元)。這種方法依賴于使用LED來調(diào)節(jié)卡鉗的電源電壓。
大約200Ohm
我使用的10uF效果很好,但是使用更大的電阻不會有任何危害。電容。額定電壓為2V或更高。
LED
對于LED,請嘗試找到一個壓降盡可能接近1.6V的LED。我使用了一個壓降為1.8V的紅色LED。紅色和IR LED上的電壓降往往較低。
步驟3:數(shù)據(jù)協(xié)議
我的卡尺上使用的數(shù)據(jù)協(xié)議如下:
時鐘脈沖,如圖所示。
在時鐘下降沿讀取數(shù)據(jù)給出了合理的輸出。
示例數(shù)據(jù)輸出:
1,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(屏幕顯示0.00毫米或0.000英寸)
1,0,0,0,1,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0 ,0,0,(屏幕顯示10.00mm)
1,0,0,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0, 0,0,0,1,0,0,(屏幕顯示-1.00mm)
1,0,0,0,1,1,0,0,1,0,1,0,1,1, 1,0,0,0,0,0,0,0,0,0,(屏幕顯示150.00mm)
數(shù)據(jù)解釋:
?,X,X,X,X,X,X, X,X,X,X,X,X,X,X,X,?,?,?,?,?,Y,?,?
? =不確定
X是否為字符串開頭的最低有效位的二進(jìn)制數(shù)。二進(jìn)制數(shù)是距離,以毫米為單位乘以100。Y =符號位,如果Y = 1,則負(fù)數(shù),如果Y = 0,數(shù)字為正,
注意:確保將游標(biāo)卡尺設(shè)置為mm,以英寸模式運行非常相似,除了最低有效位用于顯示1/2000英寸。
第4步:Arduino代碼
這是一個非常基本的Arduino代碼,應(yīng)該與幾種卡尺數(shù)據(jù)協(xié)議兼容。
每個值之間都有逗號,以方便使用.CSV文件將數(shù)據(jù)導(dǎo)入電子表格。
此代碼的主要要求是希望在時鐘脈沖的下降沿讀取數(shù)據(jù)。
希望這段代碼應(yīng)該意味著,當(dāng)您將Arduino連接到計算機并使用115200 Baud的串行監(jiān)視器時,您會很明智地查看二進(jìn)制文件。
麻煩射擊:
如果二進(jìn)制字符串的長度變化很大,則時鐘和數(shù)據(jù)引腳的方向可能不正確。
代碼:
//簡單的數(shù)字卡尺閱讀器
//請參閱http://j44industries.blogspot.com/
//引腳聲明
int dataIn = 11;
int clockIn = 12;
//變量
int clock = 1;
int lastClock = 1;
unsigned long time = 0;
unsigned long timeStart = 0;
int out = 0;
void setup(){
//引腳設(shè)置
pinMode( dataIn,INPUT);
pinMode(clockIn,INPUT);
Serial.begin(115200);
Serial.println(“ Ready:”);
}
void loop(){
lastClock =時鐘;
時鐘= digitalRead(clockIn);
如果(lastClock == 1 && clock == 0){
out = digitalRead(dataIn)+ digitalRead(dataIn)+ digitalRead( DATAIN);//三重采樣以消除毛刺
if((micros()-time)》 800){
Serial.println(“”);
}
else if((micros()-time )》 400){
Serial.print(“”);
}
如果(out》 1){
Serial.print(“ 1”);
}
else {
Serial.print(“ 0”);
}
Serial.print(“,”);
時間= micros();
}
}
-
卡尺
+關(guān)注
關(guān)注
0文章
16瀏覽量
8503 -
Arduino
+關(guān)注
關(guān)注
188文章
6471瀏覽量
187225
發(fā)布評論請先 登錄
相關(guān)推薦
評論