Arduino 各種模塊篇 震動模塊 常開 震動傳感器模塊


 

以下是店家提供的一部分資料

一共就需要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 震動傳感器。

 

實驗電路:實驗電路如下圖所示

 

 

 Arduino <wbr>震動傳感器的制作與測試

實驗原理:SW-18010P 震動傳感器這是一款基於彈簧擺動原理設計的震動傳感器,震動勢能傳到彈簧末端引起共振,左右擺動碰觸到金屬外壁形成通路。在靜止時任何角度都為開路OFF狀態,當受到外力碰撞或者大力晃動時,彈簧變形和中心電極接觸導通使兩個引腳瞬間導通為ON狀態,當外力消失時,電路恢復為開路OFF狀態。由於導通時間和彈簧的剛性有關,所以該震動傳感器的輸出帶寬很窄,在使用Arduino讀取時,建議使用外部中斷功能。

 

Arduino <wbr>震動傳感器的制作與測試Arduino <wbr>震動傳感器的制作與測試

   

實驗步驟

一.     按照以上電路正確搭建實驗電路。

二.    將我提供的調試程序下載到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元吧。

靈敏度來說,可以用。呵呵~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM