4232浏览
查看: 4232|回复: 10

[项目] 3D打印的视觉暂留显示器

[复制链接]
本帖最后由 中二点 于 2019-5-29 14:48 编辑

3D打印的视觉暂留显示器图1

MAKER: theSTEMpedia/译:趣无尽 Cherry
人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,也被称为是“视觉暂留”。

人眼每秒处理的图像不超过 10-12 个。当一系列图像很快的连续性的滚动时,就会让我们产生幻觉,感觉画面在动。这也是制作动画电影的基本原则。

本期给大家带来一款别出心裁的 LED 显示器,用 Arduino、电机和一排 LED 制作的视觉暂留显示器。

3D打印的视觉暂留显示器图2

是不是很酷呢,接下来我们先来看一段视频,看看是如何制作的吧。


材料清单

3D打印的视觉暂留显示器图3

Arduino Nano×1
红外线传感器×1
洞洞板×1
LED 灯×若干
电阻×若干
直流电机×1
电池×1
电线×若干
热熔胶×1
烙铁×1
白纸×1
Arduino IDE(软件)

3D打印
3D 打印部分主要分为旋转支架和固定底座两个部分。

3D打印的视觉暂留显示器图4

所需 3D 打印的 STL 文件请在项目文件库中下载。

安装 LED

3D 部件打印完毕后,就可以进入操作环节了。
1、剪取一块洞洞板,大小与旋转支架部分相匹配。

3D打印的视觉暂留显示器图5

2、安装 LED 灯,我使用八个红色的 LED 灯。关于灯的颜色,你可以自由选择。

3D打印的视觉暂留显示器图6

3、将所有 LED 灯的负极端口都焊接到洞洞板上。

3D打印的视觉暂留显示器图7

4、添加电阻,防止 LED 灯因电压(5V)过高而烧坏。我使用 220ohm 的电阻,将每个电阻焊接到每个 LED 灯的正极。
5、将跳线电缆连接到电阻的另一个脚上。

连接 LED 与 Arduino Nano


3D打印的视觉暂留显示器图8

连接接口的方式如下:
LED0:Nano 的 D2 。
LED1: Nano 的 D3 。
LED2: Nano 的 D4 。
LED3: Nano 的 D5 。
LED4: Nano 的 D6 。
LED5: Nano 的 D7 。
LED6: Nano 的 D8 。
LED7: Nano 的 D9 。
负极为:Nano 的 Ground 。

安装直流电机

将直流电机安装到固定底座上并通电。

3D打印的视觉暂留显示器图9

添加红外线传感器

我们需要一个点作为文本读写开始的起点。在固定底座下面粘贴一块白纸块作为起点,红外线传感器能检测到这张白纸块。
如果改变白纸的位置,那么文本显示的位置也将随之发生改变。

3D打印的视觉暂留显示器图10

3D打印的视觉暂留显示器图11

3D打印的视觉暂留显示器图12


红外线传感器与 Nano 连接方式如下 :
GND:Nano 的 GND。
Vin: Nano 的 5V。
Out:Nano 的 D10。

组装部件
1、连接电源,给 Arduino Nano 通电。


3D打印的视觉暂留显示器图13

2、将 Arduino Nano 安装到旋转的部件中。
3D打印的视觉暂留显示器图14

3、将旋转部件安装到固定底座上。

3D打印的视觉暂留显示器图15

Arduino 编程
[mw_shl_code=applescript,true]/*
* This Code demonstrates
* LED POV DISPLAY
*
* Components used
* 1) Arduino Nano
* 2) DC motor
* 3) LEDs
* 4) IR sensor
* 5) Battery
* 6) Wire
*
* Connect leds to 2 to 9 digital pin of Nano
* Connect IR sensor out pin to 10 digital pin of Nano
*
* code written by Palak Mehta on March 29,2019
*/
////////////////////////design a pattern of display the number and alphabates////////////////////////////////

int NUMBER9[]={1,1,1,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,1,1,1,1,1,1,1};
int NUMBER8[]={0,1,1,0,1,1,1,0, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,1,1,1,0};
int NUMBER7[]={1,0,0,0,0,0,0,0, 1,0,0,0,1,0,0,0, 1,0,0,0,1,0,0,0, 1,0,0,1,1,1,1,1, 1,1,1,0,1,0,0,0};
int NUMBER6[]={1,1,1,1,1,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,1};
int NUMBER5[]={1,1,1,1,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,1};
int NUMBER2[]= {1,0,0,0,0,0,1,1, 1,0,0,0,0,1,0,1, 1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,0,0,0,1};
int NUMBER1[]= {0,0,1,0,0,0,0,0, 0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0};
int NUMBER0[]= {1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1};

