基于Arduino Uno 平台的“光魔方”设计研究
2019-07-29吴健翔蒋志恒卓展星
吴健翔,蒋志恒,卓展星
(澳门大学科技学院,澳门 999078)
在日常生活中,我们可以看到各种五颜六色的霓虹灯、广告灯箱,甚至酒店和夜总会的各种灯光,当今时代的智能控制电子技术,给人们的生活带来了方便和舒适,而每到晚上,五颜六色的霓虹灯则把我们的城市点缀得格外迷人,为人们的生活增添了不少色彩。这些景观灯制作方法有很多种,有传统的分立元件,由数字逻辑电路构成的控制系统和单片机智能控制系统等。本文基于Arduino Uno R3嵌入式开发平台设计制作了“光魔方”,展现出不同的形状和性能的灯光效果,同时通过设计和实验,以及分析和解释数据,对这一系统进行优化。
1 Arduino Uno R3嵌入式开发平台 “光魔方”的设计
1.1 Arduino Uno R3 (Ch340g)板介绍
Arduino Uno是一个基于ATmega328的微控制器板。它有14个数字输入/输出引脚(其中6个可以用作PWM输出),6个模拟输入,一个16MHz的陶瓷谐振器,一个USB接口,一个电源插口,一个ICSP头和一个复位按钮。只需用USB连接线将其连接到计算机上,或用交流—直流电源适配器为其供电即可启动。
技术规范:
微控制器:ATmega328P-AU
工作电压:5V
输入电压(推荐):7~12V
输入电压(限制):6~20V
数字I/O引脚:14(其中6个提供PWM输出)
模拟输入引脚数:6
每I/O引脚直流电流:40mA
引脚直流电流(3.3V):50mA
闪存:32KB,其中0.5KB用于引导加载程序
静态随机存储器:2KB
电可擦只读存储器:1KB
时钟频率:16MHz
基于Arduino Uno R3嵌入式开发平台“光魔方”设计系统原理图如图1所示,包括Arduino Uno R3开发平台、走线面包板和立方LED灯。
图1 基于Arduino Uno R3嵌入式开发平台 “光魔方”设计系统原理图
1.2 立体LED “光魔方”硬件设计
图2
图3
图4
本立体LED “光魔方”基于面包板设计(如图2),面包板是专为电子电路的无焊接实验设计制造的。由于各种电子元器件可根据需要随意插入或拔出,免去了焊接,节省了电路的组装时间,而且元件可以重复使用,所以非常适合电子电路的组装、调试和训练。
立体LED“光魔方”硬件设计过程如下:
(1)检查所有LED灯是否正常工作。(验证LED灯亮:插入一个100Ω电阻和一个5V电源到板上检查是否能正常照明)。
(2)如果所有LED灯工作正常,可以将其按具体尺寸放入纸板中(图3中每条线相隔2.5cm),并固定。将它们的“腿”分离到阳极/阴极。每个“腿”应弯曲到90°角。然后,使用烙铁(与焊料)结合所有LED灯的“腿”,制作成立方体的形状。
(3)将“腿”的位置依次用烙铁连接,并把导线放在中间位置焊接。
(4)重复上述步骤四次。然后将四层LED灯堆叠起来,用烙铁将触点连接起来。
(5)确认所有的灯都可以重新亮起来。
(6)使用面包板进行组合。将100Ω电阻通过四个I/O引脚(A0-A3)连接到杜邦线,然后分别连接四层LED(如图4)。
(7)将16个I/O引脚(A4,A5,0-13)与底部16个LED灯脚相连。
(8)最后,将UNO宽带连接到计算机并进行测试。
1.3 基于 Arduino Uno R3 (Ch340g) 平台立体LED “光魔方”软件设计
(1)使用Arduino IDE,将Uno板连接到计算机后,选择Uno板的端口。在我的笔记本电脑中,端口是COM3,如图5。
(2)定义一个LEDPin 阵列包括16 个I/O 引脚(A4,A5, 0-13)和一个PlanePin 阵列包括 4 个I/O Pin(A0 -A3),如图6。
(3)在空位设置中,使用循环和PinMode将pin配置为输入或输出模式。同时设置LEDPin I/O的初始状态为HIGH, PlanePin I/O为LOW(如图7)。
(4)在空循环中,编写不同的代码来显示不同灯光效果,如图8。
图5
图6
图7
这是按顺序点亮LED灯的程序,可以用来测试灯是否工作良好。
图8
(5)为LED立方体设计的空循环代码。
程序代码
int LEDPin[] = {A4, A5, 0, 1, 2, 3, 4, 5, 6, 7,8, 9, 10, 11, 12, 13};
int PlanePin[] = {A0 , A1, A2, A3};
void setup()
{
for (int i = 0; i < 16; i++)
{
pinMode(LEDPin[i], OUTPUT);
digitalWrite(LEDPin[i], HIGH);
}
for (int i = 0; i < 4; i++)
{
pinMode(PlanePin[i], OUTPUT);
digitalWrite(PlanePin[i], HIGH);
}
}
void loop()
{
for (int i = 0; i < 16; i++)
{
digitalWrite(LEDPin[i], LOW);
delay(100);
}
for (int i = 0; i < 16; i++)
{
digitalWrite(LEDPin[16-i], HIGH);
delay(50);
}
digitalWrite(LEDPin[0], LOW);
delay(100);
digitalWrite(LEDPin[1], LOW);
delay(100);
digitalWrite(LEDPin[2], LOW);
delay(100);
digitalWrite(LEDPin[3], LOW);
delay(100);
digitalWrite(LEDPin[7], LOW);
delay(100);
digitalWrite(LEDPin[11], LOW);
delay(100);
digitalWrite(LEDPin[15], LOW);
delay(100);
digitalWrite(LEDPin[14], LOW);
delay(100);
digitalWrite(LEDPin[13], LOW);
delay(100);
digitalWrite(LEDPin[12], LOW);
delay(100);
digitalWrite(LEDPin[8], LOW);
delay(100);
digitalWrite(LEDPin[4], LOW);
delay(100);
digitalWrite(LEDPin[5], LOW);
delay(100);
digitalWrite(LEDPin[6], LOW);
delay(100);
digitalWrite(LEDPin[10], LOW);
delay(100);
digitalWrite(LEDPin[9], LOW);
delay(100);
}
2 效果展示及试验分析
该产品是由Arduino操作的LED立方体,图3展示了总体结果。
图3
在焊接过程中,焊料容易接触到灯泡的正极和负极。这可能会导致光亮不稳定,或者闪烁位置与代码的命令不匹配。因此,焊接时要仔细观察,尽量避免焊料对正负极的干扰。
3 结语
经过构思设计,制作组装了“光魔方”的外观,然后使用不同的代码创造各种灯光效果。在将来有机会能将它应用在家庭和娱乐场所(露营、夜总会等)的装饰中,也可以应用于广告牌。除了这些传统的应用,还可以进行一些创新设计,比如制作贪吃蛇游戏、立体时钟和3D动画文本,增加了实用性和可玩性。