我们推出了一项新计划,即通过使用了Arduino的简单制作来学习电子制作的原理和基础知识。此次为我们分享的嘉宾是伊藤尚未先生,他活跃于媒体艺术领域,并且在书籍领域以讲解“更深层次的原理”而闻名。第4篇我们将用Arduino来控制RGB LED灯。
1. 前言
大家好!我是伊藤尚未。
这次我想尝试制作一个可以称之为动画的原理和鼻祖的“走马盘”。“走马盘”也被称为“诡盘(phenakistiscope)”,不过相比之下“走马盘(Zoetrope)”这个词对于喜欢电子制作的人来说可能更熟悉。无论哪种,都是在具有某种主题的转盘上设置一些狭缝,当人通过狭缝观看时,狭缝便起到快门的作用,转盘旋转时让人感觉像在看动画。
这是1830年代在欧洲发明的视觉玩具,有平面的、立体的、镜像的和另设快门的,产品形式多样。类似于翻书动画,也可以说是当今影视技术的鼻祖。
如果尝试以电子作品的形式展现出来的话,就需要通过使LED等光源闪烁来使人看到的瞬间连续起来。通过将LED灯控制为连续闪光灯并使绘有连续图画的转盘旋转起来,即可表现出动画的效果。这也是因为白色LED的发明,加之电路配置变得更简单了,才让我们能够享受其中的制作乐趣。
虽然在书籍和网络上已经有多种多样的制作介绍,但我突发奇想,如果不仅仅用白色LED闪烁,而是用RGB闪烁的方式,应该会有更丰富的表现吧,所以我决定制作出来,并介绍给大家。
2. 闪光灯动画
我通常在工作室等进行电子制作,但最近,用简单的电路使LED闪烁的制作,以及将其灯光照射到绘有图画的转盘上形成动画的项目多起来了。
这种装置通常采用由晶体管、电阻器和电容器组成的简单振荡电路,不过在这次的作品中,我让闪烁速度也成为可调的了。
很遗憾的是,不知道是视频中的帧率问题还是什么原因,效果没有很好地拍摄出来。从视频中可以看到,转盘的转速会逐渐变慢并最终停止,动画的速度也随之变化。
3. 用Arduino控制电机
我希望它一直以相同的速度旋转,所以我决定制作一个用电机驱动的装置。电机使用的是“万宝至”公司生产的“FA-130RA”。
从包装上看,正常转速是6500rpm,感觉这个速度有点太快了,所以我决定通过控制让转速慢一些。
我做了一个支架用来将转盘的轴固定在上方,用皮带轮将电机的旋转传递给转盘,并使用Arduino的模拟输出来控制电机的旋转速度。
我使用了ROHM的晶体管“2SD1866”进行驱动。
完整的作品样子如下:
由于电机在开始转动时需要一定的动力,因此很难从一开始就减速,所以我先让电机转起来,然后再使之低速转动。为此,我做了一个可以用手旋转进行调节的半可调电阻器旋钮装置,这样就可以手动控制转速了。
使用Arduino进行模拟输入,以控制电机。电路图如下:
使用电机控制用的晶体管“2SD1866”进行驱动,并由一节干电池提供1.5V电压。将这些部件组装在面包板上之后的示意图如下:
草图如下。其机制是通过A0引脚将半可调电阻器的值模拟输入,并通过引脚9经由20kΩ的电阻器驱动连接到晶体管集电极的电机。
int Value01 = 0; void setup() { Serial.begin(9600); pinMode(9, OUTPUT); } void loop() { int Value01 = analogRead(A0); Serial.println(Value01); analogWrite(9, Value01 / 4); }
当我实际尝试使其转动起来时,转盘竟然能够以很低的速度旋转。当我用前面用过的闪光灯照射转盘时,它表现如下:
4. 控制三色LED
现在,为了提高亮度,我打算增加LED的数量。此外,为了制作出最初想象中的RGB LED,我分别采用了5个红色、绿色和蓝色的LED。
为了让Arduino控制这些LED,我决定也用晶体管“2SD1866”来驱动。
电路图如下:
每个晶体管由Arduino的引脚11、引脚12和引脚13驱动,红色对应引脚13,绿色对应引脚12,蓝色对应引脚11。外部电源为3节干电池,4.5V。我把它们焊接到了万用板上并接线。电路板接线图如下:
为了便于照亮安装在电机底座上的转盘,我将该LED板安装在倾斜的底座上,另外还在电机底座上安装了Arduino和面包板等部件。由于LED的光线不够均匀,所以我为LED安装了扩散罩。
从电机底座的后面看,样子如下:
将其与Arduino连接。首先,为了让所有的LED同时闪烁,在前面提到的电机控制部分基础上,草图中又增加了部分内容:
int Value01 = 0; void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); Serial.begin(9600); pinMode(9, OUTPUT); } void loop() { int Value01 = analogRead(A0); Serial.println(Value01); analogWrite(9, Value01 / 4); digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); delay(1); digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); delay(49); }
当前设置为点亮0.001秒,熄灭0.049秒,每秒闪烁20次。由于RGB同时闪烁,光的三原色合在一起发出白色的光,所以动画看起来像之前的闪光灯动画。
5. 享受千变万化的动画
下面,我们让RGB错开时间亮起。除了全部亮起形成白色光之外,还可以通过错开时间让红色、绿色和蓝色LED分别亮起,来使转盘上的图形显示不同的颜色。草图如下:
int Value01 = 0; void setup() { pinMode(13, OUTPUT); pinMode(12, OUTPUT); pinMode(11, OUTPUT); Serial.begin(9600); pinMode(9, OUTPUT); } void loop() { int Value01 = analogRead(A0); Serial.println(Value01); analogWrite(9, Value01 / 4); digitalWrite(13, HIGH); digitalWrite(12, HIGH); digitalWrite(11, HIGH); delay(1); digitalWrite(13, LOW); digitalWrite(12, LOW); digitalWrite(11, LOW); delay(13); digitalWrite(13, HIGH); delay(1); digitalWrite(13, LOW); delay(11); digitalWrite(12, HIGH); delay(1); digitalWrite(12, LOW); delay(11); digitalWrite(11, HIGH); delay(1); digitalWrite(11, LOW); delay(11); }
这样,虽然没有改变整体的周期,但看起来像红色、绿色、蓝色的人在白色人中间奔跑。
如果用来表演,还可以增加更多表达方式。可以分别混合颜色,还可以让它们一会儿出现一会儿消失,是不是很有趣?
这让我想起当我还是个学生的时候,在节目中创造各种模式演出的乐趣。如今,当我确定某个创意“可行”的时候,在考虑把创意做成作品时倾向于直接进入完成期了。这种现象也称为“搁置”(笑)。
最后,把电路图合在一起,整个电路图如上图所示。1.5V电源用于电机,4.5V电源用于LED,当然Arduino也连接了USB。另外,我还进行了焊接并使用了面包板。
如您所见,这次的电子作品制作中使用了各种手法,不过我更希望大家也来挑战一下!