搜索代码

第98-7课:使用Arduino和5个LED制作走马灯

第98-7课:使用Arduino和5个LED制作走马灯

行走灯(也称为“追逐”灯或“Knight Rider”灯)是经典的 Arduino 入门项目之一——而且理由充分。它教你如何按顺序控制多个输出、如何为事件计时,以及如何考虑限流电阻,同时还能做出视觉上令人满意的效果。在这个项目中,你将把五个 LED 连接到 Arduino,并对它们进行编程,使每个 LED 依次点亮,从而营造出单个灯光沿着这一排“行走”的错觉。

面包板上的 5 个 LED,显示电阻连接到 Arduino UNO
面包板上的 5 个 LED,显示电阻连接到 Arduino UNO

一旦你理解了这个模式,就可以把它重新用于数量惊人的现实世界制作中:

  • 装饰照明:用于架子、相框或模型的追逐边框。
  • 方向指示器:用于道具车辆或电动自行车的顺序转向灯效果。
  • 进度或状态显示:一排 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 处)。

带按钮的 Arduino 行走灯 LED 原理图
带按钮的 Arduino 行走灯 LED 原理图

接线指南

Arduino 上 5 个 LED 的接线
Arduino 上 5 个 LED 的接线

将五个 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 = 200offTime = 200,可以获得均匀、中速的追逐效果;或者 onTime = 30offTime = 30,获得非常快、几乎模糊的效果(视频 36:06 处)。

setup() 函数只运行一次,只是将全部五个引脚设置为 OUTPUT 模式。loop() 函数随后对每个 LED 重复同样的四步模式:将引脚驱动为 HIGH,等待 onTime,将其驱动为 LOW,等待 offTime。当第五个 LED 完成后,循环从第一个重新开始,形成无尽的走动效果。

实时项目与演示

使用默认值时,LED 会以轻松的步伐沿着一排逐步移动。上传将 onTimeoffTime 设置为 200 ms 的草图,会得到稳定、均匀的行进效果;将两者都降到 30 ms,会让光线几乎快到难以跟上地掠过这一排(视频 36:21 处)。

一旦它工作起来,可以尝试两个有用的实验:

  • 让点亮时间短于熄灭时间,以形成明显的移动光点。
  • 让点亮时间长于熄灭时间,以形成柔和、重叠的辉光。

同样的五 LED 接线会在下一个项目中复用,在那里按钮会让灯光一次前进一步。该制作内容见 课程 98-8:使用 Arduino 的按钮和 LED 实现走马灯

如果你想通过模拟输入而不是按钮来驱动这一排 LED,请参见 课程 98-9:使用 Arduino 的 LED 电压电平表,或使用电位器的走马灯

进一步拓展

一旦基本的走动效果可以工作,下一步自然就是让灯光来回反弹,而不是从最后一个 LED 跳回第一个。这纯粹是代码练习 — 不需要额外硬件 — 也是练习循环和数组的好方法。你还可以将此项目与按钮版本结合起来,构建一个可手动推进的显示装置。

本视频中的相关项目

章节

  • [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 交通灯(单独教程)

图像

wiring of 5 LED on Arduino
wiring of 5 LED on Arduino
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs
Schematic for Arduino walking light LEDs with push button
Schematic for Arduino walking light LEDs with push button
面包板上5个LED与电阻连接到Arduino UNO
面包板上5个LED与电阻连接到Arduino UNO
939-Lessson 98-LED-7: Arduino code walking LED light
语言: C++
This code has not been parsed yet. Please return to the admin panel to parse it.

文件📁

Arduino 库(zip 格式)

用户手册