PythonでTENORI-ONを動かすblog(仮)

PythonでMIDIを作ってYAMAHAのTENORI-ONをごにょごにょするよ。

M5StackでLED万華鏡を作ってみた

なんとなく思いついて、部品を取り寄せた勢いだけで作ってみました。

 

材料

  •  どこのご家庭にもあるM5Stack(AtomやStickCでもOK)
  • ミラーシート
  • マスキングテープ
  • M5Stack用NeoPixel互換LED搭載 六角形ユニット
  • M5Stack用Groveケーブル
  • (あると尚良し)拡散版

 

www.switch-science.com

www.amazon.co.jp

作り方

ミラーシートを1.8mm×10.5mmカットする。6本用意する。

f:id:bastardeyes:20200802174537j:plain

 

ミラーシートの間隔を約1mm開けて、マスキングテープで止める。

1箇所だけ写真のように深さ3mm程度の切れ目を入れる。

f:id:bastardeyes:20200802174554j:plain

 

上から見るとこんな状態になります。

f:id:bastardeyes:20200802174607j:plain

 

M5StackにLED37こをランダム点灯するコードを書き込みます(後述)

f:id:bastardeyes:20200802174623j:plain

 

拡散板がないので、折りたたんだティッシュペーパーをかぶせてみました。

だいぶ柔らかくなります。

f:id:bastardeyes:20200802183835j:plain



 

Arduinoコード

37個すべてランダム色にしていますが、色を白ベースにして赤系・青系などに絞ったほうが綺麗だと思います。

せっかくM5Stackを使っているのだから画面にも何か出したかったのですが、空いてるのが画面破損しているものしかなかった。。

 

#include <M5Stack.h>
#include "FastLED.h"

#define DATA_PIN 21
#define LED_TYPE WS2812B 
#define COLOR_ORDER GRB
#define NUM_LEDS 37
#define BRIGHTNESS 5

CRGB leds[NUM_LEDS];

uint8_t direction;//0: clockwise 1: anti-clockwise

void setup() {
  M5.begin(true, false, true);
  Wire.begin();
  Serial.begin(115200);
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip); // initializes LED strip
  FastLED.setBrightness(BRIGHTNESS);
  showLedCleanUp(1);

  M5.Lcd.clear();
  M5.Lcd.setCursor(0, 0);
  showLedRandom(500);
}


void showLedCleanUp(long delayTime) {
  for (int i = 0; i < NUM_LEDS; ++i) {
    leds[i] = CRGB::Black;
  }
  FastLED.show();
  delay(delayTime);
}

void showLedRandom(long delayTime) {
  while(1) {
    for (int i = 0; i < NUM_LEDS; ++i) {
      leds[i] = CHSV(random8(), 255, 255); 
    }
    FastLED.show();
    delay(delayTime);
  }
}

void loop() {
 
}

 

未解決事件簿

LEDのうち1つだけ(10番)信号の制御がうまくいかず、点灯しないor意図した色にならないという問題がありました。

詳しい方々から教えていただいたのですが、ESP32のあるある問題らしい。。

 

もしかしたら検索「Fast LED 一部 光らない」などでこのブログに辿り着くことがあれば、以下参考になさってください。

 

  • Adafruits_NeopixelはESP32だと誤点灯が起きる(Arduinoだと問題なし)
  • RTOS等入ってないので信号生成系ライブラリはESP32だと大体死ぬ
  • AVRだと割り込み禁止にしておけば、正確にCPUとGPIOで信号生成処理出来るが、ESP32だとRTOSとかキャッシュとかいろんな要因で難しい
  • パルス幅とかが正確じゃ無いと困る系は、ESP32対応と謳っているものを使うのが無難

 

f:id:bastardeyes:20200802174511j:plain