arduino 模拟传感器 声音传感器

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

相关文档
最新文档