ホットグルー棒で作るLEDマトリックスランプ - カラフルなディスプレイを自作
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| WS2812B アドレサブルLEDストリップ(IP60、60LED/m、非防水) | 128個(16本×8LED) | 総LED数128 |
| Arduino Nano R3 | 1 | |
| 3A ミニDC-DCステップダウンコンバーター | 1 | 出力5Vに設定必須 |
| 抵抗 10kΩ | 1 | |
| 抵抗 330Ω | 1 | データ線保護用 |
| コンデンサー 470µF 10V(ロープロファイル) | 1 | 電源安定化用 |
| 10kΩ リニアスライドポテンショメーター(45mm、ストローク30mm) | 1 | Bourns PTA3043等 |
| 小型プッシュボタン | 1 | モード切替用 |
| 小型ロッカースイッチ | 1 | 電源ON/OFF用 |
| DC電源ソケット(パネルマウント) | 1 | |
| 7mm×100mm グルースティック | 64本 | 光ファイバー代わりに使用 |
必要な工具と機器
- 3Dプリンター(汎用)
使用アプリとオンラインサービス
- Arduino IDE
プロジェクト概要
このランプは、jbumstead氏の「Fiber Optic LED Matrix」をベースにしています。OpenSCADで設計し、元設計の12mm拡散RGB LEDを安価なWS2812Bストリップに置き換え、ケースをできるだけ薄くして安価な7mmグルースティックが使えるようにしました。
ステップ1: ケースの3Dプリント
サポート材が必要なのは「Hot Glue Matrix - Bottom.stl」のみ。層高さ0.2mm、インフィル15%でプリント。プリント後、19/64インチドリルで穴を拡張するとグルースティックの挿入が容易になります。
ステップ2: ランプ部の組み立て
- WS2812Bストリップを8LEDずつ16本にカット
- 平らな面に8本貼り付け、中心間隔15mmで配置。隣り合うストリップは向きを交互に(DINが左上になるよう)
- 配線:GND、DIN、+5Vを各ストリップ間で接続。上段と下段を繋ぐ3本線を長めに確保
- 「Hot Glue Matrix - Holder Top」フォームの穴に3本線を通し、ストリップを裏返してチャンネルにはめ込む。ブルーペインターテープで固定
- 下段プレートも同様に配線(DOUTが右上)。VCC、DIN、GNDに長い線を半田付けしてからストリップを配置
- グルースティック挿入までは上下の配線を接続しない
ステップ3: グルースティックの挿入
7mmグルースティック(約100mm長)は長さにバラつきがあるため、64本を同程度の長さに揃える必要があります。穴をドリルで拡張済みなら挿入しやすくなります。上下をつなぐ3本線は透明ストローに通して保護します。
片側から順に1列ずつ挿入。全て挿入後、四隅の上下間距離が完全に一致するよう調整。一致したら四隅のグルースティックを一旦抜き、少量の瞬間接着剤で固定(LEDに付かないよう注意)。これで構造が頑強になります。
ステップ4: 上下ストリップの接続
下段ストリップを穴付近で持ち上げ、3本線をトリミングして半田付け:+5V同士、DIN(上)→DOUT(下)、GND同士。
ステップ5: PCBの製作
Eagleファイルを提供。基板業者に発注するか、トナーメソッドで自作可能。回路はシンプルなのでユニバーサル基板でも組めます。取り付け穴は2.5mmドリルで穴あけ後、M3タップを立て、6mm M3ネジで固定。
重要:DCレギュレーターの出力を5Vに設定してから基板に取り付けてください。
ステップ6: 最終配線
スライドポテンショメーター、プッシュスイッチ、ロッカースイッチ、DCソケットを回路図通りに配線。LEDストリップからの線をPCBに接続。
ステップ7: ソフトウェア
テスト用アニメーションを複数内蔵。ボタンでアニメーション切替、ポテンショメーターで速度調整。
提供コード
GlueMatrixTest.ino(メインスケッチ)
#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h>
#endif
#include "Button.h"
#define PIN_LED 2
#define PIN_SWITCH 3
#define PIN_POT A0
#define LEDS 128
Adafruit_NeoPixel strip = Adafruit_NeoPixel(LEDS, PIN_LED, NEO_GRB + NEO_KHZ800);
Button mode = Button(PIN_SWITCH);
bool modePressed = false;
// LED物理マッピング(下段・上段それぞれ8x8マトリクス)
const uint8_t botLED[] PROGMEM = {
64,49,48,33,32,17,16,1,
63,50,47,34,31,18,15,2,
62,51,46,35,30,19,14,3,
61,52,45,36,29,20,13,4,
60,53,44,37,28,21,12,5,
59,54,43,38,27,22,11,6,
58,55,42,39,26,23,10,7,
57,56,41,40,25,24,9,8
};
const uint8_t topLED[] PROGMEM = {
65,80,81,96,97,112,113,128,
66,79,82,95,98,111,114,127,
67,78,83,94,99,110,115,126,
68,77,84,93,100,109,116,125,
69,76,85,92,101,108,117,124,
70,75,86,91,102,107,118,123,
71,74,87,90,103,106,119,122,
72,73,88,89,104,105,120,121
};
int red = 128, green = 128, blue = 128;
int pattern = 1;
void setup() {
Serial.begin(115200);
pinMode(PIN_LED, OUTPUT);
pinMode(PIN_SWITCH, INPUT);
pinMode(PIN_POT, INPUT);
strip.begin();
strip.show();
Button::PinChangeSetup(PIN_SWITCH);
}
void loop() {
if (modePressed) {
pattern = (pattern % 8) + 1;
strip.clear();
}
modePressed = false;
switch (pattern) {
case 1: colorWipe(strip.Color(255, 0, 0)); break; // 赤
case 2: colorWipe(strip.Color(0, 255, 0)); break; // 緑
case 3: colorWipe(strip.Color(0, 0, 255)); break; // 青
case 4: theaterChase(strip.Color(127, 127, 127)); break; // 白
case 5: rainbow(); break;
case 6: rainbowDifference(); break;
case 7: rainbowCycle(); break;
case 8: rainbowCycleDifference(); break;
case 9: theaterChaseRainbow(); break;
}
if (!modePressed) modePressed = mode.Pressed();
}
// 以下、各アニメーション関数(colorWipe, rainbow, theaterChase等)と割り込み処理が続く
// 完全なコードは元記事参照
Button.h / Button.cpp
デバウンス処理、長押しリピート、ピンチェンジ割り込み対応のボタンライブラリ。PCINT2ベクタ(D0-D7)を使用。
3Dプリント用STLファイル
「stl_files_vSNeOCJWDn.zip」として提供
回路図・PCBデータ
Eagle形式で「eagle_files_D8oAM5ngf5.zip」として提供
製造プロセス
- ハロゲンランプ:技術、歴史、そして未来——専門家の視点
- 接着剤の歴史、製造、未来:古代アデシブから現代イノベーションへ
- ホットドッグ:歴史、製造、栄養、未来のトレンド
- ラバランプ:歴史、設計、製造の秘密
- 熱気球:モンゴルフィエ兄弟から現代フライトまで
- 瞬間接着剤:化学、製造、品質管理
- PIRセンサー連動 インタラクティブLEDマトリクスドアディスプレイ - ホリデーグリーティング
- 音声反応型 8 LED ライトディスプレイ
- スマートArduino四足歩行ロボットの製作:ステップバイステップガイド
- Arduino Nanoで8×8 LEDマトリックスをドライバー/ライブラリなしで直接制御
- 革新的材料が次世代LEDデータ通信を駆動