0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何制作POV LED空气写入器

454398 来源:网络整理 作者:网络整理 2019-11-28 10:04 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

您可以通过闪烁的LED来完成各种操作,在这个简单的项目中,我们将制造一个小型设备,当您来回挥动消息时,它可以在空中广播消息。它比您想像的要容易,而且零件的总成本不到5美元。

该项目利用了一种称为视觉持久性的视觉幻觉,使文本在空中出现。晚上有人快速移动点燃的烟火时,您可能会遇到这种现象。我们将使用Arduino和一些LED来模仿这种效果。该项目易于构建,几乎不需要任何组件,而且几乎不需要焊接(尽管如果您想了解一些开始使用烙铁的技巧,请查阅本指南)。

您将需要

Arduino(我使用了$ 2Nano,因为它紧凑且便宜,但任何型号都可以)。

5个红色LED。

5x220欧姆电阻

1x9v电池座。

1x拨动开关。

一块protoboard,

用于存放成品的外壳(我用了一个漆成黑色的小纸板箱)。

您还需要电烙铁和一些焊料才能将它们放在一起。

虽然可选,但如果您要使用任何焊锡芯,也可以派上用场。焊接错误。面包板和一些连接线对于测试电路也很有用。

如何制作POV LED空气写入器

布线

布线不那么简单。首先,如下图所示连接Arduino,LED和电阻器

引脚D2到D6分别连接到每个电阻,这些电阻连接到每个LED的正极(长脚)。阴极接地,然后接地回Arduino。完成后,它应该看起来像这样:

就是这样:我们的电路已经完成!

代码

现在,将您的Arduino连接到计算机,然后打开Arduino IDE。如果您不熟悉Arduino,并希望获得良好的入门指南,此链接将非常有用。

打开一个新草图并复制此代码。此代码是从该项目中修改的,您可以

// how long each led stays on for

int delayTime = 1;

//how long between each

int charBreak = 3;

//how long to wait after the message is finished before it repeats

int resetTime = 20;

int LED1 = 2;

int LED2 = 3;

int LED3 = 4;

int LED4 = 5;

int LED5 = 6;

void setup(){

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(LED3, OUTPUT);

pinMode(LED4, OUTPUT);

pinMode(LED5, OUTPUT);

}

int a[] = {1, 6, 26, 6, 1};

int b[] = {31, 21, 21, 10, 0};

int c2[] = {14, 17, 17, 10, 0};

int d[] = {31, 17, 17, 14, 0};

int e[] = {31, 21, 21, 17, 0};

int f[] = {31, 20, 20, 16, 0};

int g[] = {14, 17, 19, 10, 0};

int h[] = {31, 4, 4, 4, 31};

int i[] = {0, 17, 31, 17, 0};

int j[] = {0, 17, 30, 16, 0};

int k[] = {31, 4, 10, 17, 0};

int l[] = {31, 1, 1, 1, 0};

int m[] = {31, 12, 3, 12, 31};

int n[] = {31, 12, 3, 31, 0};

int o[] = {14, 17, 17, 14, 0};

int p[] = {31, 20, 20, 8, 0};

int q[] = {14, 17, 19, 14, 2};

int r[] = {31, 20, 22, 9, 0};

int s[] = {8, 21, 21, 2, 0};

int t[] = {16, 16, 31, 16, 16};

int u[] = {30, 1, 1, 30, 0};

int v[] = {24, 6, 1, 6, 24};

int w[] = {28, 3, 12, 3, 28};

int x[] = {17, 10, 4, 10, 17};

int y[] = {17, 10, 4, 8, 16};

int z[] = {19, 21, 21, 25, 0};

int eos[] = {0, 1, 0, 0, 0};

int excl[] = {0, 29, 0, 0, 0};

int ques[] = {8, 19, 20, 8, 0};

int space[] = {0, 0, 0, 0, 0};

void displayLine(int line){

int myline;

myline = line;

if (myline》=16) {digitalWrite(LED1, HIGH); myline-=16;} else {digitalWrite(LED1, LOW);}

if (myline》=8) {digitalWrite(LED2, HIGH); myline-=8;} else {digitalWrite(LED2, LOW);}

if (myline》=4) {digitalWrite(LED3, HIGH); myline-=4;} else {digitalWrite(LED3, LOW);}

if (myline》=2) {digitalWrite(LED4, HIGH); myline-=2;} else {digitalWrite(LED4, LOW);}

if (myline》=1) {digitalWrite(LED5, HIGH); myline-=1;} else {digitalWrite(LED5, LOW);}

}

void displayChar(char c){

if (c == ‘a’){for (int i = 0; i 《5; i++){displayLine(a[i]);delay(delayTime);}displayLine(0);}

if (c == ‘b’){for (int i = 0; i 《5; i++){displayLine(b[i]);delay(delayTime);}displayLine(0);}

if (c == ‘c2’){for (int i = 0; i 《5; i++){displayLine(c2[i]);delay(delayTime);}displayLine(0);}

if (c == ‘d’){for (int i = 0; i 《5; i++){displayLine(d[i]);delay(delayTime);}displayLine(0);}

if (c == ‘e’){for (int i = 0; i 《5; i++){displayLine(e[i]);delay(delayTime);}displayLine(0);}

if (c == ‘f’){for (int i = 0; i 《5; i++){displayLine(f[i]);delay(delayTime);}displayLine(0);}

if (c == ‘g’){for (int i = 0; i 《5; i++){displayLine(g[i]);delay(delayTime);}displayLine(0);}

if (c == ‘h’){for (int i = 0; i 《5; i++){displayLine(h[i]);delay(delayTime);}displayLine(0);}

if (c == ‘i’){for (int it = 0; it 《5; it++){displayLine(i[it]);delay(delayTime);}displayLine(0);}

if (c == ‘j’){for (int i = 0; i 《5; i++){displayLine(j[i]);delay(delayTime);}displayLine(0);}

if (c == ‘k’){for (int i = 0; i 《5; i++){displayLine(k[i]);delay(delayTime);}displayLine(0);}

if (c == ‘l’){for (int i = 0; i 《5; i++){displayLine(l[i]);delay(delayTime);}displayLine(0);}

if (c == ‘m’){for (int i = 0; i 《5; i++){displayLine(m[i]);delay(delayTime);}displayLine(0);}

if (c == ‘n’){for (int i = 0; i 《5; i++){displayLine(n[i]);delay(delayTime);}displayLine(0);}

if (c == ‘o’){for (int i = 0; i 《5; i++){displayLine(o[i]);delay(delayTime);}displayLine(0);}

if (c == ‘p’){for (int i = 0; i 《5; i++){displayLine(p[i]);delay(delayTime);}displayLine(0);}

if (c == ‘q’){for (int i = 0; i 《5; i++){displayLine(q[i]);delay(delayTime);}displayLine(0);}

if (c == ‘r’){for (int i = 0; i 《5; i++){displayLine(r[i]);delay(delayTime);}displayLine(0);}

if (c == ‘s’){for (int i = 0; i 《5; i++){displayLine(s[i]);delay(delayTime);}displayLine(0);}

if (c == ‘t’){for (int i = 0; i 《5; i++){displayLine(t[i]);delay(delayTime);}displayLine(0);}

if (c == ‘u’){for (int i = 0; i 《5; i++){displayLine(u[i]);delay(delayTime);}displayLine(0);}

if (c == ‘v’){for (int i = 0; i 《5; i++){displayLine(v[i]);delay(delayTime);}displayLine(0);}

if (c == ‘w’){for (int i = 0; i 《5; i++){displayLine(w[i]);delay(delayTime);}displayLine(0);}

if (c == ‘x’){for (int i = 0; i 《5; i++){displayLine(x[i]);delay(delayTime);}displayLine(0);}

if (c == ‘y’){for (int i = 0; i 《5; i++){displayLine(y[i]);delay(delayTime);}displayLine(0);}

if (c == ‘z’){for (int i = 0; i 《5; i++){displayLine(z[i]);delay(delayTime);}displayLine(0);}

if (c == ‘!’){for (int i = 0; i 《5; i++){displayLine(excl[i]);delay(delayTime);}displayLine(0);}

if (c == ‘?’){for (int i = 0; i 《5; i++){displayLine(ques[i]);delay(delayTime);}displayLine(0);}

if (c == ‘。’){for (int i = 0; i 《5; i++){displayLine(eos[i]);delay(delayTime);}displayLine(0);}

if (c == ‘ ’){for (int i = 0; i 《5; i++){displayLine(space[i]);delay(delayTime);}displayLine(0);}

delay(charBreak);

}

void displayString(char* s){

for (int i = 0; i《=strlen(s); i++){

displayChar(s[i]);

}

}

void loop(){

//Change the text inside here to change the text displayed.

//Make sure to keep the brackets and the quotation marks.

displayString(“。.hello!。.”);

delay(40);

}

保存此草图,然后将其上传到您的电路板上。如果出现任何错误,请确保选择了正确的板卡和COM端口。您的LED应该开始闪烁。如果没有,请检查面包板上的所有连接。在代码开头声明的整数决定了文本显示的速度。数值越大,挥动设备的速度就越快。我发现这里使用的数字效果很好。

现在进行快速测试。断开Arduino与USB电缆的连接,然后将电池座连接到arduino的VIN和GND引脚上

现在,您可以移动它了,小心地尝试摆动您前面的LED。如果您周围足够暗,您应该会看到一些字母在空中形成。我发现它有助于设置手机来捕获它。

它有效!现在使它变得更永久一些。

准备就绪的铁!

像这样在原型板上放置Arduino板,电阻器和LED:

当然,只要电路保持不变,就可以使布局紧凑。确保您在Arduino的每一侧留出至少一行原型板触点,以用于组件和电源。如果您是电子产品的初学者,这里有一些很棒的提示。

我们将把LED阴极成一条线焊接在一起以形成共同的基础,就像我们制作LED矩阵时所做的一样

折叠每个阴极,使其与另一个阴极重叠,然后焊接它们以形成一条不间断的线。现在,我们需要将阳极焊接到旁边的电阻器脚上。我发现最简单的方法是将每条脚焊接到各自的焊盘上,然后将烙铁放在它们之间,以加热两个接头,最后再添加更多的焊料以弥合它们之间的间隙。

检查每个连接都已牢固连接,然后使用剪钳从电阻和LED上断开多余的支脚。

现在重复相同的任务,但是这次将电阻器的另一端连接到Arduino的腿。这是焊接中最棘手的部分。每个电阻都单独连接到其Arduino引脚,否则电路将无法正常工作。我在这里犯了几个错误,不得不多次使用焊芯来清除多余的焊锡。

一旦您建立了所有正确的连接,请仔细检查它们是否与邻域重叠。如果您可以在此处使用万用表,则可以使用连续性模式来检查每个引脚的电阻上只有一条不间断的线。如果您只有万用表,那么本文中会提供一个很好的入门指南。

检查完每个连接后,请减少多余的连接从电阻器的支脚开始的长度

增加功率

现在,将一条线从Arduino的GND引脚延伸到焊接阴极线末端附近的孔中,然后将电池座的黑色电线放在旁边。

现在,将电线焊接到GND引脚,就像使用电阻器一样,并将两根导线焊接到阴极线的末端以为电路创建一个公共接地。

最后,将一根导线连接到arduino的VIN引脚上,然后将开关置于该导线和电池组。为这张照片中的热熔胶开关道歉,我不得不拆除完成的机器才能拍摄这个阶段!

一旦全部焊接在一起,就放好插入电池并轻按开关。恭喜你!电路完成。如果您看不到任何东西亮起,请仔细检查每个焊点,看哪里可能有断裂或短路。

外壳

现在,我们可以正常工作了,让我们把它放在一个盒子里。尽管您可以使用在业余商店中购买的盒子甚至旧的特百惠盒子来制作一些永久性的东西,但这里还是使用了一个彩绘的纸板箱。为了获得额外的极客信誉,您甚至可以在这些便宜的3D打印机之一上进行3D打印。

通过对原型板进行打分,并对其打分并小心地折掉不需要的零件。

将电路放置在机柜中,并标记需要戳穿LED和开关的位置。您还可以选择标记Arduino板上USB连接器与边缘的交汇处,以便您可以将其插入以更改文本而无需打开包装盒。在外壳上钻出或切出所需的孔。

现在,在LED的边缘添加一些热胶并将其粘贴到位。我将一块海绵粘在电路下面,以便它可以紧紧地放在盒子里。将开关连接到外壳。我使用了热胶,尽管螺钉或螺栓会使连接更牢固。您也可以在使用电池时将电池座粘在电路板的背面,以防止其在内部移动,但是请确保壳体上的任何金属触点都不会碰到您的任何焊接点!

工作完成!

关闭机箱,您就完成了!要更改文本,请将USB电缆连接到Arduino板上,并在 loop 方法中的 displayString 之后更改括号内的文本。找到一个黑暗的地方,玩得开心!

您是否曾经构建过POV机器并知道改进设计的方法?您打算自己建造一个吗?在下面的评论中告诉我们您的项目,我们很乐意听!
责任编辑:wv

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24739

    浏览量

    692766
  • Arduino
    +关注

    关注

    190

    文章

    6527

    浏览量

    197538
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    XINGLIGHT 成兴光top led #电子技术 #电子制作 #Top #LED

    led
    成兴光电子
    发布于 :2026年02月28日 16:34:21

    多合一空气质量传感对比白皮书

    *附件:2026_多合一空气传感白皮书_段落版.docx 本白皮书选取苏州风觉(Airbox-100DC)、北京海林(HL-AQS-8)、武汉四方光电(AM1012)、山东仁科
    发表于 02-26 11:20

    天硕(TOPSSD)技术深解:TBW(总写入字节数)的工程实现

    在评估工业嵌入式存储设备能否胜任长达数年的持续运行任务时,TBW(总写入字节数)是比接口速度更为关键的量化指标。它直接回答了“这块硬盘在退役前,总共能安全写入多少数据?”这一根本问题。对于轨道交通日志记录、工业视频流存储等高写入
    的头像 发表于 02-10 14:49 314次阅读
    天硕(TOPSSD)技术深解:TBW(总<b class='flag-5'>写入</b>字节数)的工程实现

    一次写入,永久锁定!OTP存储操作需谨慎

    今天,我们一起来聊聊LuatOS中的OTP功能。 OTP(One-Time Programmable Memory) 是一次性可编程存储。其核心特点是 “一次写入,永久锁定” ,数据在物理层
    的头像 发表于 01-27 17:52 1283次阅读
    一次<b class='flag-5'>写入</b>,永久锁定!OTP存储操作需谨慎

    浮思特 | 空气净化器控制方案中,ABOV单片机适合做什么

    随着空气质量问题逐渐成为家庭关注的重点,空气净化器已经从“简单家电”演进为集传感、控制、交互与智能算法于一体的系统型产品。在这一过程中,单片机(MCU)正是空气净化器的核心大脑,直接决定了整机的性能
    的头像 发表于 01-09 10:04 306次阅读
    浮思特 | <b class='flag-5'>空气净化器</b>控制方案中,ABOV单片机适合做什么

    CYPRESS FRAM实现EDR高速数据写入

    赛普拉斯FRAM技术以纳秒级写入速度、百万次擦写寿命及10年数据保持能力,显著提升EDR设备的数据可靠性。其低功耗与非易失性特性完美适配工业及车载严苛环境,为高可靠性数据记录提供理想解决方案。
    的头像 发表于 01-07 09:56 1348次阅读
    CYPRESS FRAM实现EDR高速数据<b class='flag-5'>写入</b>

    探索AC4842R系列空气线圈电感的特性与应用

    探索AC4842R系列空气线圈电感的特性与应用 在电子工程师的日常设计工作中,电感是不可或缺的基础元件之一。今天,我们将深入探讨BOURNS的AC4842R系列空气线圈电感
    的头像 发表于 12-23 14:20 387次阅读

    自制空气净化器

    老师无论是线上讲课,还是论坛答疑,都让我感受到了大师的风采。 自课程作业布置后,由于只有半个月的时间,考虑到自己已经3年没摸过单片机和C语言的实际情况,决定制作一个被我割了6年的项目:空气净化器。 这个
    发表于 11-05 11:42

    ‌TLC5928 16通道恒流LED驱动技术文档总结

    该TLC5928是一个16通道恒流灌电流LED驱动。每个通道都可以通过将串行数据写入内部寄存器来打开/关闭。所有16个通道的恒流值由单个外部电阻设置。 该TLC5928有两个
    的头像 发表于 09-03 11:16 1164次阅读
    ‌TLC5928 16通道恒流<b class='flag-5'>LED</b>驱动<b class='flag-5'>器</b>技术文档总结

    ‌TLC59281 16通道恒流LED驱动技术文档摘要

    该TLC59281是一个16通道恒流灌电流LED驱动。每个通道都可以通过将串行数据写入内部寄存器来打开/关闭。所有16个通道的恒流值由单个外部电阻设置。
    的头像 发表于 09-02 09:35 1038次阅读
    ‌TLC59281 16通道恒流<b class='flag-5'>LED</b>驱动<b class='flag-5'>器</b>技术文档摘要

    ‌TLC6C5816-Q1 16位移位寄存LED驱动技术文档总结

    错误故障意味着通道已配置为 LED 诊断,但寄存写入命令同时打开了该通道。该器件提供循环冗余校验,以验证移位寄存中的寄存值。在回读模式
    的头像 发表于 08-25 18:13 1156次阅读
    ‌TLC6C5816-Q1 16位移位寄存<b class='flag-5'>器</b><b class='flag-5'>LED</b>驱动<b class='flag-5'>器</b>技术文档总结

    GraniStudio:IO写入例程

    1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入IO写入例程,点击导入按钮。 打开IO写入例程所在路径,选中IO写入.gsp文件,点击打开,完成导入。 2.功能
    的头像 发表于 08-22 16:47 908次阅读
    GraniStudio:IO<b class='flag-5'>写入</b>例程

    红外测温传感空气炸锅迈向智能高效的关键利器

    在健康饮食理念与厨房电器智能化浪潮的双重驱动下,空气炸锅凭借无油烹饪、高效便捷等特性,已成为现代家庭厨房的标配。然而,传统空气炸锅依赖NTC传感检测腔体空气温度的温控模式,因热惯性大
    的头像 发表于 08-06 14:12 1172次阅读
    红外测温传感<b class='flag-5'>器</b>:<b class='flag-5'>空气</b>炸锅迈向智能高效的关键利器

    12V-24V电压适配的空气净化器驱动方案,零速度闭环控制下的顺风逆风启动--【其利天下】

    在当今空气质量问题日益受到关注的背景下,空气净化器成为了众多家庭和办公场所的必备电器。而其核心部件之一--驱动方案,直接影响着空气净化器的性能、效率与使用寿命。本文将结合市面上空气净化器
    的头像 发表于 07-17 18:00 1845次阅读
    12V-24V电压适配的<b class='flag-5'>空气净化器</b>驱动方案,零速度闭环控制下的顺风逆风启动--【其利天下】

    奥拓电子LED屏幕:让虚拟制作走进生活的每个角落

    “Setting Up Shop”的快闪活动 ,通过奥拓电子高性能的RM系列LED屏幕,打破了虚拟制作只能在专业影棚实现的传统认知, 让街头巷尾也能成为光影艺术的舞台 。 一块LED屏 如何重塑空间叙事? 走进这家“变身”后的
    的头像 发表于 06-18 10:01 1546次阅读