Arduino 8x8x8光立方,從無到有一步步教你製作光立方。

arduino led 光立方

我們做的是8x8x8 LED光立方,他就像是一個立體的顯示器,不同於平面的LED矩陣,呈現的動畫非常酷,但8x8x8就意味著有512顆LED,這是這個專題最麻煩的地方,要處理很多LED,在製作上會花比較多時間,需要耐心完成。

剛看到這個專題可能會覺得有點複雜,但透過分成不同步驟,就能夠清楚的了解原理及構造。

以下會有led光立方運作原理,電路的解說,並且如何焊接光立方,程式的解說,循序漸進地完成。

材料

材料名稱數量蝦皮購買連結
Arduino uno1 【樂意創客官方店】《附發票》《送USB傳輸線》Arduino UNO R3 開發板
3mm LED512方形LED發光二極體2*3*4MM 藍色藍光(50個)
470電阻64【樂意創客官方店】10個 1/4W 0.25w電阻 色環電阻
電路板1單面噴錫綠油玻纖萬用板 PCB電路板
木板4~5片
74HC595974HC595 SN74HC595N 1組10個+16Pin IC插座10個 位移記錄器 串並列暫存器
電晶體 PN2222A16
銅絲 21 cm144 條

Arduino 光立方 如何運作?

控制LED直覺是”就直接接Arduino輸出就好啦”,有幾顆接幾顆,但是現在我們8x8x8LED光立方,總共會有512顆LED,Arduino要有512個輸出腳位,我想應該沒有人有看過吧。

那我們要怎麼解決一次控制512顆LED呢?

實際上我們是不會一次控制512顆LED的,而是控制一層8x8LED平面,會需要64個輸出腳位,雖然還是蠻多的,但已經比512個少很多了,再搭配移位暫存器,可以讓電路化簡很多(這在後面說明)。

現在我們有8層LED平面,一開始我只控制第一層的圖形,接著關閉地一層,然後控制第二層圖形,接著依序第三層、第四層…第八層,當層與層之間的更換間隙變得很快,就會造成視覺暫留的現象,在我們看起來就會像8層同時在亮。

LED光立方成像方式:

LED光立方 正極、陰極 配置

  • LED正極: 垂直一條正極皆是相連,總共有64隻腳。
  • LED負極: 同一層負極皆是相連,8層分開,共有8隻腳。
第一層: 正方形外圍一圈亮➡正極外圍一圈拉高電位,第一層負極拉低電位。
第二層: 正方形四個角落亮➡正極四個角落拉高電位,第二層負極拉低電位。
電三層: 同上
第四層: 同上
第五層: 同上
第六層: 同上
第七層: 同上
第八層: 正方形外圍一圈亮➡正極外圍一圈拉高電位,第八層負極拉低電位。

上面圖形,最後會呈現甚麼? 答案就在前面的影片中。

每層依照不同的圖形去亮,當掃描每層夠快的時候,畫面就像是同時亮。
                          

如何使用74HC595來簡化電路?

先簡單介紹74HC595是甚麼東西?

他稱作移位暫存器,如同字面所說,他可以暫存8隻輸出腳位的HIGH、LOW狀態,而只需要透過3隻腳給他訊號,他能依照你給的訊號來暫存8隻輸出腳位的狀態。

74HC595教學影片:

我們會使用8顆74HC595來控制64支正極,以及1顆74CH595控制8層負極的狀態。

而我們arduino只需要接三支腳位,就能控制上面總共72支腳,大大減少了arduino的輸出腳位。

電路連接的部分會在後面做解說。

建立LED光立方

LED基底模板

再焊接LED前,我們必須要有一個基底模版,使我們能夠整齊的焊好每個LED。

而在每顆LED之間,間距大約2.5cm,這個間距會影響到光立方透視的表現。

如果間距太小,透視效果不好,可能呈現的圖形會都擠在一起看不清,間距寬則反之。

整直銅絲

我使用的是直徑0.8mm的銅絲,由於他一開始是一捆的,在剪下來的時候會呈現彎曲或不直的狀況。

那麼解決方式是將銅絲裁好要的長度,一端夾在電鑽上,另一端用尖嘴鉗夾好,將電鑽啟動,在銅絲旋轉時,讓銅絲繃緊保持張力,之後的銅絲就會很直了。

LED焊接

在焊接之前,要先將LED負極折90度。

將LED放入模板,將LED負極及銅絲都焊接在一起。

先將8層LED各別完成

將垂直的銅絲焊接上LED正極。

光立方8層焊接完成

焊接電線

在焊接電線前,補鑽8個孔在模板上,用來將8層LED的地線穿過。

紅色點為鑽孔位置

將光立方的64個正極卡進模板洞裡。

將電線焊接上去,並以每排為一個單位整線。

將各層焊接地線(白色線),並穿過先前鑽的孔。

白色的線為各層地線

再將板子後面的地線焊上黑色線延伸。

電路板layout

這裡參考HARRY LE製作光立方影片的電路圖。

光立方電路圖連結,按照電路圖將元件焊上電路板。

圖片來源: https://github.com/itsharryle/LED_CUBE/blob/master/CUBE-SCHEMATIC.pdf

再接著將光立方LED正極及負極焊接上電路板。

以下為我自己焊接的電路板,有點亂請見諒。

焊接完後,確認線路無問題,接上arduino,進行測試。

測試影片: 程式參考 HARRY LE的CUBE.ino

組裝底座

先量好外圍尺寸,裁出所需尺寸的木板。

將面板的部分鑽孔,黏上指示用的LED燈及開關,並且將線焊接好。

側板要先開洞,是為了讓之後傳輸線能從外部連接arduino。

完成以上就可以將所有木板用白膠黏合,並找重物壓緊,然後放置等待。

接著將底座塗上護木漆,讓整體看起來比較有質感。

完成品測試影片:

Arduino動畫程式

目前參考 HARRY LE 的程式 → 點此連結CUBE.ino

在這裡先不對程式做解說,未來有相關的主題再來做分享。

喜歡的朋友歡迎在下方留言或分享,謝謝。

在〈Arduino 8x8x8光立方,從無到有一步步教你製作光立方。〉中有 15 則留言

    • Derek Wu 文章作者回覆

      這個東西真的搞了很久,我大部分都假日做,大約4個週末吧。最花時間的是焊接,超多LED要焊的哈哈哈。

  1. 烤雞 回覆

    可以借我看電路的lay out嗎?抱歉我不知道要怎麼佈線

  2. 胖子 回覆

    請問電阻是要買470歐還是220歐,還有電阻值是怎麼算出來的
    led藍光的電壓約3-3.4V,led啟動電流為0.02安培,而電源若為5V
    (5-3.4)/(0.02*64)=1.25,所以電阻是1.25,是這樣算嗎?

    • Derek Wu 文章作者回覆

      這裡的一個led是串連一個電阻,然後接在移位暫存器,
      因此(5-3.4)/0.02=80ohm,也就是電阻最少要用80ohm才不會讓led燒毀,
      我參考的電路圖作者是用220ohm,但我是用470ohm,可能會比較暗一點,但也點得起來。

      另外分享一下我的想法,假設用80ohm,那麼一個led會產生20mA,64個就有1.28A,輸入電流會需要比較大,這就要考慮到輸入電源的規格,我參考的電路圖作者是有用額外的電源供應器來供應的。

      如果你照我文章中的去做,還是建議用470ohm,因為我這樣用是有成功的,如果覺得led不夠亮,再換成220ohm的去試吧。

  3. Huang 回覆

    您好,我想請問一下,
    如果要讓此立方體隨著音樂擺動應該要怎麼結合呢?
    不好意思我不是本科生,目前正自學Arduino中,
    麻煩賜教了

    • Derek Wu 文章作者回覆

      你可以試著查詢”Arduino頻譜led”關鍵字看看,平時看到隨著音樂擺動的燈條,就是將音樂訊號轉換成其組成頻率圖像,隨時間變化而使led燈條跳動。

  4. 烤雞 回覆

    請問如果程式沒問題(跟上面一樣),但是跑出來的結果,有時候整個會亂打,跑出程式沒有的圖案,可能是什麼原因?

    • Derek Wu 文章作者回覆

      可以觀察看看當亂打時,arduino是不是重新reset,reset時傳出一些雜訊所以會不規則亮,有可能是突然電流過大導致arduino reset。

  5. Derek Wu 文章作者回覆

    上面電路圖中,移位暫存器的Vin是5V,把這5V不要接到Arduino的5V輸出,改用5V的電源供應器額外供電試試。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *