步驟1:此版本中使用的部件
對于這個項目,我使用了以下組件:
帶面包板的Arduino Uno
32x32 RGB LED矩陣(來自AdaFruit或Tindie)
5V 4A電源適配器(來自AdaFruit)
母DC電源適配器2.1mm插孔至螺絲接線端子(來自AdaFruit)
跳線
AdaFruit還銷售Arduino屏蔽,可用于代替跳線。
和我一樣有一些Tindie學(xué)分,我從Tindie得到了我的矩陣,但是AdaFruit的矩陣看起來是相同的,所以任何一個都應(yīng)該有用。
光電晶體管來自我?guī)资昵暗牧慵盗?。它是一個明顯的3mm部分標記為TIL78。據(jù)我所知,該部件適用于紅外線,可以是一個透明的外殼或一個阻擋可見光的黑暗外殼。由于RGB LED矩陣發(fā)出可見光,因此必須使用透明版本。
此TIL78似乎已經(jīng)停產(chǎn),但我想這個項目可以使用現(xiàn)代光電晶體管制作。如果你發(fā)現(xiàn)有用的東西,請告訴我,我會更新這個Instructable!
第2步:連接和測試光電晶體管
通常,你需要一個與光電晶體管串聯(lián)的電阻,但是我知道Arduino能夠在任何引腳上啟用內(nèi)部上拉電阻。我懷疑我可以利用它將光電晶體管連接到Arduino,而無需任何額外的組件。事實證明我的預(yù)感是正確的!
我用電線將光電晶體管連接到Arduino上的GND和A5引腳。然后我創(chuàng)建了一個草圖,將A5引腳設(shè)置為INPUT_PULLUP。這通常用于開關(guān),但在這種情況下它為光電晶體管供電!
#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));
}
此草圖將值打印到與環(huán)境亮度對應(yīng)的串行端口。通過使用Arduino IDE“工具”菜單中的便捷“串行繪圖儀”,我可以獲得環(huán)境光的移動圖!當我用手蓋住并打開光電晶體管時,圖表會上下移動。很好!
這個草圖是檢查光電晶體管是否以正確極性接線的好方法:光電晶體管在一個方向與另一個方向連接時會更敏感。
步驟3:將矩陣帶狀電纜連接到Arduino
要將矩陣連接到Arduino,我瀏覽了Adafruit的這本方便指南。為方便起見,我將圖表和引腳分布粘貼到文檔中并打印了一個快速參考頁面,以便在連接所有內(nèi)容時使用。
注意確保連接器上的選項卡與圖中的選項卡匹配。
或者,對于更清潔的電路,您可以使用AdaFruit為這些面板銷售的RGB矩陣屏蔽。如果使用屏蔽,則需要焊接光電晶體管的插頭或電線。
步驟4:連接矩陣
我將矩陣電源線上的叉形端子擰到插孔適配器上,確保極性正確。由于部分端子暴露在外,為了安全起見,我用電工膠帶將整個部件包起來。
然后,我插上電源連接器和帶狀電纜,注意不要打擾電源線中的跳線。過程
步驟5:安裝AdaFruit矩陣庫并測試矩陣
您需要安裝“RGB矩陣面板”和AdaFruit“ Adafruit GFX Library“在您的Arduino IDE中。如果你需要幫助,這個教程是最好的方法。
我建議你運行一些例子,以確保你的RGB面板在繼續(xù)之前工作。我建議使用“plasma_32x32”示例,因為它非常棒!
重要提示:我發(fā)現(xiàn)如果在插入5V電源到矩陣之前我給Arduino上電,矩陣會朦朧地亮起來。似乎矩陣試圖從Arduino中獲取力量,這絕對不利于它!因此,為了避免Arduino過載,請在啟動Arduino之前啟動矩陣!
步驟6:加載Matrix掃描碼
現(xiàn)在,加載Arduino草圖以掃描矩陣。我提供了Arduino源代碼。加載后,您應(yīng)該會看到每隔幾秒閃爍一次光的閃光。
如果您將光電晶體管靠近矩陣,您應(yīng)該會看到光電傳感器附近的LED亮起。
嘗試進一步移動光電晶體管,使其更接近矩陣,看看它的行為就像手電筒一樣。如果你將一個物體放在矩陣上并將光電晶體管放在它上面,你應(yīng)該能夠捕捉到物體的“陰影”!
你可以在代碼中找到一些參數(shù):
static constexpr uint8_t READINGS_PER_PIXELS = 1;
static constexpr uint8_t THRESHOLD = 15;
static constexpr bool INVERT = false;
static constexpr bool CLEAR = true;
如果檢測效果不佳,您可以嘗試增加READING_PER_PIXEL和THRESHOLD。將CLEAR設(shè)置為false以獲得類似畫筆的效果,其中每個新掃描會向畫布添加更多“繪畫”。對于負效應(yīng),將INVERT設(shè)置為true,其中矩陣通常點亮,但光電晶體管會使其“看到”變暗。
步驟7:代碼如何工作:檢測可見對比一個模糊的LED
經(jīng)過一些實驗,我發(fā)現(xiàn)從傳感器檢測像素是否可見的最佳方法是從傳感器獲取成對的模擬讀數(shù):當LED是一個讀數(shù)時當LED亮起時關(guān)閉和另一個讀數(shù)。如果傳感器看不到LED,則讀數(shù)幾乎相同;如果傳感器可以看到LED,則讀數(shù)會有所不同。
為了提高靈敏度,我在使用OE(輸出使能)線打開和關(guān)閉LED時讀取多個讀數(shù)。我使用兩個累加器來總結(jié)LED關(guān)閉時的讀數(shù)與LED打開時的讀數(shù)。然后我將這兩個總和之間的差異與閾值進行比較,以確定該值是否超過某個閾值,從而讓我決定LED是否在傳感器的視線范圍內(nèi)。
步驟8 :代碼如何工作:掃描矩陣
為了掃描矩陣,我直接操作數(shù)據(jù)線,因為這比使用AdaFruit庫繪制像素更有效。要禁用AdaFruit庫,我會在開始掃描之前關(guān)閉中斷。由于AdaFruit庫通過使用中斷工作,這使我可以暫時控制矩陣。
矩陣有六個移位寄存器,對應(yīng)于整行像素的R,G和B顏色。矩陣的上半部分和下半部分。還有一個鎖存控制線(LAT),它將移位寄存器中的值復(fù)制到LED驅(qū)動器。四條地址線(A,B,C和D)選擇上半部分和下半部分的哪些行有效,OE(輸出使能)用于打開和關(guān)閉LED驅(qū)動器。
在正常操作中,當新的替換行移入移位寄存器時,鎖存器保持用先前值照亮的行。加載完整行后,將鎖定新值,并為下一行重復(fù)該過程。這種更新方式需要寫入整行,即使只需要寫入一個像素。
對于掃描,我選擇利用移位寄存器,但不選擇鎖存功能。我將鎖存控制線(LAT)設(shè)置為高電平,使得移位寄存器的內(nèi)容立即在每個CLK脈沖上加載到LED驅(qū)動器中。一旦我照亮了第一個像素,時鐘線(CLK)上的每個脈沖都會使點亮的像素沿著行向下推到下一個像素。在這樣做時,我可以將照亮的像素向下按行以掃描整行。
對于行中的每個位置,我使用OE(輸出使能)線來打開和關(guān)閉像素。從光傳感器獲取讀數(shù)。一旦我有足夠的讀數(shù)來確定該像素是否可見,我就會向AdaFruit庫的幀緩沖區(qū)寫一個顏色(掃描時,我仍然可以將像素值寫入庫的幀緩沖區(qū),即使庫暫時暫停) 。
掃描完所有行后。我重新啟用中斷,這會導(dǎo)致AdaFruit庫使用緩沖區(qū)中的數(shù)據(jù)刷新矩陣,直到我準備好進行下一次掃描。
-
掃描儀
+關(guān)注
關(guān)注
2文章
424瀏覽量
67864 -
LED矩陣
+關(guān)注
關(guān)注
0文章
71瀏覽量
17608
發(fā)布評論請先 登錄
相關(guān)推薦
評論