> For the complete documentation index, see [llms.txt](https://docs.haohaodada.cn/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.haohaodada.cn/zai-xian-ru-men-ke-cheng/scratch-sensor-board-primer/lesson-5.md).

# 第5课 在Scratch中使用蜂鸣器——守卫松饼

小猫由于工作努力，主人奖励了它一个松饼。它舍不得吃，准备作为第二天的早餐。可是，松饼的香味引来了馋嘴的老鼠。我们可以用Scratch设计一个程序，通过传感器板上的蜂鸣器发出警报，帮助小猫守卫松饼。

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

## 模块与指令

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

### “设置蜂鸣器频率”指令：

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

通过设置参数可以改变蜂鸣器发出声音的频率。该指令默认参数值为“2500”，取值范围为（20，20000）。

人耳可以听到的声音频率范围，一般是在20赫兹到20000赫兹之间。20赫兹以下的“次声波”与高于20000赫兹的“超声波”，我们人耳是听不到的。根据人耳可听见的声音频率范围，设置不同的参数值，可以改变蜂鸣器的频率。

### “设置蜂鸣器音量”指令：

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

通过参数设置可以改变蜂鸣器发出声音的音量大小。该指令默认参数值为“10”，取值范围为（0，100）。

#### 试一试

请根据以下的程序图编写脚本，然后分别依据表格中的数据设置频率参数值，再运行程序后试听，最后选择合适的声音效果打“P”。

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

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

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

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

## 作品制作

要完成这个任务，我们可以先设置舞台，选取角色，设置老鼠的运动路线；然后判断老鼠与松饼之间的距离，距离越近，警报声越高、越急；再设置小猫能够跟随鼠标指针守卫松饼，老鼠也能够侦测与小猫之间的距离，当小于一定值时，它会逃回到初始位置。

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

1.单击“舞台列表区”中的

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

按钮，在打开的“背景库”对话框中找到并双击“room3”缩略图，将“room3” 背景图片添加到舞台上。

2.单击“角色列表区”中的

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

按钮，在打开的“角色库”对话框中找到并双击“Cat2”缩略图，将“Cat2” 角色添加到舞台上。

3.按以上方法，继续从角色库中将“Mouse1”、“Muffin” 添加到舞台上；调整这三个角色的大小，将它们摆放到舞台合适的位置。

4.将角色列表区无用的角色删除；将舞台上无关的传感器数值隐藏起来。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paA7bxvEADIdL-YC%2FScratch-sensor5-10.png?generation=1548383318621487\&alt=media)

### 第二步：编写老鼠角色脚本

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

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

老鼠角色脚本共有两段代码，可以在“角色列表区”中选中“Mouse1”角色，分别按以下步骤编写这两段代码：

第一段代码使老鼠能够面向松饼（Muffin）方向移动。首先指定“Mouse1”的起始坐标，其中X值为（-210，210）之间的随机数，y值为（-180）；然后重复移动，每次都是面向松饼（Muffin）方向，移动10步、等待0.2秒。

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

第二段代码用于侦测老鼠与小猫之间的距离。使用重复执行指令进行侦测判断，如果与小猫（Cat2）之间的距离小于150，那么老鼠（Mouse1）返回起始的随机位置。

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

#### 想一想

1. 在以上代码中，Mouse1起始坐标的x值是一个随机数，你认为这样的指令有什么好处？你想让它每次从哪个位置随机出现？
2. 如果想让Mouse1的运动更加流畅，可以怎样修改参数？

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

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

### 第三步：编写小猫角色脚本

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

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

小猫角色脚本比较简单，只要让小猫面向老鼠方向，同时跟随鼠标指针移动就行。具体可以按以下步骤编写代码：

首先在“角色列表区”中选中“Cat2”角色，然后在开始旗下面使用重复执行指令，让小猫不断地面向老鼠（Mouse1），同时移动到当前鼠标指针所在的位置。

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

#### 试一试

如果不使用

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

而是使用

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

效果会如何？你喜欢哪种方式，为什么？

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

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

### 第四步：编写松饼角色脚本

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

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

松饼（Muffin）的脚本有两段，可以在“角色列表区”中选中“Muffin”角色，分别按以下步骤编写这两段代码：

第一段脚本主要是侦测老鼠（Mouse1）与松饼（Muffin）之间的距离，并根据侦测所获得的数据做出判断：当与老鼠之间的距离小于100时，发出频率是1000、以0.5秒为间隔的报警声；当与老鼠之间的距离大于100时，发出频率是2000、以0.25秒为间隔的报警声；

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

第二段脚本用于判断老鼠有没有碰到松饼。首先显示松饼（Muffin）的第1个造型（muffin-a）；然后判断，如果碰到老鼠（Mouse1），则关闭蜂鸣器、将造型切换为第2个造型（muffin-b）、播放声音“pop”，等声音播放完毕停止程序运行。

![](https://3988445729-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LWF1jkbOkV3Cs8uqgVf%2F-LX1pWwq73YrCGw5F_s8%2F-LX1paAVg5-nQmouJt3u%2FScratch-sensor5-22.png?generation=1548383319086982\&alt=media)

#### 练一练

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

#### 拓展思考

我们听到的音乐，每个音符都是有固定频率的，比如C调音符相对应的频率如下图所示：

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

请你使用Scratch编写一段自动演奏《两只老虎》的音乐程序，或者编写一个能够用键盘弹奏的钢琴程序。与以前编写的类似程序不同的是，现在演奏音乐的，是传感器板上的蜂鸣器。
