在创客作品中,经常会使用蜂鸣器,用于提醒或者警告使用者;除此之外,有时也会使用它演奏一些简单的乐曲。本课我们将使用蜂鸣器和按键模块制作一个音乐播放器,播放我们喜欢的乐曲。
要制作本课的范例作品,需要使用以下新的硬件模块:
蜂鸣器是一种能够发出指定频率声音的装置(如下图4-1所示),由于结构简单、使用方便,因此在电子产品中应用非常广泛。
图4-1 蜂鸣器模块
声音是由物体振动产生的声波。它有三个主观属性:音量、音调和音色。音量指人耳感受到的声音强弱,也叫做“响度”;音调指人耳能分辨一个声音调子的高低程度;音色指声音振动频率的特性,不同的物体由于材料、结构不同,发声时的振动频率也不相同,就会产生不同音色的声音。
对于蜂鸣器来说:它的驱动电流决定了所发声音的音量;它的工作频率决定了所发声音的音调;它的内部结构与发声原理决定了所发声音的音色。
要制作本课的范例作品,还需要使用以下新的指令:
使用“设置蜂鸣器响起音调”指令可以设置蜂鸣器发出指定的音调。指令默认是发出“低音DO”的声音;单击第一个下拉列表,选择蜂鸣器模块与扩展板相连接的端口号,单击第二个下拉列表,设置蜂鸣器响起的音调。
使用“设置蜂鸣器响起频率”指令可以设置蜂鸣器发出指定频率的声音——也就是音调。指令的参数就是频率值,默认是“523”Hz,可以根据需要修改。与“设置蜂鸣器响起音调”指令相比,这个指令更加灵活,除了音符,还可以设置各种声音的音调。
该条指令可以停止蜂鸣器发出声音。
要制作本课的范例作品,需要使用以下器材:
² UNO主控板和配套的扩展板
² 蜂鸣器模块:一块
² 单按键模块:一个
² 3P连接线:两根
要搭建本课的范例作品硬件,可以按以下步骤操作:
1. 将UNO扩展板插入到UNO主控板上。
2. 将一根3P连接线白色插头插入蜂鸣器模块的接口中、黑色插头插入扩展板中的“9”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
3. 将另一根3P连接线白色插头插入按键模块的接口中、黑色插头插入扩展板中的“10”号端口,黑色插头插入时要注意连接线每根线的颜色和扩展板插座针脚的颜色相同。
具体器材连接方式如下图3-3所示:
图4-2 “音乐播放器”范例作品硬件连接图
4. 用USB线把主控板和计算机连接起来,打开“好好搭搭硬件下载”插件,选择“型号”为“UNO”,确认插件程序左下角的端口和型号显示正确。
首先打开浏览器进入“好好搭搭”网站;登录后进入网站的“创作”栏目,选择“Arduino模版”,进入“模版项目页”;在“模版项目页”中单击网页右上角的“转到设计页”按钮,进入“Arduino编程设计页”。
要让蜂鸣器演奏一个音符,可以在“重复执行”指令中,先使用“设置蜂鸣器响起频率”指令,不修改输出频率,默认输出频率为523,再使用“等待”指令,让蜂鸣器持续发声“1秒”,也就是这个音符演奏的节拍;接着再使用“关闭蜂鸣器”指令;最后再使用“等待”指令,等待“1秒”。具体程序代码如下图4-3所示:
图4-3 “让蜂鸣器演奏一个音符”程序代码
| 声音的频率与C调的音符有如下表所示的对应关系,请参考这张对照表,编写一段能演奏多个音符的脚本。 |
一首歌需要有多个音符组成,要让蜂鸣器演奏多个音符,每个音符都应该使用“设置蜂鸣器响起频率”、“等待”指令设置音调、节拍,然后再使用“关闭蜂鸣器”指令停止声音。下表是儿歌《两只老虎》的歌谱,图4-4是演奏前半首歌曲的具体程序。
图4-4 “让蜂鸣器演奏部分歌曲”程序代码
| 请你按照《两只老虎》的歌谱,分别用“设置蜂鸣器响起频率”指令和“设置蜂鸣器响起音调”指令,编写演奏该首歌曲的程序。 |
像上图4-4这样演奏音符太过于麻烦。可以定义一个“演奏音符”功能块,将重复使用的指令都放在这个功能块里,使程序代码更为简洁。
下面以新建一个名为“Note”的音符演奏功能块为例,介绍具体操作步骤:
单击“更多模块”指令类别中的“新建功能块”按钮,在打开的“New Block”对话框中,输入新建的功能块名称“Note”。如下图4-5所示:
图4-5 “新建功能块”对话框
注意:与变量一样,在Arduino中功能块名称也不能是中文,只能使用英文字母和数字作为变量名、并且首位必须是英文字母。
2. 由于演奏音符需要指定音符的“音调”、“节拍”,因此需要为新建的功能块添加两个数字参数,并且应该为每个参数添加标签,说明参数的用途。
要添加参数标签,可以先单击“新建功能块”对话框中的“选项”,展开进行具体的设置;再单击“添加文本标签”选项右边的图标,会在功能块名称右边自动出现一个文本标签,用键盘修改标签名称为“音调”。
添加完标签后,继续单击“添加一个数字参数”选项右边的图标,在刚才添加的标签右边添加一个数字参数文本框,修改这个数字参数文本框的名称为“Tone”,作为功能块的第一个数字参数。
第二个参数的添加方法与前一个类似,也是先添加文本标签“节拍”,再添加数字参数“Beat”。这两个参数添加完成后,如下图4-6所示:
图4-6 为新建功能块添加数字参数
3. 功能块设置完成后,单击“确定”按钮关闭对话框 。会在“更多模块”指令类别的“新建功能块”按钮下方增加这个新添加的功能块;在脚本区也会增加一个名为“定义Note”的功能块脚本指令。
4. 在“定义Note”指令下方添加“设置蜂鸣器响起频率”、 “等待”以及 “关闭蜂鸣器”指令;将“定义Note”指令中的“Tone”参数拖动到“设置蜂鸣器响起频率”指令参数位置,“Beat”参数拖动到“等待”指令参数位置,如下图4-7所示:
图4-7 “演奏音符功能块”脚本代码
添加了这个名为“Note”的演奏音符功能块后,就可以在主程序中调用它编写演奏音符的程序代码。如下图4-8所示就是重复演奏 “1 2 3 1 | 1 2 3 1 | 3 4 5 - | 3 4 5 - |”第一段乐曲的程序代码。
图4-8 “调用功能块演奏音符”主程序代码
| 根据 “两只老虎”的乐谱,编写这首儿歌的完整演奏程序。 |
按照以上步骤编写的程序,程序编译后下载到主控板上会马上自动播放。为了更便于控制,可以添加用按键控制的功能:只有按下按键,乐曲才会播放。
在“重复执行”指令里面添加一个“如果……那么”指令,设置条件为:“读数字口”指令的值等于“1”,也就是按键处于“按下”状态时条件成立。条件一旦成立,就演奏刚才编写的这些音符。演奏完成后继续处于条件判断状态,等待再次按下按键重新演奏。具体的程序代码如下图4-9所示:
图4-9 “用按键控制乐曲演奏”程序代码
| 除了“两只老虎”这首乐曲,你还能编写其它喜欢的乐曲吗? |
你能够使用7个按键和1个蜂鸣器模块,制作一个简单的电子琴吗?
我打算这么做:_______________________________________________________
______________________________________________________________________。
做的时候需要注意:____________________________________________________
______________________________________________________________________。