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

RGB32バンドオーディオスペクトルビジュアライザー

コンポーネントと消耗品

>
Arduino Nano R3
× 1
WS2812B 8x32 RGBLEDマトリックス
× 1
抵抗4.75kオーム
× 3
抵抗100kオーム
× 2
抵抗10kオーム
× 1
スルーホール抵抗、390オーム
× 1
コンデンサ100nF
× 2
コンデンサ1000µF
× 1
SparkFunプッシュボタンスイッチ12mm
× 1
4x6cmマルチホールプロトタイプボード
× 1

必要なツールとマシン

>
はんだごて(汎用)
3,5mmジャックスプリッターケーブル

このプロジェクトについて

プロジェクト

このプロジェクトは、ArduinoNanoと8x32WS2812B RGB LedMatrixを使用してRGB32バンドオーディオ(音楽)周波数スペクトルビジュアライザーを作成するためのものです。

これに影響を与えた元のプロジェクト

Shajeeb に感謝します MAX72xxLEDマトリックスに基づく元のプロジェクトの作成者。 LEDマトリックスのパイロット部分を変更して、RGBWS2812BLEDマトリックスに適合させただけです。

元のプロジェクトへのリンク:32バンドオーディオスペクトラムビジュアライザーアナライザー

WS2812BRGB主導のマトリックス

5050SMD高輝度LEDに基づくRGBLEDマトリックスを使用する場合、RGBマトリックスはLEDあたり10mA以上を吸収できるため、外部電源を使用する必要があります。したがって、最大輝度で点灯するすべてのLEDで2.5アンペア以上を吸収する可能性があります。

このため、USBケーブルが接続されていないときにスタンドアロンモードでArduinoに電力を供給できるようにし、ArduinoがRGBマトリックスの電源にならないようにするために、+ 5Vでダイオードを直列に挿入しました。ボードの内部回路に供給できなかった電流が過負荷になっています。

元のプロジェクトでは、入力ダイオードに加えて、LEDマトリックス入力を電圧ピークから保護するために、ArduinoピンD6とデータ入力の間に390オームの抵抗を直列に追加し、1000 µFの12Vコンデンサを追加して改善しました。 Arduinoの供給電圧の安定性。

ハードウェアアセンブリ

メインの写真にあるように、2つのRCAオーディオソケット(ボードに直接はんだ付け)を使用して4x6 cmのマルチホールボードで最初のプロトタイプを作成しました。これは、3.5mmのメスジャックソケットと交換することもできます。ハムを避けるために重要なことは、シールドケーブルを使用してソースとカードオーディオ入力を接続することです。もう1つのヒントは、ArduinoとLEDマトリックス間の接続をできるだけ短くすることです。

コード

結局、すべてのソフトウェアは、FFTライブラリとShajeebの決定的な実現を通じてサンプリング手順の作成者によって行われた素晴らしい作業に基づいています。

2つの関数を追加しました:

1つ目は GetLedFromMatrix(...) マトリックスを行と列にマッピングし、行と列の座標を介して256個のLEDのそれぞれに対応できるようにします。

2つ目は、私が任意に SetColumn(...)と呼んだものです。 -オーディオのデジタル化によって得られたピーク値( 0〜7の値)に基づいて、各列のLEDをオンにします。 )および2次元配列のプリセット色に基づいています。値を変更して、好みに応じて色を変更することを楽しむことができます。コードを単純化するために、Wheel()(AdafruitのNeopixelライブラリに添付されたデモから取得)と呼ばれるsobroutineを使用しました。この値は、0〜255の値から始まり、符号なし32ビットのlong値を返し、setPixelColor関数に直接渡されます。これでは、Arduinoのメモリ制限を念頭に置いて、自由にプレイできます。可能な場合は、32ビット変数を使用してRGBカラー値を格納することは避けてください。

オーディオ 均等化

さらに、PCマザーボードに統合されたサウンドカードからのオーディオでテストを実行したので、周波数応答を改善するために、32の値のバイト配列を追加しました。これは、実際には低音を減衰させるための等化曲線を構成します。高音を強調します。不要な場合は、EQ_ON変数を false に設定するだけです。 または、 eq [32] の32個の値を変更して減衰レベルを変更します アレイの場合、値が100の場合、振幅は変化せず、100未満の値は減衰し、100を超える値は周波数帯域を強調します。

