# 第7课  在Nova中使用声音与亮度传感器——智能声控灯

普通灯一般使用机械开关控制亮灭，而智能灯使用各种传感器控制亮灭。本课将学习制作一种智能声控灯，它能够在检测到周围光线比较暗、同时声音强度达到指定值时自动点亮。不仅能够给使用者带来方便，还可以节约用电。

## 模块与指令

**要制作本课的范例作品，需要认识以下这些新的硬件：**

### 亮度传感器模块

亮度传感器其实是一个光敏管，能够感知周围光线的强度，通过转化和采集后输出具体数值（如下图所示）。Nova套件中亮度传感器输出的光线强度取值范围是（0，4095）。

![](/files/-LWo2jafHgdBOqJShG_q)

### 声音传感器模块

声音传感器里面有一个对声音敏感的电容式驻极体话筒，声波会使话筒内的驻极体薄膜振动，产生电压变化，通过转化和采集后输出具体数值（如下图所示）。Nova套件中的声音传感器输出的声音强度取值范围是（0，4095）。

![](/files/-LWo2jahHnaY4WJCwEFX)

**要制作本课的范例作品，还需要使用以下新的指令：**

### “读模拟口”指令：

![](/files/-LWo2jakdiw_rfp8hrW8)

使用这个指令可以读取指定模拟口的输出值。指令默认是模拟口“A0”；通过单击下拉列表，可以选择A0—A3这4个模拟端口。

## 作品制作

要制作本课的范例作品，可以按以下步骤先连接硬件、运行插件程序，然后进入“好好搭搭”网站编写、调试、编译、下载程序。

### 第一步：搭建硬件、运行插件

首先将模块与主控板连接起来：亮度传感器模块连接“A0”端口、声音传感器模块连接“A1”端口、RGB LED模块连接“S0”端口、数码管模块连接“C0”端口（如下图所示）；接着把主控板和计算机连接起来，最后打开“好好搭搭硬件下载”插件，确认插件程序显示“打开端口成功”。

![](/files/-LWo2jamaBJwwM3RwM_G)

### 第二步：在数码管上显示亮度传感器的值

登录“好好搭搭”网站，选择“创作”栏目中的“haohaodada\_NOVA模版”，进入“NOVA编程设计页”进行编程。

要在数码管上显示亮度传感器的值，可以使用“重复执行”指令，重复执行“数码管消除”、“数码管显示”及“等待”指令，再将“读模拟口”指令作为“数码管显示”指令的显示数值参数。由于亮度传感器连接的是“A0”端口，因此就会在数码管上每隔“0.5”秒刷新显示当前环境的亮度值。具体程序代码如下图所示：

![](/files/-LWo2jaoB_TK5_ZTRHYG)

#### 试一试：

将上图所示代码编译后下载到主控板上，然后按下表要求测试不同环境下的亮度值，将数码管上显示的数值记录下来。

![](/files/-LWo2jaq8G7H2VLZHUlr)

### 第三步：在数码管上显示声音传感器的值

与数码管上显示亮度传感器值的程序类似，由于声音传感器连接的是“A1”端口，因此在数码管上显示声音传感器值的程序只需要修改“读模拟口”指令的参数为“A1”，这样在数码管上每隔“0.5”秒刷新显示的就是当前环境的声音响度值。具体程序代码如下图所示：

![](/files/-LWo2jasCPqIqBUdGgaI)

#### 试一试：

将上图所示代码编译后下载到主控板上，然后按下表要求手动调节电位器上转轴的位置，将数码管上显示的数值记录下来。

![](/files/-LWo2jauOiZvQDAxKADi)

### 第四步：用亮度传感器控制灯光的亮灭

要让亮度传感器控制LED亮灭，需要对亮度传感器的值进行判断：如果亮度传感器所连接的“A0”模拟口读取的值小于“1000”、也就是周围光线比较暗，那么点亮连接在“S0”端口的RGB LED；否则熄灭RGB LED。具体的程序代码如下图所示：

![](/files/-LWo2jawBGAslnvt6e2z)

为了使程序更简洁，上图7-6中的程序使用了名为“RGB”的功能块，具体功能块代码如下图所示。

![](/files/-LWo2jay2k6hrOin5iFe)

#### 试一试：

如何在用亮度传感器控制灯光亮灭的同时，用数码管显示实时的周围环境亮度值？

### 第五步： 用亮度和声音传感器同时控制灯光亮灭

要用声音和亮度传感器同时控制灯光亮灭，也就是周围光线比较暗的同时，声音的响度还要达到一定的值，灯才会亮。这个程序代码的核心是对判断的条件进行设置，可以使用“数字和逻辑运算”类别中的“且”指令。也就是连接亮度传感器“A0”端口的值小于“1000”的同时，连接声音传感器“A1”端口的值还必须大于“2000”，只有这两个条件都满足的情况下，灯才会亮；否则，设置灯是灭的。具体程序代码如下图所示：

![](/files/-LWo2jb-GRRssNC1xyjQ)

#### 想一想

如下图所示程序脚本，与上图有什么不同？它能否让智能声控灯正常工作？分析这两种程序编写方法有什么区别？你喜欢哪种方法？

![](/files/-LWo2jb19LdSTrOp1VPw)

#### 练一练：

根据实际环境光线及声音响度情况，调整具体数值，使得智能声控灯更有实用性。

## 拓展与思考

除了使用亮度和声音传感器控制灯光，你还能让灯光控制更智能、使用更方便吗？


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.haohaodada.cn/zai-xian-ru-men-ke-cheng/scratch-arduino-primer/lesson-7.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
