以低于5美元的价格制作一个pov-led空中写手

在这个简单的项目中,我们将制作一个小设备,当你在空中挥舞时,它会点亮信息。比你想象的容易,总成本在5美元以下。...

你可以用闪烁的LED做各种各样的事情,在这个简单的项目中,我们将**一个小设备,当你来回挥动它时,它会点亮空中的信息。这比你想象的容易,而且零件的总成本不到5美元。

pov-led-air-writer

这个项目利用一种称为视觉持久性的视错觉使文本出现在空气中。你可能会遇到这种现象,当有人在夜间快速移动点燃的火花。我们将使用Arduino和一些LED来模拟这种效果。这个项目是简单的建设,与几个组件和小焊接(虽然如果你想要一些提示开始与你的烙铁检查这个指南)。

你需要

  • Arduino(我用的是2美元的Nano,因为它小巧便宜,但任何型号都可以)。
  • 5个红色LED。
  • 5个220欧姆电阻器。
  • 1x 9v电池架。
  • 1x摇臂开关。
  • 1块原型板。
  • 成品的外壳(我用了一个漆成黑色的小纸板箱)。

你还需要一个烙铁和一些焊料来把它放在一起。

虽然是可选的,一些焊锡芯可以在非常方便的情况下,你做任何焊接错误。一个试验板和一些连接线也有助于测试您的电路。

Components Required for Project

装电线

接线再简单不过了。首先,如图所示连接Arduino、LED和电阻器。

pov fritzing

引脚D2到D6分别连接到每个电阻器,电阻器连接到每个LED的正极(长腿)。阴极接地,接地又与Arduino相连。完成后应该是这样的:

pov breadboard

就这样:我们的电路完成了!我们将添加一个电池外壳和开关,但这是所有我们需要测试它是否工作。

代码

现在将您的Arduino连接到计算机并打开Arduino IDE。如果你是新的使用Arduino和想要一个很好的指南开始,这个链接将是有用的。

打开新草图并将此代码复制到中。代码是从这个项目中修改的,您可以在这里下载完整的代码。

// how long each led stays on forint delayTime = 1;//how long between each int charBreak = 3;//how long to wait after the message is finished before it repeatsint 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端口。你的发光二极管应该开始闪烁。如果他们没有,检查你的试验板上的所有连接。代码开头声明的整数决定文本的显示速度。数字越高,你就需要越快地挥动设备。我发现这里使用的数字效果很好。

现在做一个快速测试。断开Arduino与USB电缆的连接,将电池座连接到Arduino的VIN和GND引脚

pov fritz with batt

现在你可以移动它,小心地试着摆动你前面的发光二极管。如果你周围足够黑的话,你会看到一些字母在空中形成。我发现这有助于我的**捕捉到这个。

bread test

真管用!现在让它更持久一点。

熨斗准备好了!

将Arduino板、电阻器和LED放在protoboard上,如下所示:

laid out on board

当然,只要电路保持不变,就可以使布局尽可能紧凑。确保在Arduino的每侧至少保留一行protoboard触点,用于组件和电源。如果你是一个电子初学者,这里有一些伟大的提示给你。

我们将焊接在一起的LED阴极线,使共同的立场,就像我们做了我们的LED矩阵。

row cathodes

折叠每个阴极,使其与下一个阴极重叠,然后焊接它们,形成一条完整的线。现在我们需要把阳极焊接到电阻旁边的支脚上。我发现最简单的方法是把每个焊脚焊接到它们各自的焊盘上,然后把铁放在它们之间加热两个接头,最后再添加更多的焊料来填补它们之间的间隙。

检查每个连接是否牢固连接,然后用钢丝钳将电阻器和LED上多余的支脚切断。

resistors to anodes

现在重复同样的任务,但是这次把电阻的另一端连接到Arduino的腿上。这是焊接过程中最棘手的部分。每一个电阻都会单独连接到它的Arduino引脚上,否则电路将无**常工作。我在这里犯了几个错误,不得不用焊锡芯去除不需要的焊料多次。

一旦您建立了所有正确的连接,请仔细检查它们与邻居之间的任何重叠。如果您可以在这里使用万用表,可以使用连续模式检查每个引脚只有一条与电阻相连的未断开的线路。如果你刚刚有一个万用表,这篇文章有一个很好的入门指南。

continuity picture

检查完每个连接后,从电阻器的支脚上切下多余的长度

添加电源

现在把一根电线从Arduino的GND引脚接到焊接阴极线末端旁边的一个洞里,把电池架的黑色电线放在旁边。

gnd wires top

现在把电线焊接到GND引脚上,就像我们焊接电阻器一样,把两根电线焊接到阴极线的末端,为电路创造一个公共接地。

最后,在arduino的VIN引脚上连接一根导线,并将开关置于导线和电池组之间。抱歉,在这张照片热胶覆盖开关,我不得不拆除成品机拍摄这个阶段!

switch vin

一旦所有的焊接在一起,把一个电池和弹开关。祝贺 你!电路完成。如果你没有看到任何东西亮起,仔细检查每个焊接接头,看看哪里可能有一个中断或短路。

圈地

既然我们已经开始工作了,我们就把它放进盒子里吧。这里使用了一个彩绘的纸板箱,尽管你可以用一个爱好商店买的盒子,甚至是一个旧的图珀盒子来**更持久的东西。对于额外的极客,你甚至可以在这些廉价的3D打印机中打印你自己的3D。

削减你的原型板的大小,通过得分,并小心地抢走你不需要的部分。

proto gif

将电路放在外壳内,并标记LED和交换机需要**的位置。您还可以选择标记Arduino板上的USB接口与边缘的连接位置,这样您就可以在不打开框的情况下**它来更改文本。在外壳上钻或切你需要的孔。

make holes

现在在发光二极管的边缘加一点热胶水,把它们粘在适当的地方。我在电路下面粘了一块海绵,这样它就可以舒服地放在盒子里了。把开关接到箱子上。我用了热胶水,虽然螺丝或螺栓会使连接更牢固。你也可以把电池架粘在电路板的背面,以防止它在使用时在里面移动,但要确保电池盒上的任何金属触点都不会碰到你的焊接接头!

measure switch

任务完成了!

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

slower paced

你以前造过POV机器吗?知道改进设计的方法吗?你打算自己造一个吗?请在下面的评论中告诉我们你的项目,我们很乐意听到!

  • 发表于 2021-03-16 12:02
  • 阅读 ( 165 )
  • 分类:IT

你可能感兴趣的文章

特斯拉第二大股东向空中出租车初创公司lilium投资3500万美元

...经有过筹集这么多资金的野心,理由是德国的劳动力成本低于硅谷。一位发言人说:“我们在那篇文章发表时说,我们不承认这个数字,我们现在仍然不承认。”。“我们对吸引的投资水平非常满意,既有现有投资者,也有新投...

  • 发布于 2021-04-19 01:44
  • 阅读 ( 126 )

lg 55英寸oled电视5月上市售价略低于8000美元

...高清电视上市的时间有多长,我们实际上会认为这个价格低于预期。对于LG来说,率先推出这项技术是一件大事,来自韩国的报告将说,该公司将其路线图从2012年下半年提前到5月,以击败三星(及其自己的超级OLED电视)进入市...

  • 发布于 2021-04-21 18:31
  • 阅读 ( 156 )

每日应用交易:在今天的应用程序交易中免费获得ipad的鬼影写手笔记

...提到那些正在**。最好的Ghostwriter Notes(iTunes)以前是3.99美元,现在是免费的。Ghostwriter Notes for iPad使您在iPad上做笔记比以往任何时候都更容易。Ghostwriter便笺采用流畅易读的数字墨水,让您可以对PDF文档进行重要注释,在空中...

  • 发布于 2021-05-26 09:46
  • 阅读 ( 179 )

看跌期权

...们可以保留全部溢价。但是,如果标的证券的价格接近或低于执行价——为了避免巨大损失——期权作者可以简单地回购期权(这会使他们脱离头寸)。利润或损失是收取的保险费与为摆脱头寸而支付的保险费之间的差额。 ...

  • 发布于 2021-05-31 07:30
  • 阅读 ( 202 )

铁秃鹰

...损失还是有限的。 这个 该战略的结构如下: 以低于标的资产当前价格的执行价买入一只。该OTM看跌期权将防止标的资产出现重大下行。 卖出一个OTM或以接近标的资产当前价格的执行价卖出的货币(ATM)。 以高于标的...

  • 发布于 2021-06-12 05:07
  • 阅读 ( 255 )

铁蝴蝶

...和长扼杀,跨放在三个执行价格的中间,扼杀放在高于和低于中间执行价格的两个额外的执行价格上。 当标的资产在到期日收盘时正好以中间执行价收盘时,交易获利最大。交易者将通过以下步骤构建一个铁蝴蝶交易。 交...

  • 发布于 2021-06-12 05:13
  • 阅读 ( 281 )

裸呼写作:一种高风险的期权策略

...美元的期权溢价。这样做,你是在猜测ABC股票在到期时将低于107美元(105美元+2美元溢价)(即,如果低于107美元,你将获利)。 考虑收益图: 如你所见,当股价超过107美元的盈亏平衡点时,损失迅速增加。另请注意,在...

  • 发布于 2021-06-20 01:30
  • 阅读 ( 165 )

如何企业应该向博客作者付费(businesses should pay bloggers)

...。 你可以期望博客作者的费用从极其便宜(每篇文章5美元或更少)到非常昂贵(每篇文章100美元或更多)。关键是根据博主的经验和技能评估其费用,以确保基于您的业务目标的投资是值得的。此外,请记住,你经常会得到...

  • 发布于 2021-09-08 04:22
  • 阅读 ( 144 )

路标写手会写吗?

...和用于窗户的文字。一些招牌作者使用传统的方法和设备制作这些招牌,包括各种手工工具、喷砂、手工在木头、乙烯基、金属或其他材料上作画。标识书写者还可以利用现代计算机辅助设计(CAD)软件,确保为客户创建标识时...

  • 发布于 2022-02-14 11:46
  • 阅读 ( 67 )

如何选择便宜的度假酒(choose a bargain holiday wine)

...受欢迎的葡萄酒,带有苹果和柑橘的味道。你应该能够以低于20美元的价格获得一瓶霞多丽。德国雷司令是具有坚果或蜂蜜味道的白葡萄酒。除了Kabinett品种(是干型或非干型),雷司令往往是甜的。一道较重的小牛肉菜肴可能...

  • 发布于 2022-03-14 12:20
  • 阅读 ( 228 )