見出し画像

『天国、それともラスベガス』の光るVUメーター:PCDJ用の演出デバイスを自作する

ガジェットは作れる。『天国、それともラスベガス』と名付けた自作デスクに世界のガジェットを集めてチューンしている僕ですが、ガジェットは買うだけじゃなく、作るのも楽しいんです。

これまでに、イタリア生まれのプログラマブルな小型マイコン・ArduinoのMicroを使って、PCDJ(ノートPCを使ったDJ)のためのピッチフェーダーコントローラーや、映像編集ソフトDavinci Resolve用の左手キーボードなど自作してきました。

▲Davinci Resolve用の小型キーボード。これで結構超便利です。

近年はArduinoみたいな小型マイコンや3Dプリンターが普及したことで、僕みたいなアマチュアでもかなり制度の高いガジェットが自作できてしまいます。自作だからって、仕上がりにもこだわりたいじゃないですか。ていうか良い仕上がりのものしか欲しくないじゃないですか、ガジェット好きとしては!

…ということで、今回はPCDJ時のノートPC背面にマウントして・音楽にあわせて光で演出する、名付けてLightning VU Meterを自作しました。いきなり仕上がりからご紹介しましょう。こちらの動画です!

なかなか格好よく作れた気がします!ので、さっそく作り方について語っていきたいと思います。

1. ChatGPTに聞いてプログラム

ノートPC背面にマウントする光るVUメーター。これは、ゲーミングPCを光らせるのによく使われる「Addressable RGB」のLEDテープを小型マイコンArduinoで制御すれば作れるだろうな…というところまでは想像も買い物もできましたが、さて、どういうプログラムを書いたらいいんだろう?

そうだ、ChatGPTに聞こう。

Arduinoや3Dプリンターと同様、近年めちゃくちゃはやっている対話型AI・ChatGPT。これに(おそるおそる)『ArduinoでAddressable RGB LEDを流れるように光らせるプログラムを書いてください』と打ち込みました。

すると、これですよ。ばっちりプログラム書いてきやがったぞあいつ。

ここまで書いてくれるとだいぶ助かるというか、なるほど「Adafruit.NeoPixel」ってライブラリを導入すればいいのねとか、strip.sho()ってコマンドで光るのね、といったことが分かります。助かる。

さっそく、買ってきたAddressable RGBのテープとArduino Microを試作用ブレッドボードに差して、光らせてみました。光あれ。

おお光る、光るぞ。流れるぞ。本当に動くコード書いてきたよChatGPT…。

あとはこれをVUメーターのように音量にあわせて光らせるだけです。

以前作ったPCDJ用MIDIコントローラーでもやったように、PCDJソフト「Traktor」からボリューム情報をMIDIのコントロール信号(0~127)として送信させるよう設定して、その信号をUSB経由でArduinoで受信し、RGB LEDテープ上の48個のLEDを光らせます。

七色に光らせるところは、毎フレームごとにRを3ずつ、Gを5ずつ、Bを7ずつ増加/減少させることで実現できそう。

▲手書きで考えてるところ

そしてできたプログラムがこちら。ChatGPTのおかげで、最短ショートカットでここまでたどり着きました。2020年代楽しいわー。

#include <Adafruit_NeoPixel.h>
#include <MIDIUSB.h>


#define LED_PIN 6   // LEDの接続先のピン番号
#define LED_COUNT 48 // LEDの数

int VOLUME = 0;
int POINTS = 0;
int POINTE = 0;
int LUX = 0;
int LMAX = 255;
int RLUX = 255;
int RA = -1;
int GLUX = 0;
int GA = 1;
int BLUX = 128;
int BA = 1;


Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  strip.begin();
  strip.show(); // LEDを消灯する
  Serial.begin(1200);
}

void controlChange(byte channel, byte control, byte value) {
  midiEventPacket_t event = {0x06, 0x7B | channel, control, value};
  MidiUSB.sendMIDI(event);
}

void loop() {

  midiEventPacket_t rx;  
  do {
    rx = MidiUSB.read(); // VolumeにVUメーターの値をセットする
    if (rx.header != 0) {

      VOLUME = (rx.byte3 - 82); 

      if (VOLUME < 1){
        VOLUME = 0;
      }

      LUX = VOLUME * 5;
      
      if (LUX > LMAX){
          LUX = LMAX;
      }
    }
  } while (rx.header != 0);

  POINTS = (LED_COUNT - VOLUME) /2;
  POINTE = POINTS + VOLUME +1;

  if (POINTE > LED_COUNT){
    POINTE = LED_COUNT;
  }  

    // 左のLEDを暗くする
    for(int i = 0; i < POINTS; i++) {
     strip.setPixelColor(i, 0, 0, 0); // R:0, G:0, B:0
    }

    // 中央のLEDを光らせる

      RLUX = RLUX + RA * 3;
        if (RLUX>255){
          RLUX = 255 - (RLUX - 255);
          RA = -1;
        }
        if (RLUX<1){
          RLUX = -1 * RLUX +1;
          RA = +1;
        }
      
      GLUX = GLUX + GA * 5;
        if (GLUX>255){
          GLUX = 255 - (GLUX - 255);
          GA = -1;
        }
        if (GLUX<1){
          GLUX = -1 * GLUX +1;
          GA = +1;
        }

      BLUX = BLUX + BA * 7;
        if (BLUX>255){
          BLUX = 255 - (BLUX - 255);
          BA = -1;
        }
        if (BLUX<0){
          BLUX = -1 * BLUX;
          BA = +1;
        }

    if (LUX > 0) {
     for(int i = POINTS; i < POINTE; i++) {
        strip.setPixelColor(i, RLUX, GLUX, BLUX); 
        strip.show(); // LEDを点灯する
      }
    }      

    // 右のLEDを暗くする

    for(int i = POINTE; i < LED_COUNT; i++) {
      strip.setPixelColor(i, 0, 0, 0); // R:0, G:0, B:0
    }

    delay(5);
}

このプログラムを動かすために、PCDJソフト(Traktor)側の設定もします。設定のController Managerで、マスターアウト(L+R)の量を、MIDIのControl Change信号として出力するように設定します。僕はCh.6のCC(コントロールチェンジ)124番を使いました。

Traktor側の設定画面

これで論理の実装は完了です。次は物理にいきます。

2. 3Dプリンタで物理を実装する

Addressable RGB LEDテープは、そのままむき出しだと光が強すぎるし見た目も悪いので、透明なカバーをつけることにしました。

ここもいつものようにFusion 360でモデリングして、DMM.Makeの3Dプリントサービスで出力。素材は透明レジンです。DMM.makeの中では安いほうの素材なんだけど、ゆがまないように肉厚にした上に・横23cmと結構大型になったので9000円くらいかかっちゃった。

そのほか、ノートPCのモニター天板を左右で挟み込んで固定するパーツなどを自作。Arduinoの基板は(コスト削減もかねて)黒いフィルムケースに収納し、物理を完成させます。じゃーん。

ノートPCを挟み込むパーツ(素材はMJFです)には、僕が棟梁をやってるハウスミュージックラウンジ『秋葉原住宅』のロゴを彫り込みました。1cm角のサイズにこの精度感、3Dプリント最高です。

フィルムケースに入るよう、最小限のサイズで構成したArduinoの様子。

あとはこれをThinkPad背面にマウントし、USBでつないだArduinoにプログラムを流し込んだら…完成です!

うれしいので、もう1回動画を貼ります。
なかなか良い感じではないでしょうか!?!?

3. DJしてるノートPCに生命感を

アナログレコードでDJしてたときと今のPCDJで何か違うって、DJしてる人間の姿の躍動感なんですよね。やっぱりぐるぐる回るアナログレコードを物理で触ってDJしてるほうが、「DJしてる!」って感じがしてセクシーでした。PCだとそこがどうしても、寂しい。

DJ各位がノートPCの天板にステッカーを貼ったりしてるのも、たぶんダイナミズムを出したいからだろうなと想像するわけですが、一方僕はそこをガジェットの力で補いたかったのです。今後、DJプレイするときは現場に持ち込んでThinkPadを光らせていきますよ! 現場で会えたら乾杯しましょう。

さて、そんな動画のBGMにしていたのは、来る5月25日にフランス・リールのOHMELYA MUSICからリリースされる、僕の自作曲を収めた新譜「Highway EP」から、チェコ・ブルノを拠点とする大好きなプロデューサー・Zetbeeのリミックスでした。

こちらもぜひ、応援よろしくお願いします!

良かったら、100円サポートおねがいします!