# Arduino

## keyes UNO PLUS开发板

### 第1小节 简单介绍

我们先看一下他的特写：

![](media/899d2712efaacd543993cc9bbaa8b070.png)

我们通过下面的图来了解一下这个开发板的各个接口和主要元器件。

![](media/18342f8277d9585dfcb52c94d5b48303.jpeg)

接口简介

串口通信接口：D0为RX、D1为TX

PWM接口（脉宽调制）：D3 D5 D6 D9 D10 D11

外部中断接口：D2(中断0)和D3 (中断1)

SPI通信接口：D10为SS、D11为MOSI、D12为MISO、D13为SCK

IIC通信端口：A4为SDA、A5为SCL

时钟频率

主板使用16 MHz晶振

### 第2小节 arduino IDE下载方法

（1）安装 Arduino IDE

当我们拿到keyes UNO plus 主板时，首先得下载arduino IDE与安装驱动。如果你可以连接互联网，请从此官网链接下载arduino IDE：<https://www.arduino.cc/>, 点击导航栏上的“**SOFTWARE**”菜单,
然后点击下拉菜单的“DOWNLOADS”, 如下:

![](media/4636aac9aca9b3aa9d86580caac51b81.png)

这里有各种版本的arduino IDE，只要选择合适你电脑系统的即可，这里我们将演示如何下载与安装windows版本的arduino IDE。

![](media/6f45e013b19a04b73e24083710011a2e.png)

这里有需要安装(.exe)和免安装（Zip）两种windows的arduino IDE供我们选择，我们建议您使用第一个，他在安装时会安装所Arduino IDE的其他相关配置，如驱动程序等。使用Zip包，您需要手动安装驱动程序。如果您想创建一个可移植的安装，第二种方式也是可以使用的。

![](media/745910f7138b08d5cbcb557f194b0679.png)

选择“JUST DOWNLOAD”.

### 第3小节 驱动的安装方法

我们开始为Keyes Uno Plus 开发板安装驱动。Keyes Uno Plus
开发板的USB转串口 芯片用的是著名的CP2102 芯片，在ARDUINO
开发软件1.8以上的版本里就已经包含了
这个芯片的驱动程序，这样我们使用起来会非常方便。一般插上USB，电脑就会识别到
硬件，WINDOWS就会自动安装CP2102的驱动。
![](media/fe2c97ce022a5a071b2530328df74008.png)

如果驱动安装不成功，或者你想手动安装驱动，请打开电脑的设备管理器![](media/5d3921d98a5be791b0b5166164b389e7.png)

显示CP2102的驱动没有安装成功，有一个黄色的感叹号。我们双击硬件更新驱动

![](media/0946d3e3d322e66303a5e3fec0bb53c0.png)

浏览计算机查找驱动程序，先找到我们安装或者下载的ARDUINO开发软件，

![](media/abff63e491413339a985a0a03df21106.png)

里面有个DIRVERS文件夹，打开文件夹就能看到CP210X系列芯片的驱动，

![](media/8e4f9bbf067cdc64fe15f91b276b1cd9.png)

我们选择这个文件夹，然后点击确定，驱动安装成功。

![](media/1e888fdeb85783a123b6948dffa44a97.png)

这个时候再打开设备管理器，我就可以看到CP2102的驱动程序已经安装成功了，刚刚的那个黄色的感叹号不见了。

![](media/6ec68bee80c913c6ad392c6e7898ed36.png)

### 第4小节 Arduino IDE设置和工具栏介绍

装好了开发板的驱动，我们下面要了解Arduino开发软件的使用了，首先我们点击电脑桌面上的![](media/675ae7298ce0973df720b2fbbb514caa.png)图标，打开Arduino IDE。

![](media/e9a2d59afcff8121d18d8767326baa42.png)

为了避免在将程序上载到板上时出现任何错误，必须选择正确的Arduino板名称，该名称与连接到计算机的电路板相匹配。转到Tools→Board，然后选择你的板。

![](media/84317a7babddff172520b99756dc1f85.png)

然后再选择正确的COM口（安装驱动成功后可看到对应COM口）。

![](media/492239ef3e21b6699077d58ccb4c3444.png)

![](media/bcd36a3d3e1209c16866e554089832d5.png)

我们的程序上传到板之前，我们必须演示Arduino IDE工具栏中出现的每个符号的功能。

![](media/2598b31529ac4bff88630522b97b6c41.png)

A - 用于检查是否存在任何编译错误。

B - 用于将程序上传到Arduino板。

C - 用于创建新草图的快捷方式。

D - 用于直接打开示例草图之一。

E - 用于保存草图。

F - 用于从板接收串行数据并将串行数据发送到板的串行监视器。

启动你的第一个程序

上面我们学习了怎么下载软件和安装开发板的驱动，那下面我们就开始正式开始第一个程序，打开文件选择例子，选择第一个文件BASIC里面的BLINK程序

![](media/2a6a0b8b8e2585776e01873caf10a1b0.png)

![](media/6030cde1341c3432f0f4b1fb6c92e49e.png)

按照前面方法设置板和COM口，IDE右下角显示对应板和COM口。

![](media/5c4521f3fa5c4f4c0a5c9d1581ab1580.png)

点击![](media/ddd21c81338ae1f6b7f84de2a3caecf0.png)图标开始编译程序，检查错误，检查无误。

![](media/9948cd36a3b39cb57fd2bea79540c4b7.png)

点击点击![](media/9c9158a5d49baa740ea2f0048f655017.png)图标开始上传程序，上传成功。

![](media/60e002aacf662c1ecf88ad3ecd85e6ca.png)

程序上传成功，板载的LED灯亮一秒钟，灭一秒钟，恭喜你的第一个程序完成了！

### 第5小节 库文件的添加

首先找到arduino库文件夹：

![](media/04b2ddeb0ca1e8b6cd289d48753ae022.png)![](media/c87f9901d950f741c1d8b83847a7eb91.png)

然后把所要用到的库文件复制在这个文件夹下就行了。

## 模块实验课程

拿到套件后，我们可以看到套件中有42款传感器/模块，有对应的keyes UNO R3

开发板、传感器扩展板和连接线。这里，我们将42款传感器/模块利用自带连接线，单独连接在keyes UNO PLUS开发板和传感器扩展板。然后上传对应的测试代码，单独测试各个传感器/模块的功能。

特别注意：实验时，模块/传感器连接线材时，必须按照资料里的接线方法及位置，电源与信息脚不能错接，否则会损坏模块/传感器。

### 实验一 LED 模块测试

实验说明

在这个套件中，我们有一个keyes brick LED白发白模块。它的控制方法非常简单，控制时，GND VCC上电后；信号端S为高电平时LED亮起，S为低电平时LED熄灭。

实验中，我们提供两个测试代码，分别控制LED模块上实现闪烁和呼吸灯的效果。闪烁效果好理解；呼吸灯效果，就是控制LED模块上LED首先逐渐变亮，然后逐渐变暗，循环交替，如人体呼吸一样。

实验器材

keyes brick LED白发白模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/e45719e51cb010eb46d643eb5fa3999b.png)



代码1说明：

1.  pinMode(pin,mode)；pin是用于设置模式的Arduino引脚号；mode为模式，可选：输入模式INPUT，输出模式OUTPUT或输入上拉INPUT_PULLUP，在这里我们设置了管脚3位输出模式。

<!-- -->

2.  digitalWrite(pin,     value)；pin是单片机数字管脚，在这里我们定义了管脚3；value是你将要输出的数字电平（HIGH/LOW）；如果使用pinMode（）将引脚配置为OUTPUT，则其电压将设置为相应的值：5V（在3.3V板上为3.3V）为HIGH，低电平为0V（接地）。如果没有把pinMode（）设置为OUTPUT，而是将LED连接到引脚，则在调用digitalWrite（HIGH）时，LED可能会变暗。因为此时digitalWrite（）将启用内部上拉电阻，其作用类似于一个大限流电阻。

3.  delay(ms)；延时函数，ms为暂停的毫秒数，数据类型：unsigned     long（范围 0~ 4,294,967,295 (2^32 - 1)）。

4.  通过整合前面知识。我们再来看代码就清楚明了了，代码中第一条我们把模块信号端接到D3，设置为高电平，就是点亮模块上LED；第二条延迟1000毫秒，就是让模块上LED点亮1秒。同样第三条第四条代码表示让模块上LED熄灭1秒。代码默认循环，也就是控制模块上LED，循环亮1秒，灭1秒，实现闪烁效果。通过代码设置，我们可以更改模块上LED亮灭的延迟时间，从而使模块上LED实现不同的闪烁效果。

5.  更多语法解释与详情请了解官网https://www.arduino.cc/reference/en/

    **代码2说明：**

<!-- -->

1.  代码中setup（）是只执行一次，而loop（）函数是一直循环。这里我们还用到了for（）循环：最简单形式为for(     ; ; )，我们在此实验中用到for (int i = 0; i \<= 255; i = i +
    1)；表示变量i从0到255，每次自加1，知道不满足 i \<=
    255这个判断表达式，否则一直执行大括号里的代码，即一共执行256次大括号里的代码；同理for     (int i = 255; i \>= 0; i = i - 1)；i每次自减1，当不满足i\>=
    0时，跳出该for（）循环，一共执行256次。

2.  代码1中，我们控制模块上信号端控制LED亮灭。在代码2中，我们通过利用keyes     UNO R3开发板上PWM口，设置PWM值，控制模块上LED亮度。

3.  keyes UNO R3开发板上只有D3 D5 D6 D9 D10     D11数字口是PWM口，也就是说如果要控制LED的亮度，信号端就只能接着几个接口。实验中，我们将模块信号端接在D3脚，属于PWM口。设置时我们设置PWM数值越小，模块上LED越暗，数值越大，模块上LED越亮，范围为0-255。analogWrite（pin，value），pin为PWM口，value是要输出的PWM值（0~255）。

4.  通过整合前面知识，我们再来看代码，就清楚多了。将D3的PWM值设置为i，i刚开始由0增加到255，每次加1，每加一次延迟10毫秒，模块上LED逐渐变亮。PWM为255后，i开始由255减小到0，每次减1，每减一次延迟10毫秒，模块上LED逐渐变暗。然后又逐渐变亮，循环交替，如人体呼吸一样。

5.  如果我们感觉逐渐变亮
    或者逐渐变暗的时间过长，我们可以更改代码设置。有两种方法，一种是将每次加1减1的延迟时间降低；另一种是更改步长，注意这个步长必须能被255整除，如3     5。步长改为3 -3代表i每次增加3或减小3。

