[Arduino 筆記] 用 8 個 8x8 LED 矩陣 組成 32x16 LED 矩陣 - 又在碎碎念惹 - udn部落格
又在碎碎念惹
作家:又在碎碎念惹
文章分類
    Top
    [Arduino 筆記] 用 8 個 8x8 LED 矩陣 組成 32x16 LED 矩陣
    2015/08/12 14:12:42
    瀏覽:29323
    迴響:0
    推薦:0
    引用0
    碎碎念: 

    這次颱風真的太猛啦ww
    生平第一次看到雨大爆走(像水庫洩洪一樣...) 
    路上除了雨大之外風也大到一個沒有極限R (一樓的樹葉一大堆被吹到14樓頂樓)... 真的豪厲害
    希望之後去高科大不要遇到這麼可怕的暴風雨阿~ 要是學校淹大水就麻煩惹... XD


    正文:

    這次的 32x16 LED 矩陣主要是要給無用喵箱 (無用箱子) 用的 XDD

    無用喵箱大概長這樣...
     

    這是由一名日本網友 回路師(Kairoshi)所製作的

    .

    原本可以去露天買兩張現成的 16x16 LED 矩陣將它們串連起來直接作 32x16 的 LED 矩陣來用,但廢材的想藉此機會來 Hack 一下 LED 矩陣是如何製作的,所以就傻傻的花了快兩個禮拜的時間在這上面 QAQ (這也太久了,還是買露天現成的比較快的說ww) 

    .

    因為喵箱的內部空間有限,所以這塊 LED 32x16 矩陣有盡量將體積縮小再縮小,但不管怎麼縮小總覺得露天買的還是比自己做得還薄阿... 哭哭

    .

    這次買的電木板是在光華金華電子購買的,兩張台幣120元(正面、反面)

     

    .

    這次的主角 LED 矩陣,廢材的買了 8 個 8x8 的 LED 矩陣來拼成 32x16 LED 矩陣
    一個露天賣台幣35元 (左邊 分開來、右邊 拼在一起)
    這是跟之前實驗過的 8x8 LED Matrix 規格、用法都一樣:
    http://blog.udn.com/awei0905/26733804

     

    .

    將這 8 個 8x8 LED 矩陣焊接到電木板上,焊好後發現其實每個 8x8 LED 矩陣 之間都會有小縫隙,感覺怪怪的 ('・ω・')...
     

    縫隙超明顯的...

    (最後成品並沒受這些縫隙所影響,不去特別注意這些縫隙的話根本不會發現它們的存在...)

    .

    再來就是 LED 矩陣的佈線了,線材的部分使用 OK 線
    因為 LED 矩陣打算用水平掃描的方式顯示,所以焊在電木板上的 LED 矩陣每一行個別接在一起(x軸,x0~x7要分別接在 8x8 LED 矩陣的 H1~H8,以此類推...),然後每一列也個別接在一起(y軸,y0~y7要分別接在 8x8 LED 矩陣的 L1~L8,以此類推...),像這樣... (畫得有點醜請見諒)

    .

    焊接出來大概這樣... (也順便將連接控制電路的排針給焊上了)

    .

    但好像忘了什麼?
    ... 沒錯,當時忘記把限流電阻給焊上去了...
    首先將每個 x,y 軸的接線都拉到排針,然後補焊漏掉的限流電阻,焊在每個 x 軸的地方(串聯),而 y 軸則不需要焊,不然矩陣可能會有亮度不均勻的問題!
    *排針的部分原本是 2*20 針,但後來發現不夠用就給他再多加 1*20 針,就變成 3*20 針了 (最後有多出 12 針沒有用到) 限流電阻原本想用排阻但太貴了所以改用 0.25W 的普通電阻

    .

    排針的腳位圖則用 Excel 來表示,N/C 表示該腳位沒用到

    .

    接著是控制電路,將之前已經焊好的 Arduino UNO 來使用
    焊接 Arduino UNO 到電木板上的心得文:
    http://blog.udn.com/awei0905/27418285

    .


    因為 LED 32x16 矩陣需要 48 個輸入腳位來控制它,而 Arduino UNO 原本的輸出腳位數量並不夠,所以這時就需要 74HC595 來擴充它的輸出腳位了
    用 74HC595 控制 24 顆 LED 輸出心得文:
    http://blog.udn.com/awei0905/26967572 

    .

    再來就是焊接控制電路,控制電路看起來很複雜其實未必~
    電路中主要有 Arduino UNO、74HC595(擴充輸出腳位) 和 uln2003a(達靈頓陣列 IC )。
    74HC595 在之前控制 24 顆 LED 輸出提過了,那這次來提 uln2003a 吧

    .

    uln2003a 是顆達靈頓電晶體陣列 IC,由 7 顆 NPN 達林頓電晶體所組成,可以承受 500mA 及 50V 的輸出,通常都用來控制大電流的輸出
    下面這是 uln2003a 的 腳位配置圖(左) 及 結構圖(右)
     
    (圖片來自 http://www.ti.com/lit/ds/symlink/uln2003a.pdf)
    uln2003a 需要注意的就是結構圖中的反向器,這反向器與一般的反向器不太一樣...

    一般的反向器:
    輸入 high => 輸出 low
    輸入 low => 輸出 high

    uln2003a 結構圖的反向器實際上:
    輸入 high => 輸出 low
    輸入 low => 輸出為斷路,並沒有任何輸出 (空接,不會輸出 high 或 low)

    所以如果要使用反向器的話請不要拿 uln2003a 來用,因為輸入 low 它也不會輸出 high

    .

    控制電路的電路圖使用 eagle 來繪製

    .

    電路圖畫好後在麵包板上先接一次電路確定電路都能正常運作 (因為用 Arduino UNO 開發板比較方便接線所以沒用自己焊的 Arduino UNO 板板)
     
    .

    這次接麵包板非常順利,第一次接所有功能都正常,不像之前接電路都要接好幾次才會成功XDD


    另外有設計一個 5x2 的雙排排針來方便與外面的 IC 溝通或燒入程式碼,不然每次要燒入程式碼都要將控制電路板從 LED 矩陣上拆下來燒,如果一直重複這樣的動作想必會被搞到瘋掉吧 (一個 ISP 的概念@@)

    .

    成果 Demo:


    有沒有超可愛呀~



    生氣也好可愛!!!


    也太囧了吧 orz...

    Demo 影片:

    .
    以上的程式碼 & 電路圖可以在這邊下載:
    https://drive.google.com/folderview?id=0Bx_TPvI_fqqcfkJYX0tuTk9INDlQdkxQVDBGd19SckRZQlpwYXc5dVhFVWJsRlhPQ2hRdDA&usp=sharing
    程式碼的部分要特別注意,為了降低 LED 16x32 矩陣顯示閃爍的情形,所以程式的部分是直接修改 ATmega328 的暫存器來控制 Arduino UNO 的輸出腳位,如此就能有效提升水平掃描的速度,所以程式碼中並不會看到類似 digitalWrite 或是 pinMode 等等的函數,如果想要了解如何直接控制 Atmega328 的輸出腳位可以參考以下網頁:
    https://www.arduino.cc/en/Reference/PortManipulation

    .

    (2015/08/19)
    後來發現 LED 32x16 矩陣有一列的 LED 怪怪的(要亮不亮,輸出的燈號看起來髒髒的),測試發現是買回來的 uln2003a 品質有問題,其實這也對整體的輸出影響並不大,所以就勉強繼續使用嚕ww

    回應

    限會員,要發表迴響,請先登入