久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > “Let It Glow”:一塊會唱歌、會發(fā)光的披頭士 PCB 藝術(shù)板

“Let It Glow”:一塊會唱歌、會發(fā)光的披頭士 PCB 藝術(shù)板

作者: 時間:2025-11-17 來源: 收藏


在傳統(tǒng)電子項(xiàng)目中,PCB 往往只是承載元件的“電路底板”;但在創(chuàng)客圈,越來越多人開始把 PCB 當(dāng)作畫布,把電子電路和視覺設(shè)計(jì)結(jié)合起來,做成真正意義上的“電子藝術(shù)”。

本文介紹的就是這樣一個項(xiàng)目——The Beetles PCB ART,作者給它起了一個更有趣的名字:Let It Glow
它既是一塊披頭士主題的 PCB 藝術(shù)板,又是一臺能播放披頭士歌曲的音樂播放器,同時還是一盞 RGB 氛圍燈。

很難給它一個單一的定義,但它很好地詮釋了一個理念:

把電路板變成媒介,用焊盤和阻焊層畫畫,用芯片和 LED 講故事。


1. 項(xiàng)目概述:電路 + 音樂 + 藝術(shù)的混合體

1.1 功能概覽

Let It Glow 的核心特性:

  • 披頭士主題 PCB 藝術(shù)板
    頂層 PCB 上是 60 年代風(fēng)格的卡通 Beatles 插畫,來源于 Pinterest,經(jīng)處理后變?yōu)?PCB 圖形。

  • 音樂播放器
    通過 Raspberry Pi Pico 2 + DFPlayer Mini 播放預(yù)存于 SD 卡中的 Beatles 曲目。

  • RGB 氛圍燈
    底板上的 WS2812B RGB LED 從背后照亮上層藝術(shù)板,形成四色區(qū)域漸變光效。

  • 一體化結(jié)構(gòu)
    PCB 藝術(shù)板作為前面板,電子主板與揚(yáng)聲器、電池、充電電源管理全部集成在后側(cè)結(jié)構(gòu)中,可放置在桌面或掛墻。

作者自己也說不太好定義這件作品——既不是單純的臺燈,也不是傳統(tǒng)意義的播放器,而是一個“電子藝術(shù) + 互動音樂盒”式的混合創(chuàng)作。


2. 材料與硬件清單

項(xiàng)目核心器件如下:

  • 主控與存儲

    • Raspberry Pi Pico 2(RP2040 系列微控制器板)

    • Micro SD 卡(音樂文件存儲)

  • 音頻部分

    • DFPlayer Mini 音頻模塊

    • 揚(yáng)聲器(與 DFPlayer 直接連接)

  • 顯示與光效

    • 多個 WS2812B RGB LED(數(shù)字可編程燈珠,串聯(lián)構(gòu)成燈帶/燈圈)

    • SMD 指示 LED(0805 封裝)

  • 電源與充電管理

    • IP5306 電源管理芯片(鋰電升壓 + 充電管理)

    • 鋰電池(原計(jì)劃 18650,最終使用 14500 3.7V,容量約 600mAh)

    • USB Type-C 接口(充電與供電)

    • 去耦電容:10 μF(1206)、100 nF(0603)

  • 控制與交互

    • 下一曲

    • 音量加

    • 音量減

    • 電源/模式(硬件側(cè))

    • 4×4 輕觸按鍵(4 個),用于:

  • 結(jié)構(gòu)與連接件

    • 定制 PCB(主板 + 前藝術(shù)層 PCB)

    • 3D 打印外殼(Fusion 設(shè)計(jì))

    • M2.5 螺絲、M2.5 銅柱、CON5 連接頭(自制公/母頭組合)


3. PCB 藝術(shù):從畫到板的“視覺電路”

3.1 PCB Art 的個人演化

作者本身是喜歡繪畫的,于是開始嘗試把藝術(shù)和電子結(jié)合在 PCB 上:

  • 早期項(xiàng)目:Flux Capacitor(回到未來中的通量電容)發(fā)光板

  • 后續(xù)項(xiàng)目:Pandacorn(獨(dú)角獸熊貓)、Halo、進(jìn)擊的巨人主題板、心形 Badge、R2-D2 等

  • 技術(shù)手法:

    • 利用頂/底層阻焊層開窗控制透光區(qū)域

    • 把 LED 放在板底,通過雙層開窗讓光直接透過插畫區(qū)域

    • 利用銅箔 + 阻焊顏色對比,做“線稿 + 陰影效果”

這些經(jīng)驗(yàn)最終沉淀為當(dāng)前 Beatles 主題板的設(shè)計(jì)方法。

3.2 Beatles 主題前板設(shè)計(jì)思路

  • 在 Pinterest 上尋找符合風(fēng)格的 Beatles 卡通圖

  • 將圖片導(dǎo)出,并根據(jù) PCB 尺寸縮放

  • 轉(zhuǎn)換格式:JPG → 黑白單色 BMP,方便導(dǎo)入 PCB CAD

  • 在 PCB 軟件中作為 Logo 導(dǎo)入,映射到頂層銅/阻焊:

    • 黑色區(qū)域:轉(zhuǎn)為銅層/金屬圖形,用于“擋光”與線條表現(xiàn)

    • 白色區(qū)域:作為阻焊開窗,形成透光孔洞

  • 同樣的開窗在底層也做一份,使 RGB LED 的光可以穿透整塊板

結(jié)果就是:RGB LED 在主板上,下方發(fā)光;上層藝術(shù)板通過控制“哪里遮光、哪里透光”,把導(dǎo)線和阻焊變成“畫面的一部分”。


4. 3D 結(jié)構(gòu)與工業(yè)設(shè)計(jì):把藝術(shù)板裝進(jìn)一個完整的設(shè)備里

在開始繪制 PCB 之前,作者先在 Fusion 360 中構(gòu)建了整個裝置的 3D 模型。這一步尤其重要,原因有兩點(diǎn):

  1. 結(jié)構(gòu)定尺寸,反推 PCB 尺寸與布局

    • 揚(yáng)聲器位置決定 PCB 面積與開孔位置

    • 鋰電池、Type-C 口、按鈕位置共同影響主板形狀

  2. 聲學(xué)與機(jī)械結(jié)合考慮

    • 揚(yáng)聲器需要穩(wěn)定支撐

    • 出音孔、腔體體積直接影響音質(zhì)

3D 模型完成后,再生成外殼 STL 文件,通過 3D 打印出整套外殼,使 PCB 與外殼高度貼合,形成一個完整的“桌面設(shè)備”。


5. PCB 設(shè)計(jì):主板 + 藝術(shù)板雙板結(jié)構(gòu)

整個電路系統(tǒng)分為兩塊 PCB:

  • Main Board(主板): 承載所有電子功能(Pico、DFPlayer、IP5306、RGB、按鍵、電源接口等)

  • Front Art Layer(前藝術(shù)板): 主要是插畫和按鍵,做可視化 + 透光面板

5.1 主板電路結(jié)構(gòu)

  1. 主控與音頻通信

    • Raspberry Pi Pico 2 作為核心控制器

    • DFPlayer Mini 的 RX/TX 與 Pico 的 GPIO(如例程中 7、8)通過軟串口通信

    • Pico 控制音量、曲目切換,根據(jù) DFPlayer 狀態(tài)做后續(xù)控制

  2. 按鍵接口

    • GPIO12:下一曲按鍵

    • GPIO13:音量加

    • GPIO14 / 15:音量減 / 備用(不同實(shí)現(xiàn)可能略有差異)

    • 使用一個 CON5 連接器將前板按鍵引出至 Pico 的 GPIO:

    • 按鍵采用 INPUT_PULLUP,默認(rèn)高電平,按下接地,邏輯簡單可靠

  3. RGB 燈效

    • 使用 24 顆 WS2812B 串聯(lián),構(gòu)成 LED 環(huán)或燈條

    • 第一個 LED 的 DIN 接 Pico 的 GPIO0

    • 所有 LED 的 VCC 接 5V,GND 接地

    • 每顆 LED 就近放置一個去耦電容(10 μF + 100 nF 組合),保證電源穩(wěn)定

  4. 電源管理

    • 從 3.7V 鋰電升壓至 5V

    • 充電管理與充電指示

    • 欠壓/過壓保護(hù)

    • IP5306 負(fù)責(zé):

    • 14500 鋰電池直接焊接到 PCB 的電池焊盤


6. PCB 制造與 DFM 檢查(簡要)

電路設(shè)計(jì)完成后,導(dǎo)出 Gerber 文件,提交 PCB 廠生產(chǎn)。
在實(shí)際工程中,作者使用了 HQDFM 這類 Gerber 查看與 DFM 分析工具,提前檢查:

  • 阻焊開窗是否正確

  • 過孔與焊盤尺寸是否符合工藝

  • 器件間間距是否足夠

這種“自檢 + 廠家 DFM”的組合,可以在打樣前發(fā)現(xiàn)一部分潛在問題,減少返工。


7. 主板裝配:從焊膏到可工作的電路系統(tǒng)

7.1 SMD 器件貼裝與回流

  1. 使用針筒將焊膏(63/37 Sn/Pb)點(diǎn)涂到每個 SMD 焊盤

  2. 使用鑷子放置:

    • WS2812B RGB LED

    • IP5306 電源管理芯片

    • 配套的電阻、電容等

  3. 將 PCB 放至加熱板或小型回流臺上,加熱至約 200°C 左右,使焊膏熔化并重新固化,完成所有貼片器件焊接

7.2 通孔器件焊接

  • 從 PCB 頂面插入:

    • Raspberry Pi Pico 的母排針

    • DFPlayer Mini 的母排針

    • Type-C 接口

    • 自制 CON5 連接頭

    • 電感與部分大封裝器件

  • 翻轉(zhuǎn) PCB,使用電烙鐵逐個焊接通孔焊點(diǎn),保證機(jī)械與電氣連接可靠

  • 最后,將 Pico 與 DFPlayer 插入對應(yīng)母座,主板裝配完成


8. RGB 燈效測試代碼解析

主板裝好后,第一件事不是直接播放音樂,而是先驗(yàn)證 RGB 燈帶是否工作正常。測試代碼基于 Adafruit NeoPixel 庫:

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif

#define PIN        0
#define NUMPIXELS  25    // 實(shí)際可根據(jù)板上 LED 數(shù)調(diào)整

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

#define DELAYVAL 100

void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
  clock_prescale_set(clock_div_1);
#endif
  pixels.begin();
}

void loop() {
  pixels.clear();
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));  // 綠色
    pixels.show();
    delay(DELAYVAL);
  }
}

測試點(diǎn):

  • 數(shù)據(jù)線是否正確連接到第一個 WS2812 的 DIN

  • 5V 電源是否能穩(wěn)定驅(qū)動全部 LED

  • 是否存在“半條燈不亮”之類的焊接或布線問題

看到 LED 按預(yù)期逐個點(diǎn)亮,就說明整個 RGB 子系統(tǒng)工作正常。


9. 前藝術(shù)層裝配與揚(yáng)聲器、電池集成

9.1 藝術(shù)板按鍵焊接

前藝術(shù)板上包含 4 個 4×4 輕觸開關(guān):

  • 將按鍵插入 PCB 指定孔位

  • 翻面后逐個焊接,保證按鍵平整、牢固

  • 按鍵引腳通過 CON5 接頭與主板的對應(yīng) GPIO 相連

9.2 揚(yáng)聲器接線

  • 揚(yáng)聲器正極 → DFPlayer 的 Speaker 1 引腳

  • 揚(yáng)聲器負(fù)極(GND)→ DFPlayer 的 Speaker 2 引腳

DFPlayer 內(nèi)置功放,這種接法形成一個簡易單聲道音頻通路,不需要額外功放。

9.3 電池接入

  • 原本計(jì)劃使用 18650,但出于體積考慮改用 14500 電池

  • 兩者標(biāo)稱電壓同為 3.7V,14500 體積更小但容量約減半

  • 電池正負(fù)極直接焊接到板載電池焊盤,經(jīng) IP5306 升壓與充電管理


10. 主控代碼解析:音樂控制 + LED 氛圍

這是項(xiàng)目中最核心的一段代碼(簡化整理后):

#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <Adafruit_NeoPixel.h>

SoftwareSerial mySerial(7, 8); // RX, TX
DFRobotDFPlayerMini myDFPlayer;

const int totalSongs = 4;
int currentSong = 1;
int currentVolume = 20;

// 按鍵引腳
const int nextPin    = 12;
const int volUpPin   = 13;
const int volDownPin = 14;

// LED 配置
#define LED_PIN     0
#define LED_COUNT   24
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);

  pinMode(nextPin,    INPUT_PULLUP);
  pinMode(volUpPin,   INPUT_PULLUP);
  pinMode(volDownPin, INPUT_PULLUP);

  strip.begin();
  strip.show();

  if (!myDFPlayer.begin(mySerial)) {
    Serial.println("DFPlayer Mini not found");
    while (true);
  }

  myDFPlayer.volume(currentVolume);
  delay(1000);
  myDFPlayer.play(currentSong);
  updateLEDs();
}

void loop() {
  // 歌曲播放結(jié)束自動切下一曲
  if (myDFPlayer.available()) {
    uint8_t type = myDFPlayer.readType();
    if (type == DFPlayerPlayFinished) {
      currentSong++;
      if (currentSong > totalSongs) currentSong = 1;
      myDFPlayer.play(currentSong);
    }
  }

  // 長按切歌
  static unsigned long nextPressStart = 0;
  if (digitalRead(nextPin) == LOW) {
    if (nextPressStart == 0) nextPressStart = millis();
    if (millis() - nextPressStart >= 1000) {
      currentSong++;
      if (currentSong > totalSongs) currentSong = 1;
      myDFPlayer.play(currentSong);
      nextPressStart = 0;
      while (digitalRead(nextPin) == LOW); // 等待松開
    }
  } else {
    nextPressStart = 0;
  }

  // 音量加
  if (digitalRead(volUpPin) == LOW) {
    delay(200);
    if (currentVolume < 30) currentVolume++;
    myDFPlayer.volume(currentVolume);
    while (digitalRead(volUpPin) == LOW);
  }

  // 音量減
  if (digitalRead(volDownPin) == LOW) {
    delay(200);
    if (currentVolume > 0) currentVolume--;
    myDFPlayer.volume(currentVolume);
    while (digitalRead(volDownPin) == LOW);
  }
}

