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

FHTオーディオスペクトルビジュアライザー

コンポーネントと消耗品

>
Arduino Nano R3
× 1
WS2812B 8X32 RGBLEDマトリックス
× 1
抵抗4.75kオーム
× 3
抵抗100kオーム
× 2
抵抗10kオーム
× 2
スルーホール抵抗、390オーム
× 1
1N4007 –高電圧、高電流定格ダイオード
1N4004でも問題ありません
× 1
コンデンサ100nF
× 2
コンデンサ1000µF
× 1
SparkFunプッシュボタンスイッチ12mm
または、回路をボックスに挿入する場合は2つのパネルボタン
× 2
4x6cmの汎用プロトタイプボード
× 1
PCBステレオRCAメスプラグ
× 1

必要なツールとマシン

>
はんだごて(汎用)
3.5mmオーディオジャックケーブルからステレオRCAコネクタへ

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

ArduinoFHTライブラリ

FHTは、よりよく知られているFFTとまったく同じ仕事をしますが、これとは異なり、実際のデータのみを使用しますが、FFTは複雑なデータを処理するため、FHTは半分の処理能力と半分のシステムメモリを使用します。

このライブラリは、データサンプリングに2つではなく1つの配列を使用します。1つは実数値用、もう1つは虚数用で、FFT libで使用されます。また、複雑な浮動小数点対数計算によるループを回避して複雑な数学計算を簡素化し、代わりにいくつかの数値テーブルを使用します。 。

欠点は、サンプリングの実行に使用される配列のサイズの半分の値を常に返すことです。これにより、オーディオ範囲の両端で解像度と精度がある程度低下します。ただし、特定のケースでは、測定器を開発する必要はなく、単純なガジェットを開発する必要があります。極端な精度は必要ありません。音楽のリズムで少数のLEDをオンにするだけです。

もちろん、これはFHTライブラリのモダリティ操作について議論するのに適切な場所ではありません。詳細を知りたい人は、Open Music LabのWebサイトを参照して、使用するトリックを理解するために必要なすべてのドキュメントを見つけることができます。 Arduino用にすでに作成されているさまざまな関数といくつかの一般的な例。

FFTライブラリは高速であるため、ちらつきを減らすためにコードに遅延を挿入する必要がありました。最終結果にすぐに気付くでしょう。表示は、音楽に遅れをとっているように思われるFFTライブラリを使用するバージョンよりもはるかに高速で応答性が高くなっています。システムリソースの使用を減らすことで、追加の機能を管理するためのコードを数行追加することができました。

新しいバージョン

プロジェクトは以前のバージョンと同じであるため、以前のバージョンをすでに作成している場合は、ボタンと10K抵抗を追加して、コードを更新するだけです。

FHTライブラリの実装に加えて、このバージョンには次の追加機能があります。

  • 明るさ調整用の追加ボタンがあります;
  • 次に電源を入れたときに再ロードするために、EEPROMに色と明るさの設定を保存できます。
  • ボタンが押されたときとオンにされたとき(無効にできる)に色と明るさの設定レベルを表示します。

コード

  • FHTコードバージョン
FHTコードバージョン Arduino
 / * Copyright(c)2020 Januxこれにより、このソフトウェアおよび関連するドキュメントファイル(「ソフトウェア」)のコピーを取得するすべての人に、制限なしでソフトウェアを取り扱う許可が無料で付与されます。以下の条件に従って、ソフトウェアのコピーを使用、コピー、変更、マージ、公開、配布、サブライセンス、および/または販売する権利、およびソフトウェアが提供される人にそうすることを許可する権利を制限します。上記の著作権通知およびこの許可通知は、ソフトウェアのすべてのコピーまたは実質的な部分に含まれるものとします。本ソフトウェアは「現状有姿」で提供され、商品性、特定目的への適合性、および非侵害の保証を含むがこれらに限定されない、明示または黙示を問わず、いかなる種類の保証もありません。いかなる場合も、作者または著作権所有者は、契約、不法行為、またはその他の行為にかかわらず、ソフトウェアまたはソフトウェアの使用またはその他の取引に起因する、または関連する、いかなる請求、損害、またはその他の責任についても責任を負わないものとします。ソフトウェア。 Shajeebから作成されたMAX72xxLEDマトリックスとFFTlibの元のプロジェクトに基づいています。 NorvegianCreationのRagnarRanøyenHombの作業に基づく構成設定セクション。* /#defineLIN_OUT 1 // FHT線形出力マグニチュード#defineFHT_N 128 // FHTのサンプルを設定。 #define xres 32 //ディスプレイの列の総数。<=SAMPLES / 2#define yres 8 //ディスプレイの行の総数#defineledPIN 6 // Ledsを制御するための出力#define NUM_LEDS(xres * yres)//マトリックス内の合計leds#include  #define colorPIN 5 //ピンで変更ledcolor#define BrightnessPIN 10 //ピンで変更brightnessbytedisplaycolor =0; //デフォルトの色値bytebrightness =1; //デフォルトの輝度レベル#include  #define CONFIG_START 32 //メモリの開始位置#defineCONFIG_VERSION "VER01" //構成バージョンconfigurationtypedefstruct {char version [6];バイトdisplaycolor;バイト輝度;} configuration_type; configuration_type CONFIGURATION ={CONFIG_VERSION、displaycolor、brightness};バイトyvalue; intピーク[xres];バイト状態=HIGH; //入力ピンバイトからの現在の読み取りpreviousState =LOW; //入力からの前回の読み取りpinunsignedlong lastDebounceTime =0; //出力ピンが最後に切り替えられたときdunsignedlong debounceDelay =100; //デバウンス時間;出力がちらつく場合は増加data_avgs [xres]; // sampligの配列//パラメータ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ビットストリーム用に配線されています(v1 FLORAピクセル、 v2)Adafruit_NeoPixel pixel =Adafruit_NeoPixel(NUM_LEDS、ledPIN、NEO_GRB + NEO_KHZ800); // EQ filterbyte eq [32] ={60、65、70、75、80、85、90、95、100、100、100、100、 100、100、100、100、100、100、100、100、100、100、100、100、115、125、140、160、185、200、200、200}; bool EQ_ON =true; // eqを無効にするにはfalseに設定します// LEDには5色のセットを定義し、単一のカスタムカラーバイト色には0を定義します[] [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、110、0}}; //表示設定の文字を定義するbytecharBitmap [] ={0x1C、0x10、0x10、0x10、0x10、0x1C、0x08、0x18、 0x08、0x08、0x08、0x1C、0x0C、0x12、0x04、0x08、0x10、0x1E、0x0C、0x12、0x02、0x06、0x12、0x0C、0x10、0x10、0x10、0x14、0x1E、0x04、0x1 0x02、0x12、0x0C、0x1E、0x10、0x10、0x1E、0x12、0x1E、0x1E、0x02、0x04、0x08、0x08、0x08、0x0C、0x12、0x0C、0x12、0x12、0x0C、0x1C 0x12、0x1C}; void setup(){pixel.begin(); // LEDマトリックスを初期化します// FFT操作を開始しますADCSRA =0b11100101; // ADCをフリーランニングモードに設定し、プリスケーラーを32(0xe5)に設定しますADMUX =0b00000000; //ピンA0と外部電圧リファレンスを使用します// EEPROMから構成データを読み取りますif(loadConfig()){displaycolor =CONFIGURATION.displaycolor;明るさ=CONFIGURATION.brightness; } // EEPROMからロードされた明るさを設定しますpixel.setBrightness(brightness * 24 + 8); //開始時に現在の設定を表示します//このshowSettings(3、true);が必要ない場合はtrueをfalseに変更します} void loop(){while(1){//ジッターを減らしますSampling(); // FHTライブラリは1つのデータ配列のみを使用しますRearrangeFHT(); // FHTの結果をnoと一致するように再配置します。表示列の数SendToDisplay(); //測定値に従って表示に送信colorChange(); //ボタンが押されて色の明るさを変更するかどうかを確認しますChange(); //ボタンが押されて明るさdelay(10);を変更するかどうかを確認します。 //ちらつきを減らすための遅延(FHTは速すぎます:D)}} void Sampling(){for(int i =0; i  peaks [i])peaks [i] =yvalue;の場合、1つの光で減衰します。 //> previuos peak yvalue =peaks [i];の場合、ピークを保存します//ピークを選択してsetColumn(i、yvalue);を表示します//列を描画します} pixel.show(); //列を表示} // y値に従ってx列のLEDを点灯voidsetColumn(byte x、byte y){int led、i; for(i =0; i  i){switch(displaycolor){case 4:if(colors [displaycolor] [i] ==0){//値がゼロのカスタムカラーを表示配列pixel.setPixelColor(led、255、255、255); // withe} else {//色配列で定義された標準色pixel.setPixelColor(led、Wheel(c​​olors [displaycolor] [i])); } 壊す;ケース5://列ごとに色を変更pixel.setPixelColor(led、Wheel(x * 16));壊す;ケース6://行ごとに色を変更pixel.setPixelColor(led、Wheel(i * y * 3));壊す;ケース7://色を変更...国:D //イタリアフラグ// if(x <11)pixel.setPixelColor(led、0、255、0); // if(x> 10 &&x <21)pixel.setPixelColor(led、255、255、255); // if(x> 20)pixel.setPixelColor(led、255、0、0); //星とストライプif(i  debounceDelay){displaycolor ++; if(displaycolor> 7)displaycolor =0; showSettings(1、true); //このsaveConfig();が必要ない場合は、falseに設定します。 lastDebounceTime =millis(); } previousState =reading;} void brightChange(){int reading =digitalRead(brightnessPIN); if(reading ==HIGH &&previousState ==LOW &&millis()-lastDebounceTime> debounceDelay){brightness ++; if(明るさ> 7)明るさ=0; pixel.setBrightness(brightness * 24 + 8); showSettings(2、true); //このsaveConfig();が必要ない場合は、falseに設定します。 lastDebounceTime =millis(); } previousState =reading;} // Adafruit Neopixelデモスケッチのユーティリティ//値0〜255を入力して、色の値を取得します。//色はRへの遷移です。 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; return pixel.Color(WheelPos * 3、255 --WheelPos * 3、0);} //有効な設定である場合、EEPROMの内容をローカルCONFIGURATIONにロードしますint loadConfig(){if(EEPROM.read(CONFIG_START + 0) ==CONFIG_VERSION [0] &&EEPROM.read(CONFIG_START + 1)==CONFIG_VERSION [1] &&EEPROM.read(CONFIG_START + 2)==CONFIG_VERSION [2] &&EEPROM.read(CONFIG_START + 3)==CONFIG_VERSION [3 ] &&EEPROM.read(CONFIG_START + 4)==CONFIG_VERSION [4]){//(unsigned int i =0; i  =0; x-){for(int y =5; y> =0; y-){を描画しますif((charBitmap [val * 6 + 5-y]>> x)&0x01){pixel.setPixelColor(GetLedFromMatrix(4-x + pos、y + 1)、Wheel((pos> 10)* 170)); pixel.show(); }}}} //Janux®による、最終バージョンは2020年6月28日。

回路図


製造プロセス

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