# 第6课 在Scratch中使用声音传感器——赛龙舟

同学们，你们知道中国传统节日端午节有什么习俗吗？o 吃粽子、挂艾草、放风筝、戴香包……当然还少不了赛龙舟。赛龙舟时通常会有人给他们击鼓加油。我们可以用Scratch设计一个赛龙舟的游戏，通过传感器板上的声音传感器，将我们的加油声传递给划龙舟的小伙伴们，帮助他们赢得比赛。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1pai-t5pwpITnrSZH%2FScratch-sensor6-1.png?generation=1548383331759971\&alt=media)

## 模块与指令

要完成本课的创意构思，需要了解以下的新知识、使用以下的新指令：

### 声音传感器

[单击此处](http://www.haohaodada.com/video/b10601)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1pai2ML8XElhX8A__%2FScratch-sensor6-3.png?generation=1548383332681027\&alt=media)

声音传感器里面有一个对声音敏感的电容式驻极体话筒。声波会使话筒内的驻极体薄膜振动，从而使电容产生相对应的微小电压变化，通过转化和采集后输出相应的电压变化。

### “读取声音强度”指令：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1pai47argnfnS405l%2FScratch-sensor6-4.png?generation=1548383328271481\&alt=media)

读取传感器板上的声音传感器当前接收到的声音强度数值，取值范围（0，4095）。

声音的强度又称音量，也叫响度。人耳感受到的声音强弱，是人对声音大小的一个主观感受。对于同一个声音来说，距离越远，声音强度越小。

#### 试一试

登录“好好搭搭”网站，连接传感器板，根据下表的要求操作，观察舞台上显示的声音强度数值，将不同状态下的声音强度数值记录下来。

[单击此处](http://www.haohaodada.com/video/b10602)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1pai8jwlhuiWvjXpw%2FScratch-sensor6-5.png?generation=1548383332738433\&alt=media)

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiBQ4b7khDpV8D5%2FScratch-sensor6-b1.png?generation=1548383331188863\&alt=media)

## 作品制作

要完成本课范例，可以先添加舞台、龙舟角色；然后设置两条龙舟的运动速度，其中一条龙舟是由程序自动控制的，另一条龙舟是根据我们加油声的声音强度来控制的；最后哪条龙舟先触碰终点线，就是哪个获胜。

### 第一步：设置舞台背景与角色

[单击此处](http://www.haohaodada.com/video/b10603)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiDZvyJqMnkrdaU%2FScratch-sensor6-7.png?generation=1548383331819315\&alt=media)

本课范例所使用的背景和角色需要从网站上下载，作为外部图片文件导入：

1.打开网络浏览器，在地址栏中输入“haohaodada.com/b1”，进入“好好搭搭”网站，打开本课的范例程序网页，单击网页右边的“资源下载”选项卡，下载“赛龙舟”压缩文件，然后将下载的文件解压缩到本地计算机上。

2.单击“舞台列表区”工具栏中的

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiGoTx4wO890eyO%2FScratch-sensor6-8.png?generation=1548383332939905\&alt=media)

按钮，通过“打开”对话框上传刚才下载并解压缩到文件夹中的“赛龙舟背景”图片。

3.单击“角色列表区”工具栏中的

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiIV7Y13EttFwju%2FScratch-sensor6-8.png?generation=1548383328331774\&alt=media)

按钮，通过“打开”对话框分别上传刚才下载并解压缩到文件夹中的“龙舟1”、“龙舟2”图片；再单击“角色列表区”工具栏中的“绘制新角色”按钮，在“造型”选项卡中绘制一条红线作为比赛的“终点线”；调整这三个角色的位置，使两条龙舟在舞台左侧、红色“终点线”在舞台右侧。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiKXfvt-9ijESP-%2FScratch-sensor6-10.png?generation=1548383326401761\&alt=media)

4.单击选中“终点线”角色，在“声音”选项卡中通过单击

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paCZOLaHbeHF6Qyd%2FScratch-sensor4-8.png?generation=1548383322533065\&alt=media)

按钮，在声音库中找到“人声”类别中的“cheer”作为比赛胜利的效果声；“效果”类别中的“gong”作为比赛失败的效果声。

5.单击隐藏舞台上除“声音强度”以外，其它无关的传感器数值。

