工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ホットグルーLEDマトリックスランプ

コンポーネントと消耗品

>
DigilentWS2812アドレス指定可能なLEDストリップ
IP60(1メートルあたり60個のLED、非防水、合計128個のLED)
× 128
Arduino Nano R3
× 1
>
3AミニDC-DC降圧コンバーターボルトレギュレーター
× 1
抵抗10kオーム
× 1
抵抗330オーム
× 1
コンデンサ470µF
10Vロープロファイルタイプ
× 1
10K lin 45mmスライダーポテントメーター(ストローク長30mm例:Bourns PTA3043 )
× 1
小さなプッシュボタン
× 1
小型ロッカースイッチ
× 1
DC電源ソケット(パネルバージョン)
× 1
7mm x100mmスティックのり
× 64

必要なツールとマシン

>
3Dプリンター(汎用)

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

このランプは、jbumsteadによる「光ファイバー」LEDマトリックスと呼ばれる同様のランプに基づいていました。 OpenSCADを使用した目標は、jbumsteadの設計で使用されている12mm拡散デジタルRGBLEDを安価なWS2812BRGBストリップに置き換え、LEDと電子機器のコンテナーを可能な限り薄くして、より安価な7mmスティックのりを使用できるようにすることでした。

<図>

ケースの印刷

サポートが必要なのは「HotGlueMatrix--Bottom.stl」だけです。 0.2mmのレイヤーの高さと15%のインフィルを使用しました。印刷後に19/64インチのドリルを使用して穴のサイズを大きくすると、スティックのりをそれぞれの穴に簡単に挿入できることがわかりました。

ランプセクションの組み立て

1. WS2812BLEDストリップをそれぞれ8個のLEDを含む16個のストリップにカットします。

2. LEDストリップは、各フォームに上下逆に配置されているため、上部または下部のフォームに直接配線することはできません。各ストリップの中心が隣接するストリップから15mmになるように、8つのストリップを平らな面に貼り付けます。すべての代替ストリップが反対方向を向くようにストリップを配置します。

<図>

DINが左上隅にあることを確認します。上記のようにストリップを配線します。私はワイヤーラップワイヤーを使用しましたが、どんな細い絶縁銅線でも使用できます。配線したら、GND、DIN、および+ 5Vに3本の長いマルチストランドワイヤを追加します。これらのワイヤは穴を通り、下部セクションのGND、DOUT、および+ 5Vと結合します。次に、「ホットグルーマトリックス-ホルダートップ」フォームの穴に3本のワイヤーを通し、ストリップをそれぞれのチャネルに逆さまに注意深く配置します。ストリップは平らに置く必要があります。そうでない場合は、ストリップが正しい方法であることを確認してください。彼らは一方向にしか行きません。ワイヤー用のチャネルもあります。 LEDストリップが所定の位置に配置されたら、Blue PaintersTapeを使用して所定の位置に固定します。

<図>

3.同様の方法で底板を配線します。 DOUTは右上です。ストリップをフォームに逆さまに配置する前に、3本の長いマルチストランドワイヤをVCC、DIN、およびGNDに追加します。これらのワイヤはPCBに接続されます。

<図>

4.すべてのスティックのりが所定の位置に来るまで、まだ上部からワイヤーを接続しないでください。

スティックのりの追加

これにはある程度の忍耐が必要です。まず、スティックのりを整理する必要があります。あなたがeBayから得る7mmのスティックのりはおよそ100mの長さです。それらは少し異なることがわかりました。私は30パックで来たので、同じ長さの64を見つけるために90本のスティックを持っていました。また、印刷後に19/64インチのドリルを使用して穴のサイズを大きくし、穴に合わせやすくする必要がありました。

また、透明なストローを使用して、上部と下部のストリップを接続する3本のワイヤーを配置しました。

スティックのりを一度に1列ずつ追加し、一方の端から始めて、もう一方の端に向かって進みます。それらがすべて配置されたら、各コーナーで上部と下部の間の距離を測定します。それらはすべて完全に同じである必要があります。そうでない場合は、それに応じてスティックのりの深さを調整します。位置合わせに満足したら、各コーナーからスティックのりを取り外し、少量の瞬間接着剤で元の位置に戻します。 (LEDに瞬間接着剤を塗らないでください)。これにより、構造が非常に堅牢になります。

<図>

上部と下部のストリップを接続します

穴の近くの下部ストリップを慎重に持ち上げ、3本のワイヤーをトリミングして、所定の位置にはんだ付けします。 + 5V〜 + 5V、DIN(上)からDOUT(下)、GNDからGND。

PCBの作成