void updateLEDs() {
  for (int i = 0; i < LED_COUNT; i++) {
    if (i < 6) {
      strip.setPixelColor(i, strip.Color(255, 255, 0));   // 黃色
    } else if (i < 12) {
      strip.setPixelColor(i, strip.Color(255, 0, 128));   // 品紅
    } else if (i < 18) {
      strip.setPixelColor(i, strip.Color(0, 255, 255));   // 青藍(lán)
    } else {
      strip.setPixelColor(i, strip.Color(0, 255, 0));     // 綠色
    }
  }
  strip.show();
}

10.1 庫說明

  • SoftwareSerial:在指定 GPIO 上模擬串口,用于與 DFPlayer 通信

  • DFRobotDFPlayerMini:提供簡單 API 來控制 DFPlayer:playvolume、讀狀態(tài)等

  • Adafruit_NeoPixel:驅(qū)動 WS2812B,控制每一顆 RGB LED 的顏色

10.2 交互邏輯

  • 按鍵功能

    • nextPin:長按約 1s → 切換下一首

    • volUpPin:短按 → 音量 +1,最大 30

    • volDownPin:短按 → 音量 -1,最小 0

    • 電源按鈕則多為硬件電路實(shí)現(xiàn)(如 IP5306 按鍵或電源開關(guān)),未在此代碼中作為 GPIO 讀取

  • 曲目管理

    • totalSongs = 4,輪詢播放 1~4 號曲目

    • 當(dāng) DFPlayer 報告 PlayFinished 時自動切下一首

  • 燈效映射

    • 區(qū)域 1:黃色

    • 區(qū)域 2:偏粉紫

    • 區(qū)域 3:青藍(lán)

    • 區(qū)域 4:綠色

    • 24 顆 LED 被劃分為 4 個區(qū)域,每 6 顆一種顏色:

    • 這四個區(qū)域在實(shí)體板上對應(yīng) Beatles 插畫的不同區(qū)域,從而形成具有分區(qū)感的背光效果

燈效邏輯非常簡單,但在藝術(shù)板的透光設(shè)計(jì)配合下,視覺效果卻非常“合成感”。


11. 最終裝配與整機(jī)形態(tài)

11.1 雙板連接

  • 使用自制的 CON5 公/母頭“直插橋接件” 把前藝術(shù)板與主板連接

  • 在前板四個安裝孔上擰入 M2.5 PCB 銅柱

  • 將前板對準(zhǔn)主板上的對應(yīng)孔與連接器位置壓合并鎖緊,完成電氣與機(jī)械雙重連接

11.2 外殼與整體固定

  • 3D 打印外殼容納了揚(yáng)聲器與鋰電池

  • 主板 + 前板組合安裝在外殼上,通過 M2.5 螺絲鎖緊

  • 外形效果類似一塊“有插畫的發(fā)光音樂盒”,可以平放在桌面,也可通過背面的掛孔掛墻


12. 效果與意義:電路板不止是電路板

完成后的 Let It Glow:

  • 播放的是 Beatles 歌曲

  • 呈現(xiàn)的是 Beatles 主題的卡通插畫

  • 背后是完整的電源管理、燈效控制、音頻播放、電路設(shè)計(jì)與機(jī)械結(jié)構(gòu)整合

它不是單純的音箱,也不是簡單的燈牌,而是一件融合了:

  • 視覺設(shè)計(jì)

  • 音樂內(nèi)容

  • 電子工程

  • 結(jié)構(gòu)設(shè)計(jì)

的綜合作品。

從工程視角看,這個項(xiàng)目很好地體現(xiàn)了幾個要點(diǎn):

  1. PCB 不再只是“功能承載”,而是設(shè)計(jì)的一部分
    銅、阻焊、絲印都被納入“視覺系統(tǒng)”。

  2. 多學(xué)科融合
    工業(yè)設(shè)計(jì)(3D 外殼)、電子硬件(電源、音頻、電路)、嵌入式軟件(Pico 控制)、視覺藝術(shù)(插畫與透光)在一個小項(xiàng)目中全部出現(xiàn)。

  3. 可擴(kuò)展性強(qiáng)
    未來可以很容易加入:

    • 音樂與燈效同步(節(jié)奏閃爍)

    • 觸摸按鍵或手勢控制

    • USB 或 BLE 升級為“可編程氛圍音箱”


關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