SW-420震動感測模組是無方向性振動傳感器,一般可用在各種震動觸發,例如:防盜,智慧小車,地震等。當震動感測模組靜止時,電路開啟,輸出為高電位。當發生運動或振動時,電路將短暫斷開並輸出低電平。模組上有一個藍色十字形的電位器調節,可以根據自己的需要調整靈敏度。
[材料]
- Arduino Uno x 1
- 震動感測模組 SW-042 x 1
- 麵包板 x 1
- LED x 1
- 220K 電阻 x 1
- 蜂鳴器 x 1
- 連接線 x 7條
[接線與電路圖]
接腳圖如下:
Arduino接腳 | SW-420接腳 |
+5V(VCC) | VCC |
GND | GND |
Pin 3 | D0 |
[程式]
程式一:讀取D0是否為0或1,來判斷是否發生震動?
int vibr = 3; // 震動感測器 D0
int led = 9; // LED 輸出接腳
int buzzer = 12; // 蜂鳴器輸出接腳
void setup() {
pinMode(vibr,INPUT);
pinMode(led,OUTPUT);
pinMode(buzzer,OUTPUT);
}
void loop() {
int val;
// 從 D3讀取感測值
val=digitalRead(vibr);
if(val==1) {
digitalWrite(led,HIGH);
digitalWrite(buzzer,HIGH);
delay(2000);
}
else {
// 關閉蜂鳴器及LED
digitalWrite(led,LOW);
digitalWrite(buzzer,LOW);
delay(1000);
}
}
程式二:用pulseIn() 函式,讀取接腳D0上的脈衝(高電位或低電位)。例如,如果值是HIGH,pulseIn()等待引腳變為高電平,開始計時,然後等待引腳變為LOW和停止計時。如超時間內沒有收到完整的脈衝,則返回脈衝的長度(以微秒為單位)或0。
int vibr =3; // 震動感測器 D0
int led = 9; // LED 輸出接腳
int buzzer = 12; // 蜂鳴器輸出接腳
void setup() {
pinMode(vibr,INPUT);
pinMode(led,OUTPUT);
pinMode(buzzer,OUTPUT);
Serial.begin(9600);
}
void loop() {
int val;
// 從 D3讀取感測值
long measurement =TP_init();
delay(50);
Serial.println(measurement);
if (measurement > 500){
digitalWrite(led,HIGH);
digitalWrite(buzzer,HIGH);
delay(2000);
}
else {
// 關閉蜂鳴器及LED
digitalWrite(led,LOW);
digitalWrite(buzzer,LOW);
delay(1000);
}
}
long TP_init(){
delay(10);
long measurement=pulseIn (vibr, HIGH); // 等待 D0 輸入高電壓,並回傳值
return measurement;
}
[實作結果]
[參考資料]
張貼留言