### 实验二 激光头传感器模块发出激光

实验说明

在这个套件中，包含一个激光头传感器模块。它主要由1个铜材半导体激光管元件组成。控制时，我们需要在模块S端输入高电平信号，模块开始工作，激光管发射出红色激光信号。

实验中，我们只是控制这个模块上激光管循环发射红色激光信号。

实验器材

keyes brick 激光头传感器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/6a472066a29857d86347cf411a8dbb15.png)



参考实验一说明，这里就不多说了。

测试结果

上传测试代码成功，上电后，模块上激光管发射红色激光信号1秒，停止发射红色激光信号1秒，循环交替。

### 实验三 插件RGB模块调节LED颜色

实验说明

在这个套件中，有一个插件RGB模块，它采用F5-全彩RGB雾状共阴LED元件。控制时，我们需要将模块R G
B连接单片机PWM口，-接GND。我们通过调节3个PWM值，控制LED元件显示红光、绿光和蓝光的比例，从而控制RGB模块上LED显示不同颜色灯光。当设置的PWM值越大，对应显示的颜色比例越重。理论来说，通过调节这3中颜色光的混合比例，可以模拟出所有颜色的灯光。

实验中，我们通过测试代码，控制模块上RGB LED显示几个常用颜色。

实验器材

keyes brick 插件RGB模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P 双头XH2.54连接线*1

USB线*1

接线图

![](media/36b6988ac8fc37b412ec69bb518c0088.png)



代码1说明：

1.  代码1中，R G B代表控制模块上
    LED对应的红绿蓝3种颜色对应的端口，根据接线图我们接到了D9 D10     D11，设置为9 10 11，后面设置对应高低，设置GRB     LED中红绿蓝3个灯是否会亮，设置为高（对应数字口为高电平），对应的颜色就亮。

2.  现在观察代码，这个代码非常简单，只是简单的控制模块上RGB     LED显示红色1秒、

    绿色1秒、蓝色1秒，循环交替。

    **代码2说明：**

    1.代码2中，我们使用到了PWM输出，根据接线图我们接到了D9 D10

    D11，设置为9 10 11。后面设置数据代表设置模块上LED     红绿蓝颜色的比例，设置的

    数据越大（对应的PWM值越大），设置该颜色的比例越大。

    2.实验中我们通过设置对应数值，调节RGB     LED上红绿蓝颜色比例，从而控制RGB     LED显示对应颜色。所以理论上来说可以设置的颜色有256\*256\*256种。

测试结果

上传测试代码1成功，上电后，模块上RGB LED循环显示红绿蓝3种颜色，间隔时间为1秒。上传测试代码2成功，上电后，模块上RGB LED显示红绿蓝黄紫白6种颜色，循环不止，间隔时间为1秒。

### 实验四 控制继电器开关

实验说明

在这个套件中，包含一个5V 单路继电器模块。它主要采用HK4100F-DC 5V-SHC继电器元件。继电器有3个绿色接线柱用于外接电路，分别为NO COM和NC端（背后丝印）。当继电器没有接控制信号时，COM端和NC端连通，COM端和NO端断开。

控制时，我们把GND接单片机GND，VCC接单片机5V,S接单片机数字口。当S信号端设置为高电平时，继电器开启，继电器COM端和NC端断开，COM端和NO端连通；S信号端设置为低电平时，继电器关闭，继电器COM端和NC端连通，COM端和NO端断开。

实验中，我们只是控制继电器NO端和COM端循环连接和断开。

实验器材

keyes brick 5V 单路继电器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/3864e636470e4333bac13335171ecb9e.png)



在实验中，我们把管脚设置为3，设置为高时，继电器上NO端和COM端连接，NC端和COM端断开；设置为低时，继电器上NO端和COM端断开，NC端和COM端连接。从而实现小电流控制大电流。

测试结果

上传测试代码成功，上电后，模块上NO端和COM端连接1秒，断开1秒，循环交替。

### 实验五 有源蜂鸣器模块播放声音

实验说明

在这个套件中，包含一个有源蜂鸣器模块，一个无源蜂鸣器模块。这个实验中，我们控制有源蜂鸣器发出声音。有源蜂鸣器元件内部自带震荡电路，控制时，我们只需要在蜂鸣器元件正极输入5V电源，负极接地，蜂鸣器就自动响起。在这个模块上我们在GND VCC输入5V电源；S信号端设置为高电平时，模块上蜂鸣器响起；设置为低电平时，模块上蜂鸣器没有声音。

实验中，我们只是控制这个模块上有源蜂鸣器的循环响起声音。

实验器材

keyes brick 有源蜂鸣器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/f7c5a1352db67097abe65d42a532174d.png)



在实验中，我们把管脚设置为3，设置为高时，模块上有源蜂鸣器响起；设置为低时，模块上有源蜂鸣器关闭声音。

测试结果

上传测试代码成功，上电后，模块上有源蜂鸣器响起1秒，关闭1秒，循环交替。

### 实验六 无源蜂鸣器模块播放音乐

实验说明

前面课程中我们介绍了套件中的有源蜂鸣器模块的使用方法。在这里我们介绍下套件中的无源蜂鸣器模块，它主要采用12\*8.5MM 5V 2K无源蜂鸣器元件。无源蜂鸣器元件内部不带震荡电路，控制时，我们只需要在蜂鸣器元件正极输入不同频率的方波（电压5V），负极接地，控制蜂鸣器响起不同频率的声音。该元件的中心频率是2KHz。无源蜂鸣器驱动频率与发生频率之间是一一对应的关系，即驱动频率是2KHz的方波，那听到的声音频率也是2KHz。

实验中，我们利用无源蜂鸣器模块上蜂鸣器输出各种频率的声音，然后控制无源蜂鸣器模块上蜂鸣器播放完整音乐。

实验器材

keyes brick 无源蜂鸣器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/aabea592c9bcd64f0f63cbd0f002b480.png)



代码1说明：

在本实验中，我们用到了函数tone（）。tone(pin, frequency)；pin为生成音调的arduino引脚,我们设置了3；frequency为音调频率，单位为Hz,数据类型为unsigned int（范围0 ~ 65,535 ((2^16) -
1)）。tone函数在引脚上生成指定频率（和50％占空比）的方波。
直到调用noTone（）（停止生成音调）为止。
该引脚可以连接到压电蜂鸣器或其他扬声器以播放音调。tone（）一次只能产生一种音调。
如果某个音色已经在其他引脚上播放，则对tone（）的调用将无效。使用tone（）函数将干扰引脚3和11（Mega以外的板上）上的PWM输出。同时tone（）不能产生低于31Hz的音调。如果要在多个引脚上演奏不同的音高，则需要在一个引脚上调用noTone（），然后在下一个引脚上调用tone（）。

代码2说明：

我们先是列出了所有D调的频率，方便后面使用。然后根据简谱列出各频率，再列出各节拍，我们用到的一个节拍为500ms，这个可以自己调整，然后循环响起音调与对应节拍就成了一首歌曲。

测试结果

上传测试代码1成功，上电后，模块上无源蜂鸣器循环播放对应频率对应节拍的声音。上传测试代码2成功，上电后，模块上无源蜂鸣器循环播放《生日快乐》歌曲。

### 实验七 按键传感器检测实验

实验说明

在这个套件中，有一个keyes brick按键传感器，它主要采用1个轻触开关，自带1个黄色按键帽。当我们按下按键时，传感器信号端为低电平；松开按键时，信号端为高电平。

实验中，我们通过读取传感器上S端高低电平，判断传感器上按键是否按下；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick按键传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/7b81ed73228217dd03b6d895be316a7a.png)



1.  pinMode(button, INPUT);
    由前面学过的知识我们知道，在这里我们定义按键管脚3，设置为输入模式。通过pinMode（）配置为INPUT的Arduino（ATmega）引脚处于高阻抗状态。配置为INPUT的引脚对要采样的电路的要求极小，相当于该引脚前面的100MΩ串联电阻。这使它们对于读取传感器很有用。将引脚配置为INPUT，并且正在读取开关，则当开关处于断开状态时，输入引脚将处于“悬空状态”，从而导致不可预测的结果。为了确保开关断开时的读数正确，必须使用上拉或下拉电阻。该电阻的目的是在开关断开时将引脚拉至已知状态。通常选择一个10     K欧姆的电阻，因为它的阻值足够低，可以可靠地防止输入悬空，同时，该阻值也要足够高，以使开关闭合时不会消耗太多电流。如果使用下拉电阻，则当开关断开时，输入引脚将为低电平；当开关闭合时，输入引脚将为高电平。如果使用上拉电阻，则当开关断开时，输入引脚将为高电平；当开关闭合时，输入引脚将为低电平。

    2\. Serial.begin(9600)；初始化串口通信，并设置波特率为9600.

    3\.     digitalRead(button)；读取按键的数字电平，高HIGH或者低LOW。如果该引脚未连接任何东西，则digitalRead（）可以返回HIGH或LOW（并且可以随机更改）。模拟输入引脚可以用作数字引脚：A0、A1、A2、A3、A4、A5。

4\. if..else..语句：当if后面（）的逻辑判断为真时，执行大括号里的代码；否则执行else后面{}里的代码。

5\.
代码逻辑是传感器感应到按键按下时，信号端为低电平，D3口为低电平，即val为

0。这时我们在串口监视器显示对应的数字值和字符；否则（传感器感应到按键松开时），val为1，窗口监视器显示1和另外的字符。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，当传感器按下按键时，val为0，串口监视器显示“Press the button”字符；松开按键时，val为1，串口监视器显示“Loosen the button”字符，如下图。

![](media/7a5ea61c176cc601a7c533b25dd1dec7.png)

### 实验八 电容触摸传感器检测实验

实验说明

在这个套件中，有一个keyes brick电容触摸传感器，它主要采用1个TTP223-BA6芯片。它是触摸检测芯片，提供一个触摸按键，功能是用可变面积的按键取代传统按键。当我们上电之后，传感器需要约0.5秒的稳定时间，此时间段内不要对键进行触摸，此时所有功能都被禁止，始终进行自校准，校准周期约为4秒。

实验中，我们通过读取传感器上S端高低电平，判断传感器上按键是否按下；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick电容触摸传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/42c87fbce62dfe92f16e04cdfe69f2a2.png)



当我们触摸传感器时，单片机会读取到高电平，即val == 1打印“Press the button”，否则打印“Loosen the button”。细节请参考实验七的代码说明。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，当传感器按下按键时，val为1，串口监视器显示“Press the button”字符；松开按键时，val为0，串口监视器显示“Loosen the button”字符，如下图。

