首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

4×4×4 LED 光立方製作:材料清單與程式入門指南

     編輯:程式設計綜合問答

硬體材料清單 (BOM)

項目規格/數量備註
LED64 顆 (4×4×4),3mm 散射/霧狀,單色或 RGBRGB 需 3× 腳位驅動
主控 MCUArduino Nano / Uno / ESP32 / STM32F103建議 ESP32:效能足、內建 Wi-Fi/BLE 可無線控制
驅動擴展74HC595 × 4 (列掃描) + ULN2803 / MOSFET × 4 (層選擇)或用 MAX7219 × 4 簡化接線
電阻220Ω × 64 (限流) 或每列 1 顆配合 595依 LED Vf/If 計算
電源5V 3A 以上開關電源 / USB-C PD全亮白光約 64×20mA ≈ 1.3A,留餘量
結構件亞克力板/PCB 定制骨架、排針排母、杜邦線、熱縮管間距 2.54mm 方便插拔
工具電烙鐵、錫線、斜口鉗、萬用表、第三手架

接線架構概念

  1. 層選擇 (Layer/Plane):4 個 MOSFET/ULN2803 控制 4 層共陽/共陰,同一時間只啟用 1 層 (掃描)。
  2. 列資料 (Column Data):4×4=16 列,由 4 顆 74HC595 串聯輸出 32 bit (若 RGB 則 48 bit),移位暫存器鎖存後輸出高/低電位。
  3. 掃描頻率:每層 ≥ 400 Hz,整體 ≥ 1.6 kHz,人眼無閃爍。

核心程式邏輯

// 影像緩衝:4 層 × 16 列 (單色)
uint16_t frame[4] = {0};

void refresh() {
    for (uint8_t layer = 0; layer < 4; layer++) {
        // 1. 關閉所有層
        digitalWrite(LAYER_PINS[0], LOW); ... // 或 ULN2803 全低
        // 2. 移出該層 16 bit 資料到 595
        shiftOut(DATA_PIN, CLK_PIN, MSBFIRST, frame[layer] >> 8);
        shiftOut(DATA_PIN, CLK_PIN, MSBFIRST, frame[layer] & 0xFF);
        digitalWrite(LATCH_PIN, HIGH); digitalWrite(LATCH_PIN, LOW);
        // 3. 開啟當前層
        digitalWrite(LAYER_PINS[layer], HIGH);
        delayMicroseconds(250); // 約 1kHz/層
    }
}

// 設定單一體素
void setVoxel(uint8_t x, uint8_t y, uint8_t z, bool on) {
    if (on) frame[z] |= (1 << (y*4 + x));
    else    frame[z] &= ~(1 << (y*4 + x));
}

進階功能建議

  • 動畫表格化:將幀資料存在 PROGMEM/Flash,播放器輪播。
  • PC 上位機:Python + PySerial 發送幀資料,支援即時互動。
  • RGB 版本:改用 WS2812B (NeoPixel) 串聯 64 顆,單線控制,無需 595/MOSFET,程式用 FastLED 或 Adafruit_NeoPixel。

學習資源

從單色 74HC595 版本入手最易上手,熟悉掃描原理後再升級 RGB 或更大尺寸 (8×8×8)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved