arrow-right hamburger logo-mark social-facebook social-github social-twitter
2017.07.21

ライブで大活躍!音に反応して光るサバゲーマスク!

マオ

ギャル電

どうも!dotstudio広報兼テクニカルライターのマオです。ギャルによるギャルのためのテクノロジーを提案していく電子工作ユニット、ギャル電で活動をしてます!

この記事では、LEDを音センサーに反応させる電子工作を紹介していきたいと思いまぁす!

今回は音センサーを使うとのことで、ライブやフェスなどにつけていくと鬼盛れの”音に反応するパンクロックなマスク”を作りました!

では早速作り方を紹介していきたいと思います。

準備するもの

電子部品類

工具類

側の部分

はんだづけする前に

はんだづけ初心者または慣れていない方は、一回はんだづけのやり方をこちらのサイトで見てからするのをオススメします。 またはんだづけする時や電線を切断する時、飛び散ることがあります。そのため、安全メガネなどを装着して目を守るようにしてください。

はんだづけする際は配線の準備が必要です。今回は被覆が付いているフックアップワイヤーを配線として使いました。 フックアップワイヤーは被覆をワイヤーストリッパーで約2~4mm程度剥きましょう。ワイヤーストリッパーの使い方はこちらを参考にしてください。また、フックアップワイヤーの長さは必要に応じて調整しながら切断してください。

さっそくはんだづけ!

今回は以下のように配線しました。

ピンの配置はこちらです。

NeoPixelをはんだづけ

合計44個のNeoPixel(LED)をはんだづけしていきます。

ここで注意する点としては、NeoPixelの向きです。下のNeoPixelの画像を見てみると矢印が書いてあります。この矢印は電流が流れる方向です。この矢印を逆にしてはんだづけしてしまうとNeoPixelがつかなくなるのでここの点は要注意してはんだづけしましょう。

ここで以上のようにはんだづけしたら、100均一で買った半面シールのフェルトのシール側にNeoPixelを貼ります。

貼り終わったらFlora側と繋ぐ配線をフェルトに通します。配線を通す穴は適当に開けてください。

次に、NeoPixelの上から普通のフェルトを貼り付けてマスクの形に合わせて余計な部分を切り捨てます。

Floraとマイクアンプ、NeoPixelをはんだづけ

Flora(マイコン)とマイクアンプ(音センサー)のはんだづけをします。

最後に先ほどフェルトに通したNeoPixelの配線をFloraにはんだづけしてください。

これで光らせる部分完成です!

プログラミングするための環境設定

次にプログラミングするために環境設定を行います。

今回使うFloraはArduino互換ボードなのでプログラミングする際にArduinoIDEというソフトウェアを使います。 このArduinoIDEはフリーソフトです。公式サイトから各自のパソコンにダウンロードしてください。

また、Windowsユーザーの方は Floraの開発元のAdafruit社による「Windows Driver」をインストールする必要があります。こちらのサイトを参照して進めてください。(Mac・Linuxのユーザーの方はインストールする必要はありません)


マイコンボードのインストレーション

ArduinoIDEを立ち上げてまだすぐプログラミングはできません。 まず、AduinoIDEにFloraというマイコンボードを知ってもらうためボードのインストールをします。

Arduino > Preferences をクリックしてください。

https://www.adafruit.com/package_adafruit_index.json

上記のAdafruitのURLをコピーして、追加のボードマネージャーのURLに貼り、OKをクリックしてください。

コピー&ペーストが完了したら、ツール > マイコンボード > ボードマネージャーをクリックします。

すると、このような画面が表示されます。検索欄に「Adafruit AVR Boards」を入力し、インストールしましょう。ここまでで、ボードのインストレーションは終わりです。


ライブラリのインストール

次に、NeoPixel を光らせるために必要なライブラリをインストールします。スケッチ > ライブラリをインクルード > ライブラリを管理 をクリックしてください。

画面が表示されるので、検索欄に「Neopixel」と入力しましょう。下記のようになります。「Adafruit Neopixel by Adafruit」を選択してインストールしてください。

プログラミングを書き込む!

以下のプログラムをArduinoIDEにコピー&ペーストしてください。

#include <Adafruit_NeoPixel.h>

#define N_PIXELS  44  // LEDの個数
#define MIC_PIN    9  // Floraに接続しているマイクロフォンのGPIO
#define LED_PIN    6  // NeoPixel LEDがFloraに接続しているGPIO
#define DC_OFFSET  0  // マイクロフォンのDCオフセット信号 - わからない場合0に設定
#define NOISE     100  // マイクロフォン信号のNoise/hum/interference
#define SAMPLES   60  // ダイナミックレベルの調整のためのバッファーの長さ
#define TOP       (N_PIXELS +1) // ドットをスケールから少し外れるようにする

byte
  peak      = 0,      
  dotCount  = 0,      
  volCount  = 0;     

int
  vol[SAMPLES],       
  lvl       = 10,    
  minLvlAvg = 0,      
  maxLvlAvg = 512;

Adafruit_NeoPixel  strip = Adafruit_NeoPixel(N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {

  memset(vol,0,sizeof(int)*SAMPLES);//Thanks Neil!
  strip.begin();
}
void loop() {
  uint8_t  i;
  uint16_t minLvl, maxLvl;
  int      n, height;
  n   = analogRead(MIC_PIN);                 
  n   = abs(n - 512 - DC_OFFSET);            
  n   = (n <= NOISE) ? 0 : (n - NOISE);      
  lvl = ((lvl * 7) + n) >> 3;   


  height = TOP * (lvl - minLvlAvg) / (long)(maxLvlAvg - minLvlAvg);

  if(height < 0L)       height = 0;      
  else if(height > TOP) height = TOP;
  if(height > peak)     peak   = height;


  uint8_t bright = 255;   
#ifdef POT_PIN            
   bright = analogRead(POT_PIN);  

#endif
  strip.setBrightness(bright);   

  for(i=0; i<N_PIXELS; i++) {  
    if(i >= height)               
       strip.setPixelColor(i,   0,   0, 0);
    else
       strip.setPixelColor(i,Wheel(map(i,0,strip.numPixels()-1,30,150)));
    }

   strip.show();

  vol[volCount] = n;                      
  if(++volCount >= SAMPLES) volCount = 0;


  minLvl = maxLvl = vol[0];
  for(i=1; i<SAMPLES; i++) {
    if(vol[i] < minLvl)      minLvl = vol[i];
    else if(vol[i] > maxLvl) maxLvl = vol[i];
  }

  if((maxLvl - minLvl) < TOP) maxLvl = minLvl + TOP;
  minLvlAvg = (minLvlAvg * 63 + minLvl) >> 6;
  maxLvlAvg = (maxLvlAvg * 63 + maxLvl) >> 6;
}


uint32_t Wheel(byte WheelPos) {
  if(WheelPos < 85) {
   return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
  } else if(WheelPos < 170) {
   WheelPos -= 85;
   return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
  } else {
   WheelPos -= 170;
   return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
  }
}

ここで、ArduinoIDEのツールに行きボードを”Adafuit Flora”に選択してください。 次にシリアルポートを(Adafruit Flora)に選択してください。

次に、コンパイル(検証)ボタンをクリックし、プログラムに問題がないかチェックします。OKならば、書き込みのボタンをクリックするとプログラムがFLORAマイコンに書き込まれます。赤いランプの点滅が終わると書き込みが終了した状態なので、そうなったらケーブルを外しても大丈夫です。

仕上げ

NeoPixelの裏側にある、Floraとマイクアンプ側の面をフェルトを適当な形に切って、覆います。 ここで覆ったフェルトとFlora側のフェルトが付け剥がしできるようにマジックテープなどで固定します。

最後にFlora側のフェルトが内向き(口に合わせる方)になるようサバゲーマスクに貼り合わせて、モバイルバッテリーをさしたら完成です〜!

音があるとNeoPixelが反応して光ります!

マスクつけてライブに遊びに行ったよ!

さっそくマスクをつけてライブに行ってきた!みんなにニンジャスレイヤーみたいだと褒められてまじなんかよくわからないけど、くノ一になった気分で嬉しかったっす。

今回のライブでは以前ギャル電きょうこが記事で紹介した光る大五郎とフル装備で光りまくって振る舞い大五郎をしてきた。ビカビカする中お酒をみんなに振る舞う感じ、まじサグみしかなくて超エモってなった。

こんな感じで、とりま光らせてパーディーにいくとまじアゲぽよになって超楽しくなるから、みんなもサグい電子工作してパーティーを盛り上げよう!卍