資料介紹
描述
該項目是一個實體的便攜式 LED 標志,形狀為 Counter-Strike : Global Offensive (CS:GO) 團隊 Astralis 的標志。它主要基于 FastLED 庫以及可編程的 WB2812B LED 燈條。一切都由 Arduino Nano 和便攜式移動電源供電。
這旨在遍歷項目的各個部分,例如:
- 標志是如何構建的
- 電路和單個組件
- 代碼以及它如何將所有內容連接在一起
標牌是如何建造的?
標志的主要部分由木質刨花板制成,并按照 Astralis 標志的輪廓切割而成。切口的高度為 50 厘米,寬度為 40 厘米。手柄由 2、1 厘米 x 2、1 厘米的木梁組成,用膠帶包裹,以提高長時間握持時的舒適度。
連接物理接口的控制箱由makercase.com 制作,它可以生成給定形狀的切口 - 在這種情況下,是一個打開的盒子 - 具有不同的測量值,可以導出為 SVG 文件。然后將該文件導入 Adob??e Illustrator,在其中添加最終細節,例如控件的文本雕刻和按鈕的剪切。然后用激光切割機切割控制箱,最后用木膠粘在一起。請參閱圖像文件夾下的圖像。
使用什么硬件?
用于使標志工作的組件如下:
- Arduino納米
- WS2812B 可尋址 RGB LED 燈條
- 7段顯示
- 74HC595 移位寄存器
- 按鈕
WS2812B RGB LED燈條
該項目的核心是能夠以不同類型的照明序列照亮標志本身。WS2812B 可尋址 LED 燈條有多種型號,尺寸、密封劑或LED 密度不同。對于這個項目,我使用了 60 個 LED 的密度。儀表不防水,因為它將在比賽期間在室內使用。條帶用雙面膠帶直接粘在板上。它直接從為該項目中的所有組件供電的移動電源提供 5v 電壓,以及一個 1000 μF 的電容器,以節省燈帶上的第一個 LED 以應對潛在的電涌,從而將它們煎炸。你可以在這里閱讀更多。
7段顯示
該顯示器內部只有 8 個 LED。它被分成稱為 a、b、c、d、e、f、g 和 DP 的段,并且可以以不同的組合點亮以表示阿拉伯數字和點 (DP)。此 GIF 顯示了每個 LED 的尋址方式:
為了快速識別標志正在運行的照明順序,可以相當快地讀出數字,因為它位于背面的順序按鈕旁邊。當序列循環時,數字將從“1”開始,表示序列已重置。作為故障保險,如果發生錯誤,顯示器被編程為顯示“E”。
顯示的數字取決于通過 74HC595 移位寄存器發送多少位,這將在下一節中詳細說明。
您可以在此鏈接上進一步閱讀 7 段顯示器以及其他用途。
74HC595 - 位移位寄存器
通常,為了控制 7 段顯示器中的每個 LED,需要將每個引腳連接到 Arduino。這樣,如果您要使用多個數字引腳,您將很快用完引腳。這就是移位寄存器派上用場的地方。通過串聯一個移位寄存器,我們只需使用 3 個 I/O 引腳就可以完成控制多達 8 個 LED 的任務。不僅如此;如果您想控制更多顯示器,您可以將更多的移位寄存器鏈接在一起,從而節省更多的引腳。對于這個項目,一個數字就足夠了。
595 有兩個寄存器(可以認為是“內存容器”),每個寄存器只有 8 位數據。根據您發送到 595 的數據,數據將首先被存儲,并且只有在 595 被鎖存后才傳輸到輸出引腳。
您可以在此詳細指南中閱讀有關 74HC595 的更深入說明。
序列按鈕
標志本身的想法是它存儲了多個照明序列,您可以通過一個簡單的按鈕在它們之間切換。主要思想是,通過單次按下,一旦按鈕被按下和釋放,標志應該進入下一個照明序列。按鈕有多種尺寸和形狀,但在發送 HIGH 或 LOW 信號方面,它們中的許多都有相同的問題。這通常被稱為“彈跳”信號,其中信號在短時間內(通常為幾毫秒)快速上下跳躍多次。這可以通過實施所謂的“去抖動”來解決。下圖是一個按鈕被按下和釋放的例子,在穩定之前反彈信號。
去抖
當您物理按下普通按鈕時,兩塊金屬會相互接觸。如果這兩個小金屬片不是完全平坦或完全對齊(而且它們不是),那么它們可以建立和斷開幾次接觸,然后再牢固地壓在一起以使其始終導電。對于微控制器來說,當您認為您只按下了一次按鈕時,該按鈕似乎被多次按下且持續時間極短。去抖動就是要確保您和微控制器就按鈕按下或釋放事件發生的時間達成一致。這就是在沒有任何形式的去抖動的情況下注冊按鈕按下的方式。
最簡單的硬件解決方案(如上圖所示)是使用 10K 歐姆電阻和 1μF 電容去抖動。對于這個項目,去抖動功能至關重要,因為標志存儲了多個照明序列。如果按鈕在一個按鈕中記錄了多個“推動”,則序列將快速循環,從而導致錯誤的循環。
有關更詳細的說明,您可以在此處進一步閱讀。
亮度控制
在控制界面的最左側,可以控制 LED 的亮度。這是通過使用電位計完成的,該電位計充當可變電阻器,通常用于控制電氣設備,例如音量控制,或者在這種情況下是照明。但是,根據電位器的轉動程度,電阻器只允許總電流的一部分,可以通過模擬信號讀取。軟件部分將進一步解釋如何讀取和使用該信號。
有關電位器如何工作的更詳細說明,您可以在此處閱讀更多信息。
代碼是如何工作的?
運行 WS2812B LED 燈條的代碼是在FastLED庫的幫助下編寫的。FastLED 庫是一種簡單快捷的方法,可以按照您希望的順序點亮單個 LED,并生成照明模式。
燈光效果主要基于這個網站,展示了一些效果以及代碼和設置。這些效果基于for
循環的概念,是運行這些效果的好方法。但是,該項目實現了添加一個按鈕以在效果之間進行切換,并且此功能帶有一個問題。循環“for
占用”正在運行的代碼,并且僅在循環完成后繼續。因此,如果您在for
循環運行時按下按鈕,則推送不會注冊。
正因為如此,為了通過使用全局變量來解決這個問題并減少使用的循環數量,已經重寫了所使用的效果。for
下面顯示的兩個示例具有相同的效果,但以兩種不同的方式編寫。第一個是原始效果,在運行時沒有注冊按鈕按下,而第二個示例這樣做是因為它使用了全局變量,可以在函數外部使用theaterChase.
示例一:
void theaterChase(byte red, byte green, byte blue, int SpeedDelay) {
for (int j=0; j<10; j++) {
//do 10 cycles of chasing
for (int q=0; q < 3; q++) {
for (int i=0; i < NUM_LEDS; i=i+3) {
setPixel(i+q, red, green, blue);
//turn every third pixel on
}
showStrip();
delay(SpeedDelay);
for (int i=0; i < NUM_LEDS; i=i+3) {
setPixel(i+q, 0,0,0); //turn every third pixel off
}
}
}
}
示例二:
int theaterDistance = 3;
int theaterDelay = 300;
int theaterJ = 0;
int theaterI = 0;
void theaterChase(byte red, byte green, byte blue) {
if (theaterI == 0) {
for (int i=0; i < NUM_LEDS; i++) {
setPixel(i, 0,0,0);
}
for (int i=0; i < NUM_LEDS; i+=theaterDistance) {
setPixel(i+theaterJ, red, green, blue);
//turn every theaterDistance pixel on
}
showStrip();
theaterJ = (theaterJ + 1) % theaterDistance;
}
theaterI = (theaterI + 1) % theaterDelay;
}
如前所述,LED 的亮度通過電位器進行控制。信號最初被讀取為 0 到 1023 之間的值。FastLED 庫僅使用 0 到 255 之間的數字來定義亮度。然后需要用map
函數映射數字,如下所示,然后用變量MIN_BRIGHTNESS
和進行約束MAX_BRIGHTNESS
,用作限制器。
int brightnessValue = map(analogRead(brightnessPin), 0, 1023, 0, 255);
FastLED.setBrightness(constrain(brightnessValue, MIN_BRIGHTNESS, MAX_BRIGHTNESS));
正如硬件中的去抖部分所討論的,按鈕在按下和釋放時往往會產生“噪音”。下面的代碼會在短時間內檢查兩次,以確保確實按下了按鈕。
按鈕按下后加sequenceNumber
一,并運行與數字對應的照明功能。它還清除應該保留在 LED 中的所有數據,setAll(0, 0, 0);
并將正確的數字轉移到 74HC595 以點亮 7 段顯示器上的相應序列號。
// LED lightning sequence control
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == HIGH) {
sequenceNumber = (sequenceNumber+1) % 5;
writeAndShift(sequenceNumber + 1);
setAll(0, 0, 0);
}
} // save the current state as the last state, for next time through theloop
lastButtonState = buttonState;
最后,Arduino 需要知道根據sequenceNumber
變量運行哪個照明序列。這是通過使用switch
和case
語句完成的。這些工作就像if
語句一樣,但更好看。switch(sequenceNumber)
用于定義語句應該使用哪個聲明case
。如果等于 1,則將運行,如果case 1:
等于2 ,依此類推。在 every 下,您定義應該執行的代碼。sequenceNumber
case 2:
sequenceNumber
case
switch(sequenceNumber){
case 0:
FadeInOut(0xff, 0x00, 0x00); // Only using red
break;
default:
case
如果值超出給定語句,則用作故障保護。與該語句非常相似else
,如果上述語句均不成立,則您定義應該執行的內容。
附加圖像
特別感謝
- 使用Arduino的邊緣照明亞克力LED標牌
- 制作Arduino觸摸感應LED標牌
- LED照明及驅動器基本知識培訓PPT 55次下載
- 大功率LED正向電壓與溫度變化研究綜述 5次下載
- 砷化鎵電池及砷化鎵LED綜述 0次下載
- YNH-430G 數字標牌主板規格書
- LED線性陣列顯示源代碼下載 6次下載
- 恒流驅動LED升壓型DC-DC轉換器芯片HX3248C 28次下載
- 6塊LED組成的燈條PCB設計 52次下載
- 利用Yocto項目打造定制標牌 7次下載
- LED標牌應用混合顏色、節能和復雜性 3次下載
- 驅動led陣列的電源及拓撲解決方案 8次下載
- 智能標牌交鑰匙解決方案 0次下載
- 數字標牌系統的遠程管理實現 31次下載
- 星際多媒體信息發布系統 大眾版 V3.102大眾版 V3.1 0次下載
- 帶RS232端口的LED標牌操作指南 1678次閱讀
- 如何進一步優化可實現顯示屏的 LED 驅動器 2294次閱讀
- 歐司朗推出的新型LED技術幫助植物生長促進綠色生態 772次閱讀
- 天嵌科技TQ6818廣告機、數字標牌主板-三星系列簡介 1808次閱讀
- 海天雄商顯數字標牌解決方案解析 2829次閱讀
- 天嵌針對數字標牌系統研發TQ4418廣告機主板 2475次閱讀
- LED發光二極管封裝的結構類型及特殊性解析 1122次閱讀
- LED的工作原理_LED有什么優點和缺點 1.5w次閱讀
- 柱上變壓器配送組立安裝引線綁扎及標牌懸掛 6730次閱讀
- 淺談LED燈的好處 1w次閱讀
- led燈具基礎知識_led燈怎么接線 3.6w次閱讀
- led燈為什么有頻閃_led燈頻閃怎么解決_led燈頻閃測試方法 9w次閱讀
- led燈珠型號亮度排名_led燈不亮了怎么修 3.5w次閱讀
- led路燈檢驗標準_led路燈照明標準 1.9w次閱讀
- 48 輸出 LED 驅動器為大眾帶來妙趣不盡的顯示牌 2294次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多