### 第二步：编写“龙舟1”角色脚本

[单击此处](http://www.haohaodada.com/video/b10604)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiQ2Z7tjulsIKo2%2FScratch-sensor6-12.png?generation=1548383334796384\&alt=media)

“龙舟1”是由软件自动控制的，先将它移动到合适的起点位置，观察它的坐标值，其中X值大致为“-170”，y值大致为“70”；再将龙舟向终点方向移动，触碰到终点线，这时X值大致为“100”，y值可以保持不变。为了让比赛更精彩，可以设置“龙舟1”的移动速度是1-10秒之间的随机数。具体的脚本代码如下图所示。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiTnuJNpPBDsJBt%2FScratch-sensor6-13.png?generation=1548383334128576\&alt=media)

#### 想一想

除了使用滑行指令控制“龙舟1”移动，还能用其他方式控制它的移动吗？

[单击此处](http://www.haohaodada.com/video/b10605)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiX-apuzfeAKgO7%2FScratch-sensor6-14.png?generation=1548383328238877\&alt=media)

### 第三步：编写“龙舟2”角色脚本

[单击此处](http://www.haohaodada.com/video/b10606)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paibK-n0KAU0pC-8%2FScratch-sensor6-15.png?generation=1548383333576753\&alt=media)

“龙舟2”是由传感器板上的声音传感器所获取的声音强度控制的。为了获得比较好的控制效果，应该先测量“安静”和“加油”这两种环境下声音传感值的变化范围。

在本课范例中，经过尝试得出声音强度变化的大致范围为（500，2000）。

可以把声音强度的变化区间以500为单位分成四段：非常响：（大于2000），响：（1500，2000），一般响：（1000，1500），轻：（500，1000）。

根据不同的声音响度，决定造型切换的速度、角色移动的速度。

具体代码如下图所示：

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paie1XJIZSwqJZz6%2FScratch-sensor6-16.png?generation=1548383334486222\&alt=media)

#### 试一试

尝试修改代码中的参数，使得“龙舟2”的移动速度和造型变化更符合你的想法。

[单击此处](http://www.haohaodada.com/video/b10607)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paipGjuO271mJHfT%2FScratch-sensor6-17.png?generation=1548383333381878\&alt=media)

### 第四步：判断比赛结果

[单击此处](http://www.haohaodada.com/video/b10608)或者扫描下方二维码可以观看相关的视频。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paisplDsR3Tk0zGl%2FScratch-sensor6-18.png?generation=1548383331640657\&alt=media)

比赛结果是由“终点线”角色完成的，哪艘龙舟先碰到“终点线”，哪艘龙舟就获胜，在没有龙舟碰到之前一直等待。当有龙舟碰到“终点线”就判断：如果是龙舟2先碰到，就说“恭喜你获胜”，同时播放胜利的音乐；否则说“加油，再试一次”，并播放失败的音乐；音乐播放完毕后停止所有程序。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paiwktjI2Vo4U0k-%2FScratch-sensor6-19.png?generation=1548383328337261\&alt=media)

#### 练一练

在以上介绍的基础上再进一步完善程序，比如增加舞台场景、添加其它角色、控制游戏的难度，还可以再加上计分、计时，使游戏变得更好玩

#### 拓展思考

我们听到的声音实际上是由声波组成的，声音的强度越大振幅就大，反之振幅就小。你想看看声音的波形吗？动动脑筋，利用声音传感器来绘制一段声音的波形。

我们可以新建角色

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paizaAB-PMT-waJE%2FScratch-sensor6-20.png?generation=1548383330760116\&alt=media)

让它作为画笔进行波形的绘制。首先对画笔进行初始化，设置画笔的初始位置和颜色，清空画面、落笔；然后让

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paj2rCFsDL8Ik_kH%2FScratch-sensor6-20.png?generation=1548383332874327\&alt=media)

的y坐标值根据声音强度大小调整，同时按一定的步长移动；最后当

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paj4zygSzN8babeI%2FScratch-sensor6-20.png?generation=1548383331841566\&alt=media)

移动舞台右边时停止绘制。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paj7-x3pex-JkLMt%2FScratch-sensor6-23.png?generation=1548383333773928\&alt=media)
