CAT | 传感器
有位同学曾经想过把声音信号经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,随即激活相应的动作。这里只是简单地将值从串口输出来,你完全可以根据自己的实际需要做相应的处理。当然,到底需要设置多大的门限值是合适的,需要根据你自己的实际情况进行设置,多试几次你一定能够找到合适的值的。
No tags
倾斜传感器的核心是一个滚动开关,它内部安装有一个金属小球,当传感器被放置到一个固定的角度时,小球在重力作用下会滚动到传感器的底部,从而导致相应的电路接通。

该模块同Arduino专用传感器模块配合起来使用时, 电路连接非常简单,只需要把传感器用连接线同Arduino传感器扩展板连接起来就可以了:

原理上讲该传感器属于一个数字输入模块,因些同样有正逻辑和负逻辑的区别,我们同样可以通过调节传感器上两个拨动开关的位置,来选择正逻辑电路或者负逻辑电路。
No tags
数字输入可能是最简单的应用电路了,但即便如此,实际使用的时候还是有正逻辑电路和负逻辑电路的区别,在面包板上要搭建起来也不是一时半会就能完全搞清楚的。正因如此,我设计制作了这一数字输入的按钮模块,以方便实际应用时能够快速搭建电路。
通过对两个拔动开关的控制,该模块能够实现正逻辑电路,也能够实现负逻辑电路。当将两个拔动开关都置于位置“1”时,按钮按下时为低电平(逻辑0,负逻辑电路);当将两个拔动开关都置于位置“2”时,按钮按下时为高电平(逻辑1,正逻辑电路)。需要注意的是,当两个拔动开关一个处于位置1而另一个处理位置2时,电路处于短路状态,虽然加了自恢复保险丝,但使用时最好先将拔动开关位置设置好再接通电源。
同样,该模块设计时还是以Arduino专用传感器模块作为基准,但这次要用到的是数字输入接口部分。使用的时候需要将模块与传感器扩展板用数字传感器连接线连接起来就可以使用了:
在上图中,两个拔动开关都置于位置1,相应的代码为:
int ledPin = 8;
int switchPin = 2;
int value = 0;
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(switchPin, INPUT);
}
void loop() {
value = digitalRead(switchPin);
if (LOW == value) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
No tags
我们在用Arduino制作各种互动作品的时候,经常会用到一些常用的传感器或者电路模块。对于那些熟悉电子电路的人来讲,用面包板或者万能板搭建一些简单的模块电路当然是可以的,但对于那些不太熟悉电路或者稍微复杂的电路来讲,似乎就不那么适合了。
国外经常有人将各种实用的电路作成电子模块的,这样在需要的时候我们只需要购买相应的模块,然后做一些简单的连接和配置就可以了。在将同样的思路应用到Arduino和互动设计上之后,我们专门针对Arduino开发了一块连接各种传感器的扩展板:
各种电路模块同Arduino相连接的接口一般分为模拟、数字和串口三种类似,上面这块扩展板上的左边是6个模块接口,可以用来读取模拟量输入,右上角则引出了Arduino数字I/O接口上的0-7号管脚。对于扩展板上每一个模拟接口和数字接口来讲,都各自有一个引脚同Arduino上的5V和GND引脚相连,以方便接线。
下图是该扩展板与Arduino相连接后的效果图:
使用这一扩展板能够很容易地与一些常用的模拟传感器相连,例如光线传感器。连接的时候我们需要用到专用的连接线:
有了这一扩展板和相应电路模块的支持,我们只需要用专用的连接线把相应的传感器模块同Arduino连接起来,电路部分就算完成了。由于具体的电路细节则都由相应的传感器模块来实现,因些我们需要考虑的只是如何在Arduino中编写相应的程序来读取这些传感器传过来的数据就可以了。
No tags