![](media/ef13a96deab2ad0ed9023ba71f30f934.png)

### 实验九 干簧管检测附近磁场

实验说明

在这个套件中，有一个keyes brick 干簧管模块，它主要采用MKA10110
绿色磁簧元件元件。簧管是干式舌簧管的简称，是一种有触点的无源电子开关元件，具有结构简单，体积小便于控制等优点。它的外壳是一根密封的玻璃管，管中装有两个铁质的弹性簧片电板，还灌有一种惰性气体。平时，玻璃管中的两个由特殊材料制成的簧片是分开的。当有磁性物质靠近玻璃管时，在磁场磁力线的作用下，管内的两个簧片被磁化而互相吸引接触，簧片就会吸合在一起，使结点所接的电路连通。外磁力消失后，两个簧片由于本身的弹性而分开，线路也就断开了。该传感器就是利用元件这一特性，搭建电路将磁场信号转换为高低电平变换信号。

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

实验器材

keyes brick干簧管模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/3b8c5c1464cf53d54d7185b702d3d755.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，当传感器检测到磁场时，val为0，串口监视器显示“A magnetic field”字符；没有检测到磁场时，val为1，串口监视器显示“There is no magnetic field”字符，如下图。

![](media/1f2910615fd8be294c3a4f198dd51eca.png)

### 实验十 霍尔传感器检测磁场

实验说明

在这个套件中，有一个霍尔传感器，它主要采用A3144霍尔元件。该元件是由电压调整器、霍尔电压发生器、差分放大器、史密特触发器，温度补偿电路和集电极开路的输出级组成的磁敏传感电路，其输入为磁感应强度，输出是一个数字电压讯号。它是单极开关型的霍尔传感器，只感应南极磁场。传感器感应到无磁场或北极磁场时，信号端为高电平；感应到南极磁场时，信号端为低电平。当感应磁场强度越强时，感应距离越长。

实验中，我们利用霍尔传感器检测南极磁场，将测试结果在串口监视器上显示。

实验器材

keyes brick 霍尔传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/7ec721625b66925363511c303cf94915.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。当传感器感应到南极磁场时和当传感器感应到无磁场或北极磁场时，串口监视器显示如图。

![](media/428425496747939c6e97a00b6262c7b6.png)

### 实验十一 左右倾斜检测

实验说明

在这个套件中，有一个keyes brick 倾斜模块传感器，它主要采用SW-200D
振动开关元件。SW-200D
振动开关元件是滚珠型倾斜感应单方向性触发开关。该振动开关两端一端镀金，一端镀银；镀金端为触发端，镀银端为导电端。当传感器在水平位置或向导电端（镀银）倾斜时，开关元件为开路OFF状态，传感器信号端输出高电平；当传感器向触发端（镀金）倾斜时，开关元件为闭路ON状态，传感器信号端输出低电平。

实验中，我们通过读取模块上S端高低电平，判断传感器倾斜的方向；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick 倾斜模块传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/8b09000e1b5aeaa0c2462f1cc59e79aa.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，手握传感器白色接口，当传感器向右倾斜时，val为0，串口监视器显示“Right”字符；当传感器向左倾斜时，val为1，串口监视器显示“Left”字符，如下图。

![](media/4499410d12ed90790fa2ee3650002c8c.png)

### 实验十二 碰撞检测

实验说明

在这个套件中，有一个keyes brick
碰撞传感器，它主要采用1个轻触开关。当物体碰到轻触开关弹片，下压时，传感器信号端为低电平，自带D1 LED亮起；否则传感器信号端为高电平，自带D1 LED熄灭。该传感器常用于3D打印机内做限位开关。

实验中，我们通过读取模块上S端高低电平，判断传感器弹片是否下压；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick 碰撞传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/eca93b03627cc8323842b65ce3af7773.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，传感器上弹片下压时，val为0，串口监视器显示“The end of his!”字符；当松开弹片时，val为1，串口监视器显示“All going well!”字符，如下图。

![](media/dc43960b0e0e92232500f1b1dda8be99.png)

### 实验十三 附近有人吗

实验说明

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

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

实验器材

keyes brick人体红外热释电传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

注：传感器自带2个电位器用于调节延迟时间和接收灵敏度，方法如下图。

![](media/add8a3f5416627d12c2043eedf7c647a.png)

![](media/94f8eaff0e2443bef9250d739960e27c.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。

串口监视器显示对应数据和字符。实验中，传感器检测到附近有人在运动时，val为1，串口监视器显示“Somebody is in this area!”字符；没有检测到人运动时，val为0，串口监视器显示“No one!”字符，如下图。

![](media/f1064d17258c5fc9843363fd9ab7a91c.png)

### 实验十四 巡线传感器检测黑白线

实验说明

在这个套件中，有一个keyes brick 巡线传感器，它主要采用1个TCRT5000 反射型
黑白线识别传感器元件。传感器的原理是利用红外线对颜色的反射率不一样，将反射信号的强弱转化成电流信号。传感器没有检测到物体或者检测到黑色物体时，信号端为高电平；检测到白色物体时，信号端为低电平；它的检测高度为
0—3cm。我们可以通过旋转传感器上电位器，调节灵敏度，即调节检测高度。当旋转电位器，是传感器上D1 LED介于不亮与亮之间的临界点时，灵敏度最好。

实验中，我们通过读取模块上S端高低电平，判断传感器检测到的物体颜色（黑白）；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick巡线传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/2ddefb6a709fe733d09e4f1def9c3449.png)



设置方法和实验七类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，当传感器没有检测到物体或者检测到黑色物体时，val为1，串口监视器显示“Black”字符；检测到白色物体（能够反光）时，val为0，串口监视器显示“White”字符，如下图。

![](media/7b2f9672eb36c9a55ffc96c6ca8b2197.png)

### 实验十五 避障传感器检测障碍物

实验说明

在这个套件中，有一个keyes brick避障传感器，它主要采用一对红外线发射与接收管元件。原理就是发射管发射出一定频率的红外线，当检测方向遇到障碍物（反射面）时，红外线反射回来被接收管接收，此时指示灯亮起，经过电路处理后，信号输出接口输出数字信号。传感器上有两个电位器，一个用于调节发送功率，一个用于调节接收频率，通过调节2个电位器，我们可以调节它的有效距离。

实验中，我们通过读取传感器上S端高低电平，判断是否存在障碍物；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick避障传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/f4aea7caf8d6a01c0ae7645bbc753e4d.png)



设置方法和实验七类似，这里就不多做介绍了。

特别注意

烧录好测试代码，按照接线图连接好线，上电后，我们开始调节两个电位器调节感应距

离。

1.调节发射功率调节电位器，先将电位器顺时针到尽头，然后回调一些，使传感器上

D1 LED介于不亮与亮之间的零界点。

2.调节接收频率调节电位器，顺时针调节时，频率增大。调节使它产生38KHz频率的方波，调节时，也观察传感器上D1 LED，使它介于不亮与亮之间的零界点。

![](media/80faffea9d6131a5cc8c1809bb6608fb.png)

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，当传感器检测到障碍物时，val为0，串口监视器显示“There are obstacles”字符；没有检测到障碍物时，val为1，串口监视器显示“All going well”字符，如下图。

![](media/978a6f10d1fd13027f38a23335760097.png)

### 实验十六 魔术光杯传感器

实验说明

在这个套件中，有两个keyes brick魔术光杯传感器，它的原理是利用PWM调光的原理，两个传感器的亮度发生变化。滚珠开关提供数字信号，触发PWM的调节，通过程序的设计，我们就能看到类似于两组装满光的杯子倒来倒去的效果了。

实验中，我们通过读取传感器上S端高低电平，判断传感器的倾斜方向，然后控制传感器上LED的亮度变化（调节L端的PWM值）。

验器材

keyes brick魔术光杯传感器\*2

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线\*2

USB线*1

接线图

![](media/465d260525360f0d9205c72a13a76506.png)



1.  PWMA（）子程序，，模拟PWM口的PWM值，设置方波，设置高低电平延迟时间总共为1000微妙，即周期为1毫秒，频率是1000Hz。设置是PWM值就相当于设置方波时高电平的延迟时间（val1和val2）。

2.  delayMicroseconds(us)，延时函数，与delay（）不同的是，该函数参数us为微秒，代表延迟微秒数。

3.  设置程序逻辑如下表格

条件
数字口A2（buttonStateA）为高电平并且brightnessA不是1000

设置
brightnessA设置为brightnessA加1（最大1000）

条件
数字口A2（buttonStateA）为低电平并且brightnessA不是0

设置
brightnessA设置为brightnessA减1（最小0）

条件
数字口A4（buttonStateB）为高电平并且brightnesB不是0

设置
brightnessB设置为brightnessB减1（最小0）

条件
数字口A4（buttonStateB）为低电平并且brightnessB不是1000

设置
brightnessB设置为brightnessB加1（最大1000）

条件
brightnessA为0

设置
设置数字口A3为低电平

条件
brightnessA为1000

设置
设置数字口A3为高电平

条件
brightnessA大于0且小于1000

设置
利用数字口A3模拟PWM口，设置A3的PWM值为brightnessA

条件
brightnessB为0

设置
设置数字口A5为低电平

条件
brightnessB为1000

设置
设置数字口A5为高电平

条件
brightnessB大于0且小于1000

设置
利用数字口A5模拟PWM口，设置A5的PWM值为brightnessB

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。将两个魔术光杯传感器同时倾斜一边，
一个魔术光杯上的LED逐渐变暗，同时另一个逐渐变亮，最终一个LED完全熄灭，一个LED最亮；在串口监视器中看到对应具体数值变化，如下图。当倾斜另一边中，现象一样，方向相反。

![](media/7aa4f54d8cf36428ea73284f30115d6e.png)

### 实验十七 光折断计数

实验说明

这个套件中包含一个 keyes brick
光折断传感器，它主要采用1个ITR-9608光电开关。它属于对射遮断式光电开关光学开关传感器。当用纸片挡住传感器凹槽后，传感器信号端为高电平，自带D1 LED熄灭；否则传感器信号端为低电平，自带D1 LED亮起。

在这里，我们通过检测传感器信号端高低电平，通过代码设置，模拟出流水线上利用类似传感器，对产品进行计数。

实验器材

keyes brick光折断传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/1c2ce16736583aec632e9aa7d252027c.png)



通过以下表格，我们可以了解这个代码的逻辑设置。

初始设置

PushCounter设置为0（累计通过物体数目）

State设置为0（传感信号端数值）

lastState设置为0（传感器信号端上一循环数值）

当物体开始穿过传感器凹槽时（一瞬间）
State检测到变为1，lastState为0，两个数据不相等。
PushCounter设置为PushCounter加1

当物体穿过传感器凹槽过程中（循环）
State检测到变为1，lastState设置为1，两个数据相等。
PushCounter不变

当物体刚穿过传感器凹槽过程中（一瞬间）
State检测到变为0，lastState设置为1，两个数据不相等。
PushCounter不变

当物体完全穿过传感器凹槽后（循环）
State检测到变为0，lastState设置为0，两个数据相等。
PushCounter不变

测试结果

上传测试代码成功，按照接线图接好线，利用USB上电后，打开串口监视器，设置波特率为9600；串口监视器显示PushCounter数据，每个物体穿过传感器凹槽，PushCounter数据不断加1。

![](media/6b6990b48ddada9518519650e53d8518.png)

### 实验十八 旋转编码器模块计数

实验说明

在这个套件中，有一个keyes brick
旋转编码器模块，它主要采用20脉冲旋转编码器元件。它可通过旋转计数正方向和反方向转动过程中输出脉冲的次数，这种转动计数是没有限制的，复位到初始状态，即从0开始计数。如果我们只计算信号的脉冲，则可以使用两个输出中的任何一个来确定旋转位置。但是，如果我们想要确定旋转方向，我们需要同时考虑两个信号。

实验中，我们利用keyes brick
旋转编码器模块用于计数，当我们顺时针旋转编码器时，设置数据i加1；逆时针旋转编码器时，设置数据i减1；按下编码器中间按键时，设置数据i为0；将测试结果在串口监视器上显示。

实验器材

keyes brick 旋转编码器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

5P双头XH2.54连接线*1

USB线*1

接线图

![](media/a4b4f88828bbc8db4709cffbeb6439a4.png)



1.在实验中，我们需要把编码器的库![](media/c0fcf21ecb3168415f93641b9e6cebf8.png)导入到我们的IDE库文件夹中，不然编译不过。

2.  我们把CLK设置为2、DAT设置为3。该代码在库文件中设置好了，它的意思是中断2（CLK）下降后，读取数字口3（DAT）电压，当DAT电压为高电平时，旋转编码器的值加1；当DAT电压为低电平时，转编码器的值减1。

3.  然后循环程序中设置按钮管脚（D4）为低电平时，打印出来。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。顺时针旋转编码器，显示数据减小；逆时针旋转编码器，显示数据增加；按下编码器中间按键，显示数据为0，如下图。

![](media/cd1f796f6cb49b70307c73294059ece6.png)

### 实验十九 敲击模块传感器检测状态

实验说明

在这个套件中，有一个敲击模块传感器，它主要采用SW-2802振动开关元件。SW-2802振动开关元件是弹簧型震动感应触发开关。该振动开关在静止時为开路OFF状态，
当受到外力碰触而达到相应震动力时,或移动速度达到适当离(偏)心力时，导电接脚会产生瞬间导通呈瞬间ON状态;当外力消失時,开关恢复为开路OFF状态。该传感器就是利用元件这一特性，搭建电路将震动信号转换为高低电平变换信号。

实验中，我们利用敲击模块传感器检测敲击状态，将测试结果在串口监视器上显示。

实验器材

keyes brick 敲击模块传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/6bf5bce2d5358a53a71ea62e93f7fa47.png)



1.  在这一实验中，我们主要接触到的新知识是中断知识。keyes UNO     R3开发板的中断

    口是数字口2和数字口3，我们把信号端设置在数值口3了。

2.  pinMode(pin,     INPUT_PULLUP);这条代码的意思是配置管脚pin为输入上拉，之前我们说到配置为输入模式时，引脚的电平是悬浮状态，是不确定的，当我们设置为输入上拉模式时，电平处于确定的，高电平状态，除非我们改变它。

3.  attachInterrupt(digitalPinToInterrupt(pin), ISR,     mode)的第一个参数是中断号。通常使用digitalPinToInterrupt（pin）将实际的数字引脚转换为特定的中断号。例如连接到引脚3，则使用digitalPinToInterrupt（3）作为attachInterrupt（）的第一个参数。ISR为中断服务程序，是中断发生时调用的函数。Mode为出发中断模式，我们使用的UNO     R3开发板有四种触发中断模式：LOW：引脚为低电平时触发；CHANGE:引脚电平改变时触发；RISING：上升沿触发即电平由低变高时触发；FALLING：下降沿触发即电平由高变低时触发。这里我们使用了FALLING。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。当传感器敲击信号时，传感器监视器显示“Knock on!”字符；否则显示“All going well!”字符，如下图。

![](media/795210e15686285c81857f1ff7abd9dc.png)

### 实验二十 超声波测距

实验说明

在这个套件中，有一个HC-SR04超声波传感器，它可以检测前方是否存在障碍物，并且检测出传感器与障碍物的详细距离。它的原理和蝙蝠飞行的原理一样，就是超声波模块发送出一种频率很高，人体无法听到的超声波信号。这些超声波的信号若是碰到障碍物，就会立刻反射回来，在接收到返回的信息之后，通过判断发射信号和接收信号的时间差，计算出传感器和障碍物的距离。

实验中，我们利用传感器检测传感器和障碍物之间的距离，将测试结果在串口监视器上显示。

实验器材

keyes brick HC-SR04超声波传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P 双头XH2.54连接线*1

USB线*1

接线图

![](media/cda85e7143be403139dd54a45d329c44.png)



HC-SR04超声波传感器最大测试距离为3-4m，最小测试距离为2cm。设置代码当检测距离小于2cm或者大于等于400cm时，串口监视器显示-1。我们在电脑的串口监视器中显示除传感器和障碍物之间的距离。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。如果障碍物在测试范围外，串口监视器显示“-1”；否则，串口监视器显示超声波传感器和前方障碍物之间的距离，单位为cm，如下图。

![](media/fbab04a60de430c4e62e421edde07bd4.png)

### 实验二十一 红外接收

实验说明

这一实验中，我们了解下红外接收传感器的使用方法。红外接收传感器主要采用VS1838B红外接收传感器元件。该元件是集接收、放大、解调一体的器件，内部IC就已经完成了解调，输出的就是数字信号。它可接收标准38KHz调制的遥控器信号。

实验中，我们利用红外接收传感器接收外部红外发射设备发射的红外信号，并将接收信号在串口监视器上显示。

实验器材

keyes brick 红外接收传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

JMP-1 17键 红外遥控*1

接线图

![](media/3ccd5650cc3a27bca2012bb18f4a6a5c.png)



编译上传之前我们先导入库文件IRremote.h，导入方法请看前面库文件的添加方法。

下图是红外遥控的键值：

![](media/a958f197b17d1b147340419615e0e40c.png)

测试结果

按照接线图接线，上传测试代码成功，利用USB线上电后，打开串口监视器，里面就会显示红外接收传感器接收到的数据。

找到红外遥控器，拔出绝缘片，对准红外接收传感器的接收头按下按键。接收到信号后，红外接收传感器上的D1也开始闪烁，串口监视器显示如下图。

![](media/73b9f7a2688a099be6ab63efe99e322d.png)

### 实验二十二 DS18B20温度传感器测试温度

实验说明

在这个套件中，有一个keyes brick 18B20温度传感器，它主要采用DS18B20传感器元件。我们可以利用该传感器测试当前环境中的温度。它的测量范围为－55℃～＋125℃，测量精度为±0.5℃（-10℃至+85℃范围内）。

实验中，我们利用这个温度传感器测试当前环境中的温度，测试结果分为℃和℉两种；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick 18B20温度传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/547c083758ed478db261283011713101.png)



1\. 在实验中，我们需要先导入DS18B20的库文件。

2\. 我们把管脚设置为3，获取温度的单位分别设置为℃和℉。

3\. 设置两个小数变量，分别为val1和val2，将所测结果赋值给val1和val2。

4\.
串口监视器显示val1和val2的值，显示前需设置波特率（我们默认设置为9600，可更改）。

5\.
显示时，我们在数据后面添加单位，如果单位直接设置为℃和℉，测试结果会出现乱码。所以我们直接用C代替℃，F代替℉。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示当前环境的温度，如下图。

![](media/e408d22406cd985e2e76beb062de1f40.png)

### 实验二十三 DHT11温湿度传感器检测温湿度

实验说明

在这个套件中，有一个keyes brick DHT11温湿度传感器，它主要采用DHT11
温湿度传感器元件。它是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术，确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件，并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。

实验中，我们利用这个传感器测试当前环境中的温湿度，并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick DHT11温湿度传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/503e081e14d92c55a07ab083e4abae98.png)



1\. 在实验中，我们需要先导入DHT11的库文件。

2\. 我们把管脚设置为3，选择获取温度和获取湿度。

3\. 设置两个小数变量，分别为val1和val2，将所测结果赋值给val1和val2。

4\.
串口监视器显示val1和val2的值，显示前需设置波特率（我们默认设置为9600，可更改）。

5\.
显示时，我们在数据后面添加单位。如果温度单位直接设置为℃，测试结果可能出现乱码，所以我们直接用C代替℃；湿度单位直接设置为%。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示当前环境中的温湿度数据，如下图。

![](media/ec125f2cdbaff7e57ee55f38f54fb249.png)

### 实验二十四 可调电位器模块读取模拟值

实验说明

在这个套件中，有一个keyes brick 可调电位器模块，它主要采用一个10K
可调电阻。通过旋转电位器，我们可以改变电阻大小，然后搭建电路将电阻变化转换为电压变化。

实验中，我们利用这个模块测试对应的模拟值；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick 可调电位器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/429334cbe788a1b1af1bb809c511b0c4.png)



1.  在实验中，我们把管脚设置为A3。

2.  设置1个整数变量item，将所测结果赋值给item。

3.  串口监视器显示item的值，显示前需设置波特率（我们默认设置为9600，可更改）。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应模拟值。实验中，顺时针旋转电位器，模拟值增大，逆时针旋转电位器，模拟值减小，范围为0-1023，如下图。

![](media/dfc5fb00fa076142575cc08c30af52c8.png)

### 实验二十五 TEMT6000光线传感器

实验说明

在这个套件中，有一个keyes brick TEMT6000光线传感器，它主要采用TEMT6000X01元件。该元件是一个高灵敏可见光光敏（NPN型）三极管。传感器可以将捕获的微小光线变化并放大100倍左右，并且轻松的被微控制器识别，进行AD转换。它对可见光照度的反应特性与人眼的特性类似，可以模拟人对环境光线的强度的判断，从而方便做出与人友好互动的应用。

实验中，我们利用这个传感器测试当前环境中的光照强度对应的模拟值，光照越强，模拟值越大；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick TEMT6000光线传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/9d19e70900deccc2ccca93c6ae205228.png)



1.  设置方法和实验二十四类似，这里就不多做介绍了。

测试结果

烧录好测试代码，按照接线图连接好线，利用USB线上电后，打开软件串口监视器，设置波特率为9600，我们可以看到对应光照强度的模拟值，光照越强，模拟值越大，如下图。

![](media/117498ffecc4293e1ef45811389a8d82.png)

### 实验二十六 热敏电阻传感器简单测试

实验说明

在这个套件中，有一个热敏电阻传感器，它主要采用NTC-MF52AT热敏电阻元件。NTC-MF52AT热敏电阻元件能够时感知周边环境温度的变化，电阻大小随着温度的变化而变化。该传感器就是利用NTC-MF52AT热敏电阻元件这一特性，搭建电路将电阻变化转换为电压变化。

实验中，我们将传感器信号端接到keyes UNO R3开发板模拟口，读出对应的模拟值。我们可以利用模拟值，通过特定公式，计算出当前环境的温度。由于温度计算公式比较复杂，这里就不多介绍了。实验中，我们只是读取对应的模拟值。

实验器材

keyes brick 热敏电阻传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/876d1fd5a389d222f08d6a6fdce79e31.png)



设置方法和实验二十四类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应的模拟值，温度越高，模拟值越大。

![](media/2947cd0855a964d14f531d7c72f13b26.png)

### 实验二十七 麦克风声音传感器检测声音大小

实验说明

在这个套件中，有一个keyes brick
麦克风声音传感器，它主要采用一个高感度麦克风元件和LM386芯片。高感度麦克风元件用于检测外界的声音。利用LM386芯片搭建合适的电路，我们对高感度麦克风检测到的声音进行放大，最大倍数为200倍。使用时我们可以通过旋转传感器上电位器，调节声音的放大倍数。调节时，顺时针调节电位器到尽头，放大倍数最大。

实验中，我们利用这个传感器测试当前环境中的声音大小对应的模拟值，声音越大，模拟值越大；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick 麦克风声音传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/fc530619cb421e9471fefe33552ba1d0.png)



设置方法和实验二十四类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应模拟值。实验中，我们顺时针旋转电位器和对准MIC头大声说话，可以看到模拟值数据变大，如下图。

![](media/ae5065d3fcb9cd59fca2e5d6a977aac1.png)

### 实验二十八 MQ-2 烟雾传感器

实验说明

在这个套件中，有一个keyes brick MQ-2 烟雾传感器，它主要用到了MQ-2
可燃气体、烟雾传感器元件。该元件所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时，传感器的电导率随空气中可燃气体浓度的增加而增大。该传感器对液化气、丙烷、氢气的灵敏度高，对天然气和其它可燃蒸汽的检测也很理想。它可检测多种可燃性气体，是一款适合多种应用的低成本传感器。

使用时，A0端读取对应气体的模拟值；D0端连接一个LM393芯片（比较器），我们可以通过电位器调节测量气体报警临界点，在D0输出数字值。当测量气体含量超过临界点时，D0端输出低电平；测量气体含量没超过临界点时，D0端输出高电平。

实验中，我们读取传感器A0端模拟值，和D0端数字值，判断空气中测量气体的含量，以及它们是否超标。

实验器材

keyes brick MQ-2 烟雾传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P 双头XH2.54连接线*1

USB线*1

接线图

![](media/450fc4f965b4cbde7bc9edb64eb90fcb.png)



参考实验七，根据A2管脚高低电平，设置串口监视器输出不同字符。根据接线，读取模拟口A3的模拟值，并将测试结果只是串口监视器上显示。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，我们可以看到当测试的模拟值小于等于374时，气体含量没有超过临界点；当测试的模拟值大于等于522时，气体含量超过临界点；那么就代表气体含量临界点对于的模拟值在374-522之间，我们可以通过旋转传感器上电位器，调节临界点。

![](media/c1d1d86887857baedd2442d6da3febd3.png)

### 实验二十九 MQ-3 酒精传感器

实验说明

在这个套件中，有一个keyes brick MQ-3 酒精传感器，它主要用到了MQ-3
酒精、乙醇蒸汽传感器元件。该元件所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在酒精蒸汽时，传感器的电导率随空气
中酒精蒸汽浓度的增加而增大。

使用时，A0端读取对应酒精蒸汽的模拟值；D0端连接一个LM393芯片（比较器），我们可以通过电位器调节测量酒精蒸汽报警临界点，在D0输出数字值。当测量酒精蒸汽含量超过临界点时，D0端输出低电平；测量酒精蒸汽含量没超过临界点时，D0端输出高电平。

实验中，我们读取传感器A0端模拟值，和D0端数字值，判断空气中酒精蒸汽的含量，以及它们是否超标。

实验器材

keyes brick MQ-3 酒精传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/a96f7444c2eb61f17cb2a6276480c99b.png)



设置方法和实验二十八类似，这里就不多做介绍了。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数据和字符。实验中，我们可以看到当测试的模拟值小于等于73时，酒精蒸汽含量没有超过临界点；当测试的模拟值大于等于76时，酒精蒸汽含量超过临界点；那么就代表酒精蒸汽含量临界点对于的模拟值在73-76之间，我们可以通过旋转传感器上电位器，调节临界点。

![](media/356ab58dbc2139b71e5e56c427344bdc.png)

### 实验三十 摇杆模块传感器

实验说明

在这个套件中，有一个keyes brick 摇杆模块传感器，它主要采用PS2
手柄摇杆元件。控制时，我们需要将模块X Y端口连接单片机模拟口，B端口连接单片机数字口，VCC接单片机电源输出端（3.3-5V），GND接单片机GND。我们可以读取两个模拟值和一个数字口的高低电平情况，判断模块上摇杆的工作状态。

实验中，我们将读取两个模拟值和一个数字值，并在串口监视器上显示测试结果。

实验器材

keyes brick 摇杆模块传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

5P双头XH2.54连接线*1

USB线*1

接线图

![](media/8a317d0dc85062f8c3e912e763c6bbe4.png)



1.在实验中，根据接线，x管脚设置为A0，y管脚设置为A1，摇杆按钮管脚设置为7，串口监视器显示测试数据，显示前需设置波特率（我们默认设置为9600，可更改）。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应数值。摇动摇杆，x轴和y轴对应的模拟值发生改变，按下按钮，读取到的数字值为1，否则为0，如下图。

![](media/5d67b5cceb05d385e0478922cbe359cd.png)

### 实验三十一 手指测心跳模块

实验说明

在这个套件中，有一个手指测心跳模块，它主要由1个光敏接收器和1个红外发射器组成。红外发射器在手指的一面，光敏接收器在手指的另一面；光敏接收器用来获取发射的光通量；当血压脉动通过手指时，光敏接收器的电阻会用微小的变化。

使用时，我们提供该模块和arduino系列单片机搭配使用的方法。**测试时，特别需要注意，需要用黑布包裹模块和手指，确保在无光环境中测试，否则测试不准确。**

实验中，我们将测试得到是数据，复制到Excel上，并生成相应的图片。

实验器材

keyes brick 手指测心跳模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/c203c319dba335519413d39f064e71ae.png)



将管脚设置为A3，将所测数据用串口监视器打印出来。

测试结果

烧录好测试代码，按照接线图连接好线；利用USB接口上电后，进入串口监视器，设置波特率为9600。用，用手指按住光敏接收器，用黑布包裹模块和手指。串口监视器显示对应数据，如下图。

![](media/81fd4eba9fd35d71aac9b8e25d8ae6f8.png)

等待一会，将串口监视器数据复制到excel上，生成对应图片，如下图。

![](media/91614004fcd6a8553c9f23fe9d2d1690.png)

### 实验三十二 ADXL345加速度传感器

实验说明

在这个套件中，有一个keyes brick ADXL345加速度传感器，它采用ADXL345BCCZ芯片。ADXL345BCCZ是一款小而薄的低功耗3轴加速度计，分辨率高（13位），测量范围达±16g。它数字输出数据为16位二进制补码格式，可通过SPI（3线或4线）或I2C数字接口访问。该传感器非常适合移动设备应用。它可以在倾斜检测应用中测量静态重力加速度，还可以测量运动或冲击导致的动态加速度。其高分辨率(4mg/LSB)，能够测量不到1.0°的倾斜角度变化。

实验中，我们测试出传感器X Y Z轴的加速度数值；并且，我们在串口监视器上显示测试数据。

实验器材

keyes brick ADXL345加速度传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/8c5056a5ba6bdd5d4edc1c909432df0d.png)



设置3个小数变量X Y Z，将所测结果赋值给X Y Z。串口监视器显示X Y Z的值，显示前需设置波特率（我们默认设置为9600，可更改）。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示传感器对应的X Y Z的值，单位为g，如下图。

![](media/6f83b2a96237d2a94a007dca907c3d6e.png)

### 实验三十三 震动模块传感器

实验说明

这是一个常用的震动模块传感器。它具有无方向性特性，任何角度均可以触发工作，完全密封式封装可以防水、防尘，适用于小电流电路的触发。

传感器接上电源后，在静止时为开路（OFF）状态，信号端输出为高电平，传感器上LED变暗；当受到外力碰触而达到适当震动力时，或移动速度达到适当离（偏）心力时，导电接脚会发生瞬间导通（ON）状态，使电气特性改变，信号端输出为低电平，传感器上LED变亮；而当外力消失时电气特性恢复开路（OFF）状态。

传感器上兼容各种单片机控制板，如arduino系列单片机。使用时，我们可以在单片机上堆叠一个传感器扩展板。传感器上模块和自带导线连接，然后连接在传感器扩展板上，简单方便。同时，传感器自带2个直径为3mm的定位孔，方便你将传感器固定在其他设备。

实验中，我们通过读取传感器上S端高低电平，判断传感器是否震动；并且，我们在串口监视器上显示测试结果。

实验器材

keyes brick震动模块传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/cb11a357ab5633276187d9dc1075ebd6.png)



设置方法和实验十九类似，这里就不多做介绍了。

测试结果

烧录好测试代码，按照接线图连接好线，上电后，打开串口监视器，设置波特率为9600.当传感器每检测到一次震动时，串口监视器打印Vibrate，否则打印It's still。

![](media/e7662c628e7c7931cdf272aba1b019d3.png)

### 实验三十四 水滴水蒸气传感器

实验说明

这是一个常用的水滴水蒸气传感器。它的原理是通过电路板上裸露的印刷平行线检测水量的大小。水量越多，就会有更多的导线被联通，随着导电的接触面积增大，输出的电压就会逐步上升。除了可以检测水量的大小，它还可以检测空气中的水蒸气。

同时，传感器自带2个直径为3mm的定位孔，方便你将传感器固定在其他设备。

实验中，我们将传感器信号端(S端)输入到arduino系列单片机的模拟口，感知模拟值的变化，并在串口监视器上显示出对应的模拟值。

实验器材

keyes brick 水滴水蒸气传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/57df3438e45fa7a1671e1aa3e7927782.png)



设置方法和实验二十八类似，这里就不多做介绍了。

测试结果

烧录好测试代码，按照接线图连接好线；利用USB接口上电后，进入串口监视器，设置波特率为9600。当水蒸气传感器上检测到水分时，输出的模拟值在串口监视器显示出来，如下图。

![](media/672755475138946b5344b67444c7e0c1.png)

### 实验三十五 土壤传感器

实验说明

这是一个常用的土壤传感器。它可用于检测土壤中的水分。将它和其他单片机搭配使用，我们可以制作一款自动浇花装置。当您长时间不在家或过了浇水的时间，它可以感测到您的植物是否已经渴了。然后我再控制其他设备给您的植物浇水。

实验中，我们将传感器信号端(S端)输入到arduino系列单片机的模拟口，感知模拟值的变化，并在串口监视器上显示出对应的模拟值。

实验器材

keyes brick 土壤传感器*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P双头XH2.54连接线*1

USB线*1

接线图

![](media/9cca638d1c4892ded95666fd0400cbee.png)



设置方法和实验二十八类似，这里就不多做介绍了。

测试结果

烧录好测试代码，按照接线图连接好线，利用USB线上电后，打开软件串口监视器，设置波特率为9600，我们可以看到对应土壤湿度的模拟值，土壤湿度越高，模拟值越大，如下图。

![](media/891a6c71ce5bde13c63c0021fc2d3be0.png)

### 实验三十六 舵机控制

实验说明

舵机是一种位置伺服的驱动器，主要是由外壳、电路板、无核心马达、齿轮与位置检测

器所构成。舵机有很多规格，但所有的舵机都有外接三根线，分别用棕、红、橙三种颜

色进行区分，由于舵机品牌不同，颜色也会有所差异，棕色为接地线，红色为电源正极

线，橙色为信号线。

![](media/4b15604cd8a82aeb39497c7544b39f93.emf)

舵机的转动的角度是通过调节PWM（脉冲宽度调制）信号的占空比来实现的，标准PWM

（脉冲宽度调制）信号的周期固定为20ms（50Hz），理论上脉宽分布应在1ms到2ms

之间，但是，事实上脉宽可由0.5ms 到2.5ms 之间，脉宽和舵机的转角0°～180°相

对应。有一点值得注意的地方，由于舵机牌子不同，对于同一信号，不同牌子的舵机旋

转的角度也会有所不同。

![](media/c29c393165eaf0cba523e46d53d1b958.emf)

实验器材

keyes 伺服舵机*1

keyes UNO PLUS开发板*1

传感器扩展板*1

USB线*1

接线图

![](media/a733d129e9f21e07f6898eb800aa26a6.png)



代码1说明：

1.  map(value, fromLow, fromHigh, toLow,     toHigh)；value为我们要映射的值；fromLow,     fromHigh为当前值的下限和上限；toLow,     toHigh为我们要映射到的目标范围的下限和上限。比如我们在实验中map(myangle,     0, 180, 500,     2500)的意思就是我们传进来一个需要转动的角度值为myangle，然后这个值的范围是0度到180度，我们要映射的范围为500us到2500us，即把0到180转到了500到2500然后被返回了，返回的数据类型为整型，余数会被截断，不进行四舍五入或平均。

    2\.     之后我们调用我们定义的的函数servopulse（）就能让舵机转动了，代码中我们设置了让舵机从0度转动到90度再转动到180度，再转动到0度，中间暂停一秒，反复循环。

代码2说明：

1.  首先我们先添加舵机库，不然不能编译。

2.  这个库的方法.attach()方法是连接舵机引脚，我们连到9，10也可以，这里面用到了定时器，使用其他管脚可能会出现冲突。

3.  myservo.write(pos)为转动到pos角度值。myservo.read()是读取舵机当前角度值。

4.  其他设置请参照前面相关的代码说明。

测试结果

实验1 结果：

上传测试代码成功，利用USB线上电后，舵机由0度，90度，180度三个角度来回转动。

实验2 结果：

上传测试代码成功，利用USB线上电后，舵机由0~180度来回转动，并且每次转动一度。

### 实验三十七 3231时钟模块

实验说明

这个模块主要用到高精度时钟芯片DS3231。它是低成本、高精度I2C实时时钟(RTC)，具有集成的温补晶振(TCXO)和晶体。该器件包含电池输入端，断开主电源时仍可保持精确的计时。集成晶振提高了器件的长期精确度，并减少了生产线的元件数量。DS3231提供商用级和工业级温度范围，采用16引脚300mil的SO封装。

实验中，我们利用keyes brick
时钟模块获取系统时间，将测试结果在串口监视器上显示出来。

实验器材

keyes brick 3231时钟模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/111c42857c15d4e7f18b1d59873361f0.png)



在实验中，我们需要先导入这个时钟模块的库。Rtc.GetDateTime()为获取当前系统的时间和日期。细节请看代码注释。

测试结果

烧录好测试代码，按照接线图连接好线；利用USB接口上电后，进入串口监视器，设置波特率为57600。我们可在软件串口监视器中看到设置时间日期（年、月、日、时、分、秒、周），如下图。

![](media/40117499febcd924005f09fbc041d259.png)

### 实验三十八 TM1637 4位数码管模块

实验说明

这个模块主要由一个0.36英寸 红色共阳
4位数码管组成，它的驱动芯片是TM1637。使用时，我们只需要2根信号线即可使单片机控制4位8数码管，大大节约了控制板IO口资源。

实验中，我们利用四位数码管各显示出0~9，并加延迟为1秒。

实验器材

keyes brick TM1637 4位数码管模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/9a1a8b15a5dbac3fe50a5ac94b4ee054.png)



在实验中，我们先导入TM1637模块的库文件，细节请看代码注释。

测试结果

烧录好测试代码，按照接线图连接好线,上电后，4位数码管按分刷新时间。

### 实验三十九 8X8点阵模块

实验说明

当我们利用单片机驱动一个8\*8点阵时，我们总共需要用到16个数字口，这样就极大的浪费单片机资料。为此，我们特别设计了这个模块，利用HT16K33芯片驱动1个8\*8点阵，只需要利用单片机的I2C通信端口控制点阵，大大的节约了单片机资源。

模块兼容各种单片机控制板，如arduino系列单片机。使用时，我们可以在单片机上堆叠一个传感器扩展板。模块和自带导线连接，然后连接在传感器扩展板上，简单方便。模块上自带3个拨码开关，可以让你随意拨动开关，这I2C通信地址。设置方法如下表格。

A0（1）
A1（2）
A2（3）
A0（1）
A1（2）
A2（3）
A0（1）
A1（2）

A2（3）

0（OFF）
0（OFF）
0（OFF）
1（ON）
0（OFF）
0（OFF）
0（OFF）
1（ON）

0（OFF）

OX70

OX71

OX72

A0（1）
A1（2）
A2（3）
A0（1）
A1（2）
A2（3）
A0（1）
A1（2）

A2（3）

1（ON）
1（ON）
0（OFF）
0（OFF）
0（OFF）
1（ON）
1（ON）
0（OFF）

1（ON）

OX73

OX74

OX75

A0（1）
A1（2）
A2（3）
A0（1）
A1（2）
A2（3）

0（OFF）
1（ON）
1（ON）
1（ON）
1（ON）
1（ON）

OX76

OX77

同时，模块自带2个直径为3mm的定位孔，方便你将模块固定在其他设备。

实验中我们让点阵显示出图案。

实验器材

keyes brick 8\*8点阵模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/7034b45b583715391b91aac4b405006a.png)



1.  首先我们需要先导入库文件

2.  我们代码中的图案是一个字节数据类型的数组构成，我们在下面的表格上表示出来。

    我们将{0x00, 0x18, 0x3c, 0x7e, 0xff, 0xff, 0x66,     0x00}转化为二进制，填入下面的8\*8表格就清晰了。其中1表示亮，0表示灭，我们可以看到是一个心形。

0
0
0
0
0
0
0
0

0
0
0
1
1
0
0
0

0
0
1
1
1
1
0
0

0
1
1
1
1
1
1
0

1
1
1
1
1
1
1
1

1
1
1
1
1
1
1
1

0
1
1
0
0
1
1
0

0
0
0
0
0
0
0
0

测试结果

烧录好测试代码，按照接线图连接好线；上电后，点阵显示一个心形图案。

### 实验四十 IIC 1602 液晶屏

实验说明

这是一个可以显示2行，每行16个字符的液晶屏模块。液晶屏显示蓝底白字，自带I2C通信模块，使用时只需连接单片机I2C通信接口，大大节约了单片机资源。I2C通信模块上带有1个电位器，可用于调节显示屏背光，通信地址默认为0x27。

实验中我们让iic 1602显示屏显示出一些字符。

实验器材

keyes brick IIC 1602 蓝屏*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/3a473d8437c44e3641634e6976af1130.png)



1.  首先导入库文件

2.  mylcd.init()为初始化1602显示屏；mylcd.backlight()打开背光；mylcd.setCursor()设置光标位置；mylcd.print()显示字符；

测试结果

烧录好测试代码，按照接线图连接好线；上电后，显示屏两行分别显示" Hello World! "和" Hello Keyes! "字符。

### 实验四十一 IIC OLED模块

实验说明

oled是有机发光二极管，又称为有机点激光显示。OLED显示技术具有自发光特性，它采用非常薄的有机材料涂层和玻璃基板，当有电流通过时，这些有机材料就会发光。OLED显示屏可视角度大、功耗低。OLED同时具备自发光、不需背光源（只上电是不会亮的，驱动程序和接线正确才会亮）、对比度高、厚度薄、视角广、反应速度快、可用于挠曲面版、使用温度范围广、结构及制程简单等优异特性。

这个模块主要用到一个0.96寸 OLED
蓝屏，它是利用SSD1306驱动，利用I2C通信和单片机通信连接。模块自带4个定位孔，方便你将模块固定在其他设备。

