Arduino使用震动开关

来源:互联网 发布:网络暴力乔任梁英文版 编辑:程序博客网 时间:2024/05/03 05:38
我买的37款传感器套件中的一种,震动开关,原理的介绍可以参考百度百科,实物图如下所示,两边是电源,中间的引脚是数据线:
Arduino使用震动开关 - gc_2299 - gc_2299的博客
 
起先是按照卖家给的示例代码进行测试,代码如下:

int Led = 13; //定义LED 接口
int Shock = 3; //定义震动传感器接口
int val;//定义数字变量val
void setup()
{
pinMode(Led, OUTPUT); //定义LED 为输出接口
pinMode(Shock, INPUT); //定义震动传感器为输出接口
}
void loop()
{
val = digitalRead(Shock); //将数字接口3的值读取赋给val
if (val == HIGH) //当震动传感器检测有信号时,LED 闪烁
{
digitalWrite(Led, LOW);
}
else
{
digitalWrite(Led, HIGH);
}
}

因为13口的LED灯太小,我就外接了一个LED灯,然后进行测试,但是发现,无论怎么把震动开发左右倾斜,LED灯都是亮的,就没有灭的时候,不知道怎么回事。
于是就在网上搜索关于Arduino和震动开关的资料,然后看到了参考文献1,它的示例中震动开关的输出引脚并没有接到Arduino的数字输入引脚,而是接入到模拟引脚,并用串口查看从模拟引脚输出的值。然后我也按照类似的方法又写了一段测试代码:

int Shock = 5; //定义震动传感器接口

int val;//定义数字变量val
void setup()
{
pinMode(Shock, INPUT); //定义震动传感器为输出接口
Serial.begin(9600);
}
void loop()
{
val = analogRead(Shock); //
Serial.println(val);
}


串口输出的部分数据如下:

1023
1023
1023
1023
1023
1023
699
697
696
696
697
697
696
696
695
695
697
696
696

串口中输出的数据和我想象的不一样,我之前以为震动开关向一边倾斜的时候输出最大,向另外一边倾斜的时候就该输出最小才对,没有想到输出数据是这样的。
于是把震动开关控制LED的程序改成了这样

int Led =4; //定义LED 接口
int Shock = 5; //定义震动传感器接口
int val;//定义数字变量val
void setup()
{
pinMode(Led, OUTPUT); //定义LED 为输出接口
pinMode(Shock, INPUT); //定义震动传感器为输出接口
}
void loop()
{
val = analogRead(Shock);
if (val >800) //这个800是随意取的,能区分是哪边就可以
{
digitalWrite(Led, HIGH);
}
else
{
digitalWrite(Led,LOW );
}
}

实物连接图如下:
Arduino使用震动开关 - gc_2299 - gc_2299的博客
 
最后是以小段演示视频:
使用过程中发现,震动开关最好水平放置,左右倾斜。如果震动开关是歪着的,没有水平,输出引脚的值就不会变化。这里说的水平放置是指本文第一张图片那样放置。

参考文献:
[1]http://arduino-oliver.blogspot.jp/2014/04/led.html
原创粉丝点击