任课教师:邢国锐 班级:25网联车高级班 地点:5502机房 周课时:4
第1周 · 机动教学

机动教学周(教学准备)

📅 2026年8月25日📍 5502机房🕐 周二 1-4节

本周为机动教学周,用于教学准备,无具体教学内容安排。

开学第一周(机动):核对实训耗材与工具(UNO R3开发板、面包板、跳线、LED、电阻等),熟悉5502机房上机规范,组建2人实训小组并登记分工,明确实训室安全操作要求。

第2周 · 机动教学

机动教学周(教学准备)

📅 2026年9月1日📍 5502机房🕐 周二 1-4节

本周为机动教学周,用于教学准备,无具体教学内容安排。

教学准备周(机动):安装Arduino IDE(教师机分发安装包),检查电脑USB驱动与串口是否正常,领取实训器材并清点登记,预习教材项目一"点亮第一盏LED"。

第3周 · 项目一、二

搭建开发环境与LED驱动

📅 2026年9月8日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能正确识别Arduino UNO R3的数字口、模拟口、电源口等主要接口
  2. 能独立完成Arduino IDE安装,并正确选择开发板型号与串口端口
  3. 能按电路图完成LED限流接线,上传程序点亮并闪烁LED
  4. 能通过修改延时参数观察现象变化,并按规范记录实训数据

认识Arduino UNO R3开发板

Arduino UNO R3 开发板正面(数字口/模拟口/电源口/USB口/复位键)
Arduino UNO R3 开发板正面(数字口/模拟口/电源口/USB口/复位键)

UNO R3 以 ATmega328P 单片机为核心,是本课程全部项目的控制核心。接线前先认清三大引脚区:

数字口 D0~D13模拟口 A0~A5电源:5V / 3.3V / GNDUSB供电口复位键 RESET
引脚区编号本课程常用用途
数字口D0~D13接LED、按键、蜂鸣器、数码管、继电器等(D3/5/6/9/10/11支持PWM)
模拟口A0~A5读电位器、光敏电阻、水位等模拟传感器(10位ADC,0~1023)
电源口5V / GND给面包板电路供电,必须与模块共地
💡 为什么LED要串联限流电阻?

LED正向导通压降约2V,UNO引脚输出5V。若直接连接,电流过大将烧毁LED甚至损坏引脚。串联220Ω~330Ω电阻可将电流限制在10mA左右,安全且亮度足够。

开发环境:IDE安装与程序上传

  1. 安装Arduino IDE(教师机提供安装包,一路默认下一步即可)
  2. 用USB线连接UNO R3与电脑,板载电源灯点亮
  3. 选择开发板:Tools → Board → Arduino Uno
  4. 选择端口:Tools → Serial Port → COMx(通常为COM3,接入后新增的那个)
  5. 点击上传按钮(→图标),等待"上传成功"提示
Tools → Board 菜单:选择 Arduino Uno 开发板型号
Tools → Board 菜单:选择 Arduino Uno 开发板型号
Tools → Serial Port 菜单:选择开发板对应的 COM 串口
Tools → Serial Port 菜单:选择开发板对应的 COM 串口
IDE 工具栏:校验(√)、上传(→)、新建、打开、保存
IDE 工具栏:校验(√)、上传(→)、新建、打开、保存
💡 程序的最小骨架:setup() 与 loop()

每个Arduino程序必须包含两个函数:setup() 在上电后只执行一次(用于初始化引脚、串口等);loop() 初始化完成后无限循环执行(写控制逻辑)。

C语言函数结构剖析:函数名、参数、函数体
C语言函数结构剖析:函数名、参数、函数体

LED驱动电路与闪烁程序

本任务接线:D10 → 220Ω(或330Ω)限流电阻 → LED正极(长脚),LED负极(短脚)→ GND

电路原理图:D10 经限流电阻 R1 接 LED 至 GND
电路原理图:D10 经限流电阻 R1 接 LED 至 GND
面包板实物接线:D10 + 220Ω 电阻 + LED
面包板实物接线:D10 + 220Ω 电阻 + LED
void setup() {
  pinMode(10, OUTPUT);      // D10 设为输出模式
}
void loop() {
  digitalWrite(10, HIGH);   // 输出高电平,点亮LED
  delay(1000);              // 延时1000毫秒
  digitalWrite(10, LOW);    // 输出低电平,熄灭LED
  delay(1000);
}
关键点pinMode()设置引脚方向;digitalWrite()输出高低电平;delay()单位为毫秒。三者是数字输出三件套,后续项目反复使用。

实操:点亮并闪烁LED

⚠ 安全操作提示(操作前逐条确认)
  • 接线、改线前必须先拔掉USB线,断电操作
  • LED分正负极:长脚为正(接电阻侧),接反不亮但不损坏
  • LED必须串联220Ω以上限流电阻,严禁直接接5V
  • 接完先自查,再由组员互检,确认无误后才能上电

按"识别器件 → 断电接线 → 上电配置 → 上传程序 → 观察记录"五步完成首个驱动任务。

识别器件

  • UNO R3开发板、面包板、LED ×1、220Ω/330Ω电阻 ×1、USB数据线

断电接线

拔掉USB线:LED长脚 → 220Ω电阻 → D10;LED短脚 → GND。

对照实物图检查接线
对照实物图检查接线

连接电脑并配置IDE

  1. USB线连接UNO与电脑
  2. Tools → Board → Arduino Uno
  3. Tools → Serial Port → 选择对应COM口

输入程序并上传

录入"LED电路与程序"中的代码,点击上传按钮,等待"上传成功"。

观察并修改参数

观察LED以1秒间隔闪烁。将两处 delay(1000) 分别改为 delay(200)、delay(500),重新上传,对比闪烁快慢并记入工单。

排错顺序检查要点
1 供电USB线是否插好,板载电源灯是否点亮
2 接线LED正负极方向、电阻是否串入、是否接对D10与GND
3 端口Serial Port选择的COM口是否与设备管理器一致
4 代码pinMode/digitalWrite拼写、分号是否遗漏
5 上传是否提示"上传成功",报错先读提示信息
6 现象仍不亮则换一个LED或换电阻再试

第3周任务工单:搭建开发环境与LED驱动下载工单

操作确认清单(点击方框打勾)

  • 能指出UNO板上数字口、模拟口、电源口的位置
  • 已完成IDE安装并成功选择开发板与端口
  • 按图完成LED限流接线,经组员互检确认
  • 程序上传成功,LED正常闪烁
  • 已完成delay=200/500/1000三组对比并记录

数据记录:延时参数与闪烁现象

延时时间闪烁节奏描述结论(延时与闪烁快慢的关系)
1000ms
500ms
200ms
课外任务预习教材项目一"Hello World"一节;记录自己家或宿舍里一个"延时控制"电器(如楼道声控灯),思考它的延时大约是多少。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、限流电阻使用正确,无带电插拔543215432154321
电路接线LED极性、电阻、D10/GND连接全部正确,一次点亮543215432154321
程序代码pinMode/digitalWrite/delay使用规范,能独立改参543215432154321
功能实现LED闪烁正常,三组延时对比成功543215432154321
记录素养工单记录完整,桌面整理、器件归位543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第4周 · 项目一、二

Hello World与LED闪烁

📅 2026年9月15日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能使用Serial.begin()与Serial.println()实现串口输出
  2. 能打开并设置串口监视器,正确匹配波特率
  3. 能描述面包板内部结构,掌握"横轨纵列"接线规范
  4. 能在面包板上搭接LED闪烁电路并改编闪烁花样

串口输出 Hello World

单片机没有屏幕,串口监视器是最常用的"调试窗口"。程序把数据发给电脑,监视器把数据显示出来,后续读传感器数值都靠它。

void setup() {
  Serial.begin(9600);        // 初始化串口,波特率9600
}
void loop() {
  Serial.println("Hello World!");  // 打印并换行
  delay(1000);
}
波特率必须一致Serial.begin(9600) 与监视器右下角波特率选择必须同为9600,否则输出全是乱码——这是初学者第一大坑。
💡 print 与 println 的区别

print()输出后不换行,println()输出后自动换行。需要"数值+单位"同行显示时组合使用:Serial.print(val); Serial.println(" V")。

面包板结构与接线规范

  • 两侧长条为电源轨:每列5孔纵向连通(部分板红蓝长条整条连通),分别接5V与GND
  • 中间凹槽两侧为元件区:每行5孔一组横向连通,用于插元件与跳线
  • 凹槽两侧孔位互不连通,跨凹槽即"断开",同侧相邻行也互不连通
  • 接线口诀:红正蓝负走两轨,元件跨区走横线
规范要求电源线用红、地线用黑(蓝),信号线用其他颜色;元件引脚插到底,不悬空、不虚接;跳线长度就近选择,走线贴板不飞线。

LED闪烁:从Blink到自定义花样

IDE自带例程 Blink(文件→示例→01.Basics→Blink)默认闪烁板载L灯(D13)。把引脚号改为外接LED的D10,即可驱动面包板电路。

Blink示例程序:setup/loop结构与状态栏 Arduino Uno on COM3
Blink示例程序:setup/loop结构与状态栏 Arduino Uno on COM3
// 三闪一停:连闪3次,停1秒,循环
void loop() {
  for (int i = 0; i < 3; i++) {
    digitalWrite(10, HIGH); delay(150);
    digitalWrite(10, LOW);  delay(150);
  }
  delay(1000);
}
for循环语法剖析:初值、条件、增量、循环体
for循环语法剖析:初值、条件、增量、循环体

实操:串口输出与LED闪烁花样

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,接完自查、组员互检后再上电
  • 面包板插拔元件捏住元件本体,不要硬拽导线
  • 串口监视器打开前先上传完程序,避免端口占用冲突

两个任务串行完成:先跑通串口输出,再改Blink做出"三闪一停"自定义花样。

任务1:串口输出

  1. 录入Hello World程序并上传
  2. 打开串口监视器(右上角放大镜),波特率选9600
  3. 确认每秒输出一行 Hello World!
  4. 故意把监视器波特率改成4800,观察乱码现象后改回

任务2:面包板搭Blink电路

复用上周D10+LED+220Ω接线,检查电源轨/地轨是否与UNO 5V/GND接通。

面包板LED接线参考
面包板LED接线参考

任务3:改编闪烁花样

在loop()中用for循环实现"三闪一停",上传验证;再自行设计一种花样(如快慢交替)让组员猜节奏。

测试记录结果
监视器9600输出内容
波特率不匹配时现象
三闪一停是否成功

第4周任务工单:Hello World与LED闪烁下载工单

操作确认清单(点击方框打勾)

  • 串口监视器9600波特率输出正常
  • 能说出print与println的区别
  • 面包板接线符合"红正蓝负、走线贴板"规范
  • 三闪一停花样程序独立完成并演示成功
  • 乱码原因(波特率不一致)已验证并记录