实验中我们将让oled模块显示出一些字符。

实验器材

keyes brick IIC OLED模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

接线图

![](media/bbb57040caf7beb8a30d3102e9d07238.png)



1.  首先导入oled的库文件。

2.  我们可以使用该库函数进行设置想要显示的字符的字体型号、大小、位置、亮度、还可以显示图案，当然我们也能自己画线、圆、椭圆、矩形、三角形等等，具体查看代码注释。

测试结果

上传测试代码成功，按照接线图接好线，利用USB上电后，oled显示屏显示“Hello World”“Hello Keyes”和一个自带图像：

![](media/9bcf427884816ef4346cb3eefd86a87e.jpeg)

### 实验四十二 电机-水泵驱动模块

实验说明

在生活中，我们经常需要驱动一个风扇转动或者或者一个小水泵。为了方便接线，我们特别设计了130电机-DC3-5V浇花小水泵驱动模块。使用时，只需要将水泵或130电机两端连接在模块的2pin接口上，同时，模块的4pin接口用于连接对应单片机，用于控制电机或水泵状态。

模块兼容各种单片机控制板，如arduino系列单片机。模块上自带的防反插白色端子兼具为2.54mm，使用时，我们可以利用杜邦线连接到单片机。为方便接线，我们还特别设计了一款完全兼容这模块和Arduino UNO R3单片机的扩展板，我们只需要将扩展板堆叠到UNO R3单片机，利用1根3P
双头XH2.54插头线（防反）即可连接在扩展板上，简单方便。

实验中，我们让电机转动起来和小水泵抽水。

实验器材

keyes brick电机-水泵驱动模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

4P双头XH2.54连接线*1

USB线*1

DC3-5V浇花小水泵+100MM连接线*1

浇花水管 内径6MM 外径8MM 1米*1

130电机+100MM连接线*1

电机桨*1

接线图

电机接线图：

![](media/56f629aeec31a677d219ffce38aabd29.png)

水泵接线图：

![](media/be2ae701df2ee3824b99aeada65a3e08.png)



代码1说明：

将管脚设置为A2、A3，当A2输出为低电平，A3输出为高电平时，电机逆时针旋转；当A2输出为高电平，A3输出为低电平时，电机顺时针旋转；当两个管脚都设置为低电平时，电机停止转动。

代码2说明：

当A2输出为低电平，A3输出为高电平时，水泵工作（两个引脚的电平输出反过来也行，这个水泵没有正负极）；当A2、A3都输出低电平时水泵停止工作。

测试结果

烧录好测试130电机代码，按照接线图连接好线；上电后，风扇逆时针转动2秒；停止1秒；顺时针转动2秒；停止1秒；循环交替。

烧录好测试小水泵代码，按照接线图连接好线；将小水泵放入水中，上电后，水泵抽水3秒停止1秒，循环交替。

## 模块组合实验课程

前面课程中，我们单独测试了传感器/模块的功能，功能比较单一。在此，我们可以将多个传感器/模块搭配使用，组合出各种各样的功能。传感器/模块种类比较多，我们只是选择几款比较经典的组合实验。你们也可以根据自己的想法，自己设置代码，组合出你想要的特别的功能。

### 实验一 电位器调节灯光亮度

实验说明

在前面课程中，我们学习了利用代码调节LED模块上LED亮度的方法。学习利用可调电位器读取模拟值的方法。两个组合，我们利用可调电位器读取到的模拟值控制LED的亮度。设计代码时，模拟值的范围是0-1023；LED的亮度是由PWM值控制，范围为0-255。在这里，我们就需要用到映射功能，将0-1023数值映射到0-255。

设置成功后，我们就可以通过旋转电位器，控制模块上LED的亮度。

实验器材

keyes brick LED模块*1

keyes brick 可调电位器模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线\*2

USB线*1

接线图

![](media/bd9a6b4e5cc8f2c27115e5b6be87321a.png)



设置变量，控制设置，以及串口通信，我们都在前面课程中介绍了。实验中映射功能

将val1从范围0-1023映射到0-255，并赋值给val2，这里可参照前面实验二十。

测试结果

上传测试代码成功，上电后，旋转模块上电位器，就可以调节LED模块上的LED的亮度。

![](media/baf34763717b97cbfb4cd0529f804fd5.png)

### 实验二 模拟户外灯

实验说明

在生活中我们可以看到户外有很多公共灯光。这些灯白天不亮，一到晚上，阳光暗下的时候，自动亮起；当阳光变亮时，这些灯就自动关闭。难道是有人在手动控制这些灯光？实际上不是的，实际上这些灯光上都安装有光敏传感器，这些传感器将外界阳光的亮暗，转换成对应数值。然后设置一个临界点，当超过临界点时，控制灯光熄灭，没有超过时，控制灯光亮起。

在这个实验中，我们利用套件中自带的光线传感器和LED模块模拟这一现象。

实验器材

keyes brick TEMT6000光线传感器*1

keyes brick LED模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线\*2

USB线*1

接线图

![](media/a85801c30986d4bc10be7e99dad46fc6.png)



在实验中，我们设置了当模拟值低于150时LED亮起，否则熄灭。

测试结果

上传测试代码成功，利用USB线上电后，打开串口监视器，设置波特率为9600。串口监视器显示对应模拟值。实验中，我们把光线传感器用手握住，数据变小，小于150时，LED模块上LED亮起，否则熄灭。

![](media/ee2783a44d00cbc26988375310f3a769.png)

### 实验三 旋转编码器模块控制RGB模块

实验说明

在前面课程的实验二十中，我们利用旋转编码器计数。在这里我们将它扩展下，通过得出的计数，我们用来控制RGB模块上LED显示不同颜色。

设计代码时，我们需要对所得数据取绝对值。然后我们将数据除以3，得到余数，余数为0控制双色LED模块上LED亮红光，余数为1，双色LED模块上LED亮绿光，余数为2，双色LED模块上LED亮蓝光。

实验器材

keyes brick 旋转编码器模块*1

keyes UNO PLUS开发板*1

keyes brick 插件RGB模块*1

传感器扩展板*1

5P双头XH2.54连接线*1

4P 双头XH2.54连接线*1

USB线*1

接线图

![](media/8410c63eeeaba3586cbcc303df43fc00.png)



在实验中我们将val设置为item除以3的余数，item是编码器的值。得到余数后根据接线设置管脚为9（红灯）、10（绿灯）和11（蓝灯）。参考前面实验学习的控制方法，利用余数控制模块上LED显示对应灯光颜色。

测试结果

上传测试代码成功，按照接线图接好线，上电后，打开串口监视器，设置波特率为9600。旋转编码器，串口监视器显示对应余数。即可控制外接的RGB模块上的LED的颜色（红绿蓝）。

![](media/52a1a6edeb0c5d1549539ffb5721bdcc.png)

### 实验四 按键控制RGB灯

实验说明

在前面课程中，我们利用旋转编码器计数然后控制RGB模块。在这一课程中，我们做一个扩展，我们利用代码，计算出按下模块上按键的次数。设置计数代码时，我们可以参考第四章实验十七的计数代码。然后我们将所得数据除以三，所得余数为0 1 2三种。然后通过不同的余数，控制RGB模块上LED显示不同的颜色。

这样，我们就可以通过不断的按下按键，任意调节RGB模块上LED显示不同颜色了（三种颜色）。

实验器材

keyes brick 插件RGB模块*1

keyes UNO PLUS开发板*1

keyes brick 按键传感器*1

传感器扩展板*1

4P双头XH2.54连接线*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/83cb6d8bb807c9c7315c045e4fbbb0be.png)



通过以下表格，我们可以了解这个代码的逻辑设置。

初始设置

PushCounter设置为0（累计通过物体数目）

PushCounter1设置为0（累计通过物体数目除以3的余数）

State设置为1（传感信号端数值）

lastState设置为1（传感器信号端上一循环数值）

按键按下（一瞬间）
State检测到变为0，lastState为1，两个数据不相等。
PushCounter设置为PushCounter加1
PushCounter1加1或变为0

长按按键（循环）
State检测到变为0，lastState设置为0，两个数据相等。
PushCounter不变
PushCounte1不变

松开按键（一瞬间）
State检测到变为1，lastState设置为0，两个数据不相等。
PushCounter不变
PushCounte1不变

按键松开（循环）
State检测到变为1，lastState设置为1，两个数据相等。
PushCounter不变
PushCounte1不变

PushCounte1为0

设置RGB模块上LED显示红色

PushCounte1为1

设置RGB模块上LED显示绿色

PushCounte1为2

设置RGB模块上LED显示蓝色

测试结果

上传测试代码成功，按照接线图接好线，利用USB上电后，打开串口监视器，设置波特率为9600；串口监视器显示PushCounte1数据，不断按下按键，PushCounte1数据在0 1
2中变化。当PushCounte1为0时，RGB模块上LED显示红色；当PushCounte1为1时，RGB模块上LED显示绿色；当PushCounte1为2时，RGB模块上LED显示蓝色。

![](media/8c90dad6bdf6817f2af1f73b4fd31116.png)

### 实验五 温度控制RGB灯

实验说明

在前面实验中，我们利用按键手动控制RGB模块上LED灯的颜色。在这一课程中，我们利用一个热敏电阻传感器检测当前环境的温度。然后利用检测到的温度数据控制RGB模块上LED灯的颜色。

生活中，我们可以把这个电路设计应用到环境中。我们利用温度传感器检测到环境温度，控制LED的颜色。这样我们就可以通过LED颜色，判断周围环境大概温度。

实验器材

keyes brick 插件RGB模块*1

keyes UNO PLUS开发板*1

keyes brick 热敏电阻传感器*1

传感器扩展板*1

4P双头XH2.54连接线*1

3P 双头XH2.54连接线*1

USB线*1

接线图

![](media/add0b0e6ace8fb2571f1d7ccd0caa8b8.png)



1.  实验中，检测并显示温度的方法和上一课中实验二十六一样。

    2\.     检测到温度数据后通过设置if判断控制RGB模块上的LED颜色，设置方法参考上一课中实验七知识点。

测试结果

上传测试代码成功，按照接线图接好线，利用USB上电后，打开串口监视器，设置波特率为9600；串口监视器显示当前环境中温度数值。当模拟值小于400时，RGB模块上的LED显示蓝色；当模拟值大于400且小于等于600时，RGB模块上的LED显示绿色；当模拟值大于600时，RGB模块上的LED显示红色。

![](media/31484180099087f2e2585b1317b01af3.png)

### 实验六 障碍物报警实验

实验说明

在上一课实验十五中，我们利用避障传感器检测前方障碍物，结果在串口监视器显示。在这一实验中，我们利用检测结果控制一个有源蜂鸣器响起。

生活中，我们可以利用一个检测传感器控制一个有源蜂鸣器响起，做报警设备，如检测磁场（霍尔传感器）、检测倾斜（倾斜模块）等等。

实验器材

keyes brick 避障传感器*1

keyes UNO PLUS开发板*1

keyes brick 有源蜂鸣器模块*1

传感器扩展板*1

3P 双头XH2.54连接线\*2

USB线*1

接线图

![](media/499b30041131be58dda48354d60b7f80.png)



实验中代码设置和上一课中实验七类似，只是将控制串口监视器显示换成了控制有源蜂鸣器的响起。

测试结果

上传测试代码成功，按照接线图接好线，上电后，检测到障碍物时，外接的有源蜂鸣器响起声音，否则有源蜂鸣器停止响起声音。

### 实验七 超声波雷达

实验说明

在前面一章节中，实验三，我们学会了控制RGB模块发出彩色光；实验六，我们学会了利用无源蜂鸣器模块，调节响起声音的频率；实验二十，我们学会了利用超声波传感器检测前方障碍物的距离。我们可以将三个实验结合在一起。设置时，我们通过超声波传感器测试出障碍物距离。然后，我们利用距离大小控制无源蜂鸣器上模块上蜂鸣器响起对应频率的声音和RGB亮起对应颜色。搭建好电路后，我们可以人为控制超声波前方障碍物，控制检测距离，从而达到控制声音响起频率、LED灯颜色来模拟雷达效果。

实验器材

keyes brick HC-SR04超声波传感器*1

keyes brick 无源蜂鸣器模块*1

keyes brick 插件RGB模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线*1

4P 双头XH2.54连接线\*2

USB线*1

接线图

![](media/65cb9ae4b26cfa8dc46915767f9bccd6.png)



1.  设置时，我们通过调节不同距离范围，设置声音频率和灯光颜色。

2.  为方便控制障碍物距离，我们可以在上面代码中，根据实际情况，在控制逻辑里调节距离范围。

测试结果

上传测试代码成功，按照接线图接好线，上电后，打开串口监视器，设置波特率为9600.检测到障碍物不同距离时，外接无源蜂鸣器模块上蜂鸣器响起不同频率的声音RGB亮起不同的颜色。

![](media/11535f4b4888189062165bfda35f860b.png)

### 实验八 酒精检测仪

实验说明

在前面一章节中，实验五，我们学会了利用有源蜂鸣器模块，调节响起声音的频率；实验二十九，我们学会了利用MQ-3
酒精传感器检测酒精浓度，实验四十，我们学会了控制1602显示屏；。我们可以将三个实验结合在一起。设置时，我们通过酒精传感器测试出酒精浓度。然后，我们利用浓度大小控制有源蜂鸣器报警和1602显示屏显示浓度。从而达到酒精检测仪的模拟效果。

实验器材

keyes brick 有源蜂鸣器模块*1

keyes UNO PLUS开发板*1

keyes brick MQ-3 酒精传感器*1

传感器扩展板*1

IIC 1602 蓝屏*1

3P双头XH2.54连接线*1

4P 双头XH2.54连接线\*2

USB线*1

接线图

![](media/72a11933dab74b8a4e78f859eef30db9.png)



1.  实验中，在1602显示还有检测酒精浓度都跟前面讲的原理是一样的。

2.  主要讲一下这里为什么要分开显示，如果不分开显示出来值的话，最后面那位值就会保留原来的数值，不会被刷新。比如开始显示的值是100，当模拟值降到95的时候，后面的“0”还在，就会显示成“950”。

测试结果

上传测试代码成功，按照接线图接好线，上电后，检测到不同酒精浓度时，外接有源蜂鸣器模块上蜂鸣器报警，1602显示屏上第一行显示“Alcoho：”，第二行显示浓度值。

### 实验九 智能浇花系统

实验说明

生活中，可能由于我们不在家时间过长，可能导致我们家中的花草枯萎。所以我们常常想，要是能做成一个自动的智能的浇花装置就好了。

在前面我们学会使用土壤传感器和水泵模块，所以我们可以把它们结合起来做成一个智能浇花系统。当检测到土壤湿度低于某一个值时的时候，水泵开启，给花浇水直到高于所设定的阈值。这样就实现了智能浇花。

实验器材

keyes brick 土壤传感器*1

keyes UNO PLUS开发板*1

keyes brick 电机-水泵驱动模块*1

传感器扩展板*1

3P双头XH2.54连接线*1

4P 双头XH2.54连接线*1

USB线*1

DC3-5V浇花小水泵+100MM连接线*1

浇花水管 内径6MM 外径8MM 1米*1

接线图

![](media/944b52bb2cdd31cbf8c73ebddec7a18d.png)



在代买中我们设置了阈值为200，当土壤湿度低于这个阈值，水泵将自动浇水；水泵的驱动请参照前面实验四十二。

测试结果

上传测试代码成功，按照接线图接好线，上电后，打开串口监视器，设置波特率为9600.串口监视器上打印土壤湿度值，当这个值低于200时水泵抽水，否则关闭。这个值根据实际情况去设置就行。

![](media/2c312476857937a23bd82fa53217b164.png)

### 实验十 散热装置

实验说明

生活中，我们的电脑或者电路板芯片等等经常会由于工作时间或者功耗问题而发热严重，所以我们常常需要一个散热装置。

在前面我们学会使用温度传感器和电机模块，所以我们这节实验可以把它们结合起来做成一个智能散热装置。当检测到环境温度高于某一个值时的时候，电机开启，从而降低环境温度，达到散热效果。

实验器材

keyes brick 热敏电阻传感器*1

keyes UNO PLUS开发板*1

keyes brick 电机-水泵驱动模块*1

传感器扩展板*1

3P双头XH2.54连接线*1

4P 双头XH2.54连接线*1

USB线*1

130电机+100MM连接线*1

电机桨*1

接线图

![](media/3b9d7a7a33f9f2bc67e04070d0440d77.png)



这里代码设置跟上个实验相似，原理可参照上个实验，热敏电阻的使用与电机的驱动请参照前面实验。

测试结果

烧录好测试代码，按照接线图连接好线，利用USB线上电后，打开软件串口监视器，设置波特率为9600，我们可以看到对应温度的模拟值，温度度越高，模拟值越大，如下图。当这个值超过我们设定的值时，电机转动。

![](media/e3a1fc915fde7d6744639d743aa6b4cb.png)

### 实验十一 综合实验

实验说明

在前面我们做了很多实验，每做一个实验，我们都需要重新上传一次代码。那我们可以把多个实验组合在一起吗？可以的，在这一实验中，我们将第四章节中的实验三、实验二十、实验二十一、实验二十三、实验二十五、实验三十、实验三十二和本章节中的实验一，组合在一起。设置时，我们参考本章节实验四的方法，利用外接按键模块。每按一次按键，功能变换一次，实验功能循环交替。

实验器材

keyes brick LED白发白模块*1

keyes brick 按键传感器*1

keyes brick DHT11温湿度传感器*1

keyes brick ADXL345加速度传感器*1

keyes brick 红外接收传感器*1

keyes brick 摇杆模块传感器*1

keyes brick HC-SR04超声波传感器*1

keyes brick TEMT6000光线传感器*1

keyes brick 可调电位器模块*1

keyes brick 插件RGB模块*1

keyes UNO PLUS开发板*1

传感器扩展板*1

3P 双头XH2.54连接线\*6

4P 双头XH2.54连接线\*3

5P 双头XH2.54连接线*1

JMP-1 17键 红外遥控*1

USB线*1

接线图

![](media/0c411eac32de7f27164bddf7489cbb76.png)



1.  设置时，我们参考本章节实验四方法。计算出按下按键的次数，除以8，得到余数，为0     1 2 3 4 5 6 7，根据不同的余数，控制实验实现不同功能。

2.  实验中，我们对应功能，都利用了子程序设置。子程序设置方法，可以参考前面章节实验。

3.  参照介绍方法，我们可以在接线中添加或减少传感器/模块，然后在代码中更改实验功能。

测试结果

上传测试代码成功，按照接线图接好线，利用USB上电。

刚开始时，按键次数为0，余数为0，RGB模块上LED循环闪烁红绿蓝三种颜色。点击打卡串口监视器，设置波特率为9600，按一下按键（时间长些），按键次数为1，余数为1，RGB模块上LED显示蓝色，实验实现的功能是红外接收模块红外发射信息。如果我们利用红外遥控对准接收模块接收头，按下按键，红外接收头接收到信息，串口监视器显示如下。

![](media/72f24dffb8d8da1f13f90524c9e27a11.png)

特别注意：如果先按下按键，按键次数变为1，再打开串口监视器时，程序会复位，按键成次数会变为0，需要再按下按键重新设置按键次数。

再按一下按键，按键次数为2，余数为2，实验实现的功能是利用DHT11温湿度传感器读取环境中的温湿度数值，每0.1秒读取一次，串口监视器显示数据如下图。

![](media/c1af74f77b7f1ef11d97093f561afbea.png)

再按一下按键，按键次数为3，余数为3，实验实现的功能是读取摇杆模块传感器X轴和Y轴对应的模拟值，B（Z轴）接口对应的数字值，串口监视器显示如下图。

![](media/c8b3b94ae5ecf4a353cceafcf7790b25.png)

再按一下按键，按键次数为4，余数为4，实验实现的功能是利用ADXL345加速度传感器测试X Y Z 3轴加速度数值，单位为g，串口监视器显示如下图。

![](media/daabb7026507d05e9a370499287e6d5e.png)

再按一下按键，按键次数为5，余数为5，实验实现的功能是利用外接可调电位器模块调节D5接口的PWM值，从而调节外接的LED白发白模块上LED的亮度。串口监视器显示图下图。

![](media/d9e140f62948257dcd4ecceaad72a4bb.png)

再按一下按键，按键次数为6，余数为6，实验实现的功能是利用外接TEMT6000光线传感器输出模拟值，串口监视器显示图下图。

![](media/7fdd5bb28bd59bb43554a2f22fdf8346.png)

再按一下按键，按键次数为7，余数为7，实验实现的功能是利用超声波模块检测距离并在串口打印出来，串口监视器显示图下图。

![](media/410c92316204ac9464eb677cd9d178b4.png)

再按一下按键，按键次数为8，余数为0，实现初始时的现象。不断按下按键，余数循环变化，实验功能也循环变化。
