吃豆人 LED 像素面板服装
组件和用品
| × | 1 |
必要的工具和机器
|
关于这个项目
介绍
首先,让我们说显而易见的:我们喜欢做家庭服装。
去年我们做了太空“外星人”,看起来更像是穿着带有 LED 灯带口音的银色的人。我们真的很喜欢 LED,因为它们是独一无二的,让孩子们在晚上跑来跑去时很容易看到。我们决定做一些再次点亮的事情,但不确定是什么。是我女儿推荐吃豆人,因为她最近几周前在保龄球馆玩了 Namco gem。这个建议就是我们所需要的。这是个好主意,我们必须实现它。
规划
第一步总是计划,但值得一提的是,特别是如果你想做一个不同的 8 位字符。
我们为这个家庭选择了吃豆人角色。吃豆人、吃豆人女士和幽灵 Blinky 和 Pinky。我希望它对原始 8 位字符准确且真实,因此我从查找原始游戏精灵开始。
这些有助于确保我们获得正确的像素像素布局并显示动画的每一帧。例如,您可以在上面的精灵中看到鬼腿和吃豆人嘴巴的不同框架。
然后我在 Excel 中布置动画的每一帧,以便我们知道 LED 的数量和每个板的整体布局。稍后需要单独的 LED 编号来对 Arduino 板进行编程。
您可以通过布局看到 Ghost 的高度为 14 像素,宽度为 14 像素。吃豆人大小为 13x13,吃豆人女士大小为 14x14。
一旦我们知道了像素的宽度和高度,我们就必须决定我们想要制作多大的面板。我希望它们彼此之间的大小相同。这意味着每件服装上的每个像素的大小都相同。为了正确缩放它们,我们首先确保它适合最小的家庭成员,我的儿子。我给他量了尺寸,举起一些纸板剪下的东西,看看他的胳膊能舒服地放在什么尺寸上,还能走路。我们最终得到了 22" 作为幽灵的高度和宽度的大小。
这将我们的比例设置为 22" / 14 像素 =1.57"/像素。
材料
我们希望服装相对容易穿在身上,所以我们选择了轻便的材料,而不是耐用的材料。
- 基础: 1/8" 纸板,激光切割和热粘合
- 半透明封面: 草稿纸(牛皮纸或聚酯薄膜)
- LED: 12 毫米 DC5V WS2811 可单独寻址的 LED(50 串)
- 董事会: 阿杜尼奥Uno R3
- 功率: 5V DC 便携式电源(如便携式电话充电器)+ USB 转 DC 适配器
- 其他: DC 电源插孔适配器面包板跳线 DC5V 电源,用于测试 Velcro 编织管道带管道胶带
基地
幸运的是我可以使用激光切割机,所以我知道我会用它来制作这些。您不需要自己的激光切割机。您可以将其发送给从事激光切割的公司进行切割,也可以走手动路线并打印 PDF 并将其放在纸板上并手工切割。
底座由从当地艺术/爱好商店购买的 1/8" 纸板制成。我们的激光切割机有一个 32"x18" 的床,所以我让他们将床单切割成那个尺寸。
面板 面板由几个主要部分组成:底座、板条、盖子和带子。底座固定 LED,板岩提供面板的像素和整体稳定性,盖子漫射光线,带子使其便于携带。
图> 图>
建模
为了制作激光切割机的文件,我使用 Rhino 对底座进行了建模。为了让激光切割机尽可能多地工作,我非常准确地对面板的所有部分进行了建模。
我制作了每个面板,以便每个垂直和水平鳍片会相互滑入,并且它们也会切入底座。以这种方式设置它可以让面板的各个部分在不需要太多胶水的情况下滑动和开槽在一起,同时还确保我们可以获得完美的像素方块。
图> 图>
激光切割
如前所述,我们的激光切割机是 32"x18",因此我制作的用于激光切割的 CAD 文件设置为该尺寸。我已经为 Ghost 服装添加了 .dwg 文件。你可以用它来激光切割你自己的,也可以打印出来作为模板来手工切割纸板。
如果您要手动完成,您可以轻松地将其布置并切割纸板条。您可以自己测量它,像素大约 1.5" 正方形和 2" 深,中间有一个 12 毫米的孔用于 LED。您也可以使用提供的 PDF 作为模板进行剪切。
组装
由于我们的激光切割床的小尺寸为 18",因此底座必须切成两块,这比底座的 22" x 22" 尺寸小。我在连接处使用了良好的 ole 胶带将其最初保持在一起。这实际上是为了在添加 LED 和板条时将其固定到位。一旦将板条添加到底座上,它们就提供了真正的支撑和稳定性。
每个板条通过对水平 (H) 和垂直 (V) 的“H#”或“V#”以及按顺序编号 (#) 进行评分来标记。因为我们增加了额外的 1/32" 间隙,所以板条很好地滑动在一起。我的第一次测试在它们滑动在一起的地方留下的空间要少得多,因此无法将它们全部放在一起。一旦全部滑动在一起,我们将板条放在底座上。他们在底座上加号形孔的位置开槽。一旦它在底座上,我将板条用胶带粘在底座两端的底座上。然后我在板条相遇的左上角添加了一小滴热胶将它们固定到位并确保它们不会滑落。
板条的槽口延伸穿过底座,因此底座背面有一个小标签。我还在这些标签上添加了一滴热胶,以将板条牢固地固定在底座上。
经过思考
正如您在 3d 模型图中所见,我没有计划在面板背面安装外壳。 这是一个错误! 我在滴答或治疗前几个小时注意到了这一点,我匆忙剪下 2.5" 纸板条并将它们添加到面板的背面。让 LED 线以外的其他东西靠在身体上。
这有帮助,但实际上它应该完全封闭。在面板打开的情况下四处走动时,LED 往往会被推入。您可以在一些图片中看到像素不再是真正的像素,而是点光源。这是 LED 灯被推入或掉入的地方。我拦住了家人几次以整夜修理这些问题,或者进行剔除或治疗。
LED布局
LED 灯串的规划发生在 Excel 中,我在 Excel 中按 0-169 的顺序为 Ghost 布置了 170 个单独的 LED。
Excel 布局
需要注意的重要事项是像素与起点之间的距离。
如果您不想切割和重新连接预先串好的灯,则需要确保您可以从序列中的一个孔到达另一个孔。在我的情况下,预串束上的单个 LED 之间的距离约为 3 英寸(75 毫米)。这意味着像素在布局时必须彼此相邻。
对于起点,只需确保它靠近您可以安装 Arduino 和电源的位置。
放置 LED
按照 Excel 中布置的模式,我们将 LED 从背面推入纸板中。
LED 有一个小法兰,可以将它们固定到位。我发现纸板有点脆弱,所以走动时 LED 确实会移动一点。如果你想更安全地固定它们,你可以在它们上面涂一点热胶。
接线 图>
电源
为其供电的最佳方式是使用 5V DC 可充电电池(又名:便携式电话充电器)。然后使用 USB 转直流适配器插入您的灯,灯现在应该与母直流适配器相连。
我犯了一个错误,使用了一个带有开/关开关的 8xAA 电池组,这是我从去年的服装中获得的。只是在写这篇文章时,我才意识到它有 12V 输出,而我使用的是 5V LED。 (我不是火箭外科医生,但我认为这很糟糕)。因为我有电池组,所以我只是拿起它并插入它,一切正常,我没有再猜到它¯\_(ツ)_/¯
有趣的是,我使用的电池组只给了我们大约 2 小时的准时时间。在确定它们是不正确的面板电源后,我使用正确的 5VDC 便携式电话充电器测试了面板,它们的使用寿命要长得多。
我测试了 2200 mAh 和 7800 mAh 便携式充电器,面板分别运行了 3 小时 40 米和 12 小时 43 米。这意味着使用便宜的“口红充电器”,您可以获得近 4 小时的准时时间。
LED
我使用 12 毫米 WS2811 可单独寻址 LED 灯串用于户外标牌。我在亚马逊上买了它们,它们是 50 个一串的。
接线
电源到灯然后到板的接线如图和照片所示。
第一个串上的引线 LED 有电源连接,有两根电线(热/红线和地/白线)。这些连接到母电源插孔适配器。电源插入此适配器。然后我们将第一个 LED 的电源、地和数据连接到 Arduino 上的 5v 和 GND 连接,数据(中间)线连接到板上的 3 PIN。
确保在接线之前检查 LED 灯串。我的 LED 线是红色(5V)、绿色(DATA)、白色(GND),但你的可能不同。
代码
一旦你全部连接好,当你插入它们时,灯不会做任何事情。也许它们会短暂地闪烁。需要告诉他们先做什么,我就是这样做的。
我没有介绍如何对 Arduino 板进行编程。如果您不知道如何执行此操作,Arduino 网站上有一篇很棒的文章:Arduino 入门
快速LED
我为这些使用了 FastLED 库。它易于使用且易于查找示例以帮助解决所有问题。他们使用 Web Colors 很有用,因此您可以使用名称将任何 LED 设置为任何颜色。
我的代码
下面是Ghost的代码,我也上传了Arduino代码文件。
逻辑的基本轮廓是用主要颜色填充所有 LED,然后更改颜色并关闭各个 LED 组以制作每个“框架”。一旦我们为动画的每个“帧”设置了一个集合,我们就以 X 速度 X 次循环它们以构成整个动画。可能有更聪明的方法来做到这一点,但这就是我所做的并且对我有用。
添加封面 图>
我建议把封面留到最后,因为它是纸做的,可以撕开。当您将 LED 放置到位或进行调整时,能够从前面接触到 LED 也很有用。
我用了一卷我躺在身边的绘图纸。我很确定它是牛皮纸,但也可能是聚酯薄膜。无论哪种方式,您都想要一张半透明纸,宽度足以覆盖整个东西,这样您就不必处理接缝。你可以在艺术商店或网上买到一卷草稿纸。
为了保持纸张就位,我在垂直翅片的顶部边缘放了一条普通的旧 Elmers 胶水。我没有做那些水平的,因为你真正需要的是让纸大部分留在原地。将纸粘住以确保网格通读并使面板看起来像单个像素。
涂上胶水后,将纸放在上面,然后在上面放书本或其他重物以将其固定到位,然后让胶水凝固。
一旦胶水凝固,你就可以剪掉多余的纸。在边缘留一点额外的纸来折叠并用胶带固定,这有助于确保边缘不会剥落或松动。
道路准备 图>
对于最后的步骤,我们准备好上路了。
- 使用 Velcro 将 Arduino 和电源安装到背面
- 将连接用胶带粘在一起,以免松脱
- 添加一条带子随身携带。为此,我使用了编织管道带(就像我随身携带的绘图纸一样)。
- 在手机上加载一些吃豆人音乐和音效,并带上蓝牙扬声器
利润 图>
完成后,您可以将您的8位家人送到附近,以给邻居留下深刻印象并收集您的甜蜜糖果利润。
谢谢阅读!如果您有任何问题,请随时提出!
代码
- LED 鬼动画代码
- 吃豆子小姐
- 吃豆子
LED 鬼动画代码Arduino
此代码运行 Ghosts//ANIMATED PACMAN GHOST LED#include "FastLED.h"#define NUM_LEDS 170#define DATA_PIN 3CRGB LEDs[NUM_LEDS];void setup() { delay(2000); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(40); //数字0-255 FastLED.clear();}//看左int eye_pixels_l[] ={17, 20, 21, 24, 37, 38, 39, 40, 41, 47, 48, 49, 94, 102, 103, 106, 119, 120, 121, 122, 123, 129, 130, 131};intStudents_pixels_l[] ={15, 16, 22, 23, 92, 93, 104, 105, 105, 105; ] ={38, 39, 40, 46, 47, 48, 49, 50, 63, 66, 67, 75, 120, 121, 122, 128, 129, 130, 131, 132, 4,15, 41 };int student_pixels_r[] ={64, 65, 76, 77, 146, 147, 153, 154};//移除footint void_pixels_1[] ={8, 29, 30, 31, 83, 84, 85, 86, 138, 139, 140, 161};int void_pixels_2[] ={7, 31, 55, 56, 57, 112, 113, 114, 138, 162};int sad_ghost[] ={11, 26, 48, 49, 53, 60, 64, 65, 80, 89, 104, 105, 109, 116, 120, 121, 134, 143, 158};int eye_seconds =2;int reg_ghost_seconds =20 //以毫秒为单位的延迟 b/w 英尺 v1 v2int eye_loop =(eyes_seconds*1000)/feet_delay; // 切换前左右看多少次 int reg_ghost_loop =reg_ghost_seconds/eyes_seconds; int sad_ghost_loop =50;int sad_ghost_blink_loop =10;void loop() { for(int i =0; i MsPacmanArduino
//ANIMATED MS PACMAN LED#include "FastLED.h"#define NUM_LEDS 151#define DATA_PIN 3CRGB LEDs[NUM_LEDS];void setup() { delay(2000); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(40); //数字0-255 FastLED.clear();}int void_pixels_opened[] ={6,7,22,23,24,25,26,27,28,29,30,43,44,45,46,47 ,48,49,50,51,52,53,54,55,56,57,58,68,69,70,71,72,73,74,75,76,77,78,79,80,81 ,82,83,84,85,86,98,99,100,101,102,103,104, 105,106,107,108,109,127,128,129,130,131,132};int void_pixels,5,5,5,52,5,5,5,452,5,5,5,452 57,58,68,69,70,71,72, 73,74,75,76,77,78,79,80,81,82,83,84,85,100,101,102,103,104};int void_pixels_closed[] ={5,1550 INT red_opened [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,5,8,133,150}; INT red_mid [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,27,26,105,106}; INT red_closed [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,50,76,77,78}; INT blue_opened[] ={120,139,96};int blue_mid[] ={120,139,97};int blue_closed[] ={120,139};int black_opened[] ={40,95,111,112,124};int black_mid[], ={110,1 };int black_closed[] ={40,95,96,97,98};int frame_rate_ms =100;void loop() {//----嘴巴张开- ---////填充bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow);//去除嘴巴(int i =0;我 <64; i++){ leds[void_pixels_opened[i]] =CRGB::Black;}//set redfor (int i =0; i <20; i++){ leds[red_opened[i]] =CRGB::Red;}// set bluefor (int i =0; i <3; i++){ leds[blue_opened[i]] =CRGB::Blue;}//set blackfor (int i =0; i <5; i++){ leds[black_opened[ i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);//----MOUTH MID----////填充 bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); //去除嘴巴(int i =0; i <39; i++){ leds[void_pixels_mid[i]] =CRGB::Black;}//设置redfor (int i =0; i <20; i++){ leds[ red_mid[i]] =CRGB::Red;}//set bluefor (int i =0; i <3; i++){ leds[blue_mid[i]] =CRGB::Blue;}//set blackfor (int i =0; i <4; i++){ leds[black_mid[i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);//----闭嘴----/// /fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); //mouthfor (int i =0; i <2; i++){ leds[void_pixels_closed[i]] =CRGB::Black;}//set redfor (int i =0; i <20; i++){ leds[red_closed [i]] =CRGB::Red;}//set bluefor (int i =0; i <2; i++){ leds[blue_closed[i]] =CRGB::Blue;}//set blackfor (int i =0; i <5; i++){ leds[black_closed[i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);//----MOUTH MID----//// fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow);//去除嘴巴(int i =0; i <39; i++){ leds[void_pixels_mid[i]] =CRGB::Black;}//设置redfor(int i =0; i <20; i++){ leds[red_mid[i]] =CRGB::Red;}//设置bluefor (int i =0; i <3; i++){ leds[blue_mid[i]] =CRGB::Blue;}//set blackfor (int i =0; i <4; i++){ leds[black_mid[i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);}预> 吃豆子Arduino
//动画吃豆子 LED#include "FastLED.h"#define NUM_LEDS 137#define DATA_PIN 3CRGB LEDs[NUM_LEDS];void setup() { delay(2000); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(40); //数字0-255 FastLED.clear();}int void_pixels_opened[] ={19,20,21,22,23,24,25,26,27,28,29,42,43,44,45,46 ,47,48,49,50,51,52,53,54,55,56,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80 ,81,82,94,95,96,97,98,99,100, 101,102,103,104,105,121,122,123,124,125,126};int void_pixels_mid[] ={46,47,52,66,56319,52,56,5619 69,70,71,72,73,74,75,76,77,78,79,80,98,99,100};int frame_rate_ms =100;void loop() {//----张开嘴--- -////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow);//去除嘴巴(int i =0; i <61; i++){ leds[void_pixels_opened[i]] =CRGB::Black;}FastLED .show();delay(frame_rate_ms);//----MOUTH MID----////填充bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); //移除嘴巴(int i =0; i <27; i++){ leds[void_pixels_mid[i]] =CRGB::Black;}FastLED.show();delay(frame_rate_ms);//----嘴巴关闭----////填充bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); FastLED.show();delay(frame_rate_ms);//----MOUTH MID----////填充bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); //去除嘴巴(int i =0; i <27; i++){ leds[void_pixels_mid[i]] =CRGB::Black;}FastLED.show();delay(frame_rate_ms);}
定制零件和外壳
从 1/8" 纸板上激光切割幽灵服装的文件。它设置为 32" x 18" 激光切割床尺寸。 ghostlaser-1_8th_v5_feTmMAM4r0.dwgLaser 切割机 DWG 文件,用于吃豆子女士和吃豆子 pacman-mspacman-laser_KVFskMrPk4.dwg示意图
如何插入 LED、Ardunio 和便携式电源制造工艺