如何制作POV LED空气写入器

电子说

1.3w人已加入

描述

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

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

您将需要

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

5个红色LED。

5x220欧姆电阻。

1x9v电池座。

1x拨动开关。

一块protoboard,

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

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

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

Arduino

布线

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

Arduino

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

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引脚上

Arduino

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

Arduino

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

准备就绪的铁!

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

Arduino

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

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

Arduino

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

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

Arduino

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

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

Arduino

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

增加功率

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

Arduino

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

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

Arduino

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

外壳

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

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

Arduino

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

Arduino

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

Arduino

工作完成!

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

Arduino

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

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分