Arduino
Arduino
Mr. Theo
-
+
首页
Arduino
## 3.8 Arduino课程 ### 项目一 Hello World 1.1 项目介绍 对于ESP32的初学者,先从一些简单的开始学习吧!在这个项目中,你只需要一个ESP32主板,USB线和计算机就可以完成“Hello World!”项目。它不仅是ESP32主板和计算机的通信测试,也是ESP32的初级项目。这也是一个入门实验,让你进入计算机的编程世界。 1.2 实验组件 | <br> | <br> | | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | USB线 x1 | 1.3 实验接线图  1.4 实验代码 ```c++ /* * 名称 : Hello World * 功能 : 输入字母R,串口显示“Hello World”。 */ char val; // 定义变量val void setup() { Serial.begin(115200); // 设置波特率为115200 } void loop() { if (Serial.available() > 0) { val=Serial.read(); // 读取赋值给"val"的值 if(val=='R') // 检查输入的字母“R” { // if so, Serial.println("Hello World!"); //显示“Hello World !” } } } ``` 1.5 代码说明 | 代码 | 说明 | | ---------------------- | ------------------------------------------------------------------------------- | | `char val` | 定义一个变量val | | `Serial.begin(115200)` | 设置波特率为115200 | | `Serial.available( )` | 获取串口上可读取的数据的字节数,该数据已经到达并存储在接收缓存(共有64字节)中。Serial.available() > 0表示串口接收到了数据,可以读取。 | | `Serial.read( )` | 读取写入的串行数据。 | | `if( ){ }` | 如果“( )”里的条件满足,则执行“{ }”里的程序。 | | `Serial.println( )` | 换行输出数据。从串行端口输出数据,跟随一个回车和一个换行符。 | 1.6 实验结果 代码上传成功后,单击串口监视器图标进入串口监视器,设置波特率为**115200**,接着在文本框输入字母“**R**”。  按下键盘上的回车键,在串口监视器上打印“**Hello World!**”。  ___ ### 项目二 LED 1.1 项目介绍 LED,即发光二极管的简称。由含镓(Ga)、砷(As)、磷(P)、氮(N)等的化合物制成。当电子与空穴复合时能辐射出可见光,因而可以用来制成发光二极管。在电路及仪器中作为指示灯,或者组成文字或数字显示。砷化镓二极管发红光,磷化镓二极管发绿光,碳化硅二极管发黄光,氮化镓二极管发蓝光。因化学性质又分有机发光二极管OLED和无机发光二极管LED。 为了实验的方便,我们将紫色LED发光二极管做成了一个紫色LED模块。它的控制方法非常简单,只要让LED两端有一定的电压就可以点亮LED。在这个项目中,我们用一个最基本的测试代码来控制LED,亮一秒钟,灭一秒钟,来实现闪烁的效果。你可以改变代码中LED灯亮灭的时间,实现不同的闪烁效果。我们通过编程控制信号端S的高低电平,从而控制LED的亮灭。LED模块信号端S为高电平时LED亮起,S为低电平时LED熄灭。 1.2 模块参数 工作电压:DC 3.3-5V 控制信号:数字信号 尺寸:32 x 23.5 x 12 mm 定位孔大小:直径为 4.8 mm 接口:间距为2.54 mm 3pin防反接口 1.3 模块原理图  这是一个常用的LED模块,它采用F5-白发紫LED(外观白色,显示紫光)元件。同时,模块上自带一个间距为 2.54mm 的 3pin 防反插红色端子。控制时,模块上GND VCC供电后,信号端S为高电平时,模块上LED亮起。 模块兼容各种单片机控制板,如arduino系列单片机。 1.4 实验组件 |  |  |  |  | | -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 紫色LED模块 x1 | XH2.54-3P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 ```c++ /* * 名称 : Blink * 功能 : led 闪烁 1s */ int ledPin = 5; //定义LED引脚连接到GPIO5 void setup() { pinMode(ledPin, OUTPUT); //设置输出模式 } void loop() { digitalWrite(ledPin, HIGH); //输出高电平,打开led delay(1000);//延时 1000 ms digitalWrite(ledPin, LOW); //输出低电平,关闭led delay(1000);//延时 1000 ms } ``` 1.7 代码说明 | 代码 | 说明 | | ----------------------------- | ----------------------------------------- | | `pinMode(ledPin, OUTPUT);` | 设置引脚的模式。OUTPUT为输出模式;INPUT为输入模式。 | | `digitalWrite(ledPin, HIGH);` | 设置引脚的输出电压为高电平,LOW为低电平。 | | `delay(1000)` | 将程序的执行暂停1000毫秒,也就是延时,使LED灯保持亮或灭的状态1000毫秒。 | 1.8 实验结果 代码上传成功后,你会看到模块上的紫色LED一亮一灭,循环闪烁。   ### 项目三 交通灯模块 1.1 项目介绍 交通灯,也就是马路上十字路口的红绿灯,在我们的日常生活中很常见。交通灯是由红、黄、绿三种颜色组成的,根据一定的时间规律循环交替亮起或熄灭。每个人都应该遵守交通规则,这可以避免许多交通事故。 想学习交通灯的原理吗?我们可以用红、黄、绿3个LED外接电路来模拟马路上的交通灯。因此我们特别设计了这款交通灯模块,模块上的红、黄、绿3个LED灯模拟交通灯。 1.2 模块参数 工作电压 : DC 5V 电流 :100 mA 最大功率 :0.5 W 工作温度 :-10°C ~ +50°C 输入信号 : 数字信号 尺寸 :47.6 x 23.8 x 11.8 mm 定位孔大小:直径为 4.8 mm 接口 :间距为2.54 mm 5pin防反接口 1.3 模块原理图  上一课我们学习了如何控制一个LED,由原理图可以得知,控制这个模块就好比分别控制3个独立的LED灯(我们这个灯可直接由单片机IO口驱动),给对应颜色灯高电平就亮起对应的颜色。比如,我们给信号“R”输出高电平,也就是3.3V,则红色LED点亮。 1.4 实验组件 | <br> |  |  |  | | ------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 交通灯模块 x1 | XH2.54-5P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 ```c++ /* * 名称 : Traffic_Light * 功能 : 模拟交通灯 */ int redPin = 5; // 红色LED连接GPIO5 int yellowPin = 13; // 黄色LED连接到GPIO13 int greenPin = 12; // 绿色LED连接GPIO12 void setup() { //LED接口设置为输出模式 pinMode(greenPin, OUTPUT); pinMode(yellowPin, OUTPUT); pinMode(redPin, OUTPUT); } void loop() { digitalWrite(greenPin, HIGH); //点亮绿色LED delay(5000); //亮5秒 digitalWrite(greenPin, LOW); //关闭绿色LED for (int i = 0; i < 3; i++) //循环三次 { digitalWrite(yellowPin, HIGH); //点亮黄色LED delay(500); //亮0.5秒 digitalWrite(yellowPin, LOW); //熄灭黄色LED delay(500); //灭0.5秒 } digitalWrite(redPin, HIGH); //点亮红色LED delay(5000); //亮5秒 digitalWrite(redPin, LOW); //关闭红色LED } ``` 1.7 代码说明 ```c++ for (int i = 0; i < 3; i++) { //循环三次 digitalWrite(yellowPin, HIGH); //点亮黄色LED delay(500); //亮0.5秒 digitalWrite(yellowPin, LOW); //熄灭黄色LED delay(500); //灭0.5秒 } ``` 这段代码的作用是让 **黄色LED灯闪烁3次**,每次亮0.5秒,灭0.5秒。 **逐行分析:** 1. `for (int i = 0; i < 3; i++)` - 这是一个 `for` 循环,会执行 **3次**(`i` 从 `1` 开始,每次 `+1`,直到 `i < 3` 不成立)。 2. `digitalWrite(yellowPin, HIGH);` - 让 `yellowPin` 引脚输出 **高电平(HIGH)**,点亮黄色LED。 3. `delay(500);` - 程序暂停 **500毫秒(0.5秒)**,保持LED亮。 4. `digitalWrite(yellowPin, LOW);` - 让 `yellowPin` 引脚输出 **低电平(LOW)**,关闭LED。 5. `delay(500);` - 再暂停 **0.5秒**,保持LED灭。 6. `}` - 循环结束,回到 `for` 开头,检查是否继续执行。 `for` 循环的原理和作用 **基本结构:** ```c++ for (初始化; 条件; 更新) { // 循环执行的代码 } ``` **执行流程:** 1. **初始化** `i = 0` 2. **检查条件** `i < 3`(成立)→ 执行循环体 3. **执行完循环体** → **更新** `i++`(`i` 变为 `1`) 4. 重复步骤 2~3,直到 `i = 3` 时条件不成立 → 退出循环 1.8 实验结果 代码上传成功后,你会看到模块上绿色LED亮5秒然后熄灭,黄色LED闪烁3秒然后熄灭,红色LED亮5秒然后熄灭。模块按此顺序循环亮灭。  ### 项目四 激光头传感器模块发出激光 1.1 项目介绍 在这个套件中,有一个Keyes 激光头传感器,激光与常见的光不同。一方面,激光的单色性好。另一方面,激光发射器内部特定的结构,使得激光能够被聚集成单束光,朝着同一方向射出,亮度高,方向性好。 正是由于这些特性,激光被广泛用于对特定材料进行切割、焊接、表面处理等等。激光的能量非常高,玩具激光笔照射人眼可能导致眩光,长时间可能导致视网膜损害,我国也禁止用激光照射航行的飞机。因此,**请注意不要用激光发射器对准人眼。** 1.2 模块参数 工作电压 :DC 5V 工作温度 :-10°C ~ +50°C 输入信号 :数字信号 尺寸 :32 x 23.8 x 10 mm 定位孔大小 :直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  激光头传感器主要由激光头组成,激光头由发光管芯、聚光透镜、铜可调套筒三部分组成。 从激光模块的电路原理图我们可以知道,它是用三极管驱动的。激光头的 1 脚始终上拉到VCC,在信号端 S 处输入一个高电平数字信号,NPN三极管Q1导通,激光头的 2 脚被下拉到GND,此时传感器开始工作。在信号端 S 处输入低电平时NPN三极管Q1不导通,传感器停止工作。 1.4 实验组件 |  |  |  |  | | -------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 激光模块 x1 | XH2.54-3P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 ```c++ /* * 名称 : Laser sensor * 功能 : 激光灯闪光 */ int laserPin = 5; //定义激光引脚为GPIO5 void setup() { pinMode(laserPin, OUTPUT); //将激光引脚定义为输出模式 } void loop() { digitalWrite(laserPin, HIGH); //打开激光 delay(2000); //延迟2秒 digitalWrite(laserPin, LOW); //关闭激光 delay(2000); //延迟2秒 } ``` 1.7 代码说明 此课程代码与第二课代码类似,这里就不多做介绍了。 1.8 实验结果 代码上传成功后,能看到模块上激光管发射红色激光信号2秒,然后关闭发射2秒,循环交替。  ### 项目五 呼吸灯 1.1 项目介绍 在第二课我们学习了如何让LED闪烁。但是LED的玩法远不仅如此。在日常生活中你有没有遇到过灯光慢慢变亮或者慢慢变暗呢?这叫呼吸灯。所谓呼吸灯,就是控制LED逐渐变亮,然后逐渐变暗,循环交替。上一课我们学会了直接用高电平点亮LED,低电平熄灭LED。如果要让LED不那么亮但又不完全熄灭,介于中间状态,只需控制流过LED的电流就可以实现。电流减小LED变暗,电流增大LED变亮。所以只需要调节LED两端的电压减小或增大(电流也会随之减小或增大)就能控制LED的亮暗程度了。 数字端口电压输出只有LOW与HIGH两个开关,对应的就是0V与3.3V(或5V)的电压输出。可以把LOW定义为0,HIGH定义为1,1秒内让单片机输出500个0或者1的信号。如果这500个信号全部为1,那就是完整的3.3V;如果全部为0,那就是0V。如果010101010101这样输出,刚好一半,端口输出的平均电压就为1.65V了。这和放映电影是一个道理。我们所看的电影并不是完全连续的,它其实是每秒输出25张图片,人的肉眼分辨不出来,看上去就是连续的了,PWM也是同样的道理。如果想要不同的电压,就控制0与1的输出比例就可以了。当然这和真实的连续输出还是有差别的,单位时间内输出的0,1信号越多,控制的就越精确。 那么什么是PWM呢?PWM简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。  PWM的频率是指在1秒钟内,信号从高电平到低电平再回到高电平的次数,也就是说一秒钟PWM有多少个周期,单位Hz。 PWM的周期,T=1/f,T是周期,f是频率。如果频率为50Hz ,也就是说一个周期是20ms,那么一秒钟就有 50次PWM周期。 占空比,是一个脉冲周期内,高电平的时间与整个周期时间的比例,单位是% (0%-100%) 一个周期的长度。如下图所示。  这一课学习使用PWM来控制0与1的输出比例实现控制电压。 1.2 模块参数 工作电压 : DC 3.3 ~ 5V 工作温度 :-10°C ~ +50°C 控制信号 : 数字信号 尺寸 :32 x 23.8 x 12 mm 定位孔大小:直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  前面实验二我们就学习了如何控制一个LED,由原理图可以得知,控制时,模块上GND VCC供电后,信号端S为高电平时,模块上LED亮起。 1.4 实验组件 |  |  |  |  | | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 紫色LED模块 x1 | XH2.54-3P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 ```c++ /* * 名称 : Breathing Led * 功能 : 让led灯像呼吸一样忽明忽暗。 */ const int PWM_LED_Pin = 5; // LED 的 GPIO 引脚 void setup() { pinMode(PWM_LED_Pin, OUTPUT); // 将 LED 引脚设置为输出模式 } void loop() { for (int i = 0; i < 255; i++) // 让灯光渐亮 { analogWrite(PWM_LED_Pin, i); //输出 PWM delay(10); //延迟 10ms } for (int i = 255; i >= 0; i--) // 让光线逐渐减弱消失 { analogWrite(PWM_LED_Pin, i); //输出 PWM delay(10); //延迟 10ms } } ``` 1.7 代码说明 ```c++ for (int i = 0; i < 255; i++) { // 让灯光渐亮 analogWrite(PWM_LED_Pin, i); // 输出 PWM delay(10); // 延迟 10ms } ``` **渐亮过程**: - PWM值从0逐步增加到255 - 每次增加1,间隔10ms - LED亮度从完全关闭逐渐变为最亮 ```c++ for (int i = 255; i >= 0; i--) { // 让光线逐渐减弱消失 analogWrite(PWM_LED_Pin, i); // 输出 PWM delay(10); // 延迟 10ms } ``` **渐暗过程**: - PWM值从255逐步减少到0 - 每次减少1,间隔10ms - LED亮度从最亮逐渐变为完全关闭 1.8 实验结果 代码上传成功后,能看到模块上的紫色LED从暗逐渐变亮,再从亮逐渐变暗,就像呼吸一样。 ### 项目六 RGB模块调节LED颜色 1.1 项目介绍 在这个套件中,有一个Keyes 共阴RGB模块,它采用F10-全彩RGB雾状共阴LED元件。控制时,我们需要将模块的R、G、B脚连接至单片机的PWM口。由于我们这个RGB模块是共阴的,公共管脚就接GND(共阳RGB公共管脚接VCC)。 RGB三色也就是三基色,红色、绿色、蓝色。人眼对RGB三色最为敏感,大多数的颜色可以通过RGB三色按照不同的比例合成产生。同样绝大多数单色光也可以分解成RGB三种色光。这是色度学的最基本原理,即三基色原理。RGB三基色按照不同的比例相加合成混色称为相加混色,除了相加混色法之外还有相减混色法。可根据需要相加相减调配颜色。 接下来,我们基于刚刚学习的三基色原理,通过PWM端口控制R、G、B各色的占空比,使R、G、B三色按照不同的比例合成产生多重颜色显示在LED上。 1.2 模块参数 工作电压 :DC 3.3 ~ 5V 工作温度 :-10°C ~ +50°C 输入信号 :PWM信号 尺寸 :32 x 23.8 x 16.9 mm 定位孔大小 :直径为 4.8 mm 接口 :间距为2.54 mm 4pin防反接口 1.3 模块原理图  通过调节R、G、B、三个灯的PWM值,控制LED元件显示红光、绿光和蓝光的比例,从而控制RGB模块上LED显示不同颜色灯光。当设置的PWM值越大,对应显示的颜色比例越重。理论上来说,通过调节这3中颜色光的混合比例,可以模拟出所有颜色的灯光。 1.4 实验组件 |  |  |  |  | | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 共阴RGB模块 x1 | XH2.54-4P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 ```c++ /* * 名称 : RGB * 功能 : 使用RGBLED显示随机颜色 */ // RGB引脚定义 #define RED_PIN 32 #define GREEN_PIN 4 #define BLUE_PIN 2 void setup() { //将控制引脚设置为输出模式 pinMode(RED_PIN,OUTPUT); pinMode(GREEN_PIN,OUTPUT); pinMode(BLUE_PIN,OUTPUT); } void loop() { // 生成随机颜色值 (0~255) int r = random(256); int g = random(256); int b = random(256); analogWrite(RED_PIN,r); analogWrite(GREEN_PIN,g); analogWrite(BLUE_PIN,b); delay(1000); } ``` 1.7 代码说明 | 代码 | 说明 | | --------------------------- | ----------------------------- | | `const int freq = 5000;` | PWM频率,5000Hz适合LED,避免闪烁。 | | `const int resolution = 8;` | 8位精度,可设置亮度值 0~255(0最暗,255最亮)。 | | `random(256);` | 生成 0~255 的随机数,覆盖所有亮度级别。 | | `analogWrite(RED_PIN,r);` | 生成随机R值。 | 1.8 实验结果 代码上传成功后,能看到模块上RGB LED开始随机显示颜色。   ### 项目七 按键传感器检测实验 1.1 项目介绍 在这个套件中,有一个Keyes单路按键模块,它主要由1个轻触开关组成,自带1个黄色按键帽。第二课我们学习了怎么让单片机的引脚输出一个高电平或者低电平,这节课程我们就来学习怎么读取引脚的电平。 按键模块的按键按下,单片机读取到低电平,松开按键读取到高电平。通过读取传感器上S端的高低电平,判断按键是否按下,并且在串口监视器上显示测试结果。 1.2 模块参数 工作电压 : DC 3.3 ~ 5V 工作温度 :-10°C ~ +50°C 控制信号 : 数字信号 尺寸 :32 x 23.8 x 15.6 mm 定位孔大小:直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  按键有四个引脚,其中1与3相连,2与4相连。按键未被按下时,13与24是断开的。信号端S读取的电平是被4.7K的上拉电阻R1所拉高的高电平。而当按键被按下时,13和24连通,原本上拉的13脚被24脚接的GND下拉至低电平,此时信号端S读取到低电平。即按下按键,传感器信号端S为低电平;松开按键时,信号端S为高电平。 1.4 实验组件 |  |  |  |  | | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | | ESP32 Plus主板 x1 | Keyes 单路按键模块 x1 | XH2.54-3P 转杜邦线母单线 x1 | USB线 x1 | 1.5 模块接线图  1.6 实验代码 选中代码文件保存的路径,打开代码文件’'**button.ino**"。 ``` /* * 名称 : button * 功能 : 读键值 */ int val = 0; //用于存储键值 int button = 5; //将按钮的引脚连接到GPIO5 void setup() { Serial.begin(115200); //启动串口监视器,设置波特率为115200 pinMode(button, INPUT); //设置按钮引脚为输入模式 } void loop() { val = digitalRead(button); // 读取按钮状态(0或1) Serial.print(val); // 打印原始电平值 if (val == 0) { // 按钮按下(低电平) Serial.println("\t Press the botton"); delay(100); // 防抖延迟 } else { // 按钮松开(高电平) Serial.println("\t Loosen the botton"); delay(100); // 防抖延迟 } ``` 1.7 代码说明 ``` void loop() { val = digitalRead(button); // 读取按钮状态(0或1) Serial.print(val); // 打印原始电平值 if (val == 0) { // 按钮按下(低电平) Serial.println("\t Press the button"); delay(100); // 防抖延迟 } else { // 按钮松开(高电平) Serial.println("\t Loosen the button"); delay(100); // 防抖延迟 } } ``` - `digitalRead(button)`:读取按钮引脚的电平。 - **通常逻辑**: - `0`(低电平):按钮按下(引脚接地)。 - `1`(高电平):按钮松开(引脚接上拉电阻至VCC)。 - `if`:判断按钮是否按下。 ``` if (val == 0) { // 检查按钮是否按下(val为0) Serial.println("\t Press the button"); // 按下时打印信息 } ``` - **作用**:当 `val` 等于 `0`(按钮按下)时,执行大括号 `{}` 内的代码(打印"Press the button");否则跳过。 ``` else { // 否则(val不等于0) Serial.println("\t Loosen the button"); // 松开时打印信息 } ``` - `delay(100)`:简易防抖,避免机械抖动导致误判。 1.8 实验结果 代码上传成功后,打开串口监视器,设置波特率为**115200**。 当按下传感器模块上的按键时,按键值value为0,串口监视器打印出“**0 Press the button**”;松开按键时,按键值value为1,串口监视器打印出“**1 Loosen the button**”字符。  ___ ### 项目八 电容触摸传感器检测实验 1.1 项目介绍 在这个套件中,有一个Keyes 电容触摸模块,它主要由1个触摸检测芯片 TTP223-BA6 构成。模块上提供一个触摸按键,功能是用可变面积的按键取代传统按键。当我们上电之后,传感器需要约0.5秒的稳定时间,此时间段内不要触摸按键,此时所有功能都被禁止,始终进行自校准,校准周期约为4秒。 1.2 模块参数 工作电压 :DC 3.3 ~ 5V 最大功率 :0.3 W 工作温度 :-10°C ~ +50°C 输出信号 :数字信号 尺寸 :32 x 23.8 x 9 mm 定位孔大小 :直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  TTP223N-BA6 的输出通过 AHLB(4)引脚选择高电平或低电平有效。通过 TOG(6)引脚选择直接模式或触发模式。 |TOG|AHLB|引脚Q的功能| |---|---|---| |0|0|直接模式,高电平有效| |0|1|直接模式,低电平有效| |1|0|触发模式,上电状态为0| |1|1|触发模式,上电状态为1| 从原理图我们可以知道 TOG 脚和 AHLB 脚是悬空的,此时输出为直接模式,高电平有效。 当我们用手指触摸模块上的感应区时,信号端 S 输出高电平(上一课学习的按键模块与之相反,当按键感应到按下输出低电平),板载红色LED点亮,我们通过读取模块上 S 端的高低电平,判断电容触摸模块上的感应区是否感应到触摸。 1.4 实验组件 ||||| |---|---|---|---| |ESP32 Plus主板 x1|Keyes 电容触摸模块 x1|XH2.54-3P 转杜邦线母单线 x1|USB线 x1| 1.5 模块接线图  1.6 实验代码 选中代码文件保存的路径,打开代码文件’'**Touch\_sensor.ino**"。 ``` /* * 名称 : Touch sensor * 功能 : 读取触摸模块的值 */ int val = 0; int touch = 5; //定义触摸引脚 void setup() { Serial.begin(115200); //波特率为115200 pinMode(touch, INPUT); //设置触摸引脚为输入模式 } void loop() { val = digitalRead(touch); //读取触摸引脚的值 Serial.print(val); //打印触摸引脚的值 if (val == 1) { //按下为高电平 Serial.println("\t Press the button"); delay(100); } else { //释放为低电平 Serial.println("\t Loosen the button"); delay(100); } } ``` ___ 1.7 代码说明 此课程代码与第七课代码类似,这里就不多做介绍了。 1.8 实验结果 代码上传成功后,打开串口监视器,设置波特率为**115200**。 当触摸模块上的感应区感应到触摸时,板载红色LED点亮,value 值为 1,串口监视器打印出“**Press the button**”。   当没有感应到触摸时,板载红色LED熄灭,value 值为 0,串口监视器打印出“**Loosen the button**”。   ### 项目九 避障传感器检测障碍物 1.1 项目介绍 在这个套件中,有一个Keyes 避障传感器,它主要由一对红外线发射与接收管元件组成。实验中,我们通过读取传感器上S端高低电平,判断是否存在障碍物。 1.2 模块参数 工作电压 : DC 5V 电流 : 50 mA 最大功率 : 0.3 W 工作温度 :-10°C ~ +50°C 输出信号 : 数字信号 感应距离 : 2 ~ 40 cm 尺寸 :32 x 23.8 x 11 mm 定位孔大小:直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  NE555时基电路提供给发射管TX发射出一定频率的红外信号,红外信号会随着传送距离的加大逐渐衰减,如果遇到障碍物,就会形成红外反射。当检测方向RX遇到反射回来的信号比较弱时,接收检测引脚输出高电平,说明障碍物比较远;当反射回来的信号比较强,接收检测引脚输出低电平,说明障碍物比较近,此时指示灯亮起。传感器上有两个电位器,一个用于调节发送功率,一个用于调节接收频率,通过调节两个电位器,我们可以调节它的有效距离。 1.4 实验组件 ||||| |---|---|---|---| |ESP32 Plus主板 x1|Keyes 避障传感器 x1|XH2.54-3P 转杜邦线母单线 x1|USB线 x1| 1.5 模块接线图  1.6 实验代码 选中代码文件保存的路径,打开代码文件’'**obstacle\_avoidance\_sensor.ino**"。 ``` /* * 名称 : Hello World * 功能 : 输入字母R,串口显示“Hello World”。 */ char val; // 定义变量val void setup() { Serial.begin(115200); // 设置波特率为115200 } void loop() { if (Serial.available() > 0) { val=Serial.read(); // 读取赋值给"val"的值 if(val=='R') // 检查输入的字母“R” { // if so, Serial.println("Hello World!"); //显示“Hello World !” } } } ``` 1.7 代码说明 此课程代码与第七课代码类似,这里就不多做介绍了。 1.8 实验结果 代码上传成功后,**需要调节传感器模块上的两个电位器**,使得检测障碍物的距离最长。 避障传感器上有两个电位器,分别是接收频率调节电位器和发射功率调节电位器,如下图所示。  先调节发射功率调节电位器,先将电位器顺时针拧到尽头,然后逆时针慢慢往回调,当调节到SLED灯亮起时,微调使传感器上SLED灯介于亮与不亮之间的**不亮**状态。 接着设置接收频率调节电位器,同样将电位器顺时针拧到尽头,然后逆时针慢慢往回调,当SLED灯亮起时,微调使传感器上SLED灯介于亮与不亮之间的**不亮**状态,此时能检测障碍物的距离最长。 打开串口监视器,设置波特率为**115200**。当传感器检测到障碍物时,value 值为 **0**,SLED 灯亮,串口监视器打印出 “**0 There are obstacles**” ;没有检测到障碍物时,value 值为 **1**,SLED 灯灭,串口监视器打印出 “**1 All going well**” 。    ### 项目十 循迹传感器检测黑白线 1.1 项目介绍 在这个套件中,有一个Keyes 单路循线传感器,它主要由1个TCRT5000 反射型黑白线识别传感器元件组成。 1.2 模块参数 工作电压 :DC 3.3 ~ 5V 工作温度 :-10°C ~ +50°C 输入信号 :PWM信号 尺寸 :32 x 23.8 x 9.4 mm 定位孔大小 :直径为 4.8 mm 接口 :间距为2.54 mm 3pin防反接口 1.3 模块原理图  上一课我们学习了避障传感器的原理,而巡线传感器的原理也是相类似的。TCRT5000 反射型传感器包含了一个红外发射器和光电探测器,彼此相邻。巡线传感器的红外发射器持续发出红外线,红外线经过反射后被接收。接收后会产生电流,这个电流随着红外线光增强而变大。接收后利用电压比较器 LM393 ,将接收到红外线后 LM393 的 3 脚的电压值与可调电位器给 LM393 的 2 脚设置的阈值电压进行比较。 当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关闭状态,此时 R3 处的电压接近VCC,即 LM393 的 3 脚电压接近 VCC。而LM393 的 2 脚电压小于 VCC,通过 LM393 比较器后比较 1 脚输出高电平,LED不导通。随着反射回来的红外线光增强,电流也随之变大。此时 3 脚的电压值等于 VCC - I\*R3,随着电流的增大,3 脚的电压就会越来越小。当电压小到比 2 脚的电压还小的时候,接收检测引脚 1 脚输出低电平,LED导通,被点亮。 当红外信号发送到黑色轨道时,由于黑色吸光能力比较强,红外信号发送出去后就会被吸收掉,反射部分很微弱。而白色反射率高,所以白色轨道就会把大部分红外信号反射回来。即检测到黑色或没检测到物体时,信号端为高电平;检测到白色物体时,信号端为低电平。它的检测高度为 0—3cm。我们可以通过旋转传感器上电位器,调节灵敏度,即调节检测高度。当旋转电位器,使传感器上红色 LED介于不亮与亮之间的临界点时,灵敏度最好。 1.4 实验组件 ||||| |---|---|---|---| |ESP32 Plus主板 x1|Keyes 单路循线传感器x1|XH2.54-3P 转杜邦线母单线 x1|USB线 x1| 1.5 模块接线图  1.6 实验代码 选中代码文件保存的路径,打开代码文件’'**Line\_tracking.ino**"。 ``` /* * 名称 : line tracking * 功能 : 读取循迹传感器值 */ int val = 0; void setup() { Serial.begin(115200); //设置波特率为115200 pinMode(5, INPUT); //将传感器引脚设置为输入模式 } void loop() { val = digitalRead(5); //读取循迹传感器的数字电平输出 Serial.print(val); //打印循迹传感器的读取到的数字电平的值 if (val == 0) { //检测到白色值为0 Serial.println("\t White"); delay(100); } else { //检测到黑色值为1 Serial.println("\t Black"); delay(100); } } ``` 1.7 代码说明 此课程代码与第七课代码类似,这里就不多做介绍了。 1.8 实验结果 代码上传成功后,打开串口监视器,设置波特率为**115200**。 串口监视器打印出对应的数据和字符。当传感器检测到黑色物体检测距离太远时,value值为 1 ,LED不亮,串口监视器打印出“**1 Black**”;检测到白色物体(能够反光)时,value值为 0 ,LED亮,串口监视器打印出“**0 White**”。  ___
Theo
2025年9月26日 09:45
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期