基于Arduino和LED矩陣構(gòu)建二進制時鐘的簡單實現(xiàn)
通過近期的搜集,整理出了這篇如何使用Arduino和LED矩陣構(gòu)建簡單的二進制時鐘。
本文將向您介紹LED多路復(fù)用以及如何利用這種技術(shù)構(gòu)建可用于許多不同項目的LED陣列。在這種特殊情況下,我們將構(gòu)建一個二進制時鐘。
如何設(shè)置LED多路復(fù)用
這是一種非常簡單的技術(shù)創(chuàng)建LED矩陣,每個二極管可以尋址和打開和關(guān)閉。您首先必須決定是要構(gòu)建共陰極還是共陽極陣列。雖然電路略有不同,但兩種方法基本上都是相似的:
創(chuàng)建LED矩陣的電路圖。
As你可以看到,我們正在為這個項目建立一個共同的陰極矩陣。因此,LED的陰極連接在一起,然后通過NPN晶體管連接到GND。電阻R1至R4是LED的限流電阻,R5至R10是晶體管。
如何尋址各個LED
每個二極管在這個數(shù)組中有自己的地址,可以單獨打開和關(guān)閉。如果您在尋址LED時遇到問題,可以將上圖中的數(shù)組劃分為行和列,并為每個數(shù)組分配如下名稱:
通過將電路劃分為行和列來對矩陣內(nèi)的每個LED進行尋址。
要打開LED9,需要在晶體管D的基極提供電壓,并將線路3連接到電源。您可以通過在當前激活的LED之間快速切換來使其看起來像多個LED一樣。
構(gòu)建二進制時鐘
讓我們把我們的LED陣列使用Arduino Uno打開和關(guān)閉LED,DS3231和實時時鐘模塊以便跟蹤時間,從而很好地利用和構(gòu)建二進制時鐘。
首先構(gòu)建LED矩陣從上面。它看起來有點亂,但連接LED需要所有跳線:
首先構(gòu)建LED矩陣。
第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模塊并讀取時間。然后,它將值轉(zhuǎn)換為二進制,并將相應(yīng)的LED切換為ON。
您需要從Github下載Arduino IDE庫。固件在本文末尾以可下載的.zip文件的形式提供。上傳代碼后,您的Arduino應(yīng)顯示正確的時間 - 在此特定示例中,時間為21:45:11。
我們完成的二進制時鐘。
為什么制造商使用LED矩陣?
LED矩陣在許多應(yīng)用中都非常有用,比如這個簡單的二進制時鐘。重要的是要了解晶體管如何作為開關(guān)工作以及如何單獨控制元件陣列中的每個LED。
然而,這種方法遠非完美,因為它占用了許多I/O端口并且受到限制可以同時打開多少個LED。但它很容易理解和構(gòu)建。
如果你想減少必要的I/O行數(shù),你可以嘗試使用BCD到十進制解碼器,如CD4028B(PDF),你可以看看在其他技術(shù)如Charlieplexing,或者你可以使用完全不同的方法(例如,可尋址的LED條)。