そろそろ年末に差し掛かってきましたので、季節ものの工作が捗りますね。

クリスマスのイベントに向けて、NeoPixelが活躍します。

 

とりあえずこんなものを作りました。

 

 

スイッチを切り替えることで、イルミネーションの種類を変えられるようにしました。

NeoPixelは3m(90個分!)あるので、これを何かに飾り付ければOKです!

Arduinoから電源を取っている状態で、90個ちゃんと光ったのも結構感動ポイントでした。


 

今回はケースの設計がいい感じにできました!

 

コンパクトにしすぎると、ケース内の配線が大変だというのも改めて感じつつ…。

今気づいけど、パスコンを入れる前の写真でしたね。。

そしてやっぱり3Dプリンターは最高。

 

 

配線は下記のようにしました。

信号線に1Kの抵抗を入れているのがポイントです。

 

 

ついでに、モバイルバッテリーで駆動する時間を測定してました。

2500mAhで約2時間、9000mAhで約11時間動きました。

11時間動けば、イベント中に止まることは無さそうです。

 

 

Arduinoのプログラムは下記のようにしました。

#include <Adafruit_NeoPixel.h>  // NeoPixel制御用ライブラリの準備

 

// NeoPixel WS2812Bの指定

#define NUM_LEDS  90 // NeoPixelの数

#define LED_PIN   6 // NeoPixel信号接続端子 D6

 

// 変数宣言

int cnt = 0;        // ボタンON回数カウント用

bool state = false; // ボタン状態格納用

 

// NeoPixcelライブラリの設定、このまま書いておく-----------------------

// NeoPixel用の stripオブジェクトを宣言(LEO_GRB + NEO_KHZ800 は NeoPixel WS2812 使用の場合の設定)

Adafruit_NeoPixel strip(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);

 

// 初期設定、このまま書いておく --------------------------------------

void setup() {

  // NeoPixel(WS2812)初期設定

  strip.begin();              // NeoPixel初期化

  strip.show();               // NeoPixelを全て消灯

  strip.setBrightness(75);   // 明るさ倍率設定 (RGB設定値 * 明るさ倍率、最大255)

  // 入力設定

  pinMode(3, INPUT_PULLUP);  // D3を入力端子(プルアップ)に設定 スイッチ入力用

}

// 以下に点灯させる処理を記入-----------------------------------------

// 1個のLEDの色をボタンを押すたびに変更(複数ある場合は最初の1番目のみ使用)

void loop() {

 

if(digitalRead(3) == 1){

  // LED点灯処理 赤と緑が交互に点灯

  for (int i=0; i < NUM_LEDS; i++){

    if(i%2 == 0){

      strip.setPixelColor(i, strip.Color(255, 0, 0)); // LED点灯処理

    }else if(i%2 == 1){

      strip.setPixelColor(i, strip.Color(0, 255, 0)); // LED点灯処理

    }

  }

  strip.show();

  delay(1000);

 

  for (int i=0; i < NUM_LEDS; i++){

    if(i%2 == 1){

      strip.setPixelColor(i, strip.Color(255, 0, 0)); // LED点灯処理

    }else if(i%2 == 0){

      strip.setPixelColor(i, strip.Color(0, 255, 0)); // LED点灯処理

    }

  }

  strip.show();

  delay(1000);

}else{

  rainbow(10);

}

 

void rainbow(int wait) {

  for(long firstPixelHue = 0; firstPixelHue < 5*65536; firstPixelHue += 256) {

    strip.rainbow(firstPixelHue);

    strip.show(); // Update strip with new contents

    delay(wait);  // Pause for a moment

  }

}

 

ちゃんと最後まで作ると、達成感がありますね。

次は何を作ろうかな~。