56| 23
|
[项目] 【Arduino 动手做】构建一个迷你 Las Vegas RGB LED 球体 |
Arduino是一个开放源码的电子原型平台,它可以让你用简单的硬件和软件来创建各种互动的项目。Arduino的核心是一个微控制器板,它可以通过一系列的引脚来连接各种传感器、执行器、显示器等外部设备。Arduino的编程是基于C/C++语言的,你可以使用Arduino IDE(集成开发环境)来编写、编译和上传代码到Arduino板上。Arduino还有一个丰富的库和社区,你可以利用它们来扩展Arduino的功能和学习Arduino的知识。 Arduino的特点是: 1、开放源码:Arduino的硬件和软件都是开放源码的,你可以自由地修改、复制和分享它们。 2、易用:Arduino的硬件和软件都是为初学者和非专业人士设计的,你可以轻松地上手和使用它们。 3、便宜:Arduino的硬件和软件都是非常经济的,你可以用很低的成本来实现你的想法。 4、多样:Arduino有多种型号和版本,你可以根据你的需要和喜好来选择合适的Arduino板。 5、创新:Arduino可以让你用电子的方式来表达你的创意和想象,你可以用Arduino来制作各种有趣和有用的项目,如机器人、智能家居、艺术装置等。 ![]() ![]() |
## 第 4 步:电子元件 现在我需要选择我需要的电子设备。我最初也打算制作自己的 IR 遥控器,但随着成本的增加,我决定不这样做。它会更昂贵的原因是由于购买了 PCB、按钮和微控制器。我还有旧夜灯的红外遥控器,所以我决定只使用那个。接下来,我需要我的 IR 接收器和微控制器。我决定用 VS1838B 作为我的接收器,因为我已经有一些了。如果您打算自己制作这个,您可以购买一个不同的,因为我认为(不是 100% 确定)它应该与代码一起工作。最后,我需要选择我的微控制器。我真的很喜欢使用 Arduino Nanos。我真的很喜欢 Nanos,因为它们有很多引脚,它们不会使用太多的功率、尺寸,而且设置和编码都很容易。我说它们很容易设置和编码,因为编译只需要几秒钟,而 esp32 需要 1 分钟来编译,这使得调试和测试代码真的很慢,而且它连接了一个 USB,所以我不需要把它连接到一个有 USB 连接器的微控制器。但是,由于 nano 不坚固(SRAM 和内存),我无法使用它。这导致我需要一个 Arduino Nano,因为它的 SRAM 是它的 3 倍。当我以为我已经完成了这一步时,我忘记了最后一件事。这就是我如何为它供电。 权力 Ws2812b LED 灯条需要大量功率。每个灯(R、G、B)需要 20 毫安。这意味着全白约为 60 毫安。然后,如果我每米有 160 个 LED,而我有 5 米,这意味着 48,000 毫安或 48 安培。这就是它在全亮度下可以绘制的量。虽然由于有这么多 LED,它不需要全亮度。所以,我将最大亮度更改为 25%。这将数量减少到只有 12 安培。现在,我需要在 Fusion 360 中对零件进行建模。 ## 第 5 步:尺寸/型号 我首先需要弄清楚我是想把微控制器放在底座里还是藏在 LED 所在的位置。我想出了 3 种方法。我能做到这一点的第一种方法是将 LED 向上螺旋,尽管这很难做到。第二个想法是将 LED 排列成经度(水平)等。这将为布线线路提供空间,但会提供太多空间并弄乱分辨率。我的最后一个想法是将 LED 排列成纬度(垂直)等。这将消除所有空间并提供非常好的分辨率,但也会使布线更具挑战性,并且在某个方向上看起来很奇怪。例如,如果我将它绕在圆的圆周上,并从侧面有多个圆圈,它看起来会很完美,但在顶部,它看起来会有点丑陋。遗憾的是,我无法解决这个问题,尽管有一个白色的扩散器应该可以扩散大部分。这将带来我的最后一个问题,即周长。由于我将球体分成 2.7 毫米的部分(LED 宽度),因此会显着增加 LED 的长度,因为每次我上升一个部分,都会导致所需的 LED 长度几乎增加一倍。您也可以将其视为球体的表面积。 ![]() |
本帖最后由 驴友花雕 于 2025-5-29 14:37 编辑 ## 第 16 步:动画 要开始编写动画代码,我需要弄清楚我想要多少个。开始时,我只有 4 个按钮,所以我只能做 4 个动画。我想要的第一个是螺旋模式,它基本上会螺旋出彩虹。然后我使用第二个按钮来制作淡化动画。这将形成每个级别的彩虹。接下来,我使用第 3 个按钮来制作烟花动画。这将是我的第一个复杂动画。我希望它看起来像烟花从底部开始,在空中飞翔,然后**。我通过将每个级别中的第一个 LED 变为白色半秒钟来做到这一点。当它上升时,我让它**并使用随机功能随机打开每个级别的 LED。因此,第一层会亮起,然后第二层会亮起,依此类推。在那之后,我真的很觉得我可以编码,所以我决定编写非常流行的表情符号。首先,我在眼睛上工作。我给出了一个我希望 LED 的位置。例如,我希望它是第 100 个 LED。然后为了让它来回移动,我使用了数学运算,让它移动那个 LED。然后我开始研究第二只眼睛和微笑。由于 LED 非常小,我决定让多个 LED 充当眼睛和微笑。因此,它不是为每只眼睛激活一个 LED,而是激活 5 个以产生一个更大的圆圈。 ## 第 17 步:组装 我将向您展示如何组装它以及我遇到的一些问题。 我要警告你,组装起来非常非常困难。 首先,我需要将 LED 切割成一定长度。切割时要小心,只在铜焊盘所在的地方切割。接下来,我需要获取每行上的 LED 数量。我没有单独计算每个 LED,而是在 fusion 中制作了一个模型来为您计算它们。我得到了一些尺寸,然后将其转换为 1:1 比例的图纸。一旦我打印出来(在纸上,而不是 3D 打印机上),我就得到了一个几乎完美对齐的复制品,它有多达 40 个 LED。这使得计数速度提高了一百万倍。然后,我用它们所在的行和 LED 的数量标记它们。我还建议将它们写在一张纸上。 ![]() ![]() ![]() |
## 第 3 步:LED 和分辨率 首先,我需要得到一个主要问题,即我应该使用什么 LED。我首先需要考虑我的约束。我希望 LED 易于编码,需要 RGB(多色)并且预算友好。我最初打算使用我这里剩下的一些 RGB 灯带,但后来我看到了这个人的视频,他使用了带有迷你 RGB LED 的柔性 PCB 板。然而,当我把成本加起来时,我意识到这太超出了我的预算。我向后靠,使用我剩下的 RGB LED 灯条单元,我了解了 Ws2812b LED 灯。这些 LED 要复杂得多,只使用 3 个引脚。它有 2 个电源引脚(正极和负极)和一个数据引脚。它还允许您单独对每个 LED 进行编码,这将为我的代码提供更大的灵活性。我还需要弄清楚电压。如果我做了 12v,它就不需要反向供电,这是 LED 使用过多电压的地方,所以你会注意到 LED 灯条末端的电压降。我决定使用 5V,因为 12V 通常用于无法反向供电的 LED 灯,而且它们要便宜得多。现在我有了我想要的条带类型,我需要弄清楚它的大小。 分辨率 LED 灯条的大小会极大地影响分辨率。如果尺寸太大,则一平方英寸内只有 5 个 LED。这将导致分辨率非常低。我发现了一些只有 2.7 毫米宽的超窄 LED 灯条!每个 LED 的尺寸为 2020 年,即 2.0 毫米 x 2.0 毫米。普通 LED 灯条的 LED 尺寸为 5050 (5mm x 5mm)。虽然它比普通的贵一点,但我只需 30 美元就可以在交易中挑选它。 ![]() |
## 第 1 步:背景 当我的旧夜灯坏了时,我想到了设计这个模型。我决定尝试修复它。虽然当我拆开它时,我试图更换很多零件,但当我缩小问题范围时,我意识到实际的 LED 坏了。当我打算购买替换部件时,我看到了这个挑战,并认为这将是我制作新夜灯的一种很酷的新方法。我最初计划制作一个简单的夜灯,它有一盏灯和一个看起来像行星或死星的 3D 打印外壳。然而,当我浏览 YouTube 时,我看到了这个视频,它解释了 Las Vegas Sphere 是如何运作的。这非常有趣,最后,我想制作自己的。 ![]() ![]() ![]() |
## 第 6 步:草图/建模 现在我有了草图,我不能有尺寸,因为我只需要反复试验球体需要多大。如果它太大了几毫米,那么所需的 LED 长度将显着增加。经过多次测试,我最终得到了一个 100 毫米的球体。它会有点小,但扩散器会让它看起来更大。现在我开始为我的第一张草图建模。 ## 第 7 步:球体(建模) 我从对我的草图进行建模开始。我首先制作了一个直径为 100 毫米的圆。然后我创建了一条线,将圆切成两半。我还在圆圈中添加了另一个 5/8 的剪辑。然后我旋转草图以制作一个球体。最后,我用 5/8 线剪掉了底部。接下来,我需要弄清楚如何安装灯。 ![]() |
## 第 8 步:灯光(建模) 现在我需要弄清楚如何添加灯光。如果我只是将它们缠绕在球体上,就很难将它们保持在适当的位置,并且不会受到控制。我需要控制它,因为它看起来非常丑陋且非常难以编码。当我思考想法时,我想到创造像楼梯一样的线条。然而,当我制作时,我意识到楼梯的想法会让它看起来像一个圆锥体,而不是一个球体。那是因为球体形状是弯曲的,所以在某些部分它看起来几乎是直的,但越高,它开始向内弯曲。然后我想到了另一个想法,可以给出完美的水平线并创建一个球体。 ![]() ![]() |
## 第 10 步:Lights_3(建模) 现在我需要挖空内部并将其与真正的球体相结合。我首先将切口挤出到我得到光滑边缘的地方。然后我对所有的切割都做了这个,最后我基本上得到了一个球体的外壳。最后,我使用剪切工具将其组合起来,它显示了我想要的结果。基本上是一个块状的球体。 造型灯总结 我基本上需要去除球体上的平滑度,以便为 LED 创建一个受控区域来包裹。我所做的是制作与球体一样光滑的物体。然后,我使用该对象从中心球体中切出,以创建一个块状且受控的球体。 我很想听听你是否对如何做到这一点有任何更好的想法,因为这可能比它需要的要复杂得多。 ![]() ![]() ![]() |
## 第 13 步:代码设置 首先,我需要弄清楚我的 IR 接收器值或它发出的信号。我首先在此处使用了一些示例代码。该代码还有助于解释 IRremote 库的工作原理。现在我已经有了它为每个按钮发送的信号,然后我需要将其与 PWM 信号对齐。 接下来,我需要写下我想要的颜色。由于我们解读颜色的方式都不同,因此我想将我在控制器上看到的颜色与我希望的 LED 灯条的颜色相匹配。为此,我编写了一些代码,其中使用了 3 个控制所有 3 种颜色的电位计。因此,一个电位计将控制红色的 R,另一个电位计将控制绿色的 G,最后相同的蓝色。然后,我让 Arduino Nano 发送 PWM 信号,该信号类似于 (0,0,0),这意味着 0 红色、绿色和蓝色,然后我可以创建我想制作的任何颜色。现在我需要记录这些值。 你可以看到我是如何在顶部连接它的。 ![]() |
## 第 15 步:最终代码 最后,我需要制作自己的代码。 为了开始这段代码,我决定更改库,这使得编码变得更加容易。我选择了 fastLED 库,因为我看到了更多关于如何使用它的教程。我首先定义了我想要的所有变量,例如图钉。然后我定义了每行有多少个 LED。这为我提供了我想要的 LED 的捷径。如果我知道之前有多少个 LED,那么我不必计算每个 LED 的数量,那么我只需计算该行上的 LED 并将其他行相加。我还打开了我可以制作的新动画。接下来,我定义了每个 remote 值。现在我需要将其与 LED 灯条的 PWM 信号相关联。我通过使用 switch 语句来执行此作。它基本上是很多 if 语句,但要简化得多。例如,我的陈述是 “如果” 值 (变量) 正确 “然后” 做 “其他” 的事情。这是一个非常简化的用法,但还有许多其他情况可以使用它,您可以在此处找到更多详细信息。我本来打算制作没有图像的简单动画,但当我意识到编码是多么容易时,我决定添加一些。 ![]() |
## 第 18 步:Soldering_1(组装) Soldering_1 (assembly) 现在我需要焊接它们。焊接它们需要很长时间,因为铜焊盘太小了,不想与焊料粘合。我焊接了 2 排正极和负极的金属丝。为了防止短路,我使用了热胶作为绝缘材料。这比电线干净得多,但花了我更长的时间,因为我正在检查短路。我建议您仅在有万用表检查短路时才这样做。您可以使用电阻模式进行检查,将一个探头放在正极上,将一个探头放在负极上,如果显示 0 或发出哔哔声,则表示您短路。我还强烈建议您在数据板上镀锡,因为我没有这样做,这使得第 2 个焊接步骤非常困难。 ![]() |
## 第 20 步:Soldering_2(组装) 现在我们需要焊接数据引脚。首先,如果您没有 LED,请给 LED 镀锡,然后给电线镀锡。我还建议减少数据线的长度,因为我的数据线太大了,这导致了非常难看的外观。一旦你的数据线都焊接好了,你需要测试它是否有效。这意味着我们需要上传代码。 注意: 尽管焊接看起来像 2 个步骤,但我花了一整天的时间来完成焊接。如果您决定这样做,请在焊接所有东西时耐心等待。此外,要非常脆弱,因为电线会想要解开,这可能会撕裂铜垫,弄乱整个条带。 ![]() ![]() |
## 步骤 21:代码(程序集) Code (assembly) 现在我们需要对其进行编码。首先,您需要确保我的 IR 遥控器值与您的值一致。要测试此作,请将代码上传到 Arduino 并按下按钮。如果你能改变颜色,你就会知道一切都正常。如果没有任何反应,您需要转到串行监视器。每次按下按钮时,它都应该显示该值。您需要更改每个值,并使其与我的值相对应。接下来,您需要设置 LED 级别。所以现在你需要输入每个级别上有多少个 LED。例如,如果 LED 的第 1 级是 50,第 2 级是 50,第 3 级是 48,那么在值中应将其写为 50、50、48。现在所有颜色都应该可以工作,并且其中 3 个动画应该可以工作。最后,如果您想要表情符号动画,则需要输入更多值。您需要输入每个指示灯的位置。因此,您将从底部开始,然后加起来得出它是什么 LED。有关详细信息,请参阅照片。 ![]() |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed