arduino 模拟传感器 声音传感器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
声音传感器原型
No comments · Posted by flamingoeda in 传感器
有位同学曾经想过把声音信号经Arduino处理后,再传给另外一个设备进行处理,当时听了倒吸一口凉气,我想怕是俨然需要一个DSP系统才能处理他这样的要求吧。
虽然对声音的波形进行处理不太可能,但是在Arduino上接一个声音传感器,来感知环境声音的大小还是可能的吧。
原理不算太复杂,用一个话筒(electret microphone)收集声音,将过放大之后接到Arduino的模拟输入端口上,这样当人对着话筒说话的时候,在Arduino 的模拟输入端口上就能感知到电压的变化,说话声音越大,电压变化的幅度越大。
解释一下,由于声波是不断变化的,在模拟输入端口上读出的值相应地也是变化的,我们只能只根据某个时间点上读出的值来对声音进行判断,因为这时你有可能读到的是声波波形的最小值。
然而,我们的确可以根据某一时刻读到的声波的最大值,来判断此时声音的强度的:)
在将原理研究清楚之后,我在万能板上手工焊接了一个声音传感器的原型板:
该传感器同样有三根连线,5V和Gnd分别接Arduino的5V和Gnd两个引脚,Signal则要接在Arduino上的模拟输入端口上。
这里我用到的是Arduino Mini,正好测试一模拟输入接口:)
为了查看实验效果,我搬出了墙角里的示波器,首先看看不对着话筒喊话时的波形图:
这个是让我的声音传感器听MP3时的波形图:
看起来还是有明显变化的。
有了这样的实验结果,再写程序的话就算是有所依据了:
int soundPin = 0;
int value = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
value = analogRead(soundPin);
if (value > 400) {
Serial.println(value, DEC);
delay(300);
}
}
上述程序不断地从模拟输入端口0上读入声音传感器的值,一当发现其值大于400,随即激活相应的动作。
这里只是简单地将值从串口输出来,你完全可以根据自己的实际需要做相应的处理。
当然,到底需要设置多大的门限值是合适的,需要根据你自己的实际情况进行设置,多试几次你一定能够找到合适的值的
Arduino实验代码:
void setup()
{
Serial.begin(9600); // 打开串口,设置波特率为9600 bps
}
void loop()
{
int val;
val=analogRead(0); //传感器接于模拟口0
Serial.println(val,DEC);//从串口发送数据并换行
delay(100);
}
void setup()
{
Serial.begin(9600); // 打开串口,设置波特率为9600 bps }
void loop()
{
int val;
val=analogRead(0); //传感器接于模拟口0
Serial.println(val,DEC);//从串口发送数据并换行
delay(100);
}。