int _[] = {0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0};
int A[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,1,1,1,1,1,1,1};
int B[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 0,1,1,0,1,1,1,0};
int C[] = {0,0,1,1,1,1,0,0, 0,1,0,0,0,0,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1};
int D[] = {1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 0,1,0,0,0,0,1,0, 0,0,1,1,1,1,0,0};
int E[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1, 1,0,0,1,0,0,0,1};
int F[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0};
int G[] = {0,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,0};
int H[] = {1,1,1,1,1,1,1,1, 0,0,0,0,1,0,0,0, 0,0,0,0,1,0,0,0, 0,0,0,0,1,0,0,0, 1,1,1,1,1,1,1,1};
int I[] = {1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1};
int J[] = {0,0,0,0,0,1,1,0, 0,0,0,0,1,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0};
int K[] = {1,1,1,1,1,1,1,1, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 0,1,0,0,0,0,1,0, 1,0,0,0,0,0,0,1};
int L[] = {1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1};
int M[] = {1,1,1,1,1,1,1,1, 0,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0, 0,1,0,0,0,0,0,0, 1,1,1,1,1,1,1,1};
int N[] = {1,1,1,1,1,1,1,1, 0,0,1,0,0,0,0,0, 0,0,0,1,1,0,0,0, 0,0,0,0,0,1,0,0, 1,1,1,1,1,1,1,1};
int O[] = {0,1,1,1,1,1,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 1,0,0,0,0,0,0,1, 0,1,1,1,1,1,1,0};
int P[] = {1,1,1,1,1,1,1,1, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 1,0,0,1,0,0,0,0, 0,1,1,0,0,0,0,0};
int Q[] = {0,1,1,1,1,1,1,0, 1,0,0,0,0,0,0,1, 1,0,0,0,0,1,0,1, 0,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,1};
int R[] = {1,1,1,1,1,1,1,1, 1,0,0,1,1,0,0,0, 1,0,0,1,0,1,0,0, 1,0,0,1,0,0,1,0, 0,1,1,0,0,0,0,1};
int S[] = {0,1,1,1,0,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,0,0,1, 1,0,0,0,1,1,1,0};
int T[] = {1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0, 1,1,1,1,1,1,1,1, 1,0,0,0,0,0,0,0, 1,0,0,0,0,0,0,0};
int U[] = {1,1,1,1,1,1,1,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,0,1, 1,1,1,1,1,1,1,0};
int V[] = {1,1,1,1,1,1,0,0, 0,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,1, 0,0,0,0,0,0,1,0, 1,1,1,1,1,1,0,0};
int W[] = {1,1,1,1,1,1,1,1, 0,0,0,0,0,0,1,0, 0,0,0,0,0,1,0,0, 0,0,0,0,0,0,1,0, 1,1,1,1,1,1,1,1};
int X[] = {1,1,0,0,0,0,1,1, 0,0,1,0,0,1,0,0, 0,0,0,1,1,0,0,0, 0,0,1,0,0,1,0,0, 1,1,0,0,0,0,1,1};
int Y[] = {1,1,0,0,0,0,0,0, 0,0,1,0,0,0,0,0, 0,0,0,1,1,1,1,1, 0,0,1,0,0,0,0,0, 1,1,0,0,0,0,0,0};
int Z[] = {1,0,0,0,0,1,1,1, 1,0,0,0,1,0,0,1, 1,0,0,1,0,0,0,1, 1,0,1,0,0,0,0,1, 1,1,0,0,0,0,0,1};

int* alpha[]= {A,B,C,D,E,F,G,H,I,J,K,L,M,N};//,T,U,V,W,X,Y,Z};
int letterSpace;
int delayTime;

#define IR_pin 10

void setup()
{
         Serial.begin(9600);      
         pinMode(IR_pin,INPUT);
         for( int i = 2; i<10 ;i++ ) // setting the ports of the leds to OUTPUT
           {
            pinMode(i, OUTPUT);
           }
               
         letterSpace =4;// defining the space between the letters (ms)         
         delayTime =1;// defining the time dots appear (ms)
}


void printLetter(int letter[])
{
           int y;
          // printing the first y row of the letter
           for (y=0; y<8; y++)
           {
           digitalWrite(y+2, letter[y]);
           }
           delay(delayTime);
          // printing the second y row of the letter
           for (y=0; y<8; y++)
           {
           digitalWrite(y+2, letter[y+8]);
           }
           delay(delayTime);
          // printing the third y row of the letter
           for (y=0; y<8; y++)
           {
           digitalWrite(y+2, letter[y+16]);
           }
           delay(delayTime);
           for(y = 0; y<8; y++) {
           digitalWrite(y+2, letter[y+24]);
           }
           delay(delayTime);
          for(y = 0; y<8; y++) {
           digitalWrite(y+2, letter[y+32]);
           }
           delay(delayTime);
           // printing the space between the letters
           for (y=0; y<8; y++)
           {
           digitalWrite(y+2, 0);
           }
           delay(letterSpace);
}


void loop()
{
  if(digitalRead(IR_pin)==LOW)
  {
     printLetter (P);
     printLetter (O);
     printLetter (V);
     printLetter (_);
     printLetter (_);
     printLetter (D);
     printLetter (I);
     printLetter (S);
     printLetter (P);
     printLetter (L);
     printLetter (A);
     printLetter (Y);
     printLetter (_);

  }
     
}
[/mw_shl_code]
下载附件归档.zip


DL张  见习技师

发表于 2019-5-29 21:43:32

赞赞赞
回复

使用道具 举报

LANCHUAN  见习技师

发表于 2019-6-3 18:13:11

牛逼啊,
回复

使用道具 举报

熹宝快睡觉  见习技师

发表于 2019-8-9 10:27:18

这个666   顶一个
回复

使用道具 举报

gada888  版主

发表于 2019-8-15 09:03:47

很漂亮
回复

使用道具 举报

拓拔开放  见习技师

发表于 2019-8-18 18:55:45

牛皮
回复

使用道具 举报

拓拔开放  见习技师

发表于 2019-8-18 18:56:02

很可以
回复

使用道具 举报

春风化雨  见习技师

发表于 2019-8-30 22:51:06

赞赞赞赞
回复

使用道具 举报

熹宝快睡觉  见习技师

发表于 2020-6-24 15:46:25

再次点赞,第二次看。
回复

使用道具 举报

20060606  高级技匠

发表于 2020-6-26 05:44:21

LED怎么供电的?无线供电?纽扣电池?
回复

使用道具 举报

20060606  高级技匠

发表于 2020-7-18 05:09:10

旋转部分的供电是一大亮点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail