震动传感器(模拟和数字)

数字震动传感器

转载: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

在这里插入图片描述

用途:

用于各种震动触发作用,报盗报警,智能小车,电子积木等。
请注意这个模块在感应到小的震动时触发时间会很短,不够驱动继电器,有些人的资料显示可以直接和继电器模块相连,实际运用效果不佳。

模块特色:

  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. 输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境是否有震动,起到报警作用

实验器材: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秒也行。总之要人眼能反映过来才好。

效果一般,但是达到既定的预期效果。

猜你喜欢

转载自blog.csdn.net/acktomas/article/details/88237400
今日推荐