LEDでスノードームをキラキラに照射!
以前ESP8266ボードで試したLEDのBlynkコントロールを応用して長女ちゃんが作ったスノードームを照らしてみました。スマホでLEDの色をコントロールします!
目次
スノードーム
アウトレットモールにお買い物にいったときに、キャンドルとスノードームをハンドメイドする特設コーナーがありまして。「つくりたい!」と長女ちゃん
ケースと中に入れる飾りやお魚を選んで接着剤で付けながらがんばって作りました!なんだかんだで総額¥2,600。。。。
透明スノードームケースを下から照射するLED台も売っていた(¥700)のですが、「作ったる!」とお父ちゃん
構成
部品
- ESP8266開発ボード
- NeoPixel Ring – 12連フルカラーシリアルLED
結局¥700オーバー。。。まぁもともと家にあった部品だし。。。遠隔操作できるしね。。。
Blynk設定
新規プロジェクトを作成します。HARDWRE MODELはESP8266を選択。CONNECTION TYPEはWiFiを選択。AUTH TOKENはArduinoコード生成時に使用しますので控えときます(もしくはメール送信します)。
以下のウィジェットを配置
- あかるさスライダ:LED輝度調整
- いろ(zeRGBa):通常モード時の色設定
- にじボタン:虹モード ON/OFF
- はやさスライダ:虹サイクルスピード調整
zeRGBaウィジットでLEDの色を設定できるようにします。
OUTPUTはMERGEを選択。それぞれ最小値0、最大値255とします。
見切れてますがSEND ON RELEASEはOFFにしています。
ここではヴァーチャルピンV0に出力するようにしました。
SliderウィジットでLEDの輝度を設定できるようにします。
最小値は0、最大値255に設定。SEND ON RELEASEはOFF。
ここではヴァーチャルピンV1に出力するようにしました。
ButtonウィジットでLED点滅の色の点滅モード切り替え行います。
OFF時は通常モードでLEDは単色で光ります。ON時は虹モードとなりLEDは虹色に光ります。
MODEはSWITCH。
ここではヴァーチャルピンV2に出力するようにしました。
Sliderウィジットで虹モードの点滅スピードを設定できるようにします。
最小値は0、最大値20に設定。SEND ON RELEASEはOFF。
ここではヴァーチャルピンV3に出力するようにしました。
Arduino IDEコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
#define BLYNK_PRINT Serial #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <Adafruit_NeoPixel.h> //Blynkアプリで取得したAuth Tokenを入力 char auth[] = "BlynkアプリのYourAuthTokenを入力"; //WiFiのSSID、パスワード指定 char ssid[] = "WiFiのSSID"; char pass[] = "パスワード"; #define PIN D4 #define NUMPIXELS 12 Adafruit_NeoPixel pixels(NUMPIXELS, PIN); int ledR = 0; int ledG = 0; int ledB = 0; int bright; int Mode = 0, j = 0, Speed = 20; void setup() { Serial.begin(115200); Blynk.begin(auth, ssid, pass); pixels.begin(); pixels.setBrightness(45); pixels.show(); } //通常モード時の色設定 //ヴァーチャルピンV0に送信 BLYNK_WRITE(V0) { ledR = param[0].asInt(); ledG = param[1].asInt(); ledB = param[2].asInt(); } //スライダでLED輝度調整 //ヴァーチャルピンV1に送信 BLYNK_WRITE(V1) { bright = param.asInt(); } //虹モード ON/OFF //ヴァーチャルピンV2に送信 BLYNK_WRITE(V2) { Mode = param.asInt(); } //虹モード サイクルスピード //ヴァーチャルピンV3に送信 BLYNK_WRITE(V3) { Speed = param.asInt(); } // Input a value 0 to 255 to get a color value. // The colours are a transition r - g - b - back to r. uint32_t Wheel(byte WheelPos) { WheelPos = 255 - WheelPos; if(WheelPos < 85) { return pixels.Color(255 - WheelPos * 3, 0, WheelPos * 3); } if(WheelPos < 170) { WheelPos -= 85; return pixels.Color(0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; return pixels.Color(WheelPos * 3, 255 - WheelPos * 3, 0); } //虹モード色設定 void rainbowCycle(uint8_t wait, uint8_t j) { uint16_t i; for(i=0; i< pixels.numPixels(); i++) { pixels.setPixelColor(i, Wheel(((i * 256 / pixels.numPixels()) + j) & 255)); } pixels.show(); delay(wait); } void loop() { Blynk.run(); Serial.print( "bright: "); Serial.println(bright); pixels.setBrightness(bright); if(Mode == 0){ //通常モード for(int i=0;i<NUMPIXELS;i++){ pixels.setPixelColor(i, pixels.Color(ledR, ledG, ledB)); } pixels.show(); }else{ //虹モード j++; if(j >256){ j = 0; } rainbowCycle(Speed, j); } } |
動作
きれいに光ったね\(^o^)/!
このHPを参考に同じモノを作成することができました。ありがとうございます。1つ質問があります。
「NeoPixel Ring – 12連フルカラーシリアルLED」を複数接続しても、同じ効果を生むことは可能でしょうか?それとも個数制限はあるのでしょうか?教えていただけると幸いです。
並列に複数個つなげても同じように点灯します。
但し電源の電流も増えますので電源の能力と
LEDの輝度の調整は必要になると思われます。
早速のご回答ありがとうございます。
追加の質問です。
12連LEDの代わりに16連LEDを使用した場合
次のコードの「#define NUMPIXELS 12」の12を16に変更するのでしょうか?
素人の質問で恐縮です。
追加の質問です。
12連フルカラーシリアルLEDを16連にした場合の件です。
次のコード「#define NUMPIXELS 12」を16に変更すればよろしいのでしょうか?
はい その通りです。