通常,振動傳感器基于機械或光學原理檢測振動,可用來測量、顯示和分析線速度、位移和加速度。雖然人類對振動的感知能力非常弱,傳感器卻能提供這種振動的狀態數據。這就為設備維護提供了關鍵數據,在設備損壞之前及時進行維修和保養。由于某些失效成本高昂且耗時,用振動傳感器檢測和鎖定缺陷,是實現降本增效的一種好方法。
振動傳感器產生的弱小的模擬電壓,可通過Arduino的模擬輸入引腳轉換為數字輸出。本項目通過三種不同的程序實現振動檢測:
示例一先檢測振動,再通過Serial monitor顯示振動值;
示例二包含了簡單的模擬引腳讀數技巧,以及Pulse-in技術;
示例三是控制3個不同的LED,如果某個LED引腳的振動值超過預定義的振動值,這個LED就點亮。
項目BOM如下:
12v適配器 x1
Arduino Uno x1
Arduino Nano x1
51-000923振動傳感器 x1
SW-420振動傳感器 x1
交通LED模塊 x1
面板板 x1
杜邦線 若干
其中,AAC 51-000923振動傳感器由長方形壓電陶瓷板制成,能夠將收集的振動轉換為電壓輸出;或者,將施加其上的電壓信號轉換為振動,即加上電壓就振動。AAC 51-000923長度43mm,帶有紅、黑兩根引線和連接器。創作項目一般使用Arduino,如果不需要連接器可將其剪掉,僅僅通過兩根引線連接Arduino和其他MCU板子。
將振動傳感器的黑線連接到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; 表示振動傳感器連接在Arduino的模擬引腳A0上。void setup() 函數激活串口,數據率為 9600。void loop() 函數讀、存傳感器數據,并通過Serial monitor進行顯示。
我們將Arduino連接到筆記本電腦,上傳以上代碼,上傳完成后打開Serial Monitor,確定數據率為9600。嘗試拍打振動傳感器,可看到Serial Monitor的讀數在變化。
接下來,我們看看示例代碼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()函數用來測量振動期間輸入信號的高、低,如果檢測到相關震動就點亮LED。
上傳代碼后打開Serial monitor,確定數據率為9600。拍打傳感器,Serial Monitor讀數開始變化,停止后就歸零。不過,這個示例只能檢測中、強級別的振動。
最后,我們看看示例代碼3:
示例3可以檢測出振動強度,綠、黃、紅三色LED分別指示振動的程度為低、中、強。這三個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的升級版,void loop() 函數定義了三個LED的及其點亮的振動值。
審核編輯:湯梓紅
-
led
+關注
關注
241文章
23136瀏覽量
658446 -
振動傳感器
+關注
關注
2文章
321瀏覽量
19787 -
Arduino
+關注
關注
187文章
6464瀏覽量
186648
發布評論請先 登錄
相關推薦
評論