ライブでよく使う、色を変えられるペンライト。
ボタンを押したら色が変わるって便利ですよね。
曲によって色を変えたりするのは楽しい♪
ちなみに、中身がどうなっているのか開けてみると…
色がキラキラといい感じに反射させる工夫がされています。
さすがにここまでは再現できないけど、ボタンを押したら色が変わるという仕組みを再現してみました。
さっそく動いている動画をご覧ください!
使用した部品は、
- 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端子に接続しています。
一応ブレッドボードの写真も載せておきます。
この仕組みを使えば、ペンライトではないもにも色々と活用できますね。
ちょっと作りたいものがあるので、うまく出来たら公開しようと思います。