# Mixly_教程

## 开发环境配置

<span style="color: rgb(255, 76, 65);">**这一部分很重要，一定要先读取并且操作这一部分内容再到项目课程。**</span>

### 1. 下载软件

读者可以在米思齐(Mixly)网站：[https://mixly.org/bnu-maker/mixl2.0rc](https://mixly.org/bnu-maker/mixl2.0rc) 下载Mixly开发环境，网站页面如下图所示：

![Img](./media/img-20240919120141.png)

<span style="background: rgb(255, 251, 0);">如果遇到米思齐(Mixly)官网网站更新进不了时，请通过百度网盘分享的文件：mixly2.0-2024。</span>
<br>
<span style="background: rgb(255, 251, 0);">链接：[https://pan.baidu.com/s/1sV0DUDKg7OiQcKyIkBI1Ew?pwd=keye](https://pan.baidu.com/s/1sV0DUDKg7OiQcKyIkBI1Ew?pwd=keye) </span>
<br>
<span style="background: rgb(255, 251, 0);">提取码：keye </span>

点击“Mixly2.0 RC4”进入百度云盘首界面，复制提取码 “<span style="color: rgb(255, 76, 65);">**ny1n**</span>” 至 “**<span style="color: rgb(0, 209, 0);">请输入提取码，不区分大小写</span>**” 的文本框，点击 “**<span style="color: rgb(0, 252, 255);">提取文件</span>**” 进入Mixly软件下载页面，左键单击“mixly2.0”。根据计算机系统选择下载对应的版本，Windows系统一般是下载“**mixly2.0-win32-x64-rc4完整版.zip**”版本，如下图所示。<span style="color: rgb(255, 76, 65);">这里要说明一下，Mixly除了Windows系统版本之外还有针对MacOS和Linux的两个版本。本项目教程后面的内容均是在 Windows系统下操作的。</span>

![Img](./media/img-20240919130413.png)

![Img](./media/img-20240919130420.png)

![Img](./media/img-20241023112601.png)

<span style="color: rgb(255, 76, 65);">Mixly For Windows：</span>

![Img](./media/img-20241023112610.png)

<span style="color: rgb(255, 76, 65);">Mixly For Mac(根据系统选择)：</span>

![Img](./media/img-20241023112618.png)

### 2. 安装软件：

**1.Windows版本安装：**

下载mixly2.0-win32-x64-rc4完整版压缩包之后，重新命名为mixly2.0 ，右键解压到本地磁盘。

<span style="color: rgb(255, 76, 65);">**特别提醒**：</span>
<br>
<span style="color: rgb(255, 76, 65);">(1)建议解压到硬盘根目录，路径不能包含中文及特殊字符(如:._( )等)。</span>
<br>
<span style="color: rgb(255, 76, 65);">(2)建议安装路径如D:mixly2.0</span> 


因为Mixly是一个绿色免安装软件，所以“**mixly2.0-win32-x64-rc4完整版**”版本在解压之后就可以直接使用了。如果是下载“**一键更新版.7z**”版本的压缩包，压缩包解压后，需要左键双击打开“一键更新.bat”按照提示更新Mixly。

完整的Mixly文件夹中的内容如下图所示：

![Img](./media/img-20241023112829.png)

启动软件：

这里双击“**Mixly.exe**”就能打开Mixly软件。如下图所示：

![Img](./media/img-20241023112918.png)

打开Mixly软件后，找到并且单击“Arduino AVR”就可以进入Mixly编程界面。软件界面如下图所示：

![Img](./media/img-20240919131619.png)

**2.Mac版本安装：**

这里有MAC安装Mixly2.0.txt文件说明。

![Img](./media/img-20241023112956.png)

### 3. 界面介绍

![Img](./media/img-20240919143833.png)

![Img](./media/img-20240919131636.png)

总体来说，Mixly软件界面分为4部分:

1\. 界面左侧为模块区，这里包含了Mixly中所有能用到的程序模块，根据功能的不同，大概分为以下几类:“输入/输出”、“控制”、“数学”、“逻辑”、“文本”、“数组”、“变量”、“函数”、“串口”、“传感器”、“执行器”、“显示器”、“通信”、“存储”、“网络”。每种类型的模块都用不同的颜色块表示，其中每一个分类中的模块会在 [https://mixly.readthedocs.io/zh-cn/latest/](https://mixly.readthedocs.io/zh-cn/latest/) 中有专门的介绍。

2\. 模块区的右侧是程序构建区，模块区的模块可通过鼠标拖拽放到程序构建区，拖诟过来的模块会在这里组合成一段有一定逻辑关系的程序块。这个区域有点类似代码程序编辑软件中写代码的地方，在这个区域的右下角有一个垃圾桶，当我们删除模块时，就要将模块拖到垃圾桶中，在垃圾桶的上方有三个圆形的按钮，能够实现程序构建区的放大、缩小以及居中。

3\. 模块区和程序构建区的上方是基本功能区，类似一般软件的菜单区。这里不仅包含了“新建”、“打开”、“保存”、“另存为”软件都具有的按钮，还包含了硬件编程软件中需要用到的“编译”、“上传”、“控制板选择”、“端口连接器”、“串口监视器”这样的按钮。

4\. 界面的最下方是提示区，这里在软件编译、上传的过程中会显示相应的提示信息。我们可以通过提示信息来解决编译上传过程中出现的一些问题。

**最后还要补充两点：**

第一点是 Mixly支持多国语言，我们可以通过如下界面找到并且点击进入个性化设置页面，找到语言下面的简体中文下拉菜单，选择不同的语言版本，此时这个下拉菜单显示的是简体中文，如下图所示：

![Img](./media/img-20240919131734.png)

![Img](./media/img-20240919131741.png)

第二点是在界面最上方右侧有一个按钮，单击这个按钮就能进入纯代码形式，如下图所示：

![Img](./media/img-20240919131747.png)

Mixly作为一款将图形化编程方式和代码编程方式融合在一起的开发环境，如果只能单独地显示代码或显示图形程序块，那么肯定是不够好的。在Mixly中是能够将代码和图形程序块一起呈现在屏幕上的，这个功能可以通过界面最上方右侧有一个![Img](./media/img-20240919131813.png)按钮实现，单击这个按钮之后，如下图所示：

![Img](./media/img-20240919131821.png)

这时，在程序构建区的右侧会显示出对应的代码，这段代码是与程序构建区中的模块所组成的程序块对应的，会随着模块的变化而变化，不过区域中的代码是不可编辑的。同时，界面最右侧那个向左的箭头按钮变成了向右的箭头。

<span style="color: rgb(0, 209, 0);">**注意：想了解更多关于Mixly相关知识的请点击链接：**</span>[https://mixly.readthedocs.io/zh-cn/latest/](https://mixly.readthedocs.io/zh-cn/latest/) 。

### 3. 驱动程序安装

驱动程序安装方法请参照“<span style="color: rgb(255, 76, 65);">Arduino C 教程中的“**开发环境配置**”部分</span>，这里就不重复讲解。

### 4. 添加 Mixly 库文件

<span style="font-size: 24px; color: rgb(255, 76, 65);">**注意：Mixly 库文件必须添加好，否则后面的示例代码打不开**。</span>

Mixly 软件下载安装后，点击Arduino AVR 进入代码编辑器，先点击右上角“**设置**”，再点击“**管理库**”进入添加库文件界面。

![Img](./media/img-20240607113141.png)

![Img](./media/img-20240607113547.png)

先点击“**导入库**”，再点击![Img](./media/img-20240607113753.png)进入库文件所放的位置，找到库文件并选中它，然后单击“确定”。之后，就可以看到库文件在导入中。

![Img](./media/img-20240607113713.png)

![Img](./media/img-20240607114203.png)

![Img](./media/img-20240607114643.png)

点击“**管理库**”，可以看到添加成功的库文件。

![Img](./media/img-20240607124719.png)

关闭添加库文件的窗口界面，在代码编辑器左侧看到所添加的库文件。

![Img](./media/img-20240607124929.png)


## 项目课程

### 第01课 蜂鸣器模块

![](media/51deebe17e93ab0bfaa42693745ccf08.png)

**1. 项目介绍：**

有源蜂鸣器模块上的有源蜂鸣器元件可以发出声音，有源蜂鸣器元件内部自带震荡电路，使用时，我们只需要给蜂鸣器元件足够的电压，蜂鸣器就会自动响起。

**2. 规格参数**

工作电压：DC 3.3 ~ 5V 

工作电流：22.5mA

最大功率：0.12W

频率：2300HZ

控制信号：数字信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 12.3mm

接口：2.54mm间距，3pin防反接口

---

**3. 原理图**

![Img](./media/img-20240920173302.png)

从原理图我们可以得知，蜂鸣器的1脚通过串联一个电阻R2连接到电压正极；蜂鸣器的2脚连接到NPN三极管Q1的C极，集电极；Q1的B极，也就是基极通过串联一个电阻R1连接到S信号端；发射集接到GND。

当三极管Q1导通时，蜂鸣器的2脚连通GND，有源蜂鸣器便会工作。那么如何让三极管Q1导通呢？NPN三极管的导通条件是基极（B）电压比发射极（E）电压高 7.3V 以上，只需要基极（B）被上拉至高电平即可。虽然三极管Q1的基极（B）有一个下拉电阻R3导致其不导通，但是R3电阻的阻值大，使其为弱下拉电阻。三极管Q1的基极（B）还连接了一个阻值小的强上拉电阻R1，只要我们用单片机IO口给S信号端输入高电平，强上拉电阻R1会将三极管Q1的基极（B）强上拉为高电平，三极管Q1就会导通，有源蜂鸣器就会工作。

**4. 连接图：**

![](media/e107de92cef0a731a5227ca55229ec0f.png)

**5. 实验代码：**

① 点击“Keyes sensor”下拉菜单，在“数字输出”模块中拖出“有源蜂鸣器”指令方块，设置管脚为“A0”，并且电平设为“高”。

![Img](./media/img-20240920082608.png)

② 在“控制”模块中拖出“延时”指令方块，设置延时2000毫秒。

![Img](./media/img-20240919115311.png)

③ 在“数字输出”模块中拖出“有源蜂鸣器”指令方块，设置管脚为“A0”，并且电平设为“低”。

![Img](./media/img-20240920082720.png)

④ 在“控制”模块中拖出“延时”指令方块，设置延时2000毫秒。

![Img](./media/img-20240919115420.png)

完整代码：

![Img](./media/img-20240919115618.png)

**6. 测试结果：**

有源蜂鸣器只需要有个高电平电压蜂鸣器就响起。烧录好代码，连接好线，上电后，有源蜂鸣器响2S，静音2S，循环交替。

**7. 代码解释：**

![Img](./media/img-20240919133549.png)

向指定管脚设置“高”或“低”，选择“高”代表给该管脚设置高电平，有电压，有电流，则蜂鸣器鸣叫；选择“低”代表给管脚设置低电平，没电压，没有电流，则蜂鸣器不鸣叫。

![Img](./media/img-20240919115420.png)

将程序的执行暂停一段时间，也就是延时，单位是毫秒。     

### 第02课 按键模块

![](media/1a90cb6e20f8bdab71de591c68c14a26.png)

**1. 项目介绍：**

本传感器兼容各种单片机控制板，如Arduino系列单片机。它的连接端口兼容Arduino传感器扩展板。传感器输入一个按键信号，可以输出一个数字电压信号。当我们按下按键时传感器信号端输出低电平信号，释放按键时传感器信号端保持高电平。传感器自带2个4.8mm的定位孔，方便你将传感器固定在其他设备。

**2. 规格参数：**

工作电压：3.3-5V（DC）

工作电流：10MA

输出信号：数字信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 12.3mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![](media/74495c5a3c13b0f91e026320e26436c4.png)

按键模块上的按键没有按下时，VCC经过R1给到S端的电压是高电平，当按键按下后，S端与GND导通电压被拉低了，所以是低电平，R1的作用是避免VCC和GND直接短路。

**4. 连接图：**

![](media/aefc3b1e926f0e8d94840d202771abdc.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

④ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，然后在“数字输入”模块中拖出“按键”指令方块放入“=”左侧，设置管脚为A0，最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“=”右侧，设置数字为0。

![Img](./media/img-20240920083149.png)

⑤ 在“串口”模块中拖出“Serial 打印 自动换行”指令方块。在“文本”模块中拖出“hello”指令方块，满足条件串口打印“Key Down!”，不满足串口打印“Wait for the key to be pressed!”

![Img](./media/img-20240919140518.png)

![Img](./media/img-20240919140537.png)

完整代码：

![Img](./media/img-20240919140630.png)

**6. 实验结果：**

按照上图接好线，烧录好代码；点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600，没有按下按键时串口打印“Wait for the key to be pressed!” ；按下按键后打印“Key Down!”。如下图：

![Img](./media/img-20240923115046.png)

**7. 代码解释：**

![Img](./media/img-20240919113310.png)

初始化，代表该方块中的代码设置只执行1次。

![Img](./media/img-20240919145117.png)

如果![Img](./media/img-20240919144753.png)里的表达式为真，则执行![Img](./media/img-20240919144826.png)块内的代码。如果![Img](./media/img-20240919144753.png)里表达式为假 ，则执行![Img](./media/img-20240919144857.png)块内的代码。

![Img](./media/img-20240920083149.png)

读取按键模块的数字电平，高(HIGH)或者低(LOW)。如果该引脚未连接任何东西，则![Img](./media/img-20240920095753.png)可以返回“高”或“低”（并且可以随机更改）。 

![Img](./media/img-20240919145137.png)

初始化串口通信，并设置波特率为9600。

![Img](./media/img-20240919145205.png)

换行输出数据。从串行端口输出数据，跟随一个回车和一个换行符。


### 第03课 人体红外热释传感器

![](media/e33ebccbc7750ff556d99b6c378e12fc.png)

**1. 项目介绍：**

Keyes 人体红外热释传感器，它主要由一个RE200B-P传感器元件组成。它是一款基于热释电效应的人体热释运动传感器，能检测到人体或动物身上发出的红外线，配合菲涅尔透镜能使传感器探测范围更远更广。

实验中，通过读取模块上S端高低电平，判断附近是否有人在运动；并且在串口监视器上显示测试结果。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 3.6mA

最大功率: 0.018W

静态电流: <50 uA

输出信号: 数字信号

视野角度：Y = 90°，X = 110°（视野角度为理论数值）

最大检测距离: ≤5米

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 7.4mm

接口：2.54mm间距为，3pin防反接口


**3. 原理图：**

![Img](./media/img-20240920173021.png)

这个模块的原理图可能较前面的模块稍复杂，我们一部分一部分来看。先看电压转换部分，作用是将5V输入电压转换为3.3V输入电压。因为我们模块上用到的热释电红外传感器的工作电压是3.3V，不能直接用5V电压供电使用。有了这个电压转换部分，3.3V输入电压和5V输入电压都适用于此热释电红外传感器。

当红外热释传感器没有检测到红外信号时，红外热释传感器的1脚输出低电平，此时模块上的LED两端有电压差，有电流流过，LED被点亮，MOS管Q1导通（Q1是NPN MOS管，型号为2N7002。由于红外热释传感器的1脚输出低电平，所以Q1的源极Vs=0，而Q1的栅极Vg=3.3V，于是Q1的栅极G和Q1的源极S之间的电压 Vgs = 3.3V 大于Q1的阈值电压 2.5V，Q1导通。），信号端S检测到低电平。

当红外热释传感器检测到红外信号时，红外热释传感器的1脚输出高电平，此时模块上的LED熄灭，MOS管Q1不导通，则信号端S检测到被10K上拉电阻R5拉高的高电平。

**4. 接线图：**

![](media/4a8b1ee8ed23f50768b7e0ff99a14946.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

④ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，然后在在“数字输入”模块中拖出“人体红外热传感器”指令方块放入“=”左侧，设置管脚为A0，最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“=”右侧，将数字0改成1。

![Img](./media/img-20240919145654.png)

⑤ 在“串口”模块中拖出“Serial 打印 自动换行”指令方块。在“文本”模块中拖出“hello”指令方块，满足条件串口打印“Somebody is in this area!”，不满足串口打印“No one!”

![Img](./media/img-20240919145820.png)

![Img](./media/img-20240919145834.png)

完整代码：

![Img](./media/img-20240919145925.png)

**6. 实验结果：**

按照接线图连接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。检测到人体运动时串口监视器中显示"Somebody is in this area!"；没有检测到人体运动时串口监视器中显示"No one!"。

![Img](./media/img-20240923115510.png)

**7. 代码解释：**

类似于第02课的实验代码，可以参照第02课的代码说明，这里就不多做介绍了。

### 第04课 倾斜开关模块

![](media/47304ef0be69753ce7edd2b3b3377b49.png)

**1. 项目介绍：**

Keyes 倾斜传感器，主要由一个倾斜开关组成，其内部带有一颗滚珠，用来监测倾斜情况。倾斜开关可以依据模块是否倾斜而输出不同的电平信号。当开关高于水平位置倾斜时开关导通，低于水平位置时开关断开。倾斜模块可用于倾斜检测、报警器制作或者其他检测。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 4.2mA

最大功率: 0.03WW

输出信号: 数字信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 8mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![](media/0261aa6e00c1752e439461c9f0e8c210.png)

Keyes 倾斜开关模块的原理非常简单，主要是利用滚珠在开关内随不同倾斜角度的变化使滚珠开关P1的引脚1和2导通或者不导通，当滚珠开关P1的引脚1和2导通时，由于1脚接GND，所以信号端S被拉低为低电平，此时红色LED和R2组成的电路形成回路，电流经过红色LED，点亮红色LED；当滚珠开关P1的引脚1和2不导通时，滚珠开关P1的引脚2被4.7K的上拉电阻R1拉高使得信号端S为高电平，电流不经过红色LED，红色LED熄灭。

**4. 接线图：**

![](media/cd897a9d6bbad8020133fe32af45946f.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

④ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，然后在在“数字输入”模块中拖出“倾斜传感器”指令方块放入“=”左侧，设置管脚为A0，最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“=”右侧，设置数字为0。

![Img](./media/img-20240920084444.png)

⑤ 在“串口”模块中拖出“Serial 打印 自动换行”指令方块。在“文本”模块中拖出“hello”指令方块，满足条件时串口打印“Normal！”，不满足时串口打印“Tilt warning！”。

![Img](./media/img-20240919151648.png)

![Img](./media/img-20240919151659.png)

⑥ 在“控制”模块中拖出“延时”指令方块，设置延时500毫秒。

![Img](./media/img-20240919151913.png)

完整代码：

![Img](./media/img-20240919151501.png)

**6. 实验结果：**

按照接线图接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。倾斜开关模块倾斜到一边时，模块上LED灯亮，串口打印“Normal！”；模块倾斜到另一边时，模块上LED灯灭，串口打印“Tilt warning！”。

![Img](./media/img-20240923115744.png)

**7. 代码解释：**

类似于第02课的实验代码，可以参照第02课的代码说明，这里就不多做介绍了。

### 第05课 光敏传感器

![](media/43852f78b7743c2c0365c7141b1cacee.png)

**1. 项目介绍：**

Keyes 光敏电阻传感器，这是一个常用的光敏电阻传感器，它主要由一个光敏电阻元件组成。光敏电阻元件的阻值随着光照强度的变化而变化，此传感器就是利用光敏电阻元件这一特性，设计电路将阻值变化转换为电压变化。光敏电阻传感器可以模拟人对环境光线的强度的判断，方便做出与人友好互动的应用。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 0.2mA

最大功率: 0.001W

输出信号: 模拟信号

工作温度：-10°C ~ +50°C

尺寸：32 x 23.8 x 7.4 mm

接口：2.54 mm间距，3pin防反接口

**3. 原理图：**

![](media/baae5294d38c9b71f3061f09301a7da3.png)

当没有光照射时，电阻大小为0.2 MΩ，光敏电阻的信号端（2脚）检测的电压接近0。随着光照强度增大，光线传感器的电阻值越来越小，所以信号端能检测到的电压越来越大。

**4. 连接图：**

![](media/4a64e6465912093873c37ff65b1d6fba.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“串口”模块中拖出“Serial 串口自动换行”指令方块，并在“模拟输入”模块中拖出“光敏传感器”指令方块添加在里面，设置管脚为A0；最后添加一个延时为500毫秒的延时指令方块。

![Img](./media/img-20240919153234.png)

完整代码：

![Img](./media/img-20240919153252.png)

**6. 实验结果：**

按照接线图接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。便可以看到代表当前光线强弱的模拟值，如下图。

![Img](./media/img-20240923131649.png)

**7. 代码解释：**

![Img](./media/img-20240919154620.png)

从指定的光敏传感器模拟引脚读取模拟值。为了兼容性，默认analogRead()分辨率为 10 位。详细了解请参考链接：[https://vimsky.com/examples/usage/arduino-language-functions-analog-io-analogread-ar.html](https://vimsky.com/examples/usage/arduino-language-functions-analog-io-analogread-ar.html) 。这个指令方块是从指定的模拟管脚A0读取光敏传感器的模拟信号，模拟信号的范围：0~1023。 

### 第06课 声音传感器

![](media/12cc26052d7cb93b9544d8fed5a015eb.png)

**1. 项目介绍：**

Keyes 声音传感器可以用于测试当前环境中的声音对应的模拟值，传感器上的S端是模拟输出，是麦克风的电压信号实时输出，可以通过电位器可调节信号增益。声音越大，模拟值越大，并在串口监视器上显示测试结果。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 15mA

最大功率: 0.075W

输出信号: 模拟信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 10.3mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![](media/71a2e4411640a5c34e4173acf893b2a6.png)

Keyes 声音传感器主要由一个高感度麦克风元件和LM386音频功率放大器芯片组成，高感度麦克风元件用于检测外界的声音。声波使麦克风内的驻极体薄膜振动，导致电容的变化，而产生与之对应变化的微小电压。利用LM386音频功率放大器芯片设计对高感度麦克风检测到的声音进行放大的电路，最大倍数为200倍。使用时我们可以通过旋转传感器上电位器，调节声音的放大倍数。顺时针调节电位器到尽头，放大倍数最大。

**4. 连接图：**

![](media/3b1393eefd6b328465c78b125972ce6e.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“串口”模块中拖出“Serial 串口自动换行”指令方块，并在“模拟输入”模块中拖出“声音传感器”指令方块添加在里面，设置管脚为A0；最后添加一个延时为200毫秒的延时指令方块。

![Img](./media/img-20240919153957.png)

完整代码：

![Img](./media/img-20240919154046.png)

**6. 实验结果：**

按照连接图接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。便可以看到声音的模拟值了，声音越大模拟值越大。如下图：

![Img](./media/img-20240923134317.png)

**7. 代码解释：**

类似于第05课的实验代码，可以参照第05课的代码说明，这里就不多做介绍了。

### 第07课 旋转电位器

![](media/64deff371131b942371d6916d56ff09c.png)

**1. 项目介绍：**

Keyes 旋转电位器，它一个模拟传感器。模块上电后，我们只需选择模块上电位器就可以调节模拟输出数值。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 0.55mA

工作功率: 0.00275W

输出信号: 模拟信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 28.4mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![](media/9f9e301d7d315c442a43958db97aaa9a.png)

旋转电位器其实就是一个可以改变电阻值的电阻元件，我们这个电位器是10K的，也就是说我们可以通过旋转便可以得到0-10K的任意阻值，根据欧姆定律U=I\*R，所以我们通过改变R的阻值进行控制电压的大小。而我们的Arduino主控板会将读取到的0-5V的电压分成1024份，所以就得到了模拟值。

**4. 连接图：**

![](media/6404fda2df365fcc0506f380af9a47a6.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“串口”模块中拖出“Serial 串口自动换行”指令方块，并在“模拟输入”模块中拖出“旋转电位器”指令方块添加在里面，设置管脚为A0；最后添加一个延时为100毫秒的延时指令方块。

![Img](./media/img-20240919154405.png)

完整代码：

![Img](./media/img-20240919154434.png)

**6. 实验结果：**

按照连接图连接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。我们便能看见旋转电位器的模拟值了，扭动旋钮，旋转电位器值发生变化。如下图：

![Img](./media/img-20240923134729.png)

**7. 代码解释：**

类似于第05课的实验代码，可以参照第05课的代码说明，这里就不多做介绍了。

### 第08课 温湿度传感器

![](media/f11d9320a04fd1ff003c34ffc975b1fe.png)

**1. 项目介绍：**

Keyes XHT11温湿度传感器。XHT11作为一款低价的入门级温湿度传感器，它主要由一个电阻式感湿元件和一个NTC测温元件组成。XHT11为4针单排引脚封装，采用单线制串行接口，只需加适当的上拉电阻，信号传输距离可达20米以上，Keyes XHT11温湿度传感器具有超快响应、抗干扰能力强、性价比极高等优点。

**2. 规格参数：**

工作电压: DC 3.3V~5V 

工作电流: 2.1mA

最大功率: 0.015W

温度范围: -25 ~ +60°C (± 2℃)

湿度范围: 5 ~ 95%RH（25C°左右精度为±5%RH）

输出信号: 数字双向单总线

工作温度: -25°C ~ +60°C

尺寸：32mm x 23.8mm x 9.7mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![](media/ac2d483d7421e0871fce88f05e38c27a.png)

XHT11温湿度传感器，包括一个电阻式感湿元件和一个NTC测温元件，XHT11为4针单排引脚封装，如上图，采用单线制串行接口，只需加适当的上拉电阻，信号传输距离可达20米以上，非常适用于对精度和实时性要求不高的温湿度测量场合。

XHT11是一款含有已校准数字信号输出的温湿度复合传感器，其精度湿度±5%RH， 温度±2℃，湿度量程5 ~ 95%RH，温度量程-25 ~ +60℃。温湿度传感器应用专用的数字模块采集技术和温湿度传感技术，确保产品具有极高的可靠性和卓越的长期稳定性。

单片机与 XHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右，数据分小数部分和整数部分，具体格式在下面说明，当前小数部分用于以后扩展，现读出为零，操作流程：一次完整的数据传输为40bit，高位先出。

**XHT11温湿度传感器的单总线格式定义：**

|名称 |单总线格式定义 |
| :--: | :--: |
| 起始信号 | 微处理器把数据总线(SDA)拉低一段时间至少 18ms(最大不得超过 30ms)，通知传感器准备数据。 | 
| 响应信号| 传感器把数据总线（SDA）拉低 83µs，再接高 87µs 以响应主机的起始信号。 |
| 湿度 | 湿度高位为湿度整数部分数据，湿度低位为湿度小数部分数据 |
| 温度 | 温度高位为温度整数部分数据，温度低位为温度小数部分数据，且温度低位 Bit8 为 1 则表示负温度，否则为正温度 |
| 校验位 | 校验位＝湿度高位+湿度低位+温度高位+温度低位 |

该传感器具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

**4. 连接图：**

![](media/a50ed24c2e65b97c87e51b06e2ec8520.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“串口”模块中拖出“Serial 串口自动换行”指令方块3次，都设置串口打印为“不换行”，在“文本”模块中拖出“hello”指令方块2次放入其中，将“hello”分别替换成“Temperature:”和“C ”（注意C后面有两个空格）；在“其他模块”模块中拖出“DHT11 管脚”指令方块放入其中，管脚设置为A0，选择“获取温度”。

![Img](./media/img-20240919160803.png)

④ 在“串口”模块中拖出“Serial 串口自动换行”指令方块3次，2个设置串口打印为“不换行”，在“文本”模块中拖出“hello”指令方块2次放入其中，将“hello”分别替换成“Humidity:”和“%”；在“其他模块”模块中拖出“DHT11 管脚”指令方块放入其中，管脚设置为A0，选择“获取湿度”；设置串口打印“%”自动换行。再添加一个100ms的延时

![Img](./media/img-20240919161210.png)

完整代码：

![Img](./media/img-20240919161320.png)

6. 实验结果：

按照连接图接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600。便可以看到当前环境温度值和湿度值，如下图。

![Img](./media/img-20240923135033.png)

**7. 代码解释：**

![Img](./media/img-20240920100945.png)

读取温度或湿度。

### 第09课 薄膜压力传感器

![](media/55dc59310d7c729bf5d66af7e443b2ca.png)

**1. 项目介绍：**

Keyes 薄膜压力传感器是基于新型纳米压敏材料辅以舒适杨式模量的超薄薄膜衬底一次性贴片而成，兼具防水和压敏双重功能。当传感器感知到外界压力时，传感器电阻值发生变化，我们采用电路将传感器感知压力变化的压力信号转换成相应变化强度的电信号输出。这样我们就可以通过检测电信号变化就可以得到压力变化情况。

通过采集模块上S端模拟信号，判断压力大小。模拟值越小，压力越大；并在串口监视器上显示测试结果。

**2. 规格参数：**

工作电压: DC 3.3V~5V

工作电流: 0.5mA

最大功率: 0.0025W

量程: 0~10KG

响应点: 150g

重复性: ＜±9.7%（60%负载）

一致性: ±10%

耐久性: ＞100万次

初始电阻: 大于10MΩ(无负载)

响应时间: ＜1ms

恢复时间: ＜15ms

输出信号: 模拟信号

工作温度：-10°C ~ +50°C

尺寸：32mm x 23.8mm x 7.4mm

接口：2.54mm间距，3pin防反接口

**3. 原理图：**

![Img](./media/img-20241030085526.png)

当传感器感知到外界压力时，传感器的电阻值发生变化。Keyes 薄膜压力传感器使用LM321运算放大器芯片将传感器感知到的压力变化的压力信号转换成相应变化强度的电信号输出，这样就可以通过检测电压信号变化得知压力变化情况。

**4. 连接图：**

![](media/051b335131b196649ac9cf69ad785182.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“串口”模块中拖出“Serial 波特率9600”指令方块。

![Img](./media/img-20240919134133.png)

③ 在“串口”模块中拖出“Serial 串口自动换行”指令方块，并在“模拟输入”模块中拖出“薄膜压力传感器”指令方块添加在里面，设置管脚为A0；最后添加一个延时为100毫秒的延时指令方块。

![Img](./media/img-20240920092629.png)

完整代码：

![Img](./media/img-20240920092654.png)

**6. 实验结果：**

按照接线图接好线，上传代码，点击![Img](./media/img-20240919144610.png)打开串口监视器窗口，并且设置波特率为9600，便能看见薄膜压力传感器的模拟值了，用手按压感应区便能改变模拟值，如下图：

![Img](./media/img-20240923135728.png)

**7. 特别注意：**

前面的值是属于压力的模拟值并非压力值，要想得到压力值的方法如下：

1\. 该传感器模块利用1个传感器元件串联1个510KΩ电阻。传感器一端接5V电源，一端连接510KΩ电阻，电阻连接GND。测试时，传感器连接电阻的一端为信号端，接模拟口。

2\. 通过上述描述，我们得到电阻和模拟值的计算公式：

3\. R =（1023-A0）\* 510 / A0   单位为KΩ

4\. 根据上述公式，我们得到传感器元件电阻值，观察以下压力-阻值关系图，我们可以大概得到压力值，我们没有详细公式计算出具体的压力数值。

![](media/9a791bcaedaa65a95cafa03ab1034f05.png)

5\. 从图片上可以观察到，压力值大于5000g时，压力值变化，电阻值几乎不变化，因此，我们建议测试时，最大压力值为5000g。

6\. 由于传感器元件感应区是凹进去的，测试时，需要将测试物体放在圆片中间的感应区域内才可以测试出结果；如果把传感器直接放在平面上，将测试物体放在传感器感应区，是测试不出结果的。因此，我们需要在传感器感应区内垫一个小物体，再将测试物体放在传感器感应区的小物体上，才能测试出结果。

**8. 代码解释：**

类似于第05课的实验代码，可以参照第05课的代码说明，这里就不多做介绍了。


### 第10课 LCD 128\*32 DOT模块

![](media/a3fc1ac20c4429413f304a0b33b679f4.png)

**1. 项目介绍：**

128\*32的液晶屏模块，它的驱动芯片为ST7567A，像素为128\*32。模块使用IIC通信方式，它不仅可以显示英文文字，还可以显示数字和图案等等。

为了方便设置，我们还提供一个测试代码，代码中，我们设置显示屏显示各种英文文字、常用符号和一个图案等。同时，代码中包含所有英文字母和常用符号的库，可以直接调用。

特别注意，模块的接口为蓝色的4pin自锁接口，接口间距为2.54mm，使用时，我们需要利用特定的接线连接。

**2. 规格参数：**

分辨率：128\*32

工作电压：5V

电流：100MA

最大功率：0.5W

工作温度：0摄氏度 到 40摄氏度

尺寸：47.6MM \*23.8MM

通信方式：IIC通信

亮度、对比度可通过程序指令控制

接口：4PIN接口，间距为2.54mm

**3. 原理图：**

![](media/87c0ce8afc5d6a8c9baea3f76e75a12f.png)

该模块使用IIC通讯原理，底层函数我们已经封装在库里面，我们直接调用库函数就可以，如果感兴趣的话也可以去了解该模块的底层驱动。

**4. 连接图：**

![](media/debeabde1e140d1884eb6244a610afa2.png)

**5. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“显示模块”模块中拖出“128×32 LCD 初始化”和“128×32 LCD 清屏”指令方块。

![Img](./media/img-20240920102353.png)

③ 在“显示模块”模块中拖出“128×32 LCD 设置位置”和“128×32 LCD 显示字符”指令方块，设置在第0行第6列，字符串“abcd”改成“KEYES”。

![Img](./media/img-20240920102711.png)

④ 复制代码块![Img](./media/img-20240920102825.png)
3次，将第0行第6列分别改成第1行第0列、第2行第0列和第3行第0列；将字符串“KEYES”分别改成“ABCDEFGHIJKLMNOPQR”、“123456789+-*/<>=$@”和“%^&(){}:;'|?,.~\\[]”。

![Img](./media/img-20240920103159.png)

完整代码：

![Img](./media/img-20240920103302.png)

**6. 实验结果：**

按照连接图接好线，上传代码，便能看见LCD上显示我们设置好的字符了。128X32LCD模块显示屏第一行显示“KEYES”、第二行显示“ABCDEFGHIJKLMNOPQR”、第三行显示“123456789+-\*/\<\>=$@”、第四行显示“%^&(){}:;'|?,.~\\\[\]”，如下图所示：

![](media/d1f543358fa84e0845b84cdae3a1a69f.png)

### 第11课 门铃

**1. 项目介绍：**

扩展对传感器的使用思维，将它们结合起来做出更有意思的东西。这节课我们要做的是门铃，也就是将按键和蜂鸣器结合起来。当按下按键时，蜂鸣器便发出声音。

**2. 连接图：**

![](media/dd82a69eb41f7ae9e96d63757920b5fe.png)

**3. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“数字输出”模块中拖出“关闭蜂鸣器”指令方块，设置管脚为A1。

![Img](./media/img-20240920141144.png)

③ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

④ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，然后在“数字输入”模块中拖出“按键”指令方块放入“=”左侧，设置管脚为A0，最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“=”右侧，设置数字为0。

![Img](./media/img-20240920141334.png)

⑤ 在“数字输出”模块中拖出“有源蜂鸣器”指令方块，设置管脚为A1。放到“如果...执行...否则”指令方块中，如果条件满足则A1管脚设为“高”；条件不满足则A1管脚设为“低”。

![Img](./media/img-20240920141807.png)

完整代码：

![Img](./media/img-20240920141831.png)

**4. 实验结果：**

按照接线图接好线，上传代码完成后，按下按键，蜂鸣器便会响起。

**5. 扩展：**

上面我们的门铃是按下就一直响，想办法将它变成按下按键后门铃“滴~滴~滴~”的响呢?

### 第12课 闯入报警器

**1. 项目介绍：**

在生活中，相信大家已经对走到楼梯口灯就会自动亮起来已经习以为常了，这节课就是使用人体红外热释传感器与蜂鸣器做一个有人闯入就会报警的设备。

**2. 连接图：**

![](media/6364a743b4bc50ad796447e3f093620e.png)

**3. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“数字输出”模块中拖出“关闭蜂鸣器”指令方块，设置管脚为A1。

![Img](./media/img-20240920141144.png)

③ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

④ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，然后在“数字输入”模块中拖出“人体红外热传感器”指令方块放入“=”左侧，设置管脚为A0，最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“=”右侧，设置数字为1。

![Img](./media/img-20240920142328.png)

⑤ 在“数字输出”模块中拖出“有源蜂鸣器”指令方块，设置管脚为A1。放到“如果...执行...否则”指令方块中，如果条件满足则A1管脚设为“高”；条件不满足则A1管脚设为“低”。

![Img](./media/img-20240920142221.png)

完整代码：

![Img](./media/img-20240920142146.png)

**4. 实验结果：**

按照连接图接好线，上传代码，当传感器前方有人移动时，蜂鸣器便会响起

### 第13课 压力报警器

**1. 项目介绍：**

这一课我们学习薄膜压力传感器与蜂鸣器的搭配，当压力过了一定值时，蜂鸣器便发声报警。

**2. 连接图：**

![](media/26a4e721d30db2ad39c4ef10bf0c7e4f.png)

**3. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“数字输出”模块中拖出“关闭蜂鸣器”指令方块，设置管脚为A1。

![Img](./media/img-20240920141144.png)

③ 在“变量”模块中拖出“声明全局变量item为整数并赋值”指令方块； 在“数学”模块中拖出“0”方块。

![Img](./media/img-20240920144657.png)

④ 在“变量”模块中拖出“item 赋值为”指令方块；在“数学”模块中拖出“映射 从1，100 到 1，1000”指令方块；在“模拟输入”模块中拖出“薄膜压力传感器”指令方块，设置管脚为A0，将数据“从（1，100 ）到（1，1000）”改成“从（1023，0）到（0，1023）”。

![Img](./media/img-20240920145432.png)

⑤ 在“控制”模块中拖出“如果...执行”指令方块，先点击![Img](./media/img-20240919135401.png)，再将![Img](./media/img-20240919135439.png)拖入![Img](./media/img-20240919135504.png)中。完成后，再次点击![Img](./media/img-20240919135401.png)。

![Img](./media/img-20240919135609.png)

⑥ 先在“逻辑”模块中拖出![Img](./media/img-20240919135744.png)指令方块，将“=”改成“>”；然后在“变量”模块中拖出“item”指令方块放入“>”左侧；最后在“数学”模块中拖出![Img](./media/img-20240919140015.png)指令方块放入“>”右侧，设置数字为600。

![Img](./media/img-20240920145928.png)

⑦ 在“数字输出”模块中拖出“有源蜂鸣器”指令方块，设置管脚为A1。放到“如果...执行...否则”指令方块中，如果条件满足则A1管脚设为“高”；条件不满足则A1管脚设为“低”。

![Img](./media/img-20240920150048.png)

完整代码：

![Img](./media/img-20240920150139.png)

**4. 实验结果：**

按照连接图接好线，上传代码，当按压薄膜压力传感器的感应区的力度模拟值大于600时，蜂鸣器便会发声报警。

### 第14课 LCD仪表盘

**1. 项目介绍：**

我们有很多个传感器需要看数值，而又不能一直拿着电脑看，这时候LCD模块就起作用了，可以利用它来显示各种数据。

**2. 连接图：**

![](media/79759ed26473b38d5063f75363334710.png)

**3. 实验代码：**

① 在“控制”模块中拖出“初始化”指令方块。

![Img](./media/img-20240919113310.png)

② 在“显示模块”模块中拖出“128×32 LCD初始化”指令方块和“128×32 LCD清屏”指令方块。

![Img](./media/img-20240924090042.png)

③ 在“显示模块”模块中分别拖出“128×32 设置位置”指令方块、“128×32 显示字符”指令方块、“128×32 设置位置”指令方块和“128×32 LCD显示数字”指令方块，设置位置第0行第0，字符abcd改成humidity:，设置位置第0行第10。然后从“其他模块”模块中拖出“DHT11 获取温度”指令方块放入“128×32 LCD显示数字”指令方块中，将管脚改成A0，选择“获取湿度”。

![Img](./media/img-20240924092239.png)

④ 复制代码块![Img](./media/img-20240924090929.png)一遍，将第0行第0改成第1行第0，第0行第10改成第1行第13，字符串humidity:改成temperature:，“获取湿度”改成“获取温度”。

![Img](./media/img-20240924092223.png)

⑤ 复制代码块![Img](./media/img-20240924090929.png)一遍，将第0行第0改成第2行第0，第0行第10改成第2行第11，字符串humidity:改成Luminance:。在“模拟输入”模块中拖出“光敏传感器”指令方块替换掉“DHT11 获取湿度”指令方块，管脚设置为A2。

![Img](./media/img-20240924092204.png)

⑥ 复制代码块![Img](./media/img-20240924090929.png)一遍，将第0行第0改成第3行第0，第0行第10改成第3行第8，字符串humidity:改成Analog:。在“模拟输入”模块中拖出“旋转电位器”指令方块替换掉“DHT11 获取湿度”指令方块，管脚设置为A1。

![Img](./media/img-20240924092135.png)

⑦ 从“控制”模块中拖出“延时”方块，设置延时300毫秒，再从“显示模块”模块中拖出“128×32 LCD清屏”指令方块。

![Img](./media/img-20240924092421.png)

完整代码：

![Img](./media/img-20240923172702.png)

**4. 实验结果：**

按照连接图接好线，上传代码，便能看见LCD上显示我们需要的传感器值了。如下图：128X32LCD模块显示屏第一行显示湿度、第二行显示温度、第三行显示光亮度、第四行显示电位器的模拟值，如下图所示：

![](media/689318e48d9c7635338e4f1f042ae5de.png)
