index
数字震动传感器
转载:dfrobotwiki
简介
DFRobot数字震动传感器是一个数字的即插即用传感器模块。它可以检测到震动信号,然后输出开关信号到Arduino,
模块使用PH2.0接口,使用数字连接线可以很方便的连接到传感器扩展板上。
它能够感知微弱震动信号,可实现与震动有关的互动作品。
产品参数
- 工作电压:3.3V到5V
- 接口类型:数字
- 引脚定义:1–输出 2–电源 3—地
- 平时保持高电平输出,震动时输出低电平
- 本开关在静止时为开路(OFF)状态,当受到外力碰触而达到适当震动力时,或移动速度达到适当离(偏)心力时,导电接脚会发生瞬间导通(ON)状态,使电气特性改变,而当外力消失时电气特性恢复开路(OFF)状态
- 无方向性,任何角度均可以触发工作
- 在外力震动时,达到适当的震动力时导电针将瞬间开启(ON)。
- 无方向,任何角度可能检测震动。
- 适用于小电流电路(二次回路)或触发(IC)。
- 在室温和正常使用情况下的开关使用寿命可达10万次(times/1sec)。
- 供电电压:和所用控制器一致即可。
- 开启时间:0.1ms(建议使用中断捕捉)
- 开路电阻:10Mohm
连线图
数字模块链接示意图
示例代码
#define SensorLED 13
#define SensorINPUT 3 //Connect the sensor to digital Pin 3 which is Interrupts 1.
unsigned char state = 0;
void setup()
{
pinMode(SensorLED, OUTPUT);
pinMode(SensorINPUT, INPUT);
attachInterrupt(1, blink, FALLING);// Trigger the blinkfunction when the falling edge is detected
Serial.begin(9600);
}
void loop()
{
if (state != 0)
{
state = 0;
digitalWrite(SensorLED, HIGH);
delay(500); //小灯点亮时间
}
else
digitalWrite(SensorLED, LOW);
}
void blink()//Interrupts function
{
state++;
Serial.println(digitalRead(3));
}
结果
如图连线,引脚13插上LED小灯后,每次振动数字震动传感器,小灯都会短暂点亮,具体点亮时间可在代码中设置
震动传感器2
用途:
用于各种震动触发作用,报盗报警,智能小车,电子积木等。
请注意这个模块在感应到小的震动时触发时间会很短,不够驱动继电器,有些人的资料显示可以直接和继电器模块相连,实际运用效果不佳。
模块特色:
- 采用本公司生产的各种灵敏度震动开关,默认用SW-18020P震动传感器,。
- 比较器输出,信号干净,波形好,驱动能力强,超过15mA
- 工作电压3.3V-5V
- 输出形式 :数字开关量输出(0和1)
- 设有固定螺栓孔,方便安装
- 小板PCB尺寸:3.2cm x 1.4cm
- 使用宽电压LM393比较器
模块使用说明:
-
产品不震动时,震动开关呈断开状态,输出端输出高电平,绿色指示灯不亮;
-
产品震动时,震动开关瞬间导通,输出端输出低电平,绿色指示灯亮;
-
输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境是否有震动,起到报警作用
实验器材: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秒也行。总之要人眼能反映过来才好。
效果一般,但是达到既定的预期效果。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/80576.html