以下是店家提供的一部分資料
一共就需要3根線
——————————————————分割線————————————————————————
用於各種震動觸發作用,報盜報警,智能小車,電子積木等。
請注意這個模塊在感應到小的震動時觸發時間會很短,不夠驅動繼電器,有些人的資料顯示可以直接和繼電器模塊相連,實際運用效果不佳。
1、采用本公司生產的各種靈敏度震動開關,默認用SW-18020P震動傳感器,。
2、比較器輸出,信號干凈,波形好,驅動能力強,超過15mA
3、工作電壓3.3V-5V
4、輸出形式 :數字開關量輸出(0和1)
5、設有固定螺栓孔,方便安裝
6、小板PCB尺寸:3.2cm x 1.4cm
7、使用寬電壓LM393比較器
模塊使用說明:
1、產品不震動時,震動開關呈斷開狀態,輸出端輸出高電平,綠色指示燈不亮;
2、產品震動時,震動開關瞬間導通,輸出端輸出低電平,綠色指示燈亮;
3、輸出端可以與單片機直接相連,通過單片機來檢測高低電平,由此來檢測環境是否有震動,起到報警作用
本系列模塊的產品正反面外觀圖
單片機測試程序
/******************************************
東莞市豐川電子有限公司
傳感器觸發測試
單片機:STC89C52
波特率:9600
產品用途:震動感應觸發,報警觸發。
*****************************************/
#include <reg52.h>
unsigned char date;
#define uchar unsigned char
#define uint unsigned int
sbit key1=P0^1;
/* 函數申明 -----------------------------------------------*/
void delay(uint z);
void Initial_com(void);
//***********************************************************
/*
********************************************************************************
** 函數名稱 : delay(uint z)
** 函數功能 : 延時函數
********************************************************************************
*/
void delay(uint z)
{
uint i,j;
for(i=z;i>0;i--)
for(j=110;j>0;j--);
}
//******************************
//*****串口初始化函數***********
//******************************
void Initial_com(void)
{
EA=1; //開總中斷
ES=1; //允許串口中斷
ET1=1; //允許定時器T1的中斷
TMOD=0x20; //定時器T1,在方式2中斷產生波特率
PCON=0x00; //SMOD=0
SCON=0x50; // 方式1 由定時器控制
TH1=0xfd; //波特率設置為9600
TL1=0xfd;
TR1=1; //開定時器T1運行控制位
}
//*************************
//**********主函數*********
//*************************
main()
{
Initial_com();
while(1)
{
if(key1==0)
{
delay(); //消抖動
if(key1==0) //確認觸發
{
SBUF=0X01;
delay(200);
}
}
if(RI)
{
date=SBUF; //單片機接受
SBUF=date; //單片機發送
RI=0;
}
}
}
——————————————————分割線————————————————————————
看上面的51例子還不算太難。
現在我們看一下分析原理:
原帖地址:http://blog.sina.com.cn/s/blog_624e2b450100olkw.html
實驗器材:Arduino 168P 基礎套件 互動媒體
1.Arduino 168P 開發板一個
2.USB下載線一條
3. SW-18010P 震動傳感器一個
4.LED一個
5.200歐姆電阻一個
6.面包板一塊
7.面包板跳線若干條
實驗目的:學習SW-18010P 震動傳感器的工作原理,以及如何使用Arduino 控制SW-18010P 震動傳感器。
實驗電路:實驗電路如下圖所示
實驗原理:SW-18010P 震動傳感器這是一款基於彈簧擺動原理設計的震動傳感器,震動勢能傳到彈簧末端引起共振,左右擺動碰觸到金屬外壁形成通路。在靜止時任何角度都為開路OFF狀態,當受到外力碰撞或者大力晃動時,彈簧變形和中心電極接觸導通使兩個引腳瞬間導通為ON狀態,當外力消失時,電路恢復為開路OFF狀態。由於導通時間和彈簧的剛性有關,所以該震動傳感器的輸出帶寬很窄,在使用Arduino讀取時,建議使用外部中斷功能。
實驗步驟:
一. 按照以上電路正確搭建實驗電路。
二. 將我提供的調試程序下載到Arduino開發板中。
三. 晃動SW-18010P 震動傳感器看LED的工作情況。
實驗程序:
Arduino外部中斷代碼:
#define SensorLED 13 #define SensorINPUT 2 unsigned char state = 0; void setup() { pinMode(SensorLED, OUTPUT); pinMode(SensorINPUT, INPUT); attachInterrupt(0, blink, FALLING);//D2口為外部中斷0,當有下降沿觸發的時候調用blink函數 } void loop() { if(state!=0) { state = 0; digitalWrite(SensorLED,HIGH); delay(500); } else digitalWrite(SensorLED,LOW); } void blink()//數字輸入傳感器下降沿觸發中斷服務函數 { state++; }
最后結果可觀察數字口13腳上的L指示燈,震動后可以看見L燈亮500ms。
————————————————————————以上內容部分摘自網絡————————————————————
現在自己寫了一個程序。
是用analogRead來判斷的。
將震動模塊的數字口插在A0口上。
得到一個0-1023的數字。
在晃動的時候,可以得到28 或者 一個差不多的兩位數,不晃動的時候,得到的是1021,1022,1023,說明沒有震動。
有震動,便內部導通,向外發送一個電訊號。
代碼如下:
int sensorPin = A0; //int ledPin = 7; int sensorValue = 0; void setup() { //pinMode(ledPin,OUTPUT); Serial.begin(9600); } void loop(){ sensorValue = analogRead(sensorPin); delay(100); Serial.println(sensorValue); }
顯示效果如下,
有一個缺點就是,數字滾動速度太快。所以得到的都是刷新值。
一般情況下,晃動一下,我們會希望大約有2秒鍾的延遲,因為人的反映速度相對電腦來說還是很慢的。所以,我們可以這么做。
把LED等連接到Pin7, 震動感應器,連接到A0口
按照下面的代碼嘗試
int sensorPin = A0; int ledPin = 7; int sensorValue = 0; void setup() { pinMode(ledPin,OUTPUT); Serial.begin(9600); digitalWrite(ledPin, LOW); } void loop(){ sensorValue = analogRead(sensorPin); if (sensorValue < 100) { digitalWrite(ledPin, HIGH); delay(2000); // delay for 2 sec if sensor's shaked }else{ digitalWrite(ledPin, LOW); } Serial.println(sensorValue); }
這樣,每次碰到傳感器,它都會亮兩秒鍾,如果兩秒內還在有震動的話,會繼續亮。
這樣,人就反映過來了。當然,可以適當修改一下時間,比如不是兩秒,是1秒也行。總之要人眼能反映過來才好。
效果一般,但是達到既定的預期效果。
幾元錢的小傳感器,已經不錯了。加上模塊才幾塊錢,這個傳感器電阻估計不到1元吧。
靈敏度來說,可以用。呵呵~