主導 明るさ

マトリックスの明るさは、コードの32(BRIGHTNESS const)に事前設定されています。 WS2812Bマトリックス(紙)の最大輝度値は255ですが、すでに100を超える値であるため、残念ながらLEDライトは白から淡黄色に変わります。代わりに、中央の2本の赤と黒のワイヤーを介してマトリックスを供給する必要があります。右側のコネクタにあります。

私はまだ試しています...

最後に、最大輝度64を使用する場合は、おそらく1Aの電源で十分です。それ以外の場合は、2Aが不可欠です。

将来のウダテ

OpenMusicLabs FHT を使用する新しいバージョンに取り組んでいます ArduinoFFTよりも何倍も高速であることが判明したライブラリ。

乞うご期待。 :)

お願い 私の悪い英語を許してください、私はグーグル翻訳者を使いました。

コード

  • Spectrum_Analyzer_WS2812B.ino
Spectrum_Analyzer_WS2812B.ino Arduino
 / * Copyright(c)2019 Shajeeb TMこのソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得するすべての人に、以下を含む制限なしにソフトウェアを取り扱う許可が無料で付与されます。以下の条件を条件として、ソフトウェアのコピーを使用、コピー、変更、マージ、公開、配布、サブライセンス、および/または販売する権利、およびソフトウェアが提供される人にそうすることを許可する権利を制限しません。著作権表示およびこの許可通知は、本ソフトウェアのすべてのコピーまたは大部分に含まれるものとします。本ソフトウェアは「現状有姿」で提供され、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示または黙示を問わず、いかなる種類の保証もありません。いかなる場合も、作者または著作権所有者は、契約、不法行為、またはその他の行為にかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因する、または関連する、いかなる請求、損害、またはその他の責任についても責任を負わないものとします。ソフトウェア。 WS2812B Janux * /#include  #include  #include  #define SAMPLES 64 // 2の累乗である必要があります#definexres 32 //合計数ディスプレイの列は、<=SAMPLES / 2#define yres 8 //ディスプレイの行の総数#defineledPIN 6 //制御するためのピンLedMatrix#define NUM_LEDS(xres * yres)#define BRIGHTNESS 32#define buttonPin 5 //変更するプッシュボタンピンの数displaycolorbyteyvalue; byte displaycolumn、displayvalue; int Peaks [xres]; byte state =HIGH; //入力ピンバイトからの現在の読み取りpreviousState =LOW; //入力ピンバイトからの前回の読み取りdisplaycolor =0; // sampligdouble vReal [SAMPLES]; double vImag [SAMPLES]; byte data_avgs [xres]; arduinoFFT FFT =arduinoFFT();の配列// FFTオブジェクトunsignedlong lastDebounceTime =0; //出力ピンが最後に切り替えられたときdunsignedlong debounceDelay =100; //デバウンス時間;出力がちらつく場合は増加//パラメータ1 =マトリックス内のLEDの数//パラメータ2 =ピン番号(ほとんどが有効)//パラメータ3 =ピクセルタイプのフラグ、必要に応じて追加:// NEO_KHZ800 800 KHzビットストリーム(ほとんどのNeoPixel WS2812 LED付き製品)// NEO_KHZ400 400 KHz(クラシック「v1」(v2ではない)FLORAピクセル、WS2811ドライバー)// NEO_GRBピクセルはGRBビットストリーム用に配線されています(ほとんどのNeoPixel製品)// NEO_RGBピクセルはRGBビットストリーム用に配線されています( v2ではなくv1FLORAピクセル)Adafruit_NeoPixel pixel =Adafruit_NeoPixel(NUM_LEDS、ledPIN、NEO_GRB + NEO_KHZ800); //低音を減衰させて高音を改善するEQフィルター; // falseに設定してeqbyteを無効にしますeq [32] ={50、55、60、70、75、80、85、95、100、100、100、100、100、100、100、100、100、100、 100、100、100、100、100、100、115、125、140、160、185、200、225、255}; // setColumn関数で使用される単一LEDの色を定義し、カスタム色の場合は0 //色はWheel関数によって計算されます。以下を参照してください。bytecolors[] [8] ={{170、160、150、140、130、120、1、1}、{1、5、10、15、20、25、90、90} 、{90、85、80、75、70、65、1、1}、{90、90、90、30、30、30、1、1}、{170、160、150、140、130、120、 0、0}、{170、160、150、140、130、120、1、1}、{170、160、150、140、130、120、1、1}}; void setup(){pixel.begin (); pixel.setBrightness(BRIGHTNESS); // FFT操作を開始しますADCSRA =0b11100101; // ADCをフリーランニングモードに設定し、プリスカラーを32(0xe5)に設定しますADMUX =0b00000000; //ピンA0と外部電圧リファレンスを使用} void loop(){// ++サンプリングfor(int i =0; i  peaks [i])peaks [i] =yvalue;の場合、1つの光で減衰します。 //> previuosの場合はピークを保存yvalue =peaks [i]; displaycolumn =i; displayvalue =yvalue; setColumn(displaycolumn、displayvalue); //バケットを描画します} pixel.show(); //バケットを表示displaycolorChange(); //ボタンが押されてカラーモードを変更したかどうかを確認します} // ------------------------------------- ---------------------------- // y値に応じたx列のライトLEDvoidsetColumn(byte x、byte y){byte led 、 私; for(i =0; i  i){switch(displaycolor){case 4://配列値にゼロ0を設定して、ピークの色をカスタマイズするif(colors [displaycolor] [i]> 0){//カラーアレイで定義された通常の色pixel.setPixelColor(led、Wheel(c​​olors [displaycolor] [i])); } else {//配列値に0のみのピークのカスタムカラーpixel.setPixelColor(led、255、255、255); // LEDの数、R、G、Bの値} break;ケース5://列ごとに色を変更pixel.setPixelColor(led、Wheel(x * 16));壊す;ケース6://行ごとに色を変更pixel.setPixelColor(led、Wheel(i * 36));壊す;デフォルト://表示色セット-> 0から3までのdisplaycolor //色はカラーアレイで定義されますpixel.setPixelColor(led、Wheel(c​​olors [displaycolor] [i])); } // END SWITCH} else {pixel.setPixelColor(led、0); }}} // ======================================================================// x、y座標でLED数を計算//水平に配置された蛇行レイアウトのWS2812Bに有効//および右下にあるゼロLED(右側の入力コネクタ)//入力値:x =0-31、y =0-7、0から255までのLED番号を返します// ========================================================================byte GetLedFromMatrix(byte x、byte y){x =xres --x --1; if(x&0x01){//奇数列が後方に増加return((x + 1)* yres --y --1); } else {//列が増加しても通常はreturn((x + 1)* yres --yres + y); }} // ========================================================================void displaycolorChange(){int reading =digitalRead(buttonPin); if(reading ==HIGH &&previousState ==LOW &&millis()-lastDebounceTime> debounceDelay)//押されたときにのみ機能する{displaycolor ++; if(displaycolor> 6)displaycolor =0; lastDebounceTime =millis(); } previousState =reading;} / * Adafruit Neopixelデモスケッチのユーティリティ色の値を取得するには、0〜255の値を入力します。色はR-G-B-Rに戻る遷移です。* / unsignedlong Wheel(byte WheelPos){WheelPos =255-WheelPos; if(WheelPos <85){return pixel.Color(255-WheelPos * 3、0、WheelPos * 3); } if(WheelPos <170){WheelPos- =85; pixel.Color(0、WheelPos * 3、255-WheelPos * 3);を返します。 } WheelPos- =170;戻り値pixel.Color(WheelPos * 3、255-WheelPos * 3、0);} 

カスタムパーツとエンクロージャー

arduino_rgb_audio_analyzer_lX4Dv4Pta2.zip

回路図


製造プロセス

  1. 32(リニエ)/ 11(疑似ログ)バンドオーディオスペクトラムアナライザ
  2. 喉の渇き警報プラント警報
  3. イタリア語の単語時計
  4. SigfoxkWhメーター
  5. Bluetooth温度モニター
  6. ジェスチャー制御ロック
  7. コンパニオンIC
  8. USBMIDIアダプター
  9. Arduino用の絶縁アナログ入力
  10. ArduinoTV出力ケーブル
  11. 反応時間を測定する