ボードを商業的に作成したい場合、または私が行ったように自分で作成したい場合は、Eagleファイルを含めました。トナー方式でボードを作りました。回路図面は非常に単純で配線が簡単なので、必要に応じてプロトボードを使用できます。 4つの取り付け穴は、2.5mmのドリルと、3mmのタップで作成されたねじで開ける必要があります。 6mmM3ネジを使用してボードを所定の位置に固定します。

重要:ボードに固定する前に、DCレギュレータの出力を5Vに設定してください。

<図>

最終配線

以下に示すように、スライドポテンショメータ、プッシュスイッチ、電源スイッチ、およびDC電源ソケットを配線します。

<図>

LEDストリップからPCBにワイヤを接続します。

ソフトウェア

含まれているソフトウェアは、一連のテストアニメーションを実行します。ボタンは、使用可能なアニメーションを循環します。ポテンショメータはアニメーションの速度を調整します。

コード

  • GlueMatrixTest.ino
  • Button.h
  • Button.cpp
GlueMatrixTest.ino C / C ++
 #include  #ifdef __AVR__ #include #endif#include "Button.h" #define PIN_LED 2#define PIN_SWITCH 3#define PIN_POT A0#define LEDS 128 //パラメーター1 =ストリップ内のピクセル数//パラメーター2 =Arduinoピン番号(ほとんどが有効)//パラメーター3 =ピクセルタイプフラグ、必要に応じて追加:// NEO_KHZ800 800 KHzビットストリーム(ほとんどのNeoPixel製品(WS2812 LED付き))/ / NEO_KHZ400 400 KHz(クラシック 'v1'(v2ではない)FLORAピクセル、WS2811ドライバー)// NEO_GRBピクセルはGRBビットストリーム用に配線されています(ほとんどのNeoPixel製品)// NEO_RGBピクセルはRGBビットストリーム用に配線されています(v2ではなくv1 FLORAピクセル) // NEO_RGBWピクセルはRGBWビットストリーム用に配線されています(NeoPixel RGBW製品)Adafruit_NeoPixelストリップ=Adafruit_NeoPixel(LEDS、PIN_LED、NEO_GRB + NEO_KHZ800);ボタンモード=Button(PIN_SWITCH); bool modePressed =false; //下部と上部の物理LEDマップLEDアレイ// LED下(上から見た場合)// 064 049 048 033 032 017 016 001 // 063 050 047 034 031 018 015 002 // 062 051 046 035 030 019 014 003 // 061 052 045 036 029 020 013 004 // 060 053 044 037 028 021 012 005 // 059 054 043 038 027 022 011 006 // 058 055 042 039 026 023 010 007 // 057 056 041 040 025 024 009 008 //(上から見た正面)// LED上(上から見た後ろ)// 065 080 081 096 097 112113 128 // 066 079 082 095 098 111114 127 // 067 078 083 094 099 110115126 // 068 077 084 093 100109116125 // 069 076 085 092 101108117 124 // 070 075 086 091 102107118123 // 071 074 087 090103106119122 // 072 073 088 089 104105120121 //(上から見た正面)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}; //現在の値のストレージintred =128; int green =128; int blue =128; int pattern =1; //重要:NeoPixelバーンアウトのリスクを減らすには、1000uFを追加します//ピクセルの電源リードにコンデンサを接続し、最初のピクセルのデータ入力に300〜500オームの抵抗を追加し、// Arduinoと最初のピクセル間の距離を最小限に抑えます。ライブ回線での接続//は避けてください...必要な場合は、最初にGNDを接続してください。voidsetup(){Serial.begin(115200); pinMode(PIN_LED、OUTPUT); pinMode(PIN_SWITCH、INPUT); pinMode(PIN_POT、INPUT); //ピクセルストリップSerial.println( "Setup()"); strip.begin(); strip.show(); //すべてのピクセルを「オフ」に初期化します//ボタンコールバック//mode.Background(ButtonBackground); // MODEピンのピン変更のISRを設定しますButton ::PinChangeSetup(PIN_SWITCH);} void loop(){if(modePressed){pattern =(pattern%8)+ 1; strip.clear(); } modePressed =false; Serial.print( "モード"); Serial.print(パターン、DEC); Serial.println();スイッチ(パターン){ケース1:colorWipe(strip.Color(255、0、0));壊す; //赤いケース2:colorWipe(strip.Color(0、255、0));壊す; //緑色のケース3:colorWipe(strip.Color(0、0、255));壊す; //青いケース4:theatreChase(strip.Color(127、127、127));壊す; //ホワイトケース5:rainbow();壊す;ケース6:rainbowDifference();壊す;ケース7:rainbowCycle();壊す;ケース8:rainbowCycleDifference();壊す;ケース9:theatreChaseRainbow();壊す; } if(!modePressed){modePressed =mode.Pressed(); }} //ループから抜け出すためのモードボタン割り込みなど// PCINT1はA0からA5ISR(PCINT2_vect)のピンのピン変更を処理します{modePressed =modePressed | (mode.State()==LOW);} void ButtonBackground(void){} //ドットを次々にcolorvoidcolorWipe(uint32_t c){int total =strip.numPixels()/ 2; for(uint16_t i =0; i  0 &&!modePressed; i-){uint8_t botIndex =pgm_read_byte(&botLED [i])-1; strip.setPixelColor(botIndex、0); uint8_t topIndex =pgm_read_byte(&topLED [i])-1; strip.setPixelColor(topIndex、0); strip.show(); delay(map(analogRead(PIN_POT)、0、1024、100、0)); }} void rainbow(){int total =strip.numPixels()/ 2; for(uint16_t j =0; j <256 &&!modePressed; j ++){for(uint16_t i =0; i  
Button.h Cヘッダーファイル
 / *クラス:ButtonAuthor:John Bradnam([email protected])目的:ボタンを処理するArduinoライブラリ* /#pragmaonce#include "Arduino.h" #define DEBOUNCE_DELAY 5 // Repeat speed#define REPEAT_START_SPEED 500# define REPEAT_INCREASE_SPEED 50#define REPEAT_MAX_SPEED 50class Button {public://単純なコンストラクターButton(int Pin); //待機ループまたは繰り返しループのときに呼び出されるバックグラウンド関数voidBackground(void(* pBackgroundFunction)()); //ボタンが押されたときに呼び出されるRepeat関数voidRepeat(void(* pRepeatFunction)()); //ボタンが押されて離されたかどうかをテストします//提供されている場合は繰り返し関数を呼び出しますboolPressed(); //ボタンの状態を返します(HIGHまたはLOW)-LOW =Pressed int State(); //ピン変更割り込み設定// ISR(PCINT0_vect)D8からD13のピン変更割り込み// ISR(PCINT1_vect)A0からA5のピン変更割り込み// ISR(PCINT2_vect)D0からD7のピン変更割り込みstatic void PinChangeSetup(byteピン);プライベート:int _pin; void(* _repeatCallback)(void); void(* _backgroundCallback)(void);}; 
Button.cpp C / C ++
 #include "Button.h" Button ::Button(int pin){_ pin =pin; pinMode(_pin、INPUT);} //遅延または繰り返しループで呼び出す関数を設定voidButton ::Background(void(* pBackgroundFunction)()){_ backgroundCallback =pBackgroundFunction;} //繰り返しシステムが必要な場合に呼び出す関数を設定voidボタン::Repeat(void(* pRepeatFunction)()){_ repeatCallback =pRepeatFunction;} static void Button ::PinChangeSetup(byte pin){* digitalPinToPCMSK(pin)| =bit(digitalPinToPCMSKbit(pin)); //ピンPCIFRを有効にする| =bit(digitalPinToPCICRbit(pin)); //未処理の割り込みをクリアしますPCICR | =bit(digitalPinToPCICRbit(pin)); //グループの割り込みを有効にします} //ボタンが押されて離されたかどうかをテストします//ボタンが押されて離された場合はtrueを返します//コールバックが繰り返された場合、キーが押されている間にコールバックが呼び出されますbool Button ::Pressed( ){bool Pressed =false; if(digitalRead(_pin)==LOW){unsigned long wait =millis()+ DEBOUNCE_DELAY; while(millis() =time){_ repeatCallback(); unsigned long fast =speed-REPEAT_INCREASE_SPEED; if(faster> =REPEAT_MAX_SPEED){speed =fast; }時間=ミリ秒()+速度; }} Pressed =true; }} return Pressed;} //現在のボタンを返すstateintButton ::State(){return digitalRead(_pin);} 

カスタムパーツとエンクロージャー

3D印刷用のSTLファイル stl_files_vSNeOCJWDn.zip

回路図

イーグル形式の回路図面とPCB eagle_files_D8oAM5ngf5.zip

製造プロセス

  1. ハロゲンランプ
  2. のり
  3. ホットドッグ
  4. 溶岩ランプ
  5. 熱気球
  6. 強力接着剤
  7. LEDマトリックス+モーションセンサードアディスプレイ[ArduinoHoliday]
  8. 音による8倍のLED照明
  9. Arduino Quadruped
  10. ドライバーとライブラリなしで8x8LEDマトリックスを制御する
  11. 次世代LEDベースのデータ通信のための材料