资料介绍
描述
该项目是一个实体的便携式 LED 标志,形状为 Counter-Strike : Global Offensive (CS:GO) 团队 Astralis 的标志。它主要基于 FastLED 库以及可编程的 WB2812B LED 灯条。一切都由 Arduino Nano 和便携式移动电源供电。
这旨在遍历项目的各个部分,例如:
- 标志是如何构建的
- 电路和单个组件
- 代码以及它如何将所有内容连接在一起
标牌是如何建造的?
标志的主要部分由木质刨花板制成,并按照 Astralis 标志的轮廓切割而成。切口的高度为 50 厘米,宽度为 40 厘米。手柄由 2、1 厘米 x 2、1 厘米的木梁组成,用胶带包裹,以提高长时间握持时的舒适度。
连接物理接口的控制箱由makercase.com 制作,它可以生成给定形状的切口 - 在这种情况下,是一个打开的盒子 - 具有不同的测量值,可以导出为 SVG 文件。然后将该文件导入 Adobe Illustrator,在其中添加最终细节,例如控件的文本雕刻和按钮的剪切。然后用激光切割机切割控制箱,最后用木胶粘在一起。请参阅图像文件夹下的图像。
使用什么硬件?
用于使标志工作的组件如下:
- Arduino纳米
- WS2812B 可寻址 RGB LED 灯条
- 7段显示
- 74HC595 移位寄存器
- 按钮
WS2812B RGB LED灯条
该项目的核心是能够以不同类型的照明序列照亮标志本身。WS2812B 可寻址 LED 灯条有多种型号,尺寸、密封剂或LED 密度不同。对于这个项目,我使用了 60 个 LED 的密度。仪表不防水,因为它将在比赛期间在室内使用。条带用双面胶带直接粘在板上。它直接从为该项目中的所有组件供电的移动电源提供 5v 电压,以及一个 1000 μF 的电容器,以节省灯带上的第一个 LED 以应对潜在的电涌,从而将它们煎炸。你可以在这里阅读更多。
7段显示
该显示器内部只有 8 个 LED。它被分成称为 a、b、c、d、e、f、g 和 DP 的段,并且可以以不同的组合点亮以表示阿拉伯数字和点 (DP)。此 GIF 显示了每个 LED 的寻址方式:
为了快速识别标志正在运行的照明顺序,可以相当快地读出数字,因为它位于背面的顺序按钮旁边。当序列循环时,数字将从“1”开始,表示序列已重置。作为故障保险,如果发生错误,显示器被编程为显示“E”。
显示的数字取决于通过 74HC595 移位寄存器发送多少位,这将在下一节中详细说明。
您可以在此链接上进一步阅读 7 段显示器以及其他用途。
74HC595 - 位移位寄存器
通常,为了控制 7 段显示器中的每个 LED,需要将每个引脚连接到 Arduino。这样,如果您要使用多个数字引脚,您将很快用完引脚。这就是移位寄存器派上用场的地方。通过串联一个移位寄存器,我们只需使用 3 个 I/O 引脚就可以完成控制多达 8 个 LED 的任务。不仅如此;如果您想控制更多显示器,您可以将更多的移位寄存器链接在一起,从而节省更多的引脚。对于这个项目,一个数字就足够了。
595 有两个寄存器(可以认为是“内存容器”),每个寄存器只有 8 位数据。根据您发送到 595 的数据,数据将首先被存储,并且只有在 595 被锁存后才传输到输出引脚。
您可以在此详细指南中阅读有关 74HC595 的更深入说明。
序列按钮
标志本身的想法是它存储了多个照明序列,您可以通过一个简单的按钮在它们之间切换。主要思想是,通过单次按下,一旦按钮被按下和释放,标志应该进入下一个照明序列。按钮有多种尺寸和形状,但在发送 HIGH 或 LOW 信号方面,它们中的许多都有相同的问题。这通常被称为“弹跳”信号,其中信号在短时间内(通常为几毫秒)快速上下跳跃多次。这可以通过实施所谓的“去抖动”来解决。下图是一个按钮被按下和释放的例子,在稳定之前反弹信号。
去抖
当您物理按下普通按钮时,两块金属会相互接触。如果这两个小金属片不是完全平坦或完全对齐(而且它们不是),那么它们可以建立和断开几次接触,然后再牢固地压在一起以使其始终导电。对于微控制器来说,当您认为您只按下了一次按钮时,该按钮似乎被多次按下且持续时间极短。去抖动就是要确保您和微控制器就按钮按下或释放事件发生的时间达成一致。这就是在没有任何形式的去抖动的情况下注册按钮按下的方式。
最简单的硬件解决方案(如上图所示)是使用 10K 欧姆电阻和 1μF 电容去抖动。对于这个项目,去抖动功能至关重要,因为标志存储了多个照明序列。如果按钮在一个按钮中记录了多个“推动”,则序列将快速循环,从而导致错误的循环。
有关更详细的说明,您可以在此处进一步阅读。
亮度控制
在控制界面的最左侧,可以控制 LED 的亮度。这是通过使用电位计完成的,该电位计充当可变电阻器,通常用于控制电气设备,例如音量控制,或者在这种情况下是照明。但是,根据电位器的转动程度,电阻器只允许总电流的一部分,可以通过模拟信号读取。软件部分将进一步解释如何读取和使用该信号。
有关电位器如何工作的更详细说明,您可以在此处阅读更多信息。
代码是如何工作的?
运行 WS2812B LED 灯条的代码是在FastLED库的帮助下编写的。FastLED 库是一种简单快捷的方法,可以按照您希望的顺序点亮单个 LED,并生成照明模式。
灯光效果主要基于这个网站,展示了一些效果以及代码和设置。这些效果基于for
循环的概念,是运行这些效果的好方法。但是,该项目实现了添加一个按钮以在效果之间进行切换,并且此功能带有一个问题。循环“for
占用”正在运行的代码,并且仅在循环完成后继续。因此,如果您在for
循环运行时按下按钮,则推送不会注册。
正因为如此,为了通过使用全局变量来解决这个问题并减少使用的循环数量,已经重写了所使用的效果。for
下面显示的两个示例具有相同的效果,但以两种不同的方式编写。第一个是原始效果,在运行时没有注册按钮按下,而第二个示例这样做是因为它使用了全局变量,可以在函数外部使用theaterChase.
示例一:
void theaterChase(byte red, byte green, byte blue, int SpeedDelay) {
for (int j=0; j<10; j++) {
//do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (int i=0; i < NUM_LEDS; i=i+3) {
setPixel(i+q, red, green, blue);
//turn every third pixel on
}
showStrip();
delay(SpeedDelay);
for (int i=0; i < NUM_LEDS; i=i+3) {
setPixel(i+q, 0,0,0); //turn every third pixel off
}
}
}
}
示例二:
int theaterDistance = 3;
int theaterDelay = 300;
int theaterJ = 0;
int theaterI = 0;
void theaterChase(byte red, byte green, byte blue) {
if (theaterI == 0) {
for (int i=0; i < NUM_LEDS; i++) {
setPixel(i, 0,0,0);
}
for (int i=0; i < NUM_LEDS; i+=theaterDistance) {
setPixel(i+theaterJ, red, green, blue);
//turn every theaterDistance pixel on
}
showStrip();
theaterJ = (theaterJ + 1) % theaterDistance;
}
theaterI = (theaterI + 1) % theaterDelay;
}
如前所述,LED 的亮度通过电位器进行控制。信号最初被读取为 0 到 1023 之间的值。FastLED 库仅使用 0 到 255 之间的数字来定义亮度。然后需要用map
函数映射数字,如下所示,然后用变量MIN_BRIGHTNESS
和进行约束MAX_BRIGHTNESS
,用作限制器。
int brightnessValue = map(analogRead(brightnessPin), 0, 1023, 0, 255);
FastLED.setBrightness(constrain(brightnessValue, MIN_BRIGHTNESS, MAX_BRIGHTNESS));
正如硬件中的去抖部分所讨论的,按钮在按下和释放时往往会产生“噪音”。下面的代码会在短时间内检查两次,以确保确实按下了按钮。
按钮按下后加sequenceNumber
一,并运行与数字对应的照明功能。它还清除应该保留在 LED 中的所有数据,setAll(0, 0, 0);
并将正确的数字转移到 74HC595 以点亮 7 段显示器上的相应序列号。
// LED lightning sequence control
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
sequenceNumber = (sequenceNumber+1) % 5;
writeAndShift(sequenceNumber + 1);
setAll(0, 0, 0);
}
} // save the current state as the last state, for next time through theloop
lastButtonState = buttonState;
最后,Arduino 需要知道根据sequenceNumber
变量运行哪个照明序列。这是通过使用switch
和case
语句完成的。这些工作就像if
语句一样,但更好看。switch(sequenceNumber)
用于定义语句应该使用哪个声明case
。如果等于 1,则将运行,如果case 1:
等于2 ,依此类推。在 every 下,您定义应该执行的代码。sequenceNumber
case 2:
sequenceNumber
case
switch(sequenceNumber){
case 0:
FadeInOut(0xff, 0x00, 0x00); // Only using red
break;
default:
case
如果值超出给定语句,则用作故障保护。与该语句非常相似else
,如果上述语句均不成立,则您定义应该执行的内容。
附加图像
特别感谢
- 使用Arduino的边缘照明亚克力LED标牌
- 制作Arduino触摸感应LED标牌
- LED照明及驱动器基本知识培训PPT 55次下载
- 大功率LED正向电压与温度变化研究综述 5次下载
- 砷化镓电池及砷化镓LED综述 0次下载
- YNH-430G 数字标牌主板规格书
- LED线性阵列显示源代码下载 6次下载
- 恒流驱动LED升压型DC-DC转换器芯片HX3248C 28次下载
- 6块LED组成的灯条PCB设计 52次下载
- 利用Yocto项目打造定制标牌 7次下载
- LED标牌应用混合颜色、节能和复杂性 3次下载
- 驱动led阵列的电源及拓扑解决方案 8次下载
- 智能标牌交钥匙解决方案 0次下载
- 数字标牌系统的远程管理实现 31次下载
- 星际多媒体信息发布系统 大众版 V3.102大众版 V3.1 0次下载
- 带RS232端口的LED标牌操作指南 1678次阅读
- 如何进一步优化可实现显示屏的 LED 驱动器 2294次阅读
- 欧司朗推出的新型LED技术帮助植物生长促进绿色生态 772次阅读
- 天嵌科技TQ6818广告机、数字标牌主板-三星系列简介 1808次阅读
- 海天雄商显数字标牌解决方案解析 2829次阅读
- 天嵌针对数字标牌系统研发TQ4418广告机主板 2475次阅读
- LED发光二极管封装的结构类型及特殊性解析 1122次阅读
- LED的工作原理_LED有什么优点和缺点 1.5w次阅读
- 柱上变压器配送组立安装引线绑扎及标牌悬挂 6730次阅读
- 浅谈LED灯的好处 1w次阅读
- led灯具基础知识_led灯怎么接线 3.6w次阅读
- led灯为什么有频闪_led灯频闪怎么解决_led灯频闪测试方法 9w次阅读
- led灯珠型号亮度排名_led灯不亮了怎么修 3.5w次阅读
- led路灯检验标准_led路灯照明标准 1.9w次阅读
- 48 输出 LED 驱动器为大众带来妙趣不尽的显示牌 2294次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多