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元吧。

灵敏度来说,可以用。呵呵~

 

posted @ 2013-04-05 19:29  spaceship9  阅读(4949)  评论(0编辑  收藏  举报