数据记录:串口输出测试

测试项设置现象
正常通信9600
乱码复现4800

闪烁花样设计

花样描述关键参数(HIGH/LOW延时)是否实现
三闪一停150/150/1000
自选花样
课外任务把"三闪一停"改为"模拟心跳"(快闪2次+长停)并记录参数;思考:如果要让两个LED交替闪烁,电路和程序要怎么改?

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、规范插拔,无端口带电操作543215432154321
电路接线面包板走线规范,电源轨使用正确543215432154321
程序代码Serial与for循环使用正确,能独立改编花样543215432154321
功能实现串口输出与闪烁花样均演示成功543215432154321
记录素养两表填写完整,能解释乱码原因543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第5周 · 项目一、二

PWM调光与交通灯

📅 2026年9月22日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能说出PWM调光的基本原理与占空比含义
  2. 能完成电位器+LED调光电路接线(A0采样、D11输出)
  3. 能使用analogRead/analogWrite并理解0~1023与0~255的换算
  4. 能编写交通灯程序,按设定时序控制红黄绿三灯

PWM调光原理

PWM(脉冲宽度调制)靠快速开关的占空比等效出不同平均电压:占空比75%≈3.75V,50%≈2.5V,20%≈1V。LED亮度随占空比增大而变亮。

不同占空比的等效电压:75%→3.75V、50%→2.5V、20%→1V
不同占空比的等效电压:75%→3.75V、50%→2.5V、20%→1V
PWM波形三要素:周期、脉冲宽度、幅度
PWM波形三要素:周期、脉冲宽度、幅度
哪些引脚支持PWM?UNO仅 D3、D5、D6、D9、D10、D11 六个引脚支持PWM(丝印旁有~号)。analogWrite 写到其他引脚无效——本实验选D11。

电位器调光电路与程序

电位器三个脚:两端接5V和GND,中间脚接A0。旋钮改变分压比,A0读数在0~1023之间变化;除以4换算为0~255后用analogWrite输出到D11驱动LED。

原理图:电位器中间端接A0,LED经限流电阻接D11
原理图:电位器中间端接A0,LED经限流电阻接D11
面包板实物接线:电位器 + LED调光
面包板实物接线:电位器 + LED调光
int potpin = 0;    // 电位器接A0
int ledpin = 11;  // LED接D11(PWM)
int val;
void setup() {
  Serial.begin(9600);
}
void loop() {
  val = analogRead(potpin);   // 读模拟量 0~1023
  analogWrite(ledpin, val/4); // 换算0~255输出PWM
  Serial.println(val);        // 打印采样值便于观察
  delay(100);
}
IDE中的PWM调光程序:analogRead / analogWrite / println
IDE中的PWM调光程序:analogRead / analogWrite / println
函数取值范围用途
analogRead(pin)0 ~ 1023(10位ADC)读模拟输入
analogWrite(pin,val)0 ~ 255(8位PWM)输出等效模拟量

交通灯控制程序

三只LED(各串220Ω)分别接 红D10、黄D7、绿D4,按"红1s → 绿1s → 黄0.2s"时序循环,模拟路口灯切换。

交通灯原理图:红D10、黄D7、绿D4,各经限流电阻接GND
交通灯原理图:红D10、黄D7、绿D4,各经限流电阻接GND
int red = 10, yellow = 7, green = 4;
void setup() {
  pinMode(red, OUTPUT);
  pinMode(yellow, OUTPUT);
  pinMode(green, OUTPUT);
}
void loop() {
  digitalWrite(red, HIGH);    delay(1000); // 红灯1s
  digitalWrite(red, LOW);
  digitalWrite(green, HIGH);  delay(1000); // 绿灯1s
  digitalWrite(green, LOW);
  digitalWrite(yellow, HIGH); delay(200);  // 黄灯0.2s
  digitalWrite(yellow, LOW);
}

实操:PWM调光 + 交通灯

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,电位器中间脚必须接A0,不得接错到5V
  • LED均需串220Ω限流电阻
  • 接线经互检后再上电上传程序

先完成调光电路并打开串口观察采样值,再做交通灯。两组电路可分时使用同一块UNO。

任务1:搭调光电路

电位器两端接5V/GND、中间接A0;LED经220Ω接D11。

对照实物图接线
对照实物图接线

任务1:上传调光程序

上传后旋转电位器:LED亮度连续变化;串口监视器数值0~1023同步变化。记下最暗、中间、最亮三档的数值。

任务2:搭交通灯电路

红D10、黄D7、绿D4各串220Ω,负极统一接GND轨。

任务2:上传交通灯程序

上传后观察"红1s→绿1s→黄0.2s"循环;把红灯改为2s再观察时序变化。

调光测试(记录串口数值)采样值
旋至最暗
旋至中间
旋至最亮
验收口令能调光、能读数、灯序对——三项达标本任务通过。

第5周任务工单:PWM调光与交通灯下载工单

操作确认清单(点击方框打勾)

  • 能说明占空比与LED亮度的关系
  • 调光电路A0/D11接线正确,亮度可调
  • 串口读数与旋钮位置对应,已记录三档数值
  • 交通灯三灯时序正确(1s/1s/0.2s)
  • 能解释0~1023除以4换算成0~255的原因

数据记录:调光采样值

旋钮位置串口数值(0~1023)亮度现象
最暗
中间
最亮

数据记录:交通灯时序

灯色引脚点亮时长
D10
绿D4
D7
课外任务把交通灯改成"绿1s→黄0.2s→红2s"的真实路口时序并记录程序改动;思考:如何用PWM让绿灯有"渐亮渐灭"效果?

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、互检后上电,无短路打火543215432154321
电路接线电位器/LED/三灯接线全部正确543215432154321
程序代码analogRead/analogWrite换算正确,时序符合要求543215432154321
功能实现调光连续平滑,交通灯时序准确543215432154321
记录素养采样值三档记录完整,时序表填写正确543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第6周 · 项目三、四

数字输入与模拟量采集

📅 2026年9月29日📍 5502机房🕐 周二 1-4节
教学安排提示教学安排(授课计划备注):国庆周周四课程调整至10月10日补课。

学习目标

  1. 能区分数字量(0/1)与模拟量(连续变化)并举例说明
  2. 能完成按键+LED电路接线,理解上拉/下拉与低电平有效
  3. 能使用digitalRead读取按键状态并用if语句控制LED
  4. 能通过串口观察按键值,完成按下/松开各10次可靠性测试

数字量与模拟量

对比项数字量模拟量
取值只有0/1(低/高电平)连续变化(0~1023)
典型器件按键、开关、人体感应OUT电位器、光敏、水位、火焰AO
读取函数digitalRead()analogRead()
本课实例按键按下=LOW,松开=HIGH上周电位器0~1023
接线启示上周电位器走A0(模拟),本周按键走D7(数字)。判断器件接哪类口:看它输出的是"两种状态"还是"连续数值"。

按键输入控制LED

按键S1一端接D7,另一端接GND(经下拉电阻R2,平时D7被拉成HIGH;按下接通变LOW——低电平有效)。LED接D11。程序读D7,按下(LOW)点亮D11。

