一些基本的物理定律和公式,为了一个要用到 Arduino 的项目做铺垫。

在电子的世界中,一切内容都是通过 0 和 1 的表达而实现的,而方波作为一个要么正要么负的波类型用来传播数据自然是最佳选择了。而除了方波之外,还有 Sine 波、三角波(Triangle)、锯齿波(Sawtooth)。

而有自己组装电脑经验的童鞋们可能会知道:如果硬件自检不通过的话,为什么主板上的蜂鸣器会发出刺耳的滴滴滴的声音而不是用多国语言说:“您好,您的内存自检失败。”,这是因为主板上的蜂鸣器作为一个非常便宜并且容易制造的扩音设备来讲,其只能发出方波(Square Wave)。而发出方波的方法又非常简单:只需要在指定的一段时间(Period)内(1 秒)给电压 N 秒然后不给电压同样的 N 秒,就可以使蜂鸣器震动而产生声音。

方波是有明显的间隔的。以上图为例:一个是正部分(positive half),一个是负部分(negative half)。而正部分 + 负部分则是完整长度,正部分 = 负部分。

如果想制造一个方波,你只需要 Frequency(频率、单位为赫兹(Hz))即可,根据公式

Frequency = 1 / Period。

假设你想制造一个 440 Hz 频率的方波,那就把 440 作为 Frequency 写入公式:

440 = 1 / Period

440 * Period = 1

Period = 1 / 440

如果上面的公式是正确的话:也就是说在 1 秒的间隔内,加电压 Period 时长,去电压 Period 时长,即可获得你想要的频率。

等等……还记得上面所说的方波是有正部分和负部分的吗?所以你还需要将 Period / 2 才可以。

所以是:

while(1){

给电压 (1 / 440 / 2) 秒;

去电压(1 / 440 / 2)秒

}

不过如果你想直接把上面的伪代码写到 Arduino,就会发现得到的声音并不会完全等于你想要的频率,因为 Arduino 库的 digitalWrite 是有延迟的,以后的文章中会讲到如何直接写入电压到 ATmega328(Arduino 所用的芯片) 端口上。

Cancel reply Cancel reply

Your email address will not be published.

*

code