NeoPixel と紙で フルカラー LED イルミネーション オブジェを作ってみた

記事公開日:2016年11月30日
最終修正日:2016年12月6日

スポンサーリンク

こんばんは。

この時季になると、 電子工作 で LED イルミネーション を作ってくれとよく頼まれることがあるのですが、この時季限定だけでなく、通年で使用できるものが作れないかなぁと、いつも考えていました。

ということで、王道のフルカラーLED をいろいろと試していたのですが、安価なコピー用紙と組み合わせたら、意外と面白い卓上(デスクトップ)オブジェができたので報告したいと思います。

使ったマイコンはお馴染みの ESPr Developer ( ESP-WROOM-02, ESP8266 ) で、LED は Adafruit の NeoPixel Ring 12連フルカラーです。

まず、以下の動画をご覧ください。

続いて、室内を暗くした場合はこんな感じに見えます。

いかがでしょうか。
最も安価なコピー用紙をクルッと巻いただけのものです。
どこかで見たような形かも知れませんが、即席で作ったものなのでご容赦ください。

15秒毎に点灯パターンが自動的に変わるようにしました。
最初は RGB カラー ( Red, Green, Blue )の回転。
次がブルーのみ。
次が CMY カラー ( シアン、マゼンダ、イエロー)。
最後に オレンジとグリーン2色の回転です。
オレンジとグリーンは「和」の感じがしますね。

最初の動画では、室内が明るくても、かなりクッキリ色が出ています。
これ、LED素子を裸眼で直視すると危険なほど明るいです。
全素子をフル点灯させると照明装置として使えそうなほどです。
そんなわけで、※LED素子は直視しないようにしてください
多分、直視し続けると目に悪影響を与えるのは間違いないです。
気を付けてください!

因みに、今回はちょっと反則的なことをやってます。
後でも述べますが、AdafruitのNeoPixelは5V動作です。
今回は3.3V動作させていますが、間にロジックレベル変換を入れてもスムースに動作しなかったので、規格外ですが3.3Vで動作させています。
近いうちに安定動作するロジックレベル変換を間に入れた回路を報告できたらと思っています。今回はあくまで、試しということでご了承ください。

また、これはArduino UNO でやると確実に安定動作しますので、ESPr Developer でうまくいかない場合はそれで試してみてください。

ということで、3.3Vでもこれだけ明るければ、コピー用紙なんぞも透けて色が出るので面白い効果が出ますね。
こんな風に間接的照明的に使うと良いのですが、それでもデスクトップ上でフル点灯は眩しいです。

色を工夫して、中に置くものを白いミニチュアツリーにすれば、クリスマスの時季でも使えるし、正月は竹のイメージで鏡餅の隣に置けそうな気がします。
見方によっては、植物やケーキ、又は、どこかの怪しい建物にも見えてしまいますね。
まぁ、あくまで個人的な意見ですが・・・。

では、これの作り方を説明していきます。

注意事項として、以下のLEDはかなり強い光を出しますので、常時フル点灯させていると熱を持ちます。プラスチックなどを素子に接触させないように注意してください。
あとは自己責任ということですので、ご了承ください。

1.電子工作用の準備

まずは、マイコン制御部の電子工作側の準備から説明します。
オブジェ部分は後で説明します。

●ESPr Developer ( ESP-WROOM-02 開発ボード)
スイッチサイエンス製
Amazon.co.jp
これにはピンヘッダが付いておりませんので、別途購入が必要です。

これは、当ブログで何度も紹介している、超おすすめマイコンボードです。
日本の電波法をクリアさせた、ESPRESSIF社のESP-WROOM-02 を、スイッチサイエンスさんが、USBシリアル変換、電源レギュレーター、ロジック変換までパッケージにしたものです。
Arduino IDE で開発ができて、しかもArduino MEGA よりも多いメモリ。
そしてWi-Fi ( 2.4GHz帯 )通信ができるという優れものです。
これ一つでIoTっぽいことが直ぐに実現できてしまいます。

●Arduino UNO

ESPr Developer でうまく動かない場合はこれを使用してください。
5Vロジックなので、確実に動作します。

●NeoPixel Ring – 12連フルカラーシリアルLED
Adafruit製

ここで紹介しているものは、Amazon.co.jp のスイッチサイエンスさん販売のものです。
これにはピンヘッダが付いておりません。
スイッチサイエンスさんで購入すると、小さいものはネコポス(郵便ポスト投函)なので、とても便利です。

●ブレッドボード
お薦めのブレッドボードはこれです。

これは、ESPr Developer を挿しても、両サイドとも2列の空きがあるので、とても重宝してます。

●固いジャンパーワイヤー
今回使うジャンパーワイヤーはこういうタイプが良いです。

●2.54mm ピンヘッダ

●その他、ハンダこて、ハンダ、ニッパ、USBケーブル、パソコン等

2.オブジェ用の準備

●丸カップ 86-120
今回使ったものは、ずっと前にホームセンターで買って余っていたものを使いました。
材質A-PETの丸カップで開口部86mm、120ccのものです。
NeoLEDobj30

同じようなものがAmazon.co.jpにもありました。
これは使ったことが無いので、今回の工作に合うかどうか分かりません。
底のサイズや形状が気になりますが、おそらく合いそうな気がします。
(合わなかったらスミマセン)
このカップはハサミで簡単にカットできるので、今回の工作にピッタリです。
これと似たものであれば何でも構わないと思います。

コピー用紙(または格安プリンター用紙) 1枚
これは何でも結構ですが、高価な厚手の紙はダメです。
安価な薄手の紙で十分です。
要するに、光で透けなければ意味がありません。
もちろん、和紙でも良いと思います。

●セロテープ、ハサミ、カッター、油性マジック等

3.ESPr Developer の組み立て

まず、ESPr Developer ( ESP-WROOM-02, ESP8266 ) の組み立ては以下のページをご覧ください。
2.54mmピンヘッダをハンダ付けする作業があります。

ESPr Developer ( ESP-WROOM-02 開発ボード )の使い方をザッと紹介

4.NeoPixel Ring の組み立て

LED のNeoPixel Ring を購入すると、こんな感じでピンヘッダもワイヤーも何も付属しておりませんでした。

NeoLEDobj10

裏面はこんな感じです。
5V電源入力、GND、シリアルデータInput、Output 端子があります。
NeoLEDobj11

別途購入した2.54mmピンヘッダをニッパで一つずつカットします。
NeoLEDobj12

それをブレッドボードにこんな間隔で挿しておきます。
NeoLEDobj13

すると、うまい具合にNeoPixel Ring の端子とピッタリハマります。
2.54mmピッチのブレッドボードでも合うように、よく作られていますね。
NeoLEDobj14

横から見るとこんな感じです。
この隙間があることで、ジャンパワイヤーを下から通すことが出来るわけです。
NeoLEDobj15

ブレットボード上でピンヘッダを表側からハンダ付けします。
気を付けてほしいのは、コテを長く当てすぎるとブレッドボードが溶けるし、LEDにも悪影響がありますので、素早くハンダ付けを終えてください。
NeoLEDobj16

ハンダ付けし終わった様子です。
NeoLEDobj17

ハンダ付け終わったら、ブレッドボードから一旦外します。
裏から見るとこんな感じです。
NeoLEDobj18

5.NeoPixel の接続

では、ブレッドボード上にESPr Developer と NeoPixel をジャンパーワイヤーで接続していきます。
まず、下図を参照してください。

NeoLEDobj72

通信線は1本のみという、とてもシンプルです。
注意していただきたいのは、パソコンからのUSB接続は、USBハブはダメです。
必ずパソコンのUSBポートに直挿ししてください。
電流が足りなくなって、誤動作します。

先にも述べましたが、実は、NeoPixel の動作電圧は5Vなんですが、今回は3.3Vで動作させます。
本来の電圧ではないので、誤作動しても文句は言えませんのでご了承ください
ただ、今回、試しに3.3Vで動作させてみたら、一番スムースに動作しました。

このLEDチップはWS2812B らしいです。
データシートを見ると、電源電圧範囲は3.5~5.3Vで、Input電圧範囲は
-0.5~VDD+0.5
とあります。
若干電圧が足りませんが、動いたのでヨシとします。
当然明るさも5Vより暗くなりますが、3.3Vでも眩しいくらいだったので、このまま使ってみます。
もし、誤動作したら、5V-3.3Vロジック電圧変換を間にかましてください。
ただ、ロジックレベル変換を間にかませると、そのチップの最大速度が問題になってきて、逆にうまく動作しない場合があります。
私も実際にロジックレベル変換を使ってみたら、LEDのフェードイン、フェードアウトがカクカクになってしまって、うまくいきませんでした。
ここは皆さんの判断にお任せします。

次に、ブレッドボード上のジャンパーワイヤーはニッパ等で適当にカットして以下の様にします。

NeoLEDobj19

そうしたら、NeoPixelを下図の様に差し込んでください。
差し込む向きに十分注意してください。

ESPr Developer 3.3V — NeoPixel  PWR端子
ESPr Developer GND — NeoPixel  GND端子
ESPr Developer GPIO 5番 — NeoPixel  IN端子

NeoLEDobj20

Arduino UNOで接続する場合はこんな感じです。

NeoLEDobj71

写真ではこんな感じになります。

NeoLEDobj73

Arduino UNO の場合はこんな感じのミニブレッドボードで良いと思います。

ジャンパーワイヤーは固いものを使用して、写真のように机にベッタリ付くように折り曲げておくと良いと思います。

6.Arduino IDE の設定

Arduino IDE を設定します。
予めArduino IDE をインストールしておいてください。
IDE のバージョンは 1.6.13 で動作確認しております(Windows 10の場合)。

ESPr Developer ( ESP-WROOM-02, ESP8266 ) の場合はESP8266ボードをインストールしておく必要があります。
その方法は以下のページを参照してください。
Windows の場合で説明しています。

Arduino IDE に Staging(Stable)版ESP8266 ボードをインストールする方法

Arduino UNO の場合は下図の様に設定してあればOKです。

NeoLEDobj74

7.Adafruit ライブラリをインストール

スイッチサイエンスさんの以下のページに
フルカラーシリアルLEDを使うためのライブラリ」というリンクにAdafruit ライブラリがあります。

https://www.switch-science.com/catalog/1593/

GitHub のZIPファイルをダウンロードしていただき、Arduino IDE にインストールしてください。
ZIPファイルから直接インストールする方法は以下のページを参照してください。
(Windows の場合で説明しています)

GitHubにある ZIP形式ライブラリ のインストール方法 ( Arduino IDE )

8.Arduino IDE にスケッチを入力

では、Arduino IDE に以下のサンプルスケッチを入力してみてください。

#include <Adafruit_NeoPixel.h>

#define PIN            5 //シリアル通信GPIOピン番号
#define MAXPIXELS      12 //LED素子の最大数

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(MAXPIXELS, PIN, NEO_GRB + NEO_KHZ800);

uint8_t LedNum1_Inc = 9; //最初にフェードインするLED番号
uint8_t LedNum1_Dec = 8; //フェードアウトするLED番号
uint8_t LedNum2_Inc = 5;
uint8_t LedNum2_Dec = 4;
uint8_t LedNum3_Inc = 1;
uint8_t LedNum3_Dec = 0;

uint8_t ChangeType = 0; //LED点灯パターンを決める引数
uint32_t ChangeTime; //LED点灯パターンを変える時間
int cnt = 0; //256段階でLEDをフェードさせるためのカウント

void setup() {
  pixels.begin(); // This initializes the NeoPixel library.
  pixels.setBrightness(255); //Max 255
  ChangeTime = millis();
}

void loop() {
  if(millis() - ChangeTime > 15000){ //15 second Type Change
    ChangeType++;
    if(ChangeType == 4) ChangeType = 0;
    ChangeTime = millis();
  }
  
  switch(ChangeType){
    case 0: //RGB type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, 0, 0));
      pixels.show(); // This sends the updated pixel color to the hardware.
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 0, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum2_Inc, pixels.Color(0, cnt, 0));
      pixels.show();
      pixels.setPixelColor(LedNum2_Dec, pixels.Color(0, 255-cnt, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum3_Inc, pixels.Color(0, 0, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum3_Dec, pixels.Color(0, 0, 255-cnt));
      pixels.show();
      break;
      
    case 1: //Blue type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(0, 0, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(0, 0, 255-cnt));
      pixels.show();
      break;
      
    case 2: //CMY type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, cnt, 0));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 255-cnt, 0));
      pixels.show();
  
      pixels.setPixelColor(LedNum2_Inc, pixels.Color(0, cnt, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum2_Dec, pixels.Color(0, 255-cnt, 255-cnt));
      pixels.show();
  
      pixels.setPixelColor(LedNum3_Inc, pixels.Color(cnt, 0, cnt));
      pixels.show();
      pixels.setPixelColor(LedNum3_Dec, pixels.Color(255-cnt, 0, 255-cnt));
      pixels.show();
      break;
      
    case 3: //Orange, Green type
      pixels.setPixelColor(LedNum1_Inc, pixels.Color(cnt, 10, 0));
      pixels.show();
      pixels.setPixelColor(LedNum1_Dec, pixels.Color(255-cnt, 10, 0));
      pixels.show();
      break;
  }
  cnt++;
  
  if(cnt == 256){ //フェードが最大、最少になったらLED素子を変える
    LedNum1_Inc++;
    if(LedNum1_Inc >= 12) LedNum1_Inc = 0;
    LedNum1_Dec++;
    if(LedNum1_Dec >= 12) LedNum1_Dec = 0;
    LedNum2_Inc++;
    if(LedNum2_Inc >= 12) LedNum2_Inc = 0;
    LedNum2_Dec++;
    if(LedNum2_Dec >= 12) LedNum2_Dec = 0;
    LedNum3_Inc++;
    if(LedNum3_Inc >= 12) LedNum3_Inc = 0;
    LedNum3_Dec++;
    if(LedNum3_Dec >= 12) LedNum3_Dec = 0;
    cnt = 0;
  }
}

【解説】

●1行目:
Adafuit社のNeoPixelを使うためのライブラリインクルードです。

●3行目:
ESPr Developer または Arduino UNO のGPIOピンの定義です。

●5行目:
今回のNeoPixel Ring のLED素子は12個です。

●6行目:
Adafruit ライブラリのスケッチの例をそのまま流用しました。

●8-13行:
LED素子を最初に光らせる番号を定義します。
_Inc はフェードイン(明るくなる)番号
_Dec はフェードアウト(暗くなる)番号

●19-23行:
このセットアップ内で、NeoPixelライブラリを初期化して、明るさを決めています。
明るさの範囲は 0-255 です。

●26-30行:
ここで、15秒毎にLED点灯パターン番号を変えています。

●32-80行:
LED点灯パターンをswitch文で4タイプに分けています。
34行目でLED素子の番号とカラーをセットして、pixels.show()で初めてLEDが点灯します。
色はRGB ( Red, Green, Blue )で混ぜて作ります。
メインloop内で 引数cnt がカウントアップされ、255 になったらゼロになります。
フェードアウトするLEDには 255-cnt として明るさが減少するようにしてます。

●83-97行:
cntカウントが256になったらゼロにして、LED素子の番号を変えます。
LEDが12になったらゼロにします。

9.コンパイル書込みおよび実行

では、スケッチをコンパイル書き込み実行させてみてください。
以下の動画のようになっていればOKです。

ただし、ご注意!!
LED素子を目で直視しないでください!!
かなり強い光なので、長時間見ていると確実に目に悪影響を与えます。
もし、見たければ明るさをグッと抑えてプログラムを書き換えるか、紙を当てがって見るようにしてください。

ESPr Developer ( ESP-WROOM-02, ESP8266 )の場合

ESPr Developer ( ESP-WROOM-02, ESP8266 ) の場合は電流量がシビアですので、以前の記事で紹介した簡易USBテスターで電流量を監視しています。
こんなものです。
動画では、最大140mA前後なので、ヨシとします。
LED12個フル点灯した場合はかなり電流が流れますが、イルミネーションオブジェの場合は所々しか点灯させないので、問題ありません。

LEDの点滅は人工的すぎて嫌いなのですが、こうやってフェードインフェードアウトさせてフワッと点滅させると良いですね。

Arduino UNOの場合も同様にこうなればOKです。

5V動作なのでさすがに安定してますね。

あと、先にも述べましたが、注意事項として、このLED素子はフル点灯を維持させたまま長時間経つと、けっこう熱を持ちます
LED素子にプラスチックを直接接触させたり、紙を接触させたままにはしない方が良いです。
明るくなるものにはエネルギーを消費するために、熱が出るものだと思っておいた方が賢明です。
動画のように、所々点いたり消えたりしていれば熱くなることは無いと思います。

ここまでできれば、次はオブジェの工作です。

10.プラスチック丸カップ加工

まず、プラスチック丸カップを加工します。
容器とフタ1つずつ使います。
底がほんの少し上げ底になっている方が、光が屈折して良い感じになります。

NeoLEDobj31

この材質はアモルフェス・ポリエチレンテレフタレート ( A-PET )だそうです。
耐熱は60℃なので、LED素子に接触させると、熱を持った場合に溶ける可能性があるので、LED素子からある程度距離を取るような加工にします。

下図のように、底から約23mmのところに油性マジックで印を付けます。

NeoLEDobj32

ハサミで淵から下図の様に斜めに切り込み始めると切りやすいと思います。NeoLEDobj33

こんな感じで、底と等間隔の距離を保ったまま切っていきます。NeoLEDobj34

切り込み終わった様子です。
NeoLEDobj35

次に、ESPr Developer の場合、ブレッドボード上でオブジェを作る場合、カップとブレットボードとが接触する個所をカットするために、下図の様にしてマジックで印を付けます。

NeoLEDobj36

ブレッドボードを横から見て、11mmくらいの高さをカットします。
NeoLEDobj37

こんな感じで印をつけていきます。NeoLEDobj38

そうしたら、ハサミでカットします。
NeoLEDobj39

カットし終わった様子はこんな感じです。
NeoLEDobj40

ブレッドボードに載せるとこんな感じになります。
これだけLED素子とプラスチックカップが離れていれば、熱を持った場合に安心です。
今回のLED点滅パターンでは、熱は殆ど発しないので、容器の中に熱が籠ることは無いと思います。
もし、心配ならば、放熱のために所々穴を明けても良いと思います。
ただ、それだけ熱が出る場合は、全素子を長時間ホワイトでフル点灯させた場合だと思います。
NeoLEDobj41

真上から見て、NeoPixel と、プラスチックカップの円の中心が大体合っていればOKです。
NeoLEDobj42

何も、ブレットボード上に作らなくても・・・と思いましたが、今回は実験なのでお許しください。
ちゃんと作るときには、オブジェとマイコンを分離させるか、オブジェ内に収めた方が良いですね。
次回の課題です。

次に、フタを加工します。
何に使うかというと、フタを切り取って、カップの底の段差を解消するためのプレートを作るというだけです。

下図の様にフタを置いて、カップの底の円のサイズで印を付けます。
NeoLEDobj43

こんな感じで良いです。
NeoLEDobj44

見えない部分に置くので、こんな感じのアバウトで円を描いておきます。
NeoLEDobj45

ハサミでカットします。
NeoLEDobj46

こんな感じで切り取れればOKです。
NeoLEDobj47

これで、プラスチック丸カップの加工は終わりです。

11.ペーパー(紙)の加工

では、次に、コピー用紙を加工します。
といっても、簡単な形をハサミでカットするだけです。

下図の様なサイズでカットしてください。
A4サイズ1枚で足ります。

NeoLEDobj48
カットし終わった様子はこんな感じです。

NeoLEDobj49

一番長いものを下図の様にカップの外周に合わせて囲んで、セロテープで止めます。
巻く方向に気を付けてください。
NeoLEDobj50

次に2番目に高さの高いもの(75mm)を下図の様にNeoPixelの外周に合わせて巻いて、セロテープで貼り付けます。
巻く方向に気を付けてください。
NeoLEDobj51

最後に残ったパーツを下図の様にペンと手のひらでシゴいて、丸くなるようにクセを付けます。
巻く方向に気を付けてください。
NeoLEDobj52

イイ感じになったら、こんな感じでセロテープで止めます。
ここはセロテープでなく、メンディングテープの方が美しいですね。
NeoLEDobj53

3つのペーパー加工が済んだ様子です。
NeoLEDobj54

次に、一番大きいものを下図の様に当てがって、ブレットボードと当たるところをカットするために印を付けます。
NeoLEDobj55

こんな感じでハサミでカットします。
NeoLEDobj56

カットし終わって、うまくハマった様子です。
NeoLEDobj57

次に、先ほどのプラスチック丸カップのフタをカットしたものを下図の様に載せます。
すると、底の段差が解消されます。
NeoLEDobj58

このように全てのパーツを載せるとこんな感じになります。
NeoLEDobj59

真上から見て、2番目のパーツはNeoPixelの円周上にあって、一番真ん中のパーツは右側に寄せておくことがポイントです。
こうすることによって、LEDの当たり方が変わって面白くなります。
NeoLEDobj60

12.最終実行

では、これで完成したので、実際に紙のオブジェと共に実行させてみましょう。
最初に紹介した動画のようになっていればOKです。

色の流れは、15秒毎に以下のようになります。

1.RGB原色パターン

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

2.ブルーのみパターン

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

3.CMY(シアン、マゼンダ、イエロー)色パターン

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

4.オレンジ、グリーンパターン

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

また、中のロールの置き位置をこんな風に変えてもイイと思います。

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object
ESP8266, NeoPixel & Paper LED Illumination Object

13.まとめ

いかがでしたでしょうか。
うまくできましたでしょうか。

もし、不具合などありましたら、コメント等でご連絡いただけると幸いです。

電子工作 に 紙 のような有機的なものを組み合わせると、一風変わりますね。

このオブジェの中のロールをいろいろな置物に変えるとオモシロイですよ。
ミニチュアのクリスマスツリーを置いたりしてもイイですしね。

これをESPr Developer にしたのは理由があって、スマホからコントロールして色を変えたりしたかったのです。
近々、スマホコントロールイルミネーションとして記事をアップしたいと思ってます。

長くなりましたが、今回はここまでです。
ではまた・・・。

スポンサーリンク

mgo-tec電子工作 関連コンテンツ ( 広告含む )
Amazon.co.jp 当ブログのおすすめ







投稿者:

mgo-tec

Arduino, ESP8266, ESP-WROOM-02 等を使って、主にスマホと連携した電子工作やプログラミング記事を書いてます。ライブラリも作ったりしてます。趣味、独学でやってますので、動作保証はしません。 電子回路やプログラミングの専門家ではありません。 畑違いの仕事をしてます。 でも、少しだけ電気の知識が必要な仕事なので、電気工事士や工事担任者等の資格は持ってます。

コメントを残す

メールアドレスが公開されることはありません。

*画像の文字を入力してください。(スパム防止の為)