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
    +关注

    关注

    240

    文章

    23060

    浏览量

    656986
  • Arduino
    +关注

    关注

    187

    文章

    6456

    浏览量

    186490
收藏 人收藏

    评论

    相关推荐

    ROM芯片如何写入和擦除

    1. PROM(可编程只读存储) PROM是一种一次性可编程的ROM,一旦编程后就无法更改。写入PROM的过程如下: 写入过程 :使用专用的PROM编程,通过紫外线照射或电子方式将
    的头像 发表于 11-04 10:19 164次阅读

    空气净化器电源设计电路

    空气净化器电源设计电路
    发表于 09-25 14:35 0次下载

    如何向EEPROM写入数字

    向EEPROM(Electrically Erasable Programmable Read-Only Memory,电可擦可编程只读存储写入数字是一个相对直接的过程,但涉及到多个步骤和细节。以下是一个详细的步骤说明,旨在帮助您理解并成功向EEPROM
    的头像 发表于 09-05 10:56 670次阅读

    什么是空气开关什么是漏电保护

    空气开关和漏电保护是两种常见的电气设备,它们在电气系统中起着重要的作用。 一、空气开关 定义 空气开关,又称为断路,是一种能够自动切断电
    的头像 发表于 07-31 18:21 822次阅读

    如何使用空气质量传感检测新房室内空气质量

    随着人们对健康居住环境的日益关注,新房室内空气质量成为了一个不可忽视的问题。室内空气质量不仅关乎居住者的舒适度,更直接关系到人们的身体健康。因此,使用空气质量传感来检测新房室内
    的头像 发表于 05-29 15:00 339次阅读
    如何使用<b class='flag-5'>空气</b>质量传感<b class='flag-5'>器</b>检测新房室内<b class='flag-5'>空气</b>质量

    单片机POV LED流水灯制作

    电子发烧友网站提供《单片机POV LED流水灯制作.docx》资料免费下载
    发表于 05-28 14:34 3次下载

    中微半导体空气净化器方案

    方案概述 针对空气净化器在居家、医疗、工业领域的应用,中微半导体推出高稳定性空气净化解决方案。该方案对空气质量进行实时检测,使用智能控制算法选择最优的工作策略,有效去除空气中的颗粒物,
    发表于 04-15 11:32

    空气开关的原理 空气开关的分类 空气开关和漏电保护的区别

    空气开关的原理 空气开关的分类 空气开关和漏电保护的区别 空气开关是一种用于控制电气设备电流的开关装置。它的工作原理是基于
    的头像 发表于 04-08 15:55 1139次阅读

    UltralIOS制作启动盘步骤

    1、打开UltraISO工具。 2、点击文件-打开-选择镜像。 3、选择好镜像后,点击启动-写入硬盘映像。 4、选择硬盘驱动,选择好后点击写入-等待制作完成。
    的头像 发表于 03-08 14:46 513次阅读
    UltralIOS<b class='flag-5'>制作</b>启动盘步骤

    UltralIOS制作启动盘步骤

    1.打开UltraISO工具 2.点击文件-打开-选择镜像   3.选择好镜像后,点击启动-写入硬盘映像   4.选择硬盘驱动,选择好后点击写入-等待制作完成   审核编辑 黄宇
    的头像 发表于 03-04 16:48 873次阅读
    UltralIOS<b class='flag-5'>制作</b>启动盘步骤

    负离子空气净化器使用方法 负离子空气净化器的原理

    负离子空气净化器使用方法 负离子空气净化器是一种通过释放负离子来净化室内空气的设备。使用负离子空气净化器可以有效地去除空气中的有害物质,如细
    的头像 发表于 02-18 13:50 2903次阅读

    水火箭制作原理 水火箭制作步骤

    水火箭是一种简单而有趣的科学实验项目,它可以通过将水和压缩空气装载进一个空瓶中来创造推进力。当我们释放压力时,水和空气会以高速喷出瓶口,从而产生反作用力推动火箭向上飞行。下面我将详细介绍水火箭的制作
    的头像 发表于 01-25 16:09 4932次阅读

    空气的开关原理 空气开关的安装方式

    空气开关是一种常用的电气开关装置,广泛应用于工业和民用领域。本文将详细介绍空气开关的原理和安装方式。 一、空气开关的原理 空气开关的原理基于物质的导电性和绝缘性不同。当开关处于关闭状态
    的头像 发表于 01-18 11:47 1371次阅读

    单片机芯片怎么写入程序

    单片机芯片的程序写入是通过将程序代码写入单片机芯片的非易失性存储(如Flash)中实现的。 在计算机科学和电子工程领域,单片机是一种集成电路,它集成了处理核心、内存、输入/输出接口
    的头像 发表于 01-05 14:06 7652次阅读

    完美光学涡旋(POV)光束的实验研究

    完美光学涡旋(POV)光束因其具有与轨道角动量无关的径向轮廓而引起广泛关注。迄今为止,它通常是通过透镜在贝塞尔光束上执行的傅里叶变换获得的。该论文从理论和实验上证明了可以通过对具有高阶径向折射率的拉
    的头像 发表于 12-11 11:05 1534次阅读
    完美光学涡旋(<b class='flag-5'>POV</b>)光束的实验研究