没有照片纸的照片



摄影是一门非常有趣的艺术,曾经在电视节目中被宣传过。 您将对象放在照片纸上,从获得最有趣的轮廓的方向上进行曝光,显示,修复并准备好工作。 但是现在您不能在每一步都购买相纸。 但是,如果在照片后将数字图片制成数字化怎么办?

为此,一个众所周知的行进式光束扫描仪是合适的,仅在今天代替CRT,在其中使用LED矩阵会更加方便。 更好的是:灯管有轻微的余辉,LED没有。 传感器将是TIL78光电晶体管,它在外部与LED不可区分(基本输出未带出,但不需要)。 该光电晶体管已停产,可以用许多相似的光电晶体管替换。

光电晶体管必须通过发射极连接到公共线,通过集电极连接到A5 Arduino UNO的输入,然后填写并运行一个小的调试草图:

#define SENSOR A5 void setup() { Serial.begin(9600); pinMode(SENSOR, INPUT_PULLUP); } void loop() { // Read analog value continuously and print it Serial.println(analogRead(SENSOR)); } 

该程序特别激活了Arduino内置的上拉电阻,因此不需要外部电阻。 在Arduino IDE菜单中,选择“工具”“串行绘图仪”,然后观察光照时间表。 由于未在其上指示光电晶体管的基极,因此可以通过实验确定其连接的极性。

我们将32x32 LED矩阵与集成控制设备连接如下:



矩阵无法由Arduino供电,它需要5 V,4 A的外部电源。我们按以下方式进行连接:



始终先向矩阵供电,然后再向Arduino供电,以相反的顺序断开电源。 我们使用必要的库“泵送” Arduino IDE,并按此处所述检查矩阵。 当它起作用时,填写草图以获取照片。

在其中,您可以尝试更改参数:

 static constexpr uint8_t READINGS_PER_PIXELS = 1; static constexpr uint8_t THRESHOLD = 15; static constexpr bool INVERT = false; static constexpr bool CLEAR = true; 

前两个参数可让您调整灵敏度,第三个参数可在正负之间切换,第四个参数可将每个后续图像叠加在前一个图像上。 观看精彩的GIF动画

确定来自光电晶体管的光是否来自矩阵的最佳方法如下:将结果与打开和关闭LED进行比较。 如果当前正在读取的对象上方的LED被阻止,则它们将相同,如果未被阻止,则它们将不同。 通过切换OE线(输出使能),LED会多次打开和关闭,读取结果将汇总在两节电池中:一个是LED熄灭,另一个是打开时。 将减去这些量的结果与阈值进行比较。

该矩阵包含六个移位寄存器,分别对应于上半部分和下半部分的整行红色,绿色和蓝色LED。 LAT线(锁存器)控制一个缓冲区,该缓冲区将值从移位寄存器传输到LED驱动器。 四个地址线A,B,C,D允许您在上半部分和下半部分中选择活动线,而OE线则可以禁用和启用驱动程序。

通常,先前的数据存储在缓冲区中并发送到LED驱动器,而此时新数据被写入移位寄存器。 完全写入一行后,它们将被传输到缓冲区,并为下一行重复该过程。 即使只需要更改一个像素的状态,也必须重写整行。

在这里,矩阵用于其他目的-进行扫描,因此作者在此模式下使用了移位寄存器,但未使用缓冲区。 我们向LAT线馈入一个,并且移位寄存器的内容随CLK线上的每个脉冲立即传输到缓冲区。 每次配音后,如上所述,我们通过OE使LED闪烁几次,以读取光电晶体管的结果,并加上两个电池。 最后,在确定LED是否被阻塞之后,我们将结果记录在库中提供的帧缓冲区中。

扫描完整个摄影图后,再次打开中断就足够了-来自帧缓冲区的图片将以标准方式写入矩阵并显示,此后它将一直保留在那里直到下一次扫描开始。

影片:

Source: https://habr.com/ru/post/zh-CN454462/


All Articles