NeoPixel リング 12連を追加して光ファイバーを使った卓上イルミネーションオブジェを作ってみる
では、今度は前のプログラムをちょっとだけ応用して、NeoPixel Ring 12連と組み合わせた光ファイバー卓上イルミネーションオブジェを作ってみます。
光ファイバーの処理
以前、以下の記事で NeoPixel リングと光ファイバーを使ったオブジェを作ったことがありました。
光ファイバー 卓上オブジェ を作ってみた( NeoPixel フルカラー LED 使用 )
記事を合わせてご覧いただき、更にちょっと手を加えて、グルーガン(ホットボンド)で固定し、パッチワーク用こてアイロンで光ファイバーを曲げたりしてみます。
まず、下図のようにストローで束ねた光ファイバーをグルーガン(ホットボンド)で固定します。
グルーガン(ホットボンド)は以下の物を使いました。
次に、こてアイロンなどを使って、光ファイバーを適度に曲げます。
使ったアイロンは以下の物です。
ハンダごてでもOKかと思います。
ここで重要なのは、見せたい面に光ファイバーの先端をむけるようにアレンジすることです。
因みに、光ファイバーはこうやって曲げてしまうと、光量が落ちますのでご了承ください。
そうしたら、以前の記事で作成したプレートの上にグルーガン(ホットボンド)で固定します。
これは、NeoPixel リング 12連のLED 素子位置に合うようにセットします。
結果、こんな感じになります。
接続する
では、LED テープに NeoPixel Ring 12連を加えた接続例は以下になります。
※ACアダプターとパソコンの電源は同じコンセントおよびテーブルタップから取ってください。
ESP32 の電源をUSBアダプターから取っている場合も同じコンセントから取ってください。
GNDの電位差を極力少なくするためです。
ちなみに私は基本的に素人独学なので、この回路で起きたトラブルは一切保証しません。
写真ではこんな感じになります。
これで、あとは最初に紹介した動画のように光ファイバーを設置すればOKです。
スケッチ(プログラムソースコード)
では、スケッチ(プログラムソースコード)ですが、NeoPixel 12個追加しただけなので、DMX アドレスを36増やすだけにしてみます。
以下の様な感じです。
【ソースコード】 (※無保証 ※PCの場合、ダブルクリックすればコード全体を選択できます)#include <WiFi.h> #include <WiFiUdp.h> #include <ArtnetWifi.h> #include <FastLED.h> // Wifi settings const char* ssid = "xxxxxxxx"; //ご自分のルーターのSSIDに書き換えてください const char* password = "xxxxxxxx"; //ご自分のルーターのパスワードに書き換えてください // LED settings const int numLeds = 144 + 12; // CHANGE FOR YOUR SETUP const int numberOfChannels = numLeds * 3; // Total number of channels you want to receive (1 led = 3 channels) const byte dataPin = 21; //ESP32 GPIO pin CRGB leds[numLeds]; // Art-Net settings ArtnetWifi artnet; const int startUniverse = 0; // CHANGE FOR YOUR SETUP most software this is 1, some software send out artnet first universe as 0. // Check if we got all universes const int maxUniverses = numberOfChannels / 512 + ((numberOfChannels % 512) ? 1 : 0); bool universesReceived[maxUniverses]; bool sendFrame = 1; int previousDataLength = 0; //---------------------------- uint8_t dmx[512] = {}; //DMX 1univers : 512ch //************************************************* void setup() { Serial.begin(115200); ConnectWifi(); artnet.begin(); FastLED.addLeds<WS2812B, dataPin, GRB>(leds, numLeds); FastLED.setBrightness(20); //※これ以上大きくすると、回路電流が大きすぎて危険注意。(Max 255) // this will be called for each packet received artnet.setArtDmxCallback(onDmxFrame); TaskHandle_t th; //マルチタスクハンドル定義 xTaskCreatePinnedToCore(Task1, "Task1", 4096, NULL, 5, &th, 0); //マルチタスク起動 } //************************************************* void loop() { int i; int ch = 0; //DMX channel number for(i = 0; i < numLeds; i++){ leds[i] = CRGB(dmx[ch], dmx[ch + 1], dmx[ch + 2]); ch = ch + 3; } FastLED.show(); delay(1); //これ重要!これが無いと点灯しない。 } //************ マルチタスクループ ****************** void Task1( void *pvParameters ) { while(1){ artnet.read(); delay(1); //マルチタスクの場合、これ絶対必要! } } //*************************************** boolean ConnectWifi(void) { boolean state = true; int i = 0; WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi"); // Wait for connection Serial.print("Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 20){ state = false; break; } i++; } if (state){ Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("Connection failed."); } return state; } //************************************************** void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t* data) { sendFrame = 1; // set brightness of the whole strip if (universe == 15) { FastLED.setBrightness(data[0]); FastLED.show(); } // Store which universe has got in if ((universe - startUniverse) < maxUniverses) { universesReceived[universe - startUniverse] = 1; } for (int i = 0 ; i < maxUniverses ; i++) { if (universesReceived[i] == 0) { //Serial.println("Broke"); sendFrame = 0; break; } } // read universe and put into the right part of the display buffer for (int i = 0; i < length / 3; i++) { int led = i + (universe - startUniverse) * (previousDataLength / 3); if (led < numLeds) dmx[i * 3] = data[i * 3]; dmx[i * 3 + 1] = data[i * 3 + 1]; dmx[i * 3 + 2] = data[i * 3 + 2]; //Serial.printf("%02X,%02X,%02X,", dmx[i * 3], dmx[i * 3 + 1], dmx[i * 3 + 2]); } //Serial.println(); previousDataLength = length; if (sendFrame) { memset(universesReceived, 0, maxUniverses); } }
これは先に紹介したスケッチの11行目を変えただけです。
とてもシンプルです。
では、これをコンパイル書き込みしておいて下さい。
Jinx! – LED Matrix Control の設定
では、Windows専用フリーウェア Jinx! – LED Matrix Control の設定です。
設定方法は前回の記事を合わせて参照してください。
ですが、ちょっと工夫が必要です。
なぜなら、この接続だと NeoPixel のアドレスが以下のようになるからです。
NeoPixel Ring : 0~35
LED Tape : 36~467
因みに、Jinx! – LED Matrix Control の Patch設定は自由が効きません。
同じアドレスを複数設定できないのが欠点です。
まず、メニューの「Setup」→「Matrix Options」設定は以下のようにしました。
そして、メニューの「Setup」→「Output Devices」設定は以下のようにしました。
そして、メニューの「Setup」→「Output Patch」設定は以下のようにしました。
1列目が NeoPixel Ring 12連ですが、3つ同じアドレスで Patch しようとしましたが、残念ながら同じアドレスを複数Patchできませんでした。
Patch画面上で入力できたとしても、Outputされませんでした。
ですから飛び飛びにしました。
つまり、こんな感じです。
LED1 : DMX#0 Red, DMX#1 Green, DMX#2 Blue
LED2 : None
LED3 : None
LED4 : DMX#3 Red, DMX#4 Green, DMX#5 Blue
LED5 : None
…….etc
そして、2段目からの LED テープはアドレス36からFast Patch で連続Patchしました。
これで Start Output させて、エフェクトを作成してみて下さい。
下図のように、そして最初に紹介した動画のように動けばOKです。
FFT 的なスペクトラムアナライザー設定
まず、Windows パソコンに装備してあるマイクデバイスをONにしてください。
次に、Jinx! – LED Matrix Control で、FFT 的なスペクトラムアナライザー表示は下図のように「Spectrum Analyzer」を選択すれば表示できます。
そして、とりあえず、ベースラインを Bottom にする設定は以下の感じです。
また、光ファイバー側の LED をベースラインにして、逆さ表示させる場合は以下の設定です。
こちらの方が、光ファイバーが常時光っていてキレイです。
あとは、いろいろ設定してみてください。
最初に紹介した動画のように、なかなか面白いエフェクトができて、クリスマスイルミネーション的にも見ていて楽しいですよ!
編集後記
いかがでしたでしょうか。
ESP32 や M5Stack とパソコンソフトを組み合わせれば、簡単なプログラムで楽しい LED イルミネーションオブジェがいろいろできますね。
クリスマスソングに合わせて、イルミネーションが光るっていうこともできますね。
クリスマス用の卓上オブジェとしては、私的には今年のシーズンは乗り切れそうで満足です。
でも、多量のLEDを扱う時には、電源の安全対策がとても重要ですね。
特に熱対策をしっかりやっておかないと、火災につながるので要注意です。
そうすると、既製品を使った方が安全かも知れませんね。 ということで、今回はここまでです。
ではまた・・・。
コメント
mgo-tecさん、H.Wです。
ご無沙汰してます。。。
多連LEDテープと12連リングLED を使ったイルミネーション。。。
ダイナミック且つ幻想的でとても素晴らしいですね…
(過去にもESP-WROOM-02 で同様なモノを作られてるんですね…?)
これを上手く活用すれば、株式市場のリング状電光掲示板モドキ?も作れそうですね?(笑)
私も何とか手持ちに無い部品を手に入れ、クリスマスまでに間に合わせてみたいと思います。。。
今回は消費電流も多いので、元々ブレッドボードは接触不良、誤配線、ノイズ混入、見た目の悪さ等々から殆ど使用しないので、少し時間が掛かりそうです。
実は時間がさけない一番の理由は、mgo-tecさんも既に手に入れられて検討されてるかも知れませんが、7月末に発売されたSONYの「Spresence」基盤を最近入手し、ここ暫くこれに嵌ってしまってることにあります。
メインボードはESP32devkit より一回り小さく、WiFiやBLEは搭載されてませんが、その代わりにGPS 機能とハイレゾ DACが搭載されており、サンプルスケッチを適宜改造して楽しんでます。。。
何しろ消費電力がとても少なく、Lipo電池直結で携帯動作できる所が非常に気に入ってます。
(ここは適切ではないので、詳細についてはgmailの方に書きます。)
H.Wさん
いつもブログご覧いただき、ありがとうございます。
確かに、株式市場の電光掲示板っぽいものは出来そうな気がしますね。
私的には予算が無いので、これ以上LEDを増設できませんが・・・。
ぜひ、クリスマスイルミネーション試してみて下さい。
色んな人のアイデア見てみたいですね。
SONYの「Spresence」は、とっても興味あるのですが、今は経済的に厳しくてとても買えない状況です。
余裕のある時期に obniz を購入してたものの、まだ開封すらしていません。
積み基板がまだ沢山あります。
でも、いつかSpresenceは試そうと思っています。
Spresenceいいなぁ・・・。
管理人の mgo-tec です。
ブログ読者の juchangさんからの写真投稿がありました!
3Dプリンターで自作されたパイプに NeoPixel LED テープを貼り付けているとのことです。
インシュロックを使うよりも格段に良い感じですね。
このアイデアは素晴らしいです!!!
いつも実験していただき、本当にありがとうございます。
この後、光ファイバーも設置するみたいです。
どうなるか期待しちゃいます!
(^^)
管理人のmgo-tecです。
前コメントで紹介した juchangさんから更に進化した素晴らしい工作例の写真投稿がありました。
クリアーカバーを入れて、光が屈折してイイ感じですね。
光ファイバーの設置も、私と違ったセンスで、新鮮な感じがします。
光ファイバーは、125mm、150mm、200mmに切断したものを使っているとのことです。
梱包時の丸みをそのまま利用しファイバー立てに挿しているとのことです。
いろいろ工夫次第で、面白い効果の卓上イルミネーションができそうですね。
私自身も負けていられないと思いました。
juchangさん、いつもありがとうございます。
m(_ _)m