フルカラーシリアルLEDテープ制御基盤
1. プログラム
夕方以降の明るさで、尚且つ人の居るときだけ点灯するECO!なクリスマスツリー・イルミネーションです!
/* * クリスマスツリー・イルミネーション!制御プログラム * 部品:フルカラーシリアルLEDテープ、人感センサー、CDS * 2016年12月18日作成 * NOBのArduino日記! */ #include <Adafruit_NeoPixel.h> //ライブラリの読み込み #define MAX_VAL 255 // 最大輝度の設定をする(暗い←0 ~ 255→明い) #define DELAY_TIME 500 //待ち時間1の設定 #define DELAY_TIME2 20 //待ち時間2の設定 #define DELAY_TIME3 50 //待ち時間3の設定 //インスタンスの設定(実際の使用環境の設定の事) // NEO_RGB Pixels are wired for RGB bitstream // NEO_GRB Pixels are wired for GRB bitstream // LEDテープの制御ICがWS2812ならNEO_KHZ800 / WS2811ならNEO_KHZ400 // NEO_KHZ400 400 KHz bitstream (e.g. FLORA pixels) // NEO_KHZ800 800 KHz bitstream (e.g. High Density LED strip) //Adafruit_NeoPixel(LEDの使用個数、Arduinoのピン番号、色の並び+データの転送速度) Adafruit_NeoPixel strip = Adafruit_NeoPixel(3, 3, NEO_GRB + NEO_KHZ800); void setup() { strip.begin(); //インスタンスの使用を開始、この時全てのLEDの状態を「0」とする。 strip.show(); //Arduinoから全てのLEDへオフ信号「0」を転送し初期化する。 Serial.begin(9600); //CDS明るさ確認test用 } void loop() { //暗くてかつ近くに人の動きが有る時にLEDを点灯する! Serial.println(analogRead(2)); //CDS明るさ確認test用 if (digitalRead(A3) == LOW || analogRead(2) > 500) { colorWipe(strip.Color(0, 0, 0), DELAY_TIME); // Black } else { //LEDへ出力する各色の設定例 colorWipe(strip.Color(MAX_VAL, 0, 0), DELAY_TIME); // Red colorWipe(strip.Color(0, MAX_VAL, 0), DELAY_TIME); // Green colorWipe(strip.Color(MAX_VAL, MAX_VAL, 0), DELAY_TIME); // Yellow colorWipe(strip.Color(0, 0, MAX_VAL), DELAY_TIME); // Blue colorWipe(strip.Color(MAX_VAL, 0, MAX_VAL), DELAY_TIME); // Purple colorWipe(strip.Color(0, MAX_VAL, MAX_VAL), DELAY_TIME); // Cyan colorWipe(strip.Color(MAX_VAL, MAX_VAL, MAX_VAL), DELAY_TIME); // White //LEDを虹色に変化させる rainbow(DELAY_TIME2); rainbowCycle(DELAY_TIME2); // 劇場風の照明 theaterChase(strip.Color(MAX_VAL, MAX_VAL, MAX_VAL), DELAY_TIME3); // White theaterChase(strip.Color(MAX_VAL, 0, 0), DELAY_TIME3); // Red theaterChase(strip.Color(0, 0, MAX_VAL), DELAY_TIME3); // Blue theaterChaseRainbow(DELAY_TIME3); } } // ①全てのLEDを指定色で点灯させる関数 void colorWipe(uint32_t c, uint8_t wait) { for (uint16_t i = 0; i < strip.numPixels(); i++) { strip.setPixelColor(i, c); strip.show(); delay(wait); } } // ②LEDを連続的に虹色に変化させる関数 void rainbow(uint8_t wait) { uint16_t i, j; for (j = 0; j < 256; j++) { for (i = 0; i < strip.numPixels(); i++) { strip.setPixelColor(i, Wheel((i + j) & 255)); } strip.show(); delay(wait); } } // ③虹色を均等に分布させる関数 void rainbowCycle(uint8_t wait) { uint16_t i, j; for (j = 0; j < 256 * 5; j++) { // 5 cycles of all colors on wheel for (i = 0; i < strip.numPixels(); i++) { strip.setPixelColor(i, Wheel(((i * 256 / strip.numPixels()) + j) & 255)); } strip.show(); delay(wait); } } // ④劇場風のクロールライトにする関数 void theaterChase(uint32_t c, uint8_t wait) { for (int j = 0; j < 10; j++) { //do 10 cycles of chasing for (int q = 0; q < 3; q++) { for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) { strip.setPixelColor(i + q, c); //turn every third pixel on } strip.show(); delay(wait); for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) { strip.setPixelColor(i + q, 0); //turn every third pixel off } } } } // ⑤虹の様な劇場風クロールライトにする関数 void theaterChaseRainbow(uint8_t wait) { for (int j = 0; j < 256; j++) { // cycle all 256 colors in the wheel for (int q = 0; q < 3; q++) { for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) { strip.setPixelColor(i + q, Wheel( (i + j) % 255)); //turn every third pixel on } strip.show(); delay(wait); for (uint16_t i = 0; i < strip.numPixels(); i = i + 3) { strip.setPixelColor(i + q, 0); //turn every third pixel off } } } } // 色の値を取得するには、0〜255の値を入力します。 // 色の移り変わりはR(赤)→G(緑)→B(青)からR(赤)に戻ります。 uint32_t Wheel(byte WheelPos) { if (WheelPos < 85) { return strip.Color((WheelPos * 3) * MAX_VAL / 255, (255 - WheelPos * 3) * MAX_VAL / 255, 0); } else if (WheelPos < 170) { WheelPos -= 85; return strip.Color((255 - WheelPos * 3) * MAX_VAL / 255, 0, (WheelPos * 3) * MAX_VAL / 255); } else { WheelPos -= 170; return strip.Color(0, (WheelPos * 3) * MAX_VAL / 255, (255 - WheelPos * 3) * MAX_VAL / 255); } }
図1:プログラム例
Arduino ProMini→FTDI Basic→PC→ArduinoIDE→プログラムを書き込むだけで準備OK!
図1:作った制御基盤にとPCを接続してプログラムを書き込むと準備完了
2.2 点灯パターン
5つの点灯パターンを動画に撮ってみました。
動画1:人(私)を感知した状態で電気を消すとLEDがオシャレに点灯します!
3. まとめ
実験成功です!
なかなか良い感じに光ってます!
肝心の5V,20A電源まだ来ないのでもう少しプログラムを改良して遊んでみます
励みになりますのでよければクリック下さい(^o^)/