原理图:按键S1接D7(R2下拉),LED经限流电阻接D11
原理图:按键S1接D7(R2下拉),LED经限流电阻接D11
面包板实物接线:按键 + LED
面包板实物接线:按键 + LED
int inpin = 7, ledpin = 11, val;
void setup() {
  pinMode(inpin, INPUT);
  pinMode(ledpin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  val = digitalRead(inpin);
  Serial.println(val);        // 观察1/0变化
  if (val == LOW) {           // 按下为低电平
    digitalWrite(ledpin, HIGH);
  } else {
    digitalWrite(ledpin, LOW);
  }
}
IDE中的Button_input程序:digitalRead + if(val==LOW)
IDE中的Button_input程序:digitalRead + if(val==LOW)
💡 上拉输入与软件消抖

按键模块常采用"按下接地"方式:松开时引脚被上拉电阻保持在高电平(读1),按下时直通GND(读0),所以用 if(val==LOW) 判断按下——即低电平有效。实际亮灭逻辑须以LED模块接法和测试结果为准。

若引脚悬空,读数会乱跳;机械按键按下瞬间还有几毫秒的抖动,可能把一次按键读成多次。简单的软件消抖:检测到按下后延时约20ms再确认状态。

按键状态不稳先查三处① GND是否共地 ② D7是否悬空 ③ 杜邦线是否松动。排查输入故障优先按此顺序,再考虑软件消抖。

实操:按键控制LED与10次测试

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,按键模块信号端接D7、电源端按标识接5V和GND
  • LED必须串联220Ω或330Ω限流电阻
  • 严禁把信号脚直接短接5V和GND;发现误接立即断开USB
  • 接线经互检后再上电,先接地检查、后上电

核心训练"输入→判断→输出"闭环:读按键 → if判断 → 控LED,并用串口监视器把输入值可视化。

搭接按键与LED电路

按键接D7与GND,LED经220Ω接D11。

对照实物图接线
对照实物图接线

上传程序并打开串口

观察监视器数值:松开时为1(HIGH),按下时为0(LOW)。

验证控制逻辑

按下→LED亮,松开→LED灭。若相反,检查if条件与接线。

可靠性测试

上传后连续按下10次、松开10次,记录LED状态与判断是否一致;组内一人操作、一人观察、一人记录,完成后互换角色复测。

对比数字量与模拟量

增加A0电位器,用 Serial.println(analogRead(A0)) 输出:按键只有0/1两种状态(数字量),旋钮是0~1023连续数值(模拟量)。记录3组模拟读数。

可靠性测试记录次数LED动作一致异常说明
按下10
松开10
常见故障LED常亮不灭或读数乱跳→优先查GND共地、D7悬空、杜邦线松动;一次按键读成多次→观察机械抖动,必要时加20ms软件消抖。

第6周任务工单:数字输入与模拟量采集下载工单

操作确认清单(点击方框打勾)

  • 能各举2例说明数字量与模拟量的区别
  • 按键模块接线正确,监视器能观察1/0跳变
  • if(val==LOW)控制逻辑正确,按下亮松开灭
  • 完成按下/松开各10次测试并记录异常
  • 能解释低电平有效、说出软件消抖思路

数据记录:数字量与模拟量对比(3组)

测试项按键读数(digitalRead)旋钮读数(analogRead)
第1组
第2组
第3组

可靠性测试

测试次数LED动作一致异常
按下10
松开10
课外任务完成按键控制LED程序并整理注释;思考:若要让按键一次只触发一次状态变化,抖动会带来什么影响?预习蜂鸣器分类。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、轻按轻放,无损坏器件543215432154321
电路接线按键方向与下拉电路正确,一次调通543215432154321
程序代码digitalRead/if逻辑正确,能解释LOW有效543215432154321
功能实现按下亮松开灭,10次测试零失灵543215432154321
记录素养对比表与测试表填写完整543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第7周 · 项目三、四

蜂鸣器报警控制

📅 2026年10月6日📍 5502机房🕐 周二 1-4节
教学安排提示原定10月6日(国庆假期)课程,按授课计划调整至10月10日(周六)补课,教学进度不变。

学习目标

  1. 能从外观与驱动方式区分有源蜂鸣器与无源蜂鸣器
  2. 能用digitalWrite驱动有源蜂鸣器发声
  3. 能用tone()/noTone()驱动无源蜂鸣器发出指定频率
  4. 能实现"按键按下触发报警、松开停止"的报警器

有源与无源蜂鸣器

有源蜂鸣器:白色贴纸封孔,内部自带振荡源,通电即响固定音调
有源蜂鸣器:白色贴纸封孔,内部自带振荡源,通电即响固定音调
无源蜂鸣器:黑色无贴纸,需外部输入方波信号才能发声
无源蜂鸣器:黑色无贴纸,需外部输入方波信号才能发声
对比项有源蜂鸣器无源蜂鸣器
内部振荡源自带("有源")无("无源")
驱动方式digitalWrite高低电平tone()输出方波
音调固定一种频率可调,可"唱歌"
外观特征顶面白贴纸/密封露出黑色发声孔
// 有源:电平直接驱动
digitalWrite(8, HIGH); delay(500);  // 响500ms
digitalWrite(8, LOW);  delay(500);  // 停500ms

// 无源:tone()频率驱动(D8发1kHz,持续500ms)
tone(8, 1000); delay(500);
noTone(8);
💡 tone() 的妙用

tone(pin, 频率) 可在任意数字口输出方波。改变第二个参数即改变音调,例如1000Hz急促报警、500Hz低沉提示。noTone(pin)停止发声。

按键触发报警器

在第六周按键电路基础上,把LED换成蜂鸣器(D8):按下D7按键→D8发声报警;松开→静音。这就是"输入→判断→输出"的又一实例,输出器件从LED换成蜂鸣器。

int button = 7, buzzer = 8, val;
void setup() {
  pinMode(button, INPUT);
  pinMode(buzzer, OUTPUT);
}
void loop() {
  val = digitalRead(button);
  if (val == LOW) {
    tone(buzzer, 1000);   // 按下:1kHz报警
  } else {
    noTone(buzzer);       // 松开:静音
  }
}
先试有源再试无源两块蜂鸣器都要测:有源用digitalWrite、无源用tone。若用错驱动方式,无源蜂鸣器只会"咔哒"一声或不响。

实操:蜂鸣器发声与按键报警

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,蜂鸣器注意正负极(长脚/标+脚接信号侧)
  • 音量测试时提醒组员,避免突然刺耳鸣响惊吓他人
  • 上电前互检D7、D8与GND接线

三个递进任务:有源响 → 无源变调 → 按键报警。全程用第六周的按键电路做触发源。

任务1:有源蜂鸣器

D8接有源蜂鸣器正极,负极接GND。digitalWrite(8,HIGH/LOW)以1s节奏响停。

有源蜂鸣器接线参考
有源蜂鸣器接线参考

任务2:无源蜂鸣器

换无源蜂鸣器,用tone(8,1000)/noTone(8)驱动;再改频率500Hz、2000Hz对比音调高低。

无源蜂鸣器接线参考
无源蜂鸣器接线参考

任务3:按键报警

接入D7按键,上传报警程序:按下响、松开停。

可靠性测试

按下10次、松开10次,统计报警触发与解除是否都准确,记入工单。

发声测试记录驱动方式现象
有源蜂鸣器digitalWrite
无源500Hztone
无源1000Hztone
无源2000Hztone

第7周任务工单:蜂鸣器报警控制下载工单

操作确认清单(点击方框打勾)

  • 能从外观区分有源/无源蜂鸣器
  • 有源蜂鸣器电平驱动正常响停
  • 无源蜂鸣器tone驱动正常,能改变音调
  • 按键报警:按下响、松开停,逻辑正确
  • 完成按下/松开各10次可靠性测试

音调测试

频率(Hz)音调描述是否发声
500
1000
2000

报警可靠性

测试次数触发/解除正常异常
按下10
松开10
课外任务用tone()让无源蜂鸣器播放"1-2-3"三个音阶(提示:不同频率+不同时长顺序执行);预习光敏电阻分压电路。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、音量提示到位,无器件损坏543215432154321
电路接线蜂鸣器极性与按键接线正确543215432154321
程序代码tone/noTone与if逻辑使用正确543215432154321
功能实现三种发声 + 按键报警全部实现543215432154321
记录素养音调表与可靠性表填写完整543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第8周 · 项目三、四

光敏电阻与光照采集

📅 2026年10月13日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能描述光敏电阻"光照越强阻值越小"的特性
  2. 能搭建10kΩ分压电路,把光照变化转为A0电压变化
  3. 能用串口监视器采集光照数值,理解数值与亮度的关系
  4. 能按"遮光/室内光/强光"三种工况完成各5次采样记录

光敏电阻与分压采样

光敏电阻受光照后阻值下降。光敏电阻与10kΩ固定电阻串联分压,取中点接A0:光照变化→阻值变化→中点电压变化→A0读数变化。这就是"把物理量变成电信号"的采集思想。

光敏电阻分压接A0原型扩展板实物:光敏电阻 + 10kΩ分压电阻
光敏电阻分压接A0原型扩展板实物:光敏电阻 + 10kΩ分压电阻
int lightPin = 0;   // 分压中点接A0
void setup() {
  Serial.begin(9600);
}
void loop() {
  int lightValue = analogRead(lightPin);
  Serial.println(lightValue);   // 打印光照读数
  delay(500);                   // 每500ms采样一次
}
💡 为什么必须分压?

A0读的是电压(0~5V映射为0~1023)。光敏电阻只有和固定电阻组成分压器,光照变化才能体现为中点电压变化。单独一只光敏电阻接A0是读不出有效数值的。

数值规律本套件接法下:遮光→读数变小,强光→读数变大(不同接法方向可能相反,以实测为准,这正是要"先采样标定"的原因)。

光照数据采集与标定

标定 = 先弄清"数值~环境"的对应关系,为下周"感光灯自动开灯"设定阈值做准备。三种工况:完全遮光 / 室内正常光 / 手电强光,每种读5个数取平均。

工况预期读数趋势用途
完全遮光数值小对应"夜晚→应开灯"
室内正常光数值中等日常基准值
强光照射数值大对应"白天→灯灭"

实操:光照采集与三工况标定

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,光敏电阻无极性可任意插入
  • 分压电阻必须用10kΩ,阻值错读数范围会异常
  • 采样时保持探头位置稳定,避免影子干扰

本节实操产出一份"光照标定表"——它就是下周感光灯threshold阈值的设定依据,务必认真测。

搭建分压采样电路

5V → 光敏电阻 → 中点接A0 → 10kΩ → GND。

对照扩展板实物检查分压网络
对照扩展板实物检查分压网络

上传采样程序

打开串口监视器,确认每500ms刷新一个数值。

三工况标定

依次做遮光/室内光/强光测试,每种工况等读数稳定后记录5个值,算出平均数。

分析规律

对比三组平均数,写出"读数范围~环境亮度"的结论,并初拟感光灯阈值(下周验证)。

光照标定记录(每种5次)读1读2读3读4读5平均
遮光
室内光
强光
标定质量自查同工况5个读数波动小(说明采样稳定)、三种工况平均值差异明显(说明电路灵敏)——两条都满足才算合格。

第8周任务工单:光敏电阻与光照采集下载工单

操作确认清单(点击方框打勾)

  • 能说明"光照越强阻值越小"的特性方向
  • 分压电路接线正确,A0读数随光照明显变化
  • 完成遮光/室内光/强光各5次采样
  • 计算出三种工况的平均读数
  • 写出"数值范围~环境"结论并初拟阈值

光照标定汇总

工况平均读数对应环境判断
遮光
室内光
强光
课外任务把本周标定的"遮光平均读数"与"室内光平均读数"取中间值作为threshold记在工单上;预习教材感光灯项目,思考if语句怎么写。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、采样规范,无影子干扰数据543215432154321
电路接线10kΩ分压网络正确,A0接入正确543215432154321
程序代码analogRead采样+500ms节拍正确543215432154321
功能实现三种工况读数差异明显,标定有效543215432154321
记录素养标定表15个数据齐全,结论合理543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第9周 · 项目三、四

感光灯:阈值判断与自动控制

📅 2026年10月20日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能理解"阈值判断"思想:用if语句把采集值转成开关动作
  2. 能完成光敏分压+LED(D11)感光灯电路接线
  3. 能设定threshold阈值,实现"光线暗自动开灯、亮自动关灯"
  4. 能对比450/500/550三组阈值,选出动作最可靠的一组

从"采集数据"到"自动控制"

第8周我们只做"采集与标定",本周加一步判断:if (lightValue < threshold) 就开灯。这就是一个最小化的自动控制系统——传感(A0)→ 判断(if)→ 执行(D11)。

A0:光敏分压中点D11:LED(经220Ω)threshold:判定阈值
💡 阈值为什么不能拍脑袋?

阈值必须落在第8周标定的"遮光平均读数"与"室内光平均读数"之间:取两组平均值的中间值作为初值(约500),再实测微调。阈值过高→天还没黑就开灯;过低→天黑透了灯还不亮。

感光灯电路与程序

感光灯原理图:光敏电阻+电阻分压接A0,LED经限流电阻接D11
感光灯原理图:光敏电阻+电阻分压接A0,LED经限流电阻接D11
感光灯面包板实物接线
感光灯面包板实物接线
int lightPin = 0, ledPin = 11;
int threshold = 500;      // 阈值:按第8周标定数据修改
void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  int lightValue = analogRead(lightPin);
  Serial.println(lightValue);      // 监视当前光照值
  if (lightValue < threshold) {
    digitalWrite(ledPin, HIGH);    // 光线暗:开灯
  } else {
    digitalWrite(ledPin, LOW);     // 光线亮:关灯
  }
  delay(500);
}
调试技巧程序上传后盯着串口读数,用手在光敏电阻上方慢慢遮挡,找到读数越过threshold的瞬间——灯应在这附近切换。切换点离阈值太近会"来回闪",需要调整阈值。

实操:感光灯制作与阈值调试

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,分压电阻仍用10kΩ,LED串220Ω
  • 阈值修改只改程序参数,不得带电改线
  • 测试用手遮挡光源即可,不得用强激光照射光敏电阻

在第8周电路上加D11 LED,程序从"打印数值"升级为"判断+控制"。核心工作量是阈值调试:初值500,再对比450/550。

搭接感光灯电路

复用第8周分压电路(中点→A0),LED经220Ω接D11。

对照实物图接线
对照实物图接线

上传程序(threshold=500)

遮住光敏电阻→LED应亮;移开手→LED应灭。观察串口读数与动作是否对应。

阈值对比实验

分别把threshold改为450、550,重复遮光/移开测试,记录每种阈值下"遮光亮不亮、强光灭不灭",判断哪组最可靠。

固定最佳阈值

把最可靠的阈值写回程序,请教师抽查演示,说明选择理由。

阈值对比记录遮光时室内光时强光时是否误动作
threshold=450
threshold=500
threshold=550
验收标准遮光必亮、强光必灭、临界不闪烁——三条同时满足,感光灯才算合格。

第9周任务工单:感光灯阈值判断与自动控制下载工单

操作确认清单(点击方框打勾)

  • 能画出"传感→判断→执行"三环节框图
  • 电路接线正确,串口读数随光照变化
  • threshold=500时遮光亮、移开灭
  • 完成450/500/550三组阈值对比并记录
  • 选定最佳阈值并能说明理由

数据记录:三组阈值测试

阈值遮光LED状态强光LED状态误动作次数
450
500
550
课外任务思考:如果想让感光灯在傍晚"渐亮"而不是突然点亮,可以结合第5周哪个知识点实现?(提示:analogWrite+PWM)

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、不带电改参,无器件损坏543215432154321
电路接线分压网络与D11输出正确543215432154321
程序代码if阈值判断正确,threshold独立可调543215432154321
功能实现遮光亮/强光灭,临界不闪烁543215432154321
记录素养三组阈值数据完整,结论有依据543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第10周 · 项目三、四

火焰传感器与声光报警

📅 2026年10月27日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能描述火焰传感器(红外接收管)的工作原理与AO输出特性
  2. 能完成火焰传感器AO→A0、LED→D11、蜂鸣器→D8的报警电路
  3. 能通过三状态实测确定报警阈值,编写声光报警程序
  4. 能完成无遮挡/远距离/近距离3种状态各3轮的重复测试

火焰传感器原理

火焰传感器核心:红外接收管(对火焰红外线敏感)
火焰传感器核心:红外接收管(对火焰红外线敏感)
火焰传感器10kΩ分压电路原理图(标注正负极与模拟输出)
火焰传感器10kΩ分压电路原理图(标注正负极与模拟输出)

传感器把火焰红外辐射转成电信号,经10kΩ分压电路从AO口输出模拟量,接入A0用analogRead读取。离火越近读数跳变越明显(方向由分压接法决定,以实测为准)。

测试安全红线用打火机小火苗在2~3cm外短时测试,实验台清除酒精、纸张等易燃物,测试完立即熄灭火源;严禁长时间灼烧传感器。

声光报警电路与程序

火焰传感器+蜂鸣器原型扩展板实物(含分压电路)
火焰传感器+蜂鸣器原型扩展板实物(含分压电路)
火焰传感器模块与UNO连接实物(红色模块,检测指示灯亮)
火焰传感器模块与UNO连接实物(红色模块,检测指示灯亮)
int flamePin = A0, ledPin = 11, buzzer = 8;
int threshold = 500;   // 报警阈值:先实测三状态再修改
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(buzzer, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  int flameValue = analogRead(flamePin);
  Serial.println(flameValue);
  if (flameValue < threshold) {   // 方向按实测调整
    digitalWrite(ledPin, HIGH);   // 声光同时报警
    tone(buzzer, 1000);
  } else {
    digitalWrite(ledPin, LOW);
    noTone(buzzer);
  }
  delay(200);
}
💡 报警阈值怎么定?

先不带判断跑采集程序,记录"无遮挡 / 远距离火源 / 近距离火源"三组读数;把threshold设在无遮挡值与近距离值之间,并要求对远距离也有响应。若发现方向相反(近火读数更大),把if中的 < 改为 > 即可。

实操:火焰声光报警与三状态测试

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,传感器按丝印接5V/GND,AO接A0,勿接反电源极性
  • 火源测试由教师统一组织:小火苗、短时间、近距离3cm内不动
  • 台面清空易燃物,备湿布;测试完毕立即熄灭火源并报告教师
  • 发热、异味、异常声光立即断电并报告

先"采集标定"再"报警判断",与感光灯流程一致。蜂鸣器与LED同时动作,形成完整声光报警。

搭接报警电路

火焰传感器AO→A0、VCC→5V、GND→GND;LED→D11(串220Ω);蜂鸣器→D8。

对照扩展板实物检查接线
对照扩展板实物检查接线

采集三状态读数

上传采集程序:无遮挡→读数记一次;远距离(约50cm)火源→记一次;近距离(2~3cm)→记一次。确定读数方向与数值范围。

设定阈值并上传报警程序

把threshold改到合理位置,上传声光报警程序,验证近火报警、移开解除。

三状态×3轮测试

无遮挡/远距离/近距离各重复3轮,每轮记录是否正确报警/解除,统计误报漏报次数。

三状态测试(每状态3轮)读数1读数2读数3报警正确次数
无遮挡
远距离火源
近距离火源
验收标准三轮测试零漏报、无遮挡零误报,且能说出阈值设定依据。

第10周任务工单:火焰传感器与声光报警下载工单

操作确认清单(点击方框打勾)

  • 能说明红外接收管+分压电路的输出原理
  • AO/LED/蜂鸣器三路接线全部正确
  • 三状态读数已记录,阈值设定有依据
  • 声光同时报警、移开火源立即解除
  • 完成3状态×3轮测试,误报漏报已统计

数据记录:三状态读数与报警

状态平均读数应报警实际报警
无遮挡
远距离
近距离
课外任务把火焰报警与第9周感光灯合并成"一个程序两种报警",写出if结构框架(不用接线);预习七段数码管段位图。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作火源测试规范,台面无易燃物,及时熄灭543215432154321
电路接线传感器/LED/蜂鸣器三路接线正确543215432154321
程序代码阈值判断正确,声光报警逻辑清晰543215432154321
功能实现三状态×3轮零漏报零误报543215432154321
记录素养读数与轮次记录完整,阈值有依据543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第11周 · 项目三、四

七段数码管显示

📅 2026年11月3日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能辨认七段数码管a~g、dp段位与共阴/共阳类型
  2. 能完成数码管各段经限流电阻接D2~D8的电路
  3. 能用段码数组循环显示0~9并记录每个数字的段码
  4. 能理解动态扫描的位选/段选与2~5ms延时,观察闪烁重影

认识七段数码管

共阴/共阳数码管内部结构与段位(a~g、dp)
共阴/共阳数码管内部结构与段位(a~g、dp)
  • 七段=a、b、c、d、e、f、g,外加小数点dp;点亮不同组合显示0~9
  • 共阴:公共端接GND,段引脚给HIGH点亮
  • 共阳:公共端接5V,段引脚给LOW点亮——段码取反
  • 判别方法:用万用表二极管挡或接3V电源轻触,亮的一段即找到对应段
💡 段码是什么?

每个数字对应一组"各段亮灭"的组合,写成8位二进制就是段码。例如共阴管显示"0"要点亮a~f共6段(g灭),段码为B1111110。把0~9的段码放进数组,程序就能循环显示。

接线与0~9显示程序

数码管与UNO接线原理图(各段经限流电阻接数字口)
数码管与UNO接线原理图(各段经限流电阻接数字口)
数码管面包板实物接线
数码管面包板实物接线

接线:a~g 七段各串220Ω → D2~D7(本课例程dp不接),共阴公共端接GND。

// 共阴数码管:a~g依次接D2~D7,1=点亮
const byte SEG[10][7] = {
  {1,1,1,1,1,1,0}, // 0
  {0,1,1,0,0,0,0}, // 1
  {1,1,0,1,1,0,1}, // 2
  {1,1,1,1,0,0,1}, // 3
  {0,1,1,0,0,1,1}, // 4
  {1,0,1,1,0,1,1}, // 5
  {1,0,1,1,1,1,1}, // 6
  {1,1,1,0,0,0,0}, // 7
  {1,1,1,1,1,1,1}, // 8
  {1,1,1,1,0,1,1}  // 9
};
int segPin[7] = {2,3,4,5,6,7};
void setup() {
  for (int i = 0; i < 7; i++) pinMode(segPin[i], OUTPUT);
}
void loop() {
  for (int n = 0; n < 10; n++) {
    for (int s = 0; s < 7; s++)
      digitalWrite(segPin[s], SEG[n][s]);
    delay(1000);            // 每个数字停留1秒
  }
}
共阳怎么办?共阳管把SEG表中的0和1互换(或用 1-SEG[n][s] 取反),公共端改接5V。程序可上传但无现象时,先怀疑共阴/共阳判断错误。

动态扫描:两位轮流显示

多位显示时让各位轮流快速点亮:先送第一位段选+开位选,延时2~5ms,再切第二位。人眼视觉暂留让我们"同时"看到两位数字。

  • 位选:决定哪一位数码管被点亮(公共端控制)
  • 段选:决定这一位显示什么数字(a~g段码)
  • 扫描延时2~5ms:太长→明显闪烁;太短→亮度下降、产生重影
观察任务两位数动态扫描时重点观察三种异常:闪烁(延时太长)、重影(切换太快消隐不足)、亮度不均(占空比不一致),并记录延时调整前后的变化。

实操:0~9显示与动态扫描

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,每段必须串220Ω限流电阻
  • 共阴/共阳先判别再接线,公共端不得接错
  • 发现某段常亮或全灭,先断电检查段序与公共端

两个任务:先静态循环显示0~9并抄录段码,再观察两位动态扫描的延时效果。

判别类型与接线

判别共阴/共阳;a~g经220Ω接D2~D7,公共端按类型接GND或5V。

对照实物图接线
对照实物图接线

上传0~9循环程序

逐位核对段序:显示"1"应只有b、c亮。若数字"乱码",对照SEG表排查段序接错。

抄录段码

把0~9每个数字实际点亮的段记入工单段码表,与SEG数组比对。

动态扫描观察

用教师提供的两位扫描例程,分别把延时改为2ms、5ms、50ms,观察闪烁/重影/亮度不均三种现象并记录。

段码记录(点亮段打√)abcdefg
0
1
2
3
扫描延时观察2ms5ms50ms
闪烁
重影
亮度

第11周任务工单:七段数码管显示下载工单

操作确认清单(点击方框打勾)

  • 能正确判别共阴/共阳并说明依据
  • 各段限流电阻齐全,段序接对
  • 0~9循环显示正常,乱码已排查
  • 段码表记录与程序SEG数组一致
  • 完成2/5/50ms三档延时对比观察

段码记录(续)

数字456789
点亮段
课外任务完成段码表0~9全部记录;预习1602 LCD引脚定义(VSS/VDD/VO/RS/E/D4-D7),思考它比数码管强在哪里。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、限流齐全,无过热现象543215432154321
电路接线段序、公共端、限流电阻全部正确543215432154321
程序代码SEG数组使用规范,能独立改延时543215432154321
功能实现0~9显示正确,扫描异常能解释543215432154321
记录素养段码表与延时观察表填写完整543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第12周 · 项目五、六

1602 LCD字符显示

📅 2026年11月10日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能说出1602 LCD主要引脚(VSS/VDD/VO/RS/E/D4-D7/背光)的功能
  2. 能完成LCD接线并用电位器调节对比度至字符清晰
  3. 能使用LiquidCrystal库的begin/setCursor/print显示文本与数字
  4. 能显示姓名、学号和一个传感数值,检查16列2行换行是否正确

认识1602 LCD

1602 LCD正面:2行×16字符,蓝色背光
1602 LCD正面:2行×16字符,蓝色背光
1602 LCD背面:16引脚焊点与排孔
1602 LCD背面:16引脚焊点与排孔
1602 LCD 16引脚定义表:VSS/VDD/VO/RS/R-W/E/D0-D7/BLA/BLK
1602 LCD 16引脚定义表:VSS/VDD/VO/RS/R-W/E/D0-D7/BLA/BLK
引脚名称接法
VSS电源地接GND
VDD电源正接5V
VO对比度调节接10kΩ电位器中间端
RS / E寄存器选择 / 使能接D12 / D11
R-W读/写选择接GND(只写)
D4~D74位数据线接D5/D4/D3/D2
BLA / BLK背光正/负按模块标识接5V / GND
💡 LCD内部怎么收指令?

控制器把每次写入当作"指令"或"数据"由RS区分:RS=0写指令(如清屏、设光标),RS=1写显示数据。本课用4位模式(D4~D7),分两次传送一个字节。

1602 LCD四种基本操作时序:读状态/写指令/读数据/写数据
1602 LCD四种基本操作时序:读状态/写指令/读数据/写数据

接线与LiquidCrystal程序

1602 LCD完整接线示意图(含电位器调对比度)
1602 LCD完整接线示意图(含电位器调对比度)
1602 LCD接线实物图
1602 LCD接线实物图
#include <LiquidCrystal.h>
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  lcd.begin(16, 2);          // 16列2行
  lcd.setCursor(0, 0);       // 第0列第0行
  lcd.print("Hello 25网联车!");
}
void loop() {
  lcd.setCursor(0, 1);       // 第二行
  lcd.print(millis() / 1000);
  lcd.print(" s");
}
三大显示故障①整排黑块→对比度过高,调低电位器;②白屏无字→对比度过低或RS/E/D4-D7接错;③乱码→begin参数或接线错位。先调VO电位器,再查数据线。

实操:LCD显示姓名学号与传感值

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,LCD引脚多易插错,对照引脚表逐脚复核
  • 电位器先调中间位置再上电,防止对比度极端
  • 上电后LCD异常发热立即断电检查VDD/GND

LCD是后续联调项目的"显示器"。本节任务:调出清晰字符 → 显示姓名学号 → 第二行实时显示A0传感数值。

按引脚表接线

VSS→GND、VDD→5V、VO→电位器中间端、RS→12、R-W→GND、E→11、D4~D7→5/4/3/2、背光按标识接。

对照接线示意图逐脚检查
对照接线示意图逐脚检查

上电调对比度

上传程序后缓慢旋转电位器,直到第一行字符清晰出现(不黑块、不空白)。

显示姓名与学号

把print内容改为本人姓名和学号,注意一行最多16字符,超长需换行。

第二行显示传感值

setCursor(0,1)后打印 analogRead(A0) 数值,旋转电位器观察数字实时变化,记录3组读数。

显示测试记录结果
第一行:姓名学号
第二行:A0传感值×3组
超16字符现象

第12周任务工单:1602 LCD字符显示下载工单

操作确认清单(点击方框打勾)

  • 能背出VSS/VDD/VO三个引脚的作用
  • 对比度调出清晰字符,无黑块无白屏
  • 姓名学号显示正确,换行位置正确
  • 第二行实时显示A0数值并记录3组
  • 能解释RS=0指令/RS=1数据的区别

数据记录:A0传感值显示

旋钮位置LCD显示值串口对照值
最小
中间
最大
课外任务思考:如果想让LCD第二行显示"温度:25C"这样的带标签内容,print要怎么组合?预习步进电机28BYJ-48结构。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作逐脚复核、无电源接反,LCD无过热543215432154321
电路接线16脚对照无误,电位器接入正确543215432154321
程序代码库引用/begin/setCursor/print使用正确543215432154321
功能实现姓名学号+实时数值显示成功543215432154321
记录素养三组读数齐全,故障排查有记录543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第13周 · 项目五、六

步进电机正反转与调速

📅 2026年11月17日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能描述28BYJ-48步进电机+ULN2003驱动板的接线关系
  2. 能解释"为什么要驱动板":UNO引脚不能直接带动电机线圈
  3. 能用Stepper库setSpeed/step完成正转、反转与转速调节
  4. 能对比10rpm与15rpm运行一圈的耗时,检查丢步与抖动

步进电机与ULN2003驱动板

28BYJ-48步进电机实物(5线:红电源+四相控制线)
28BYJ-48步进电机实物(5线:红电源+四相控制线)
ULN2003驱动板标注:步进电机白座接口、四相指示灯、IN1-IN7、5V电源端
ULN2003驱动板标注:步进电机白座接口、四相指示灯、IN1-IN7、5V电源端

步进电机线圈电流远超UNO引脚承受能力,必须经ULN2003达林顿阵列放大后驱动。规则三条:IN1~IN4接UNO数字口;电机插驱动板白座;电机电源与UNO共地。不得用UNO引脚直接驱动线圈。

💡 "步"是什么概念?

每给一组相位通电,电机转一个固定角度(一步)。28BYJ-48经减速齿轮后约需2048步转一圈,所以程序里step(2048)≈正转一圈。转速由setSpeed(转/分)控制,四相指示灯闪烁越快转速越高。

Stepper库程序与调试

步进电机+ULN2003+UNO接线示意图
步进电机+ULN2003+UNO接线示意图
实物接线:运行中四相指示灯点亮
实物接线:运行中四相指示灯点亮
#include <Stepper.h>
const int stepsPerRevolution = 2048;  // 28BYJ-48约2048步/圈
// 注意顺序:IN1, IN3, IN2, IN4 对应 8, 10, 9, 11
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
void setup() {
  myStepper.setSpeed(10);   // 10转/分
}
void loop() {
  myStepper.step(2048);     // 正转一圈
  delay(500);
  myStepper.step(-2048);    // 反转一圈
  delay(500);
}
电机只抖不转?九成是相序接错:Stepper对象引脚顺序必须按(8,10,9,11)对应IN1~IN4,或把四根线整体顺序调换重试;其次是速度过快丢步,可降到5rpm验证。

实操:正反转一圈与转速对比

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,电机插白座方向对准,不得硬插
  • 供电不足时用外接5V电源,外接电源必须与UNO共地
  • 运行中不得用手捏住转轴阻止转动(堵转发热)
  • 发现异响、异味、指示灯全亮异常立即断电

接线完成后先低速验证方向,再对比10rpm与15rpm的运行表现,记录耗时、丢步、抖动三项指标。

接线

IN1~IN4→D8/D9/D10/D11,电机插白座,驱动板5V/GND→UNO 5V/GND(或外接5V共地)。

对照接线示意图检查
对照接线示意图检查

低速验证

先setSpeed(5)上传:电机应平稳正转一圈→停→反转一圈。若只抖不转,按"相序接错"提示排查。

10rpm与15rpm对比

分别以10rpm、15rpm各跑正反一圈,用秒表记录每圈耗时,观察是否有丢步、抖动。

数据记录与排查

把现象记入工单;若15rpm出现抖动或丢步,记录降速后的改善情况。

转速对比(正/反各一圈)正转耗时反转耗时丢步/抖动
10rpm
15rpm

第13周任务工单:步进电机正反转与调速下载工单

操作确认清单(点击方框打勾)

  • 能说出"UNO引脚不能直接驱动电机"的原因
  • IN1~IN4/白座/共地三处接线全部正确
  • 低速下正转一圈、反转一圈方向正确
  • 完成10rpm与15rpm耗时对比记录
  • 抖动或丢步现象已记录并能分析原因

数据记录:转速测试

转速设定期望耗时(s)实测正转(s)实测反转(s)
10rpm≈6
15rpm≈4
课外任务提交步进电机正反转程序;思考:若要电机转半圈停1秒再转半圈,step()参数应取多少?(提示:2048步=一圈)

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、不堵转、共地正确543215432154321
电路接线驱动板/电机/电源三处连接规范543215432154321
程序代码Stepper库调用正确,相序处理得当543215432154321
功能实现正反转方向正确,两档转速对比成功543215432154321
记录素养耗时与现象记录完整,能分析丢步543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第14周 · 项目五、六

舵机角度控制与安全限位

📅 2026年11月24日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能辨认舵机三线(红5V/棕黑GND/信号D9)并正确接线
  2. 能理解PWM脉宽与角度的对应关系(约0.5~2.5ms→0~180°)
  3. 能用Servo库attach/write实现指定角度定位与电位器映射控制
  4. 能设置10~170度安全限位,防止舵机撞限位抖动异响

认识舵机与PWM映射

TowerPro SG90微型舵机(含舵盘安装配件)
TowerPro SG90微型舵机(含舵盘安装配件)
舵机三线定义:黑GND、红+5V、黄PWM信号线,转动范围180°
舵机三线定义:黑GND、红+5V、黄PWM信号线,转动范围180°
脉宽与角度对应:0°/45°/180°对应约1000/1250/2000微秒
脉宽与角度对应:0°/45°/180°对应约1000/1250/2000微秒

舵机内部自带位置反馈,信号线输入的脉冲宽度决定输出轴角度。Servo库把write(angle)自动转换为对应脉宽,我们只管给角度。

供电与堵转舵机堵转(机械卡死)时电流剧增,禁止长时间卡死供电;多舵机或供电不足时用外接5V,并与UNO共地。

Servo库程序:定位与映射

舵机接D9接线示意图(信号线→D9)
舵机接D9接线示意图(信号线→D9)
#include <Servo.h>
Servo myservo;
void setup() {
  myservo.attach(9);          // 信号线接D9
}
void loop() {
  // 任务1:依次定位五个角度
  int angles[5] = {0, 45, 90, 135, 180};
  for (int i = 0; i < 5; i++) {
    myservo.write(angles[i]);
    delay(1000);
  }
  // 任务2:电位器映射控制(带安全限位10~170度)
  int angle = map(analogRead(A0), 0, 1023, 10, 170);
  myservo.write(angle);
  delay(15);
}
💡 map() 映射函数

map(值, 原始下限, 原始上限, 目标下限, 目标上限)做线性比例换算:A0的0~1023映射到0~180。注意两端限位:写0°或180°时舵机顶死在机械限位会抖动、异响、发热,所以工程上常限制在10~170度。

实操:五点定位与电位器控制

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,三线颜色对照:红5V、棕/黑GND、黄/橙信号D9
  • 舵机臂安装到位再上电,防止空转飞脱
  • 不要用手强行掰动舵机臂(损坏齿轮)
  • 发现持续抖动、异响立即断电,检查是否撞限位

两个递进任务:先做0/45/90/135/180五点定位测试,再加电位器实现"旋钮控制角度"并设置10~170度安全限位。

接线

按三线颜色接5V/GND/D9,先不上舵盘,验证空载转动。

对照接线示意图检查
对照接线示意图检查

五点定位测试

上传任务1程序:舵机应依次转到0、45、90、135、180度各停1秒。用记号笔在桌面上标出实际角度位置,对照记录偏差。

电位器映射控制

接入电位器(中间脚→A0),上传任务2程序:旋钮从一端转到另一端,舵机应平滑跟随。记录0/1023两端对应的实际角度。

安全限位验证

观察限位版本(map到10~170)与全范围版本(0~180)在两端的差异:全范围版本两端是否出现顶死抖动?记录现象。

五点定位记录45°90°135°180°
实际位置偏差
限位对比两端顶死抖动转动平滑度
0~180全范围
10~170限位

第14周任务工单:舵机角度控制与安全限位下载工单

操作确认清单(点击方框打勾)

  • 三线接线正确,空载转动正常
  • 五点定位偏差已记录
  • 电位器旋钮能平滑控制舵机角度
  • map映射参数书写正确
  • 限位版本两端无顶死抖动,能说明限位作用

数据记录:映射端点

旋钮位置A0读数实际角度
一端
中间
另一端
课外任务提交舵机角度控制程序;思考:教室门禁摆闸、汽车电子节气门分别相当于本课哪个环节?预习HC-SR04超声波测距原理。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作三线接对、不掰舵机臂、堵转即断电543215432154321
电路接线D9信号线与电源线连接规范543215432154321
程序代码attach/write/map使用正确,限位参数合理543215432154321
功能实现五点定位准确,旋钮控制平滑543215432154321
记录素养定位偏差与限位对比记录完整543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第15周 · 项目七

HC-SR04超声波测距与避障阈值

📅 2026年12月1日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能说明HC-SR04"触发→回波→测时→换算"的测距原理
  2. 能完成 Trig→D9、Echo→D10、蜂鸣器→D8 的测距报警电路
  3. 会用 pulseIn 测回波脉宽,按 distance=duration×0.034/2 换算距离
  4. 能在10/20/50cm三档各测5次算误差,并设定20cm避障阈值联动蜂鸣器

超声波测距原理

蝙蝠的启示:超声波测距模块向目标方向发射一串40kHz的超声波,声波遇到障碍物反射回来被接收。只要测出"发出→收到"的时间差,乘以声速再除以2(往返),就是距离。

HC-SR04正面:T/R两个超声波换能器(发射T、接收R)
HC-SR04正面:T/R两个超声波换能器(发射T、接收R)
HC-SR04背面:Gnd/Echo/Trig/VCC四个引脚
HC-SR04背面:Gnd/Echo/Trig/VCC四个引脚
时序图:Trig给10μs高电平触发→模块发40kHz脉冲→Echo输出高电平宽度=往返时间
时序图:Trig给10μs高电平触发→模块发40kHz脉冲→Echo输出高电平宽度=往返时间
HC-SR04外形尺寸(45×20mm),探测角度约15°
HC-SR04外形尺寸(45×20mm),探测角度约15°
💡 公式从哪来?

声速约340m/s = 0.034cm/μs。Echo高电平时间是声波往返的微秒数,所以:距离(cm) = duration(μs) × 0.034 ÷ 2。例如量得588μs,距离≈588×0.034÷2≈10cm。

测距电路与程序

VCC→5VGND→GNDTrig→D9(触发输出)Echo→D10(回波输入)蜂鸣器→D8
HC-SR04实物接线(图示为参考接法,本课程按Trig→D9、Echo→D10接线)
HC-SR04实物接线(图示为参考接法,本课程按Trig→D9、Echo→D10接线)
const int trigPin = 9, echoPin = 10, buzzerPin = 8;
int threshold = 20;                  // 避障阈值:cm
void setup() {
  pinMode(trigPin, OUTPUT);
  pinMode(echoPin, INPUT);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);       // 10μs 触发脉冲
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long duration = pulseIn(echoPin, HIGH);  // 回波脉宽(μs)
  int distance = duration * 0.034 / 2;     // 换算为cm
  Serial.print(distance);
  Serial.println(" cm");
  if (distance > 0 && distance < threshold) {
    digitalWrite(buzzerPin, HIGH);   // 低于阈值:报警
  } else {
    digitalWrite(buzzerPin, LOW);
  }
  delay(200);
}
pulseIn 要点pulseIn(Echo, HIGH) 等待Echo变高再计时到变低,单位μs。若超时收不到回波它会返回0——判断时加 distance>0 可排除无效读数,避免把0cm误当"超近障碍"误报警。

实操:超声波测距标定与避障报警

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,HC-SR04严格按VCC/GND/Trig/Echo四线对应,接反会烧模块
  • 两只手不要同时触碰模块引脚与电源,防止静电损坏
  • 改线必须先拔USB断电,程序与接线必须一致再上电

先搭测距电路验证读数,再在10/20/50cm三档各测5次算误差,最后把threshold设为20cm做避障报警联动。

搭接测距电路

按 Trig→D9、Echo→D10 接好模块,蜂鸣器接D8。上电后打开串口监视器(9600)。

串口监视器距离读数:读数在真实值附近小幅跳动属正常
串口监视器距离读数:读数在真实值附近小幅跳动属正常

三档测距标定

把模块正对平整目标(书本/纸盒),分别在10cm、20cm、50cm处各测5次,把读数记入工单表,计算平均误差。斜面、软布、过远目标都会使读数漂移。

设定避障阈值

threshold=20,把障碍物从远处慢慢移近:越过20cm瞬间蜂鸣器应响,退远应停。

排错与互检

读数恒0或恒最大:按"供电→公共地→引脚号→程序语法→串口结果"顺序排查;完成后组员互换检查接线并演示一次报警动作。

验收标准三档读数误差≤±2cm(10/20cm档)——达标后才算标定完成;障碍物越过20cm蜂鸣器必响、退开必停。

第15周任务工单:超声波测距标定与避障报警下载工单

操作确认清单(点击方框打勾)

  • 能画出"触发→回波→测时→换算"测距流程框图
  • 四线接线正确(Trig→D9、Echo→D10),串口能输出距离
  • 完成10/20/50cm三档×5次测距记录
  • threshold=20cm时越线响、退开停,动作可靠
  • 读数异常时能按排错顺序定位问题

数据记录:三档测距各测5次

目标距离第1次第2次第3次第4次第5次平均误差
10cm
20cm
50cm
课外任务完成测距数据记录:整理三档×5次读数与平均误差,写出"哪些材质/角度会让读数不可靠"的一条结论。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、四线核对后上电,无器件损坏543215432154321
电路接线Trig/Echo/蜂鸣器三路连接正确543215432154321
程序代码触发时序、pulseIn、换算公式正确,threshold独立可调543215432154321
功能实现三档读数合理,20cm阈值报警动作可靠543215432154321
记录素养15次测距数据完整,误差与结论有依据543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第16周 · 项目七

DHT11温湿度与水位采集

📅 2026年12月8日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能说明DHT11单总线通信特点与DATA→D2接法(含上拉电阻)
  2. 会用 readTemperature/readHumidity 读取温湿度,并处理读取失败(NaN)
  3. 能完成水位模块AO→A0接线,用阈值把0~1023分成干/少水/较多水三状态
  4. 能完成"室温对照、手握或吹风、水位变化"的环境数据采集与记录

DHT11温湿度传感器

DHT11把温度(0~50℃,±2℃)和湿度(20~90%RH)放在一个模块里,用一根数据线(单总线)与Arduino通信:主机发请求,模块回40位数据(含校验和)。

DHT11模块接UNO:VCC→5V、DATA→D2、GND→GND
DHT11模块接UNO:VCC→5V、DATA→D2、GND→GND
DHT11接UNO面包板实物(DATA线上拉电阻)
DHT11接UNO面包板实物(DATA线上拉电阻)
#include <DHT.h>
DHT dht(2, DHT11);               // DATA → D2
void setup() {
  dht.begin();
  Serial.begin(9600);
}
void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  if (isnan(t) || isnan(h)) {     // 读取失败:非数字
    Serial.println("Read error! Check wiring.");
  } else {
    Serial.print("T:"); Serial.print(t);
    Serial.print("C  H:"); Serial.print(h);
    Serial.println("%");
  }
  delay(2000);                    // 采样间隔≥1秒
}
💡 为什么读出 nan?

isnan 判断"非数字":接线松动、DATA接错脚、上电太快、校验和错误都会导致读取失败。DHT11两次采样至少间隔1秒,读太快也会失败——所以程序里 delay(2000)。失败时先查接线,再等2秒重试。

串口输出示例:正常温湿度读数与
串口输出示例:正常温湿度读数与"Checksum error"校验错误对比

水位传感器与阈值分档

水位传感器模块:AO模拟输出→A0,VCC→5V,GND→GND
水位传感器模块:AO模拟输出→A0,VCC→5V,GND→GND

水位模块裸露的平行走线是感应面:水淹没越多,AO输出越高(analogRead 0~1023)。用两个阈值把读数分成三档:干燥 / 少量水 / 较多水

const int waterPin = A0;
void loop() {
  int w = analogRead(waterPin);
  Serial.print("Water: ");
  Serial.println(w);
  if (w < 300) {
    Serial.println("-> dry");
  } else if (w < 600) {
    Serial.println("-> low");
  } else {
    Serial.println("-> high");
  }
  delay(1000);
}
阈值必须实测标定300/600 只是示例分档线。先把传感器干燥、蘸少量水、浸入较深水中各测一次读数,再把分档线定在实测值之间——和第9周定光照阈值是同一套方法。
使用注意感应面只蘸水、不深泡:测完用纸巾擦干保持干燥,防止水渍氧化影响读数寿命。

实操:温湿度与水位数据采集

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,DHT11三个脚(VCC/DATA/GND)不可接反
  • 水位模块仅蘸水测试,不得整块浸水或沾湿电路板其他部分
  • 读取失败时先断电查线,不得带电插拔模块

两路输入分开验证:先串口读温湿度并做干扰实验,再标定水位三档,最后完成整套环境数据采集记录。

DHT11读数验证

上传程序,串口应每2秒输出一行温湿度。先记下室温读数作为基准。

温湿度干扰实验

手指捏住DHT11约30秒或对着哈气,观察温度上升、湿度上升;再用扇风方式让其回落,记录变化过程。

水位三档标定

干燥→蘸少量水→浸入较多水,各记录一次AO读数,据实测确定两档分界线,替换程序中的300/600。

三状态复测

用新阈值重测三种水位状态,串口档位判断应与实际一致;完成后擦干传感面并断电整理。

验收标准温湿度读数稳定且对手握/哈气有响应;三种水位下串口档位判断全部正确。

第16周任务工单:DHT11温湿度与水位采集下载工单

操作确认清单(点击方框打勾)

  • DHT11三线+上拉接线正确,串口每2秒输出温湿度
  • isnan失败处理生效(拔线时提示错误而不是死等)
  • 完成室温基准与手握/吹风变化记录
  • 完成水位干燥/少量水/较多水三档标定
  • 新阈值下三状态判断与实际一致

数据记录:温湿度干扰实验

状态温度℃湿度%备注
室温基准
手握/哈气后
扇风回落后

数据记录:水位三档标定

状态AO读数判定档位分档线
干燥
少量水
较多水
课外任务提交环境数据采集记录:整理温湿度干扰实验与水位三档标定数据,写出你选定的两条分档线及理由。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、模块蘸水不浸板,无器件损坏543215432154321
电路接线DHT11与水位模块接线正确543215432154321
程序代码库调用与isnan处理正确,水位阈值按实测修改543215432154321
功能实现温湿度有响应、水位三档判断正确543215432154321
记录素养两组实验数据完整,分档线理由充分543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第17周 · 项目七

传感+显示+报警联调排故

📅 2026年12月15日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能按"先分模块验证、再总线联调"的顺序排查系统故障
  2. 能完成DHT11+水位+LCD+蜂鸣器四模块统一接线与程序整合
  3. 会用 lcd.setCursor 分行显示传感数据,等宽覆盖消除显示残留
  4. 能实现水位超限 tone 报警,并核对LCD、蜂鸣器、串口三处结果一致

从"各自能跑"到"合在一起能跑"

单模块各自验证通过(第15/16周),合并后却常常出问题:引脚冲突、变量覆盖、显示残留。本周的联调方法是:①每个模块单独点亮 → ②两两合并 → ③整体联调,每一步都保留能工作的版本,出错就知道是哪次合并引入的。

接线变更:LCD 引脚调整第12周 LCD 用 lcd(12,11,5,4,3,2),其数据线 D7 占用了 D2,与本周 DHT11(DATA→D2) 冲突。本周起 LCD 改接 lcd(12, 11, 4, 5, 6, 7)(RS→12、E→11、D4→4、D5→5、D6→6、D7→7),D2 让给 DHT11,D9/D10 留给第18周超声波。改线后同步修改程序并重新上传验证。
1602 LCD接线示意(注意按改线表:D4→4、D5→5、D6→6、D7→7)
1602 LCD接线示意(注意按改线表:D4→4、D5→5、D6→6、D7→7)
1602 LCD接线实物(含电位器调对比度)
1602 LCD接线实物(含电位器调对比度)
DHT11 DATA→D2水位AO→A0LCD RS/E→12/11,D4-D7→4/5/6/7蜂鸣器→D8

整合程序与报警逻辑

#include <DHT.h>
#include <LiquidCrystal.h>
DHT dht(2, DHT11);
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);  // 改线后接法
const int waterPin = A0, buzzerPin = 8;
void setup() {
  dht.begin();
  lcd.begin(16, 2);
  pinMode(buzzerPin, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  float t = dht.readTemperature();
  float h = dht.readHumidity();
  int w = analogRead(waterPin);
  lcd.setCursor(0, 0);            // 第1行:温湿度
  lcd.print("T:"); lcd.print(t);
  lcd.print(" H:"); lcd.print(h);
  lcd.setCursor(0, 1);            // 第2行:水位/报警
  if (w >= 600) {
    lcd.print("Water HIGH! WARN");
    tone(buzzerPin, 1000);        // 水位报警
  } else {
    lcd.print("Water OK       "); // 等宽覆盖防残留
    noTone(buzzerPin);
  }
  Serial.println(w);
  delay(1000);
}
有源蜂鸣器:tone(D8,1000)驱动发声,noTone停止
有源蜂鸣器:tone(D8,1000)驱动发声,noTone停止
💡 显示残留与变量覆盖两大坑

显示残留:从"WARN"切回"OK"时,旧字符还留在屏上(如显示"OKR")。对策:两个分支输出等宽文本(不足16字符补空格),或改用 lcd.clear()(会闪烁)。

变量覆盖:合并程序时新旧代码都定义了 w、t 这类短名变量,互相顶替导致读数错乱。对策:合并前先统一变量名,一个变量只表达一个含义。

实操:四模块联调与故障排查

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,多模块共用5V时先核对每一路极性再上电
  • LCD电位器轻调即可,不得带电反复插拔排线
  • 报警测试音量较大,长时间不用时注释掉tone行

按"分模块→合并→整体"三步走:先确认每个模块单独能工作,再合并程序统一显示与报警,最后完成三种状态的一致性检查。

分模块验证

①只接LCD→屏上出现光标;②只接DHT11→串口出数;③只接水位→串口出数;④只接蜂鸣器→tone发声。四项全过才进入合并。

合并程序上传

按改线表接线,上传整合程序。LCD第1行显示温湿度,第2行显示水位状态。

三状态一致性检查

状态一正常:OK不响;状态二手握DHT11:数值变化;状态三水位超线:LCD显示WARN+蜂鸣器响。每状态核对LCD、蜂鸣器、串口三处结果是否一致,记入检查单。

排错实战

教师设置1处故障(接线或代码),按统一顺序排查:供电→公共地→引脚号→元件方向→程序语法→串口或显示结果,边查边说依据。

验收标准三状态下LCD/蜂鸣器/串口三处表现全部一致;故障能在5分钟内按顺序定位并说明理由。

第17周任务工单:传感+显示+报警联调排故下载工单

操作确认清单(点击方框打勾)

  • 能说明"分模块→合并→整体"的联调顺序
  • LCD按改线表(12,11,4,5,6,7)接线并显示正常
  • 第1行温湿度、第2行水位,无显示残留
  • 水位超线时LCD提示WARN且蜂鸣器报警
  • 三状态×三处(LCD/蜂鸣器/串口)结果一致

联调检查单:三状态一致性

测试状态LCD显示蜂鸣器串口输出是否一致
正常(OK)不响
手握DHT11
水位超线

故障排查记录(教师设置)

故障现象排查步骤定位原因修复方法
课外任务完成联调检查单:把三状态一致性检查与教师故障的排查过程整理成完整检查单提交。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、多模块极性核对,无器件损坏543215432154321
电路接线四模块接线与改线表一致543215432154321
程序代码整合正确,setCursor分行、等宽覆盖、tone/noTone使用规范543215432154321
功能实现三状态显示与报警一致,无残留错乱543215432154321
记录素养检查单填写完整,排故过程有依据543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第18周 · 项目七

多传感系统全联调

📅 2026年12月22日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能完成超声波+温湿度+LCD+蜂鸣器五模块系统的规划与搭接
  2. 会用模块化变量(distance/temperature/humidity)组织数据流
  3. 能编写复合条件 if(distancelimit) 触发报警
  4. 能按"近距离/正常距离/温度变化"3种工况各测3次,记录系统差异

系统结构与数据流

本周在周四模块基础上加回超声波,构成完整的"多传感采集→综合判断→显示报警"系统。程序按①采集②判断③显示④报警四步组织,每步一个函数,变量全局共享:

#include <DHT.h>
#include <LiquidCrystal.h>
DHT dht(2, DHT11);
LiquidCrystal lcd(12, 11, 4, 5, 6, 7);
const int trigPin = 9, echoPin = 10, buzzerPin = 8;
int distThr = 20, tempLimit = 30;   // 两个报警阈值
float distance, temperature, humidity;  // 模块化变量
void loop() {
  readSensors();      // ①采集
  checkAlarm();       // ②判断
  showDisplay();      // ③显示
  doAlarm();          // ④报警
  delay(300);         // 不宜过长,保证响应
}
💡 判断函数怎么写?
void checkAlarm() {
  digitalWrite(trigPin, LOW);
  delayMicroseconds(2);
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  long d = pulseIn(echoPin, HIGH, 30000); // 30ms超时防卡死
  distance = d * 0.034 / 2;
  temperature = dht.readTemperature();
  humidity = dht.readHumidity();
}
void doAlarm() {
  bool alarm = (distance > 0 && distance < distThr)
            || (temperature > tempLimit);
  if (alarm) tone(buzzerPin, 1000);
  else noTone(buzzerPin);
}
为什么加第三个参数 30000pulseIn 默认死等回波,前方无障碍时程序可能停1秒。限制最长等待30ms(约5m量程),超时返回0,系统循环保持流畅——这是多模块系统的稳定细节。

三大典型故障与预防

  • 引脚冲突:合并时核对占用表——D2(DHT11)、A0(水位)、12/11/4/5/6/7(LCD)、9/10(超声波)、8(蜂鸣器),任何两路不得共用
  • 供电不足:五模块全接后从UNO的5V取电偏紧,必要时超声波单独验证一次供电是否稳定
  • 循环延时过长:delay超过2秒会让超声波读数明显滞后,报警"慢半拍",控制在300~500ms
D2:DHT11A0:水位D9/D10:Trig/EchoD12/11/4/5/6/7:LCDD8:蜂鸣器

实操:五模块系统全联调

⚠ 安全操作提示(操作前逐条确认)
  • 断电接线,按引脚占用表逐路核对后统一上电
  • 多模块共用电源,禁止在带电状态下增加模块
  • 报警持续响时先断蜂鸣器一路再排查,保护听力与器件

在第17周四模块系统上加回超声波。重点是数据流的模块化组织与复合条件报警的3工况验证。

规划并搭接全系统

对照引脚占用表接线,先画简易接线草图再动手,接完组内互查一遍再上电。

上传骨架程序

先让四步函数空跑通(LCD显示、串口出数),再逐个填实采集、判断、报警逻辑。

3工况×3次测试

①近距离(<20cm):必报警;②正常距离:不报警;③温度变化(手握DHT11超过tempLimit):报警。每种工况重复3次,记录响应差异(响应时间、误报次数)。

阈值微调

根据测试结果微调distThr与tempLimit,既不漏报也不误报,固定参数请教师验收。

验收标准3种工况各3次全部触发正确、无误报漏报;系统连续运行5分钟不死机、读数不卡顿。

第18周任务工单:多传感系统全联调下载工单

操作确认清单(点击方框打勾)

  • 画出系统框图:采集→判断→显示→报警四步
  • 引脚占用表核对无误,无共用引脚
  • 复合条件报警逻辑正确(距离或温度任一超限即响)
  • 完成3工况×3次测试并记录差异
  • 连续运行5分钟稳定,参数微调有记录

数据记录:3工况×3次测试

工况第1次第2次第3次响应时间误报/漏报
近距离<20cm
正常距离
温度超限
课外任务完成传感系统联调记录:整理引脚占用表、3工况测试数据与阈值微调过程,形成一份系统调试报告。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作断电接线、引脚占用表核对,无器件损坏543215432154321
电路接线五模块布局合理,接线规范543215432154321
程序代码四步函数分工清晰,pulseIn超时与复合条件正确543215432154321
功能实现3工况触发正确,连续运行稳定543215432154321
记录素养9次测试数据完整,差异分析有依据543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第19周 · 项目八

人体感应、红外遥控与继电器

📅 2026年12月29日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能说明HC-SR501人体感应模块的输出特性与延时/距离调节方法
  2. 能完成 PIR OUT→D7、继电器IN→D8、红外接收→D2 的联动控制电路
  3. 理解继电器高低电平触发逻辑,会用 digitalRead 控制继电器通断
  4. 能完成无人/有人/遥控开启/遥控关闭4种工况测试并记录

人体感应与继电器

HC-SR501正反面:延时调节、距离调节电位器与触发方式跳线
HC-SR501正反面:延时调节、距离调节电位器与触发方式跳线

PIR感应到人体红外变化时,OUT脚输出高电平并保持一段时间(延时电位器可调)。继电器是"用小电流控制大电流"的开关:模块IN脚收到控制信号,内部触点吸合,外接电路接通。

5V继电器模块(KY019):GND/+5V/信号三接口
5V继电器模块(KY019):GND/+5V/信号三接口
UNO控制继电器:NO/COM/NC端子与吸合指示灯
UNO控制继电器:NO/COM/NC端子与吸合指示灯
const int pirPin = 7, relayPin = 8;
void setup() {
  pinMode(pirPin, INPUT);
  pinMode(relayPin, OUTPUT);
  digitalWrite(relayPin, HIGH);  // 低电平触发:HIGH=断开
  Serial.begin(9600);
}
void loop() {
  int state = digitalRead(pirPin);
  Serial.println(state);
  if (state == HIGH) {
    digitalWrite(relayPin, LOW);  // 有人:吸合
  } else {
    digitalWrite(relayPin, HIGH); // 无人:断开
  }
  delay(200);
}
触发电平以实测为准常见继电器模块为低电平触发(IN=LOW吸合),也有高电平触发型号。先上电实测:写入HIGH看指示灯灭还是亮,再决定程序里写HIGH还是LOW。

红外遥控解码

红外接收头把遥控器的红外信号解码为键值。安装 IRremote 库后,先"读键值":按下遥控器按键,串口打印对应编码;再用 switch 判断键值执行动作。

💡 读键值示例(先跑通再整合)
#include <IRremote.h>
void setup() {
  Serial.begin(9600);
  IrReceiver.begin(2, true);   // 红外接收→D2
}
void loop() {
  if (IrReceiver.decode()) {
    Serial.println(IrReceiver.decodedIRData.command, HEX);
    IrReceiver.resume();
  }
}

把每个按键的键值记下来(不同遥控器不同),整合时用if(键值==0x45) 开、if(键值==0x46) 关 的方式接入主程序。

安全红线:只接低压继电器输出端本周只允许接LED等低压直流负载严禁连接220V市电!市电侧接线必须由持证电工操作,实训台上绝不尝试。

实操:人来灯亮、遥控开关

⚠ 安全操作提示(操作前逐条确认)
  • 继电器输出端仅接低压LED,严禁任何市电操作
  • 断电接线,PIR上电后需约1分钟初始化稳定再测试
  • 红外接收与PIR共用5V,接线时逐路核对极性

三路输入输出整合:PIR检测人体→继电器通断LED;红外遥控作为手动开关。分模块验证后做4工况测试。

PIR单独验证

OUT→D7,串口监视digitalRead结果:靠近挥手应变1,静置约延时后回0。初始化等待约1分钟,期间读数不可信。

继电器单独验证

LED负载接NO/COM。先实测触发电平,再上传翻转程序:吸合指示灯亮、LED点亮。

继电器吸合状态:指示灯亮,负载电路接通
继电器吸合状态:指示灯亮,负载电路接通

红外读键值

接收头→D2,跑通读键值程序,记录"开"与"关"两个按键的编码。

整合与4工况测试

①无人:灯灭;②有人:灯亮;③遥控"开"键:强制亮;④遥控"关"键:强制灭。每种工况测3次,记录PIR自动模式与遥控手动模式的切换逻辑是否清晰。

验收标准4种工况各3次动作正确;PIR自动控制与遥控手动控制互不冲突(遥控优先或自动恢复,规则明确)。

第19周任务工单:人体感应、红外遥控与继电器下载工单

操作确认清单(点击方框打勾)

  • 三模块接线正确(PIR→D7、继电器→D8、红外→D2)
  • 已实测继电器触发电平并在程序中正确使用
  • 记录遥控器"开/关"两个按键的键值
  • 完成无人/有人/遥控开/遥控关4工况测试
  • 继电器输出端只接了低压LED负载

数据记录:4工况测试

工况第1次第2次第3次LED状态继电器指示灯
无人
有人
遥控开启
遥控关闭

红外键值记录

按键键值(HEX)功能
开启
关闭
课外任务提交联动控制测试记录:整理继电器触发电平实测结果、红外键值表与4工况测试数据。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作仅接低压负载、断电接线、PIR初始化等待543215432154321
电路接线三模块接线正确,继电器端子接法规范543215432154321
程序代码digitalRead判断、触发电平、红外键值判断正确543215432154321
功能实现4工况动作正确,自动/手动模式不冲突543215432154321
记录素养触发电平、键值、工况数据完整543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%

第20周 · 项目九

综合实战与期末考查

📅 2027年1月5日📍 5502机房🕐 周二 1-4节

学习目标

  1. 能以小组为单位选定主题模块(距离/温湿度/水位/光敏/人体感应)
  2. 能统一规划5V/GND/输入口/输出口,先画接线图再分段搭接
  3. 能按"采集→判断→显示→报警"步骤组织程序,逐模块验证后合并
  4. 能完成成果展示:≥2种工况演示、≥3次重复测试,通过考查验收

综合系统设计方法

本周把一学期所学串成一个完整作品。拿到题目先别急着接线——按四步走:①选模块定功能 → ②画接线图分引脚 → ③分段搭接逐个验证 → ④合并程序整体调试

可选模块与典型用途信号脚参考接法典型功能
HC-SR04超声波Trig/EchoD9/D10测距报警、避障提示
DHT11温湿度DATAD2环境监测、超温报警
水位传感器AOA0水位三档、溢水报警
光敏分压中点A1感光灯、暗光提示
HC-SR501人体感应OUTD7人来灯亮、布防联动
LCD1602RS/E/D4-D712/11/4/5/6/7数据显示(改线表接法)
蜂鸣器/继电器控制脚D8声音报警/低压负载开关
// 程序骨架:四步结构贯穿始终
void loop() {
  readSensors();      // ① 读全部传感器
  checkThresholds();  // ② 逐项阈值判断
  updateDisplay();    // ③ 刷新LCD/串口
  doActions();        // ④ 报警/开关动作
  delay(300);
}
代码规范要求变量用有意义的名字(waterLevel,不用w2);阈值集中定义在程序开头便于调整;每个功能函数前加一行注释说明用途。

考查验收标准

验收项要求分值占比
功能演示≥2种工况演示成功(如报警触发/解除)40%
重复测试每种工况≥3次测试,结果稳定20%
接线规范先有接线图,实际接线与图一致15%
程序质量变量命名、注释、阈值集中管理15%
实训记录数据记录完整,故障排查有过程10%
  • 组员分工:接线、编程、记录、汇报四角色,人人都要参与实操
  • 常见失误:跳过分模块验证直接全接(出错查不动);只演示不测试(工况只跑1次不算通过)

实操:小组综合作品实战

⚠ 安全操作提示(操作前逐条确认)
  • 继电器类作品仍只接低压负载,严禁市电
  • 多模块供电前先核对总电流,必要时分区上电
  • 焊接或改装结构件须教师在场,规范使用工具

小组选题→设计→搭接→调试→展示。教师按验收标准逐组考查,作品、程序与实训记录三项同时提交。

选题与方案(30分钟)

小组确定主题(如"智能环境监测站""自动布防灯"),列出模块清单、画出接线图、写清2种以上目标工况,报教师审核。

分段搭接逐个验证

按接线图搭一路验一路:传感器出数、显示正常、执行动作,各模块单独通过后再合并。

引脚规划参考:数字口/模拟口/电源口分布
引脚规划参考:数字口/模拟口/电源口分布

合并调试与测试

按四步骨架合并程序;每种目标工况≥3次测试,记录响应与误差,微调阈值至稳定。

展示与考查验收

每组5分钟:演示≥2种工况、说明系统框图与分工、提交作品+程序+实训记录。教师按表评分。

验收标准功能演示成功、重复测试稳定、三项材料齐全——三者同时满足才判定考查通过;未通过小组利用机动安排补测。

第20周任务工单:综合实战与期末考查下载工单

操作确认清单(点击方框打勾)

  • 小组方案含模块清单、接线图、目标工况,经教师审核
  • 接线与图纸一致,引脚无冲突
  • 程序按四步骨架组织,命名与注释规范
  • 完成≥2种工况演示,每种≥3次测试
  • 作品、程序、实训记录三项材料齐全

作品信息

项目内容
作品名称
选用模块
小组分工

工况测试记录

工况第1次第2次第3次结果稳定性
工况一:
工况二:
课外任务提交作品、程序与实训记录:作品现场验收,程序源码与实训记录(含方案图、测试数据、故障排查)一周内上传。

评价反馈

对照下表自评、互评,教师复评。点击方格打分(每项 1-5 分)。

评价项目评价标准自评互评师评
安全操作低压负载、分区上电、规范使用工具543215432154321
电路接线按图施工,逐路验证,引脚无冲突543215432154321
程序代码四步骨架清晰,命名注释规范,阈值集中管理543215432154321
功能实现≥2工况演示成功,≥3次测试稳定543215432154321
记录素养方案图、测试数据、排查过程完整可溯543215432154321

评分说明:5=优秀 · 4=良好 · 3=合格 · 2=需改进 · 1=不合格 | 平时考核占总评 50%,平时测验 30%,期末考查 20%