32(リニエ)/ 11(疑似ログ)バンドオーディオスペクトラムアナライザ
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 2 | ||||
| × | 3 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
必要なツールとマシン
> |
|
アプリとオンラインサービス
> |
|
このプロジェクトについて
arduinoプロジェクトを構築するのは私の最初の試みでした。オーディオプロジェクトについては何でも興味があります。 ShajeebのAudioVisualizerを見つけて、ディスプレイのスケールを変えてみました。対数の一種ですが、Excelでいくつかの(対数/指数)テーブルを作成し、プロジェクトのコードにデータマッピングを手動で実装します。
ボタンを追加/変更して表示を変更します:シングルバー(線形スケール表示/ダブルバー-疑似ログ)。
気に入っていただけたら、構築をお楽しみください。
コード
- 32_Band_LED_Spectrum_Analyzer-009.ino
32_Band_LED_Spectrum_Analyzer-009.ino Arduino
私のカスタマイズパーツコード(コメントでマークされたデータの再マッピング)で、ニーズに合わせて自由に変更/カスタマイズしてください。//(c)2019 Shajeeb TM // HAZI TECH /のChristianSuryantoによる変更コード/ ChristianSuryantoによる更新//#include#include #include #include #define HARDWARE_TYPE MD_MAX72XX ::FC16_HW // MD_MAX72xxとなるように表示タイプを設定ライブラリは適切にツリー化します#defineCLK_PIN13 // displayと通信するためのクロックピン#defineDATA_PIN 11 // displayと通信するためのデータピン#defineCS_PIN 10 // display#defineと通信するための制御ピンSAMPLES 64 //電源である必要がありますof 2#define MAX_DEVICES 4 //表示モジュールの総数#definexres 32 //合計ディスプレイの列数は、<=SAMPLES / 2#define yres 8 //ディスプレイの合計行数#definePREV 0xFF02FD //アドレスはFFA25Dですが、0xが追加されます。これは、arduinoがそれを通知する方法であるためです。 is HEXADECIMAL。#define NEXT 0xFFC23D //制御停止コード#definePWR 0xFFA25D //制御Powerintaudio_response =35; // 10〜80の値を入力します。数値が小さいほど、音声応答が高くなりますdouble vReal [SAMPLES]; // double vReal2 [SAMPLES]; double vImag [SAMPLES]; char data_avgs [xres]; int yvalue; int displaycolumn、displayvalue; int Peaks [xres]; const int buttonPin =6; //プッシュボタンのピニント状態の数=HIGH; //入力pinintからの現在の読み取りpreviousState =LOW; //入力pinintdisplaymodeからの前回の読み取り; unsigned long lastDebounceTime =0; //出力ピンが最後に切り替えられたときdunsignedlong debounceDelay =50; //デバウンス時間;出力がちらつく場合は増加しますintMY_ARRAY [] ={0、128、192、224、240、248、252、254、255}; //デフォルト=標準パターン// intMY_MODE_1 [] ={0、128、192、224、240、248、252、254、255}; //標準パターン// intMY_MODE_2 [] ={0、128、64、32、16、8、4、2、1}; //ピークパターンのみ// intMY_MODE_3 [] ={0、128、192、160、144、136、132、130、129}; //ピーク+ボトムポイントのみ// intMY_MODE_4 [] ={0、128、192、160、208、232、244、250、253}; //上部に1つのギャップ、3番目のライト以降bool EQ_ON =true; // falseに設定してeqbyteを無効にしますeq1 [32] ={40、45、50、60、65、70、75、95、110、110、110、110、110、110、110、110、130、130、 130、130、130、130、130、130、145、155、170、180、215、220、245、255}; byte eq2 [11] ={40、70、75、110、110、140、145、 220、220、230、250}; MD_MAX72XX mx =MD_MAX72XX(HARDWARE_TYPE、CS_PIN、MAX_DEVICES); // objectarduinoFFTを表示しますFFT =arduinoFFT(); // FFTオブジェクトvoidsetup(){EEPROM.update(1,1); //(メモリアドレス、値)、これを初めて実行displaymode =EEPROM.read(1); // displaymode =1; ADCSRA =0b11100101; // ADCをフリーランニングモードに設定し、プリスカラーを32(0xe5)に設定しますADMUX =0b00000000; //ピンA0と外部電圧リファレンスを使用pinMode(buttonPin、INPUT); mx.begin(); //表示を初期化しますmx.control(MD_MAX72XX ::INTENSITY、0); // LED強度delay(50);を設定します//基準電圧が安定するのを待ちます} void loop(){// ++サンプリングintnumData;ダブルrSum; for(int i =0; i Peaks [i])peaks [i] =yvalue;の場合、1つの光で減衰します。 yvalue =ピーク[i]; displayvalue =MY_ARRAY [yvalue];スイッチ(displaymode){ケース1:{displaycolumn =31-i; mx.setColumn(displaycolumn、displayvalue); //左から右へ} break;ケース2:{displaycolumn =31-(3 * i); mx.setColumn(displaycolumn-1、displayvalue); //左から右へmx.setColumn(displaycolumn、displayvalue); //左から右へ} break; }} //-測定値に従って表示に送信displayModeChange(); //ボタンが押されて表示モードが変更されたかどうかを確認します} void displayModeChange(){int reading =digitalRead(buttonPin); if(reading ==HIGH &&previousState ==LOW &&millis()-lastDebounceTime> debounceDelay)//押されたときにのみ機能する{switch(displaymode){case 1://モード1から2に移動displaymode =2; mx.clear(); delay(200); EEPROM.update(1,2);壊す;ケース2://モード2から3に移動displaymode =1; mx.clear(); delay(200); EEPROM.update(1,1);壊す; } lastDebounceTime =millis(); } previousState =reading;}
回路図
製造プロセス