|
在这个初学者项目中,我们通过搭建LED点阵以及使用Arduino开发板来制作一个二进制时钟。
本篇文章将向您介绍LED多路复用以及如何利用该技术制作LED阵列,可用于许多不同项目。在本例中,我们将制作一个二进制时钟。
所需的硬件 ● BC547 NPN晶体管 ● 红色LED指示灯 ● 150欧电阻 ● 680欧电阻 ● Arduino Uno Rev. 3开发板 ● 面包板
如何设置LED多路复用 这是一种用于创建LED点阵的非常简单的技术,其中每个单独的二极管可以被寻址,然后被打开和关闭。您首先必须决定是要构建共阴极还是共阳极点阵。虽然电路略有不同,但两种方法的原理基本相同:
创建LED点阵的电路图。
如您所见,我们正在为该项目构建一个共阴极点阵。因此,LED的阴极连接在一起,然后通过NPN晶体管连接到GND。电阻器R1至R4是LED的限流电阻,R5至R10是晶体管的限流电阻。
如何寻址单个LED 该点阵中的每个二极管都有自己的地址,可以单独打开和关闭。如果您在处理LED时遇到问题,可以将上图中的数组划分为行和列,并为每个数组分配如下名称:
通过将电路分成行和列来寻址矩阵内的每个LED。
要打开LED9,需要在晶体管D的基极提供电压,并将3行连接到电源。您可以通过在当前激活的LED之间快速切换来使其看起来像多个LED。
制作二进制时钟 让我们充分利用LED点阵,然后使用Arduino Uno制作二进制时钟来打开和关闭LED、DS3231和实时时钟模块来保持时间。
首先根据上图搭建LED点阵。它看起来有点乱,但连接LED需要所有跳线:
搭建LED点阵。
因为这是一个简单的LED点阵,它使用Arduino开发板的10个I / O端口。所以一定要使用有足够引脚的。如果要减少必要行数,可以使用二进制到十进制转换。
第1到4行连接到Arduino引脚2到5,6列连接到引脚6到11。您可以在下面看到这些连接。
将LED连接到Arduino。
固件 首先编写一个小测试草图,将点阵中的每个LED依次打开。如果所有LED以正确的顺序点亮,则点阵连接正确。 - void setup()
- {
- pinMode(2, OUTPUT); // 1
- pinMode(3, OUTPUT); // 2
- pinMode(4, OUTPUT); // 3
- pinMode(5, OUTPUT); // 4
- pinMode(6, OUTPUT); // A
- pinMode(7, OUTPUT); // B
- pinMode(8, OUTPUT); // C
- pinMode(9, OUTPUT); // D
- pinMode(10, OUTPUT); // E
- pinMode(11, OUTPUT); // F
- }
- void loop()
- {
- for(int i = 6; i < 12; i++)
- {
- digitalWrite(i, 1);
-
- for(int u = 2; u < 6; u++)
- {
- digitalWrite(u, 1);
- delay(250);
- digitalWrite(u, 0);
- }
- digitalWrite(i, 0);
- }
- }
复制代码
如上所述,固件连接DS3231 RTC模块接口,然后读取时间。它将值转换为二进制,并将相应的LED切换为ON。
您需要从Github下载用于Arduino IDE的库文件。上传代码后,您的Arduino应显示正确的时间 - 在本例中,时间为21:45:11。
我们完成的二进制时钟
为什么创客使用LED点阵? LED点阵在许多应用中非常有用,例如这种简单的二进制时钟。重要的是要了解晶体管如何作为开关工作,以及如何单独控制元件阵列中的每个LED。
然而,这种方法远非完美,因为它占用了许多I/O端口,并且同时能打开LED的数量有限制。但它很容易理解和搭建。
如果你想减少必要的I / O行数,你可以尝试使用BCD解码器,如CD4028B(PDF),你可以看看其他技术,如Charlieplexing,或者你可以使用一个完全不同的方法(例如,可寻址的LED灯条)。 |