2016年12月31日 星期六

[玩轉光立方] LED Cube 4x4x4 for Arduino UNO -- 組裝教學

自從當了 Maker 之後,一直都覺得 LED Cube 光立方是一個非常酷炫的裝置,當它發光時視覺上不僅炫耀奪目,而且其中還隱藏了不少的數學原理,非常建議老師、家長和同學一起來玩玩。



我們先來看看影片 https://www.youtube.com/watch?v=XIb07gRdHn8


準備


材料
1. 電路板 *1
2. 公排針 *40P
3. 圓孔母排針 *20
4. 3mm 長腳 藍色霧面 LED *64


工具
1. 烙鐵 + 焊錫
2. 斜口鉗
3. 尖嘴鉗
4. 鑷子
5. 厚紙板
6. 電鑽 + 3mm 鑽頭
7. 原子筆或細簽字筆
8. M3*14mm 螺絲+螺帽 *4
9. 電阻 100~220R *1
10. 麵包板


開始動手做


一、檢查所有的 LED 是否有正常發亮

您購買的 LED 即使廠商如何口沫橫飛地述說它們品質是如何地好,建議您也必須要自己詳細查驗,否則您可能有機會遇到懊惱的時候。

1. 計算限流電阻。

藍色 LED 順向電壓約 3.0~3.4V (注意:顏色不同,可承受的電壓也不同),我們取 3.2V 來計算:

(5 - 3.2) / 15mA = 120R

可採用 100R 或 110R 電阻。

2. 將電阻與 5V 電源插入麵包板,逐一插入 LED,檢查 LED 是否正常發光。
將 LED 插入麵包板時要注意 LED 的正負極。



二、彎折 LED

1. 取出尖嘴鉗輔助彎折 LED,我們需要彎折出 3 種型式的 LED,圖面右側是未彎折前。
在彎折時須注意 LED 的正負腳,正腳在彎 2 折後仍保持與燈珠同方向,並且每一彎折應盡量保持90度角,如下:

Type A * 48只



Type B * 12只



Type C * 4只




小聲地說...這個工作我是一邊看電視一邊彎折的,不然要彎折 64 只 LED 還真是挺無聊的事情。


三、製作固定 LED 的模板

這個模板可以用來插入 LED,如此可以讓 LED 排列整齊,在焊接時不會移位。

1. 準備一張厚約 1~3mm 的硬紙板。我隨手找了個 68x68mm 的蛋糕盒。



2. 在上面畫上間距 14mm 的九宮格。14mm * 3 = 42mm,九宮格邊長是 42mm。
我先畫上交叉線找出盒子中心點,再由中心點往外畫出九宮格。


3. 用電鑽在交點處鑽出 16 個 3mm 圓孔。


四、將圓孔母排針焊到電路板上

1. 將 20 支圓孔母排針插到電路板上。板子有兩面,要注意方向。


2. 為了焊接前翻轉電路板,避免排針掉落,我將 Arduino UNO 板子疊上去,用 M3*14mm 螺絲+螺帽 *4 將他們鎖在一起。
在將螺絲鎖緊前可用手指頭輕敲電路板讓排針垂直站立,邊敲邊觀察哪支排針沒有垂直,此時可用鑷子調整排針。


這是翻轉後的樣子


3. 由於有少數幾支排針與螺帽非常接近,因此我先焊接中央部分的排針,待焊到螺帽旁的排針時再移除螺帽焊接排針。
您的焊接接技術一定比我好,就不必移除螺帽可直接焊接。



五、焊接公排針

1. 用斜口鉗將公排針剪出

6P * 2只
8P * 2只


2. 將上述排針(長)插入 Arduino UNO。注意圖片中排針的位置。


3. 對準公排針孔位,放上 LED Cube 電路板,須注意電路板正反面。
底下圖片是焊接好的樣子。




六、焊接 LED

先來看看我們要做出怎樣的東西


我把紙模寫上座標以利辨識


1. 將 Type A 插到座標(0,0)~(3,2)之間區塊,共 12 只。
注意 LED 的腳位方向。


2. 將 Type B 插到座標(0,3)~(2,3)之間直線,共 3 只。
注意 LED 的腳位方向。



3. 將 Type C 插到座標(3,3),共 1 只。
注意 LED 的腳位方向。


4. 將 LED 所有的負腳全部焊接在一起。
圖片中是焊接好取出的樣子。


5. 您需要做 4 組(L0~L3)上面圖片的 LED 層面。

6. 將 4 組 LED 層面的正腳都焊起來。
注意正腳搭接長度大約是 8mm 左右,盡量讓你的 LED 排列呈現出正方形。



7. 在 L0~L3 每一層的負腳(上圖黑色導線)各焊上一條導線。



8. 先將光立方電路板插入 Arduino UNO,再將整組 LED Cube 小心地插入圓孔排針,並且將 4 條導線另一端也插入圓孔排針,至此大功告成。



程式

//2017-01-01 LED_Cube4_01.ino
//從頂層到底層逐一點亮 LED

#define CUBE_SIZE 4
#define PLANE_SIZE CUBE_SIZE*CUBE_SIZE
#define PLANE_TIME 20
#define LED_TIME 500

int LEDPin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1};
int PlanePin[] = {A2 , A3, A4, A5};

void setup()
{
  int pin;
  for (pin = 0; pin < PLANE_SIZE; pin++) {
    pinMode(LEDPin[pin], OUTPUT);
    digitalWrite(LEDPin[pin], LOW);
  }
  for (pin = 0; pin < CUBE_SIZE; pin++) {
    pinMode(PlanePin[pin], OUTPUT);
    digitalWrite(PlanePin[pin], HIGH);
  }
}

void loop()
{
  for (int plane = 0; plane < CUBE_SIZE; plane++)
  {
    digitalWrite(PlanePin[plane], LOW);
    for (int led = 0; led < PLANE_SIZE; led++)
    {
      digitalWrite(LEDPin[led], HIGH);
      delay(LED_TIME);
      digitalWrite(LEDPin[led], LOW);
    }
    digitalWrite(PlanePin[plane], HIGH);
    delay(PLANE_TIME);
  }
}

程式說明

1. UNO 腳位 D0~D13 & A0~A1 分別控制每一顆 LED,D0 控制的 LED 是靠近 D0 腳位那一顆,A1 腳位則是控制距離 D0 最遠的那一顆 LED。A2 控制頂層 LED,A5 則是控制底層 LED。

2. 把所有的腳位都設定成 OUTPUT,才可以指定它要 HIGH 或 LOW。當指定它為 HIGH 時電位是 5V;當指定它為 LOW時電位是 0V,相對於 5V 而言可以把它視為是 GND。

3. 在初始階段為了讓所有的 LED 都不亮,所以在 setup() 階段將 16只 LED 腳位都設為 LOW,並且將控制層面的 4 只腳位都設為 HIGH。

來看看影片



問題與解答

問題:LED 燈的變化不如預期,有些不會亮,是不是哪裡的焊接有問題?

解答:
請根據下圖,依下列步驟人工逐一通電檢查(請記得加上限流電阻):
Step1. 檢查每一個LED燈珠是不是好的。
Step2. 檢查每一個LED燈珠在彎折時的正負腳是否正確。
Step3. 檢查每一層是否有焊妥。
Step4. 檢查每一列是否有焊妥。
Step5. 檢查每一行是否有焊妥。

也可以用程式逐一點亮每一顆 LED,就知道哪些 LED 有問題。


11 則留言:

  1. 您好:請問您的type a,type b,type c,是指有三種不同led的折法形式嗎?因為在第六點,看起來64個led都一樣?謝謝您

    回覆刪除
    回覆
    1. 6.是示意圖,請你仔細看一下步驟1-3,led的折法是有差別的

      刪除
  2. 作者已經移除這則留言。

    回覆刪除
  3. 這樣在同一個垂直面上燈泡是不是就無法單獨控制了呢

    回覆刪除
  4. 請問電路板有特定的型號嗎?

    回覆刪除
  5. 請問焊接上去有分解圖嗎

    回覆刪除
  6. 作者已經移除這則留言。

    回覆刪除
  7. 請教圖形編輯器要如何使用 謝謝

    回覆刪除