第98-7课:使用Arduino和5个LED制作走马灯
行走灯(也称为“追逐”灯或“Knight Rider”灯)是经典的 Arduino 入门项目之一——而且理由充分。它教你如何按顺序控制多个输出、如何为事件计时,以及如何考虑限流电阻,同时还能做出视觉上令人满意的效果。在这个项目中,你将把五个 LED 连接到 Arduino,并对它们进行编程,使每个 LED 依次点亮,从而营造出单个灯光沿着这一排“行走”的错觉。
一旦你理解了这个模式,就可以把它重新用于数量惊人的现实世界制作中:
- 装饰照明:用于架子、相框或模型的追逐边框。
- 方向指示器:用于道具车辆或电动自行车的顺序转向灯效果。
- 进度或状态显示:一排 LED 随着过程完成而前进。
- 游戏和记分牌道具:“移动目标”或等级指示器。
- 教学辅助:对数字输出和定时最清晰的演示。
同样的五 LED 接线会在本课程的其他几个项目中重复使用,因此你在这里搭建的硬件会成为一个可复用的平台。
行走灯的工作原理
原理与点亮单个 LED 完全相同——只是重复五次(视频 30:47 处)。每个 LED 都通过各自的限流电阻连接到自己的 Arduino 引脚,并且所有电阻共用一条公共接地轨。然后,程序将一个引脚置为 HIGH,等待,再置为 LOW,等待,然后继续到下一个引脚。因为同一时间只有一个 LED 点亮,所以眼睛会把这一序列理解为运动。
两个时间值赋予了这个效果其特征。点亮时间控制每个 LED 保持点亮多久,熄灭时间控制下一个 LED 点亮前的间隔。短点亮时间配合长熄灭时间会产生一个快速移动的单个光点;长点亮时间配合短熄灭时间会产生更平滑、更连续的扫动效果(视频 35:00 处)。
硬件和元件
- 1 × Arduino 板(Uno、Nano 或类似型号)
- 5 × LED(任意颜色;混用颜色会让效果更容易辨认)
- 5 × 电阻 — 300 Ω 到 1 kΩ 都很合适
- 1 × 面包板
- 跳线
- 用于供电的 USB 线或电池组
如果你之后想添加一个按钮变体,还需要一个瞬时按钮和两根额外的跳线。
选择电阻值
LED 的正向电压约为 2 V,并且需要约 10 mA 才能达到全亮度(视频 03:49 处)。在 5 V 电源下,电阻必须承担剩余的 3 V。应用欧姆定律,R = V / I = 3 V / 0.01 A = 300 Ω。实际上,从 300 Ω 到约 1 kΩ 的任何值都可以——电阻越高,LED 越暗,但电路越安全、越高效(视频 05:33 处)。
接线指南
将五个 LED 插入面包板,使它们的阳极(较长的引脚)朝向同一方向。将每个阴极(较短、侧面平坦的引脚)连接到各自的电阻,并将五个电阻的另一端都连接到公共接地轨。然后从每个阳极引一根跳线到 Arduino 引脚。
在这个制作中,LED 分配到引脚 3、4、5、6 和 7(视频 31:29 处)。引脚编号在程序顶部定义,所以如果你更喜欢不同的安排,只需要更改这五行。
代码说明
这个程序刻意保持简单,以便初学者能够理解每一行。只有最顶部的代码块需要根据自己的设置进行编辑。
const int LED1 = 3;
const int LED2 = 4;
const int LED3 = 5;
const int LED4 = 6;
const int LED5 = 7;
int offTime = 30; // 每个 LED 在 OFF 状态等待的时间
int onTime = 100; // 每个 LED 处于 ON 的时间
引脚定义。这五行 const int 将每个 LED 映射到一个物理 Arduino 引脚。由于它们被声明为 const,这些值之后不能在程序中更改——这是一种安全习惯,可防止意外重新赋值。如果你将 LED 接到不同的引脚,只需更改这里的数字,其他都不用改。
onTime 和 offTime。这两个整数是项目中唯一的“行为”变量,也是你会想要试验的变量:
onTime— 每个 LED 保持点亮的时间(以毫秒为单位)。值越大,每一步感觉越慢、越从容。offTime— LED 熄灭后、下一个 LED 点亮前的暂停时间。值越小,灯光移动得越快。
试试 onTime = 200 和 offTime = 200,可以获得均匀、中速的追逐效果;或者 onTime = 30 和 offTime = 30,获得非常快、几乎模糊的效果(视频 36:06 处)。
setup() 函数只运行一次,只是将全部五个引脚设置为 OUTPUT 模式。loop() 函数随后对每个 LED 重复同样的四步模式:将引脚驱动为 HIGH,等待 onTime,将其驱动为 LOW,等待 offTime。当第五个 LED 完成后,循环从第一个重新开始,形成无尽的走动效果。
实时项目与演示
使用默认值时,LED 会以轻松的步伐沿着一排逐步移动。上传将 onTime 和 offTime 设置为 200 ms 的草图,会得到稳定、均匀的行进效果;将两者都降到 30 ms,会让光线几乎快到难以跟上地掠过这一排(视频 36:21 处)。
一旦它工作起来,可以尝试两个有用的实验:
- 让点亮时间短于熄灭时间,以形成明显的移动光点。
- 让点亮时间长于熄灭时间,以形成柔和、重叠的辉光。
同样的五 LED 接线会在下一个项目中复用,在那里按钮会让灯光一次前进一步。该制作内容见 课程 98-8:使用 Arduino 的按钮和 LED 实现走马灯。
如果你想通过模拟输入而不是按钮来驱动这一排 LED,请参见 课程 98-9:使用 Arduino 的 LED 电压电平表,或使用电位器的走马灯。
进一步拓展
一旦基本的走动效果可以工作,下一步自然就是让灯光来回反弹,而不是从最后一个 LED 跳回第一个。这纯粹是代码练习 — 不需要额外硬件 — 也是练习循环和数组的好方法。你还可以将此项目与按钮版本结合起来,构建一个可手动推进的显示装置。
本视频中的相关项目
- 课程 98-1:如何使用 Arduino 打开和关闭 LED
- 课程 98-2:如何使用 Arduino 通过按钮打开和关闭 LED
- 课程 98-3:如何使用 Arduino 通过按钮打开/关闭翻转 LED
- 课程 98-4:使用 Arduino 让 LED 灯渐隐:亮度控制
- 课程 98-5:使用 Arduino 在按下按钮时让灯光渐隐
- 课程 98-6:使用 Arduino 的跷跷板 LED 游戏
- 课程 98-8:使用 Arduino 的按钮和 LED 实现走马灯
- 课程 98-9:使用 Arduino 的 LED 电压电平表,或使用电位器的走马灯
- 课程 98-10:Arduino 交通灯
章节
- [00:00] 十个 LED 项目概述
- [01:22] Arduino 分步课程介绍
- [02:29] 什么是 LED 以及如何识别其引脚
- [03:49] 计算限流电阻
- [30:47] 介绍走马灯项目
- [31:06] 五个 LED 的接线图
- [32:52] 走马灯代码讲解
- [34:39] 演示并更改定时值
- [36:41] 使用按钮推进灯光(单独教程)
- [42:25] 使用电位器的 LED 电压条(单独教程)
- [49:25] Arduino 交通灯(单独教程)
This code has not been parsed yet. Please return to the admin panel to parse it.
|||您可能需要的东西
-
亚马逊SunFounder Arduino Learning Kit on AliExpresss.click.aliexpress.com
-
亚马逊
-
亚马逊
资源与参考
-
文档SunFounder 3合1物联网/智能车/学习套件的文档docs.sunfounder.com
文件📁
Arduino 库(zip 格式)
-
SunFounder 的 3 合 1 智能汽车学习套件源代码
3in1-kit-main-v2.zip12.80 MB
用户手册
-
SunFounder 3合1 Arduino智能车组装手册本文档逐步展示SunFounder 3合1 Arduino智能车的组装过程
SunFounder_car_assembly_manual.pdf1.20 MB