Arduino声音触发器

此次教程将教你怎么用 Arduino做一个自己定制的门铃(声音长度小于4秒钟)。此次教程来源于麻省理工“high-low tech”小组,所有软件均是免费。教程也会进一步解释怎么用传感器触发声音。

必要软件对MacOS, Linux, 和Windows都适用。需要预装的软件有Arduino IDE以及Audacity。原始的教程还提供另外两块代码:

An Arduino library for audio playback.

一种Java程序来转化声音文件:Windows. Mac. Linux

你既可以打开Audacity里已有的文件,也可以自己录一个新的声音文件,正如Chris做的这个鬼嚎声。Freesound.org是一个很好的下载别人录音的网站。别犹豫,马上尝试吧!点击菜单栏下面的录制,停止以及播放键。


当决定用什么声音的时候,我们一定要考虑Aduino的小容量-32kb。Audacity有一个“重采样”的功能可以帮助我们将声音文件占更少的容量。点击并且选中要储存的声音,在左下角改变声音的项目采样率,从44000改到8000。然后点击菜单栏的轨道,选重采样,并且点击确定。

由于Arduino的声音很小,所以我们选择菜单栏效果里的标准化,使声音变的更大声。将标准化最大化振幅调为0.0 db。

接下来,选择你要存储的声音片段(小于4秒钟)并且选择文件 →导出选择的音频。

在导出菜单里,你将有机会改变文件的格式。通常有mp3, wav, flac等,但我们这里要选择其他非压缩音频文件,然后点击选项,文件头为wav(microsoft),编码为unsigned 8-bit PCM。

最终音频的结果是很小的.wav格式,以致于我们可以将其转换并储存到Arduino里。对话程序是以Processing的形式展现的,所以我们需要Java。运行“EndoAudio”,这个程序仅仅要求你选择刚导出的wav文件。接下来,我们就可以打开Arduino并储存文件。

打开Arduino IDE,并加入以下载的PCM Library。打开文件 → 示例→PCM →playback。示例如下:

长的int.是声音示例,我们可以用Encode Audio里得出的int.数据来替换。三击任何一个数字来选中整条数据(数以千计的数据)然后control V/command V粘贴你自己的声音。

将扬声器/喇叭的一条线接入GND(地线),另一条线接在11号端口处。然后上传代码。你可以选择用教程里的门铃,也可以用有插线头的扬声器。线的连接顺序如下:

连Arduino板上GND的那条线(黑色)夹住扬声器插线头的顶部,11号端口的那条线可以夹在扬声器插线头的任何一个一节金属部分。

用现有的代码,当Arduino打开时,声音会播放一次,你可以点击Arduino板上“Reset”按钮再播放一次。

更简单的触发器是将两条线接在一起来连接到GND(地线),做成一个传感器。在我们的loop里,我们需要反复地检查我们的传感端口是“LOW”的状态,并且如果是的话,我们开始播放声音。所以,剪切setup代码中的“startPlayback”,并粘贴到conditional statement里面,用digitalRead()来检查是否已经接在地线上。为确保门铃不会无缘无故发声,我们用pinMode()将内部的电阻加进代码里。下面是简单触发器的最终代码:

请注意我已经把声音源名称“sample”改成“ghost” — 注意把startPlayback里面的名称也改掉 — 名称在startPlayback里用了两次。

当然,你并没有被局限在这个部分。你可以加很多适合存储容量的不同的声音(一共4秒钟),并多次触发。复制粘贴 ‘constant unsigned char sample[] PROGMEM’ 代码,并且给不同系列的数据不同的名字。为了使门铃变得可触碰的,你也可以用外接的1百万欧电阻(内置电阻只有一万欧)。将1百万欧的电阻插在Arduino板的sensor pin (A0)和5V上.。删除 setup里的pinMode功能。

下列代码用booleans来在被触碰时播放不同的声音。 这个教程包含的是我们做的鬼嚎声,所以你可以上传这个,并且自己尝试。电阻接在A0和5V上, 扬声器接在pin 11端口和GND上。

动手愉快!!~

Original English Tutorial:

Like what you read? Give Yaowen Zhang a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.