ライブでよく使う、色を変えられるペンライト。

 

 

ボタンを押したら色が変わるって便利ですよね。

曲によって色を変えたりするのは楽しい♪

 

ちなみに、中身がどうなっているのか開けてみると…

 

 

 

色がキラキラといい感じに反射させる工夫がされています。

 

さすがにここまでは再現できないけど、ボタンを押したら色が変わるという仕組みを再現してみました。

さっそく動いている動画をご覧ください!

 

 

使用した部品は、

  • Arduino Nano
  • NeoPixel
  • ボタン

の3点。

 

プログラムは、こちらの記事を参考にさせていただきました。

 

 

端子は少し変更したり、点灯させるNeoPixelの数も変更しているプログラムを載せておきます。

 

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

 

// NeoPixel WS2812Bの指定

#define NUM_LEDS  2 // NeoPixelの数 2

#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();               // NeoPixcelを全て消灯

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

  // 入力設定

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

}

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

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

void loop() {

  // ボタン回数カウント

  if (digitalRead(3) == 0 && state == false) { // D3がONでstateがfalseなら

    state = true; // stateをtrueに

    cnt++;        // ボタン回数カウント+1

  }

  if (digitalRead(3) == 1) {                   // D3がOFFなら

    state = false;  // stateをfalseに

  }

  // ボタン回数カウントリセット

  if (cnt == 4) { // ボタン回数カウントが4なら

    cnt = 0;      // 0リセット

  }

 

  // LED点灯処理 2個付くように変更

  switch (cnt) {  // cntの値によって分岐処理

  case 0: // cntが0なら白点灯

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

    strip.setPixelColor(1, strip.Color(10, 10, 10)); // LED点灯処理

    break;

  case 1: // cntが1なら赤点灯

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

    strip.setPixelColor(1, strip.Color(30, 0, 0));  // LED点灯処理

    break;

  case 2: // cntが2なら緑点灯

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

    strip.setPixelColor(1, strip.Color(0, 30, 0));  // LED点灯処理

    break;

  case 3: // cntが3なら青点灯

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

    strip.setPixelColor(1, strip.Color(0, 0, 30));  // LED点灯処理

    break;

  }

 

  strip.show(); // NeoPixel 発光色更新

  delay(100);   // 遅延時間

}

 

配線は、ArduinoのD6端子にNeoPixelの信号線を接続し、ボタンのON/OFFはD3端子に接続しています。

一応ブレッドボードの写真も載せておきます。

 

 

 

この仕組みを使えば、ペンライトではないもにも色々と活用できますね。

ちょっと作りたいものがあるので、うまく出来たら公開しようと思います。