工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

必要な部品と材料

Arduino UNO ×1
Adafruit NeoPixel Shield for Arduino(40個のRGB NeoPixel搭載) ×1
SparkFun Spectrum Shield(MSGEQ7×2搭載、ステレオ7バンドスペクトルアナライザー) ×1
ProtoStax Enclosure for Arduino(スタッカブル・モジュラー型エンクロージャー) ×1
SPST OFF-(ON) 青色プッシュボタンスイッチ ×1
3.5mm アイソレート型ステレオジャック パネルマウント ×2
90° アングル 3.5mm オーディオケーブル ×2
3.5mm ステレオ オス-オス パッチコード 6フィート ×1

必要な工具と機械

プロジェクト概要

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

この記事では、Arduino、RGB LEDマトリックスシールド、オーディオスペクトラムアナライザーシールドを使ってRGB LEDマトリックス・オーディオビジュアライザーを構築し、エンクロージャーに収めて完成品としてオーディオシステムの横に飾れるようにする手順を解説します。

オーディオスペクトラム解析

SparkFun Spectrum Shieldを使用。2つのMSGEQ7グラフィックイコライザーフィルターでステレオ音声入力を7バンド(チャンネルごと)に分割し、ArduinoのADCで各バンドの振幅を読み取ります。Arduinoサンプルスケッチが付属しています。

RGB LEDマトリックス

Adafruit NeoPixel Shield for Arduinoを使用。40個のRGB NeoPixel(WS2812)が搭載され、赤・緑・青のLEDとドライバーチップが一体化した表面実装パッケージで、単一ワイヤーで制御可能。シールド上ではチェーン接続されており、Adafruit_NeoMatrixライブラリで簡単に制御できます。

エンクロージャー

筆者が開発したスタッカブル・モジュラー型エンクロージャーシステム「ProtoStax」を使用。プロトタイピングの各段階に対応し、最初はオープンアクセスで保護し、後から側壁と天板を追加可能。横方向にも縦方向にもスタックでき、プロトタイピングの拡張に合わせて拡張できます。ここではArduino Uno/LeonardoおよびMega/Dueフットプリント対応のクリアアクリル製ProtoStaxを使用。2つのシールドを収納可能(若干の加工必要)。クリアで頑丈、ゴム足付きでテーブルを保護し、オーディオシステムの横に飾って光のショーを楽しめます。

ステップ1:Arduinoをエンクロージャーベースプレートに取り付け

Arduino(Uno)をベースプレートに固定。これにより保護されつつフルオープンアクセスが可能。準備ができたら側壁と天板をネジで固定して密閉できます。以下のスライドショーで手順を確認(各画像のキャプションに番号と説明)。

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

全手順をアニメーションGIFで確認:

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

ステップ2:SparkFun Spectrum ShieldをArduino用に準備

Spectrum Shieldにはヘッダーが付属していませんが、NeoPixel Shieldにはスタッキングヘッダーとプレーンヘッダーの両方が付属。NeoPixel Shieldを最上段に配置したいのでプレーンヘッダーを使用し、スタッキングヘッダーをSpectrum Shield用に流用します。

しかしスタッキングヘッダー装着時、Arduino UnoのUSBと電源ポートが干渉してカチッとハマりません。

以下の2つの修正で解決:

これでしっかり装着できます。

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

ステップ3:Adafruit NeoPixel ShieldをSpectrum Shieldのスタッキングヘッダーに装着

NeoPixel ShieldをSpectrum Shieldの上に重ねます。付属のプレーンヘッダーをはんだ付けし、端子コネクタもはんだ付け(今回はArduinoから給電するため未使用。全LEDが同時に点灯しないためArduinoの供給電力で賄える)。

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

ステップ4:デモコードの解説

デモコードは大きく2部構成:

デモコード全文:GitHub

スペクトラム解析

Spectrum Shield Hookup Guideも参照。STROBEピンとRESETピンにデジタルシーケンスを書き込んでMSGEQ7チップを初期化。その後、7つの周波数バンドそれぞれの振幅を読み取ります。各バンド読み取り後にSTROBEピンをパルス駆動して次のバンドへ。値はFrequencies_One[7]とFrequencies_Two[7]に格納(ステレオ2ch分)。Arduinoの10bit ADCで読み取るため0-1023の値になり、各周波数帯の振幅を表します。

//Declare Spectrum Shield pin connections #define STROBE 4 #define RESET 5 #define DC_One A0 #define DC_Two A1 //Define spectrum variables int freq_amp; int Frequencies_One[7]; int Frequencies_Two[7]; int i; void setup() { ... //Initialize Spectrum Analyzers digitalWrite(STROBE, LOW); delay(1); digitalWrite(RESET, HIGH); delay(1); digitalWrite(STROBE, HIGH); delay(1); digitalWrite(STROBE, LOW); delay(1); digitalWrite(RESET, LOW); ... } void loop() { ... Read_Frequencies(); ... } /*******************Pull frquencies from Spectrum Shield********************/ void Read_Frequencies(){ ... //Read frequencies for each band for (freq_amp = 0; freq_amp<7; freq_amp++) { Frequencies_One[freq_amp] = (analogRead(DC_One) + analogRead(DC_One) ) >> 1 ; Frequencies_Two[freq_amp] = (analogRead(DC_Two) + analogRead(DC_Two) ) >> 1; ... digitalWrite(STROBE, HIGH); digitalWrite(STROBE, LOW); } } 

7つの周波数バンド:

これらを3レンジに分類:

※各バンドの最大値も別変数に記録。入力信号が弱い場合に自動スケーリングしてマトリックス表示を最適化するのに利用可能。

RGBマトリックス

Adafruit NeoPixel Überguideも参照。ここではNeoPixel Shieldの向きと座標系の番号付けを明確化します。

スライドショーの4枚の図で各向きの設定を解説。

今回は7バンドの周波数を8の次元(1つ余る)に割り当て、振幅を5の次元で表現。原点を左下(最低周波数の最小振幅)に置き、上方向に伸ばしたい。しかし座標系の[0,0]は左上固定なので、頭を左に傾けて見たイメージで初期化パラメータを決定(WIDTH=5, HEIGHT=8, TOP-RIGHT, COLUMNS PROGRESSIVE)。

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

NeoMatrix初期化とグラフ描画のコード抜粋:

#define NEO_MATRIX_WIDTH 5 #define NEO_MATRIX_HEIGHT 8 #define NEOPIXEL_PIN 6 // Shield maps it to pin 6 Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(NEO_MATRIX_WIDTH, NEO_MATRIX_HEIGHT, NEOPIXEL_PIN, NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, NEO_GRB + NEO_KHZ800); .... void setup() { ... matrix.begin(); matrix.setTextWrap(false); matrix.setBrightness(40); matrix.fillScreen(0); matrix.show(); ... } void loop() { static int scheme = 0; while (Serial.available() > 0) { scheme = Serial.parseInt(); } ... Graph_Frequencies(ALL, scheme); ... delay(50); } void Graph_Frequencies(CHANNEL c, SCHEME s){ ... for( row= from; row<to; row++) { int freq = (Frequencies_Two[row] > Frequencies_One[row])?Frequencies_Two[row]:Frequencies_One[row]; int numCol = (freq/FREQ_DIV_FACTOR); if (numCol > 5) numCol = 5; for (int col = 0 ; col < numCol ; col++) { ... // pick color scheme to display matrix.setPassThruColor(rgbcolor); matrix.drawPixel(col, row, (uint16_t)0); // color does not matter here matrix.setPassThruColor(); //matrix.show(); } matrix.show(); } } 

HSVカラーホイールを使用して滑らかな色遷移を実現。matrix.ColorHSV()は32bitカラーを返すがdrawPixel()は16bitカラーを期待するため、matrix.setPassThruColor()で32bitカラーを設定してからdrawPixel()を呼び、その後リセットするワークアラウンドを使用。

配色スキーム選択

3種類の配色スキームを用意:

  1. 緑→赤/ピンク系(振幅小→大)
  2. ピンク/ブルーシフト系
  3. 全ピクセル同色でカラーホイールをサイクル

周波数レンジごと(BASS/MID/TREBLE)に色相を変える設計も盛り込み済み。シリアル入力でスキーム切替可能。

ステップ5:動作テスト

動作テスト動画はこちら(元記事参照)。

ステップ6:エンクロージャーを閉じる

トップブレース、側壁、オーディオケーブル、天板を取り付け。スライドショーで手順確認(キャプションに番号と説明)。

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

全手順アニメーションGIF:

Arduinoで作るRGBマトリックス・オーディオビジュアライザー:ステップバイステップガイド

ステップ7:作品を飾って、美しい音楽をさらに美しく!

自作オーディオビジュアライザーをオーディオシステムの横に置いて、クールな手作りライトショーで音楽を彩りましょう。

ステップ8:さらに発展させるアイデア

  1. パネルマウントステレオジャックを側壁に追加し、配線を内部に収めて外部からはジャックのみ露出させる
  2. さらに多彩なライトスキーム・パターンを追加
  3. シリアル入力で周波数レンジ(BASS/MID/TREBLE/ALL)の表示ON/OFFを切替可能にする
  4. モーメンタリープッシュボタンスイッチを側壁に追加して配色スキーム切替
  5. 第2のスイッチで表示周波数レンジ切替
  6. アクリル天板を軽くサンディングして拡散板化し、より柔らかな光効果を得る
  7. ステレオジャック・スイッチ・拡散板天板を追加したアップデート版の要望があれば対応予定(コメントやメッセージでリクエストを)

他にもアイデアがあればコメントで共有を!Happy making!

コード

ProtoStax Audio Visualizer Demo

このプロジェクトで使用したコードのGitHubリポジトリ:https://github.com/protostax/ProtoStax_Audio_Visualizer_Demo

製造プロセス

  1. K30 CO2センサで室内空気質をリアルタイム監視する
  2. 1SheeldとArduinoで盲ろう者のコミュニケーションを支援する
  3. スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
  4. Arduino NanoとMAX7219で作る24×16 LEDポングゲーム機
  5. Arduinoオーディオ周波数検出器 – 高感度サウンドモジュールで最大音量ピークの周波数を測定
  6. ArduinoでBluetooth経由でLEDを制御 – シンプルDIYガイド
  7. DFRobot静電容量式指紋センサーをArduino/ESP8266で使う – 登録・認証・削除の完全ガイド
  8. Arduino UNOとDFPlayer Miniで音声を再生する方法 - ステップバイステップガイド
  9. ビリーバスフィッシュを任意の音源で動かす:ステップバイステップガイド
  10. Arduino RGB LEDカラーミキサー:初心者向けDIYプロジェクト
  11. Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド