通常,振動(dòng)傳感器基于機(jī)械或光學(xué)原理檢測振動(dòng),可用來測量、顯示和分析線速度、位移和加速度。雖然人類對(duì)振動(dòng)的感知能力非常弱,傳感器卻能提供這種振動(dòng)的狀態(tài)數(shù)據(jù)。這就為設(shè)備維護(hù)提供了關(guān)鍵數(shù)據(jù),在設(shè)備損壞之前及時(shí)進(jìn)行維修和保養(yǎng)。由于某些失效成本高昂且耗時(shí),用振動(dòng)傳感器檢測和鎖定缺陷,是實(shí)現(xiàn)降本增效的一種好方法。
振動(dòng)傳感器產(chǎn)生的弱小的模擬電壓,可通過Arduino的模擬輸入引腳轉(zhuǎn)換為數(shù)字輸出。本項(xiàng)目通過三種不同的程序?qū)崿F(xiàn)振動(dòng)檢測:
示例一先檢測振動(dòng),再通過Serial monitor顯示振動(dòng)值;
示例二包含了簡單的模擬引腳讀數(shù)技巧,以及Pulse-in技術(shù);
示例三是控制3個(gè)不同的LED,如果某個(gè)LED引腳的振動(dòng)值超過預(yù)定義的振動(dòng)值,這個(gè)LED就點(diǎn)亮。
項(xiàng)目BOM如下:
12v適配器 x1
Arduino Uno x1
Arduino Nano x1
51-000923振動(dòng)傳感器 x1
SW-420振動(dòng)傳感器 x1
交通LED模塊 x1
面板板 x1
杜邦線 若干
其中,AAC 51-000923振動(dòng)傳感器由長方形壓電陶瓷板制成,能夠?qū)⑹占恼駝?dòng)轉(zhuǎn)換為電壓輸出;或者,將施加其上的電壓信號(hào)轉(zhuǎn)換為振動(dòng),即加上電壓就振動(dòng)。AAC 51-000923長度43mm,帶有紅、黑兩根引線和連接器。創(chuàng)作項(xiàng)目一般使用Arduino,如果不需要連接器可將其剪掉,僅僅通過兩根引線連接Arduino和其他MCU板子。
將振動(dòng)傳感器的黑線連接到Arduino的引腳GND,紅線連接到Pin A0,接線就完成了。
下面,我們先看示例代碼1:
int vib_sensor = A0;
int vib_data = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(vib_sensor, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
vib_data = analogRead(vib_sensor);
Serial.println(vib_data);
delay(100);
}
int vib_sensor = A0;
int vib_data = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(vib_sensor, INPUT);
}
void loop() {
// put your main code here, to run repeatedly:
vib_data = analogRead(vib_sensor);
Serial.println(vib_data);
delay(100);
}
其中,int vib_sensor = A0; 表示振動(dòng)傳感器連接在Arduino的模擬引腳A0上。void setup() 函數(shù)激活串口,數(shù)據(jù)率為 9600。void loop() 函數(shù)讀、存?zhèn)鞲衅鲾?shù)據(jù),并通過Serial monitor進(jìn)行顯示。
我們將Arduino連接到筆記本電腦,上傳以上代碼,上傳完成后打開Serial Monitor,確定數(shù)據(jù)率為9600。嘗試拍打振動(dòng)傳感器,可看到Serial Monitor的讀數(shù)在變化。
接下來,我們看看示例代碼2:
int vs = A0; // vibration sensor
void setup(){
pinMode(led, OUTPUT);
pinMode(vs, INPUT);
Serial.begin(9600);
}
void loop(){
long measurement =vibration();
delay(50);
Serial.println(measurement);
if (measurement > 50){
digitalWrite(led, HIGH);
}
else{
digitalWrite(led, LOW);
}
}
long vibration(){
long measurement=pulseIn (vs, HIGH); //wait for the pin to get HIGH and returns measurement
return measurement;
}
這里同樣使用pin A0,pulseIn()函數(shù)用來測量振動(dòng)期間輸入信號(hào)的高、低,如果檢測到相關(guān)震動(dòng)就點(diǎn)亮LED。
上傳代碼后打開Serial monitor,確定數(shù)據(jù)率為9600。拍打傳感器,Serial Monitor讀數(shù)開始變化,停止后就歸零。不過,這個(gè)示例只能檢測中、強(qiáng)級(jí)別的振動(dòng)。
最后,我們看看示例代碼3:
示例3可以檢測出振動(dòng)強(qiáng)度,綠、黃、紅三色LED分別指示振動(dòng)的程度為低、中、強(qiáng)。這三個(gè)LED的工作電壓為5v,無需限流電阻。具體連接如下:
_Traffic LED模塊的GND引腳連接到Arduinoui引腳;
_紅色LED連接到Arduino板子的13引腳;
_黃色LED連接到Arduino板子的12引腳;
_綠色LED連接到Arduino板子的11引腳。
int yellow_led = 12;
int green_led = 11;
int vs = A0; // vibration sensor
void setup(){
pinMode(red_led, OUTPUT);
pinMode(yellow_led, OUTPUT);
pinMode(green_led, OUTPUT);
digitalWrite(red_led, LOW);
digitalWrite(yellow_led, LOW);
digitalWrite(green_led, LOW);
pinMode(vs, INPUT);
Serial.begin(9600);
}
void loop(){
long measurement =vibration();
delay(50);
Serial.println(measurement);
if ((measurement > 50)&&(measurement < 1000)){
digitalWrite(green_led, HIGH);
digitalWrite(red_led, LOW);
digitalWrite(yellow_led, LOW);
delay(100);
}
if ((measurement > 1000)&&(measurement < 4000)){
digitalWrite(green_led, LOW);
digitalWrite(yellow_led, HIGH);
digitalWrite(red_led, LOW);
delay(100);
}
if (measurement > 4000){
digitalWrite(red_led, HIGH);
digitalWrite(green_led, LOW);
digitalWrite(yellow_led, LOW);
}
else{
digitalWrite(red_led, LOW);
digitalWrite(yellow_led, LOW);
digitalWrite(green_led, LOW);
}
}
long vibration(){
long measurement=pulseIn (vs, HIGH); //wait for the pin to get HIGH and returns measurement
return measurement;
}
這是示例2的升級(jí)版,void loop() 函數(shù)定義了三個(gè)LED的及其點(diǎn)亮的振動(dòng)值。
審核編輯:湯梓紅
-
led
+關(guān)注
關(guān)注
242文章
23306瀏覽量
661537 -
振動(dòng)傳感器
+關(guān)注
關(guān)注
2文章
323瀏覽量
19842 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187320
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論