#author("2016-05-31T16:51:12+09:00","default:qua","qua")
* 音声入力 [#ta2a7a83]
** アナログサウンドセンサーモジュール [#z3576aef]
#ref(http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/img/dfr0034.jpg,200x150)
-[[販売元情報ページ:http://akizukidenshi.com/catalog/g/gM-07038/]]
** 配線 [#he8e8caf]
|配線|意味|
|青|音声入力(Arduinoのアナログピンへ)|
|赤|電源(Arduinoの5Vへ)|
|茶色|Ground(ArduinoのGNDへ)|
** プログラミング [#n6caac3c]
-データ読み取り~
 // アナログ入力ピン0の値をモニタするためのスケッチ
 // IDEのツール→シリアルモニタで数値を表示
 // IDEのツール→シリアルプロッタでグラフを表示
 
 const int Pin = 0; // 入力ピン番号
 const int Delay = 100;  // データ入力時間間隔(ミリ秒)
 
 void setup() {
   // Arduinoとコンピュータの間の通信を準備
   // データ通信速度は9600ビット/秒
   Serial.begin(9600);
 }
 
 void loop() {
   // 入力ピンから読み取って、
   int x = analogRead( Pin );
   // コンピュータへ送信
   Serial.println( x );
   // 時間間隔だけ待つ
   delay( Delay );
 }
-周波数解析~
[[FFTライブラリ:http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/lib/FHT.zip]]~
アナログピン0番の入力をフーリエ変換し、シリアル通信で送信
--FFTライブラリの使用例~
シリアルプロッタを起動し、通信速度を115200bpsに設定する。
#ref(http://www.ist.aichi-pu.ac.jp/lab/qua/~qua/pbl/img/fft.png,443x245)
#author("2019-04-21T23:43:55+09:00","default:qua","qua")

 /*
 fht_adc.pde
 guest openmusiclabs.com 9.5.12
 example sketch for testing the fht library.
 it takes in data on ADC0 (Analog0) and processes them
 with the fht. the data is sent out over the serial
 port at 115.2kb.  there is a pure data patch for
 visualizing the data.
 */
 
 #define LOG_OUT 1 // 出力は対数(デシベルと等価)
 // ここから4行は適宜設定してもよい。
 #define FHT_N 256 // データの個数(実際に利用できるのはその半分)
                   // データの個数は4, 8, 16, 32, 64, 128, 256のいずれか。
 #define PIN_NO 0  // 入力ピン番号(0から5)
 #define LG_DIV_RATIO 7 // 分周率の指数(1から7)
 #define INTERLEAVE 8 // データ間引き
 // サンプリング周波数は 16MHz / 2^LG_DIV_RATIO / 13 / INTERLEAVE
 // 周波数の分解能はサンプリング周波数 / データの個数
 
 #include <FHT.h> // include the library
 
 void setup() {
   Serial.begin(115200); // use the serial port
   // FFTを使う準備
   TIMSK0 = 0; // turn off timer0 for lower jitter
   ADCSRA = 0xe0 | LG_DIV_RATIO; // アナログ入力の方式を設定
   ADMUX = 0x40 | PIN_NO; // 入力ピン番号を設定
   DIDR0 = 1 << PIN_NO; // アナログ入力ピンのデジタル入力を禁止
 }
 
 void loop() {
   int s=INTERLEAVE-1;
   while(1) { // reduces jitter
     cli();  // 割り込み禁止
     for (int i = 0 ; i < FHT_N ; i++) { // save 256 samples
       while(!(ADCSRA & 0x10)); // AD変換が完了するのを待つ
       ADCSRA = 0xf0 | LG_DIV_RATIO; // 次のAD変換を開始する
       s = (s+1) % INTERLEAVE; // sがINTERLEAVEの倍数であるときだけ入力を処理
       if( s!= 0 ){ i--; continue; }
       byte m = ADCL; // データ下位8ビット読み込み
       byte j = ADCH; // データ上位2ビット読み込み
       int k = (j << 8) | m; // 上位、下位を合わせて10ビットの値にする
       k -= 0x0200; // 10ビットの値から512を引いて有符号数にする
       k <<= 6; // 6ビットシフトして
       fht_input[i] = k; // i番目の入力データとして格納
     }
     // 以下4行でフーリエ変換を実行
     fht_window(); // fht_input[]のデータに窓関数を施す
     fht_reorder(); // fht_run()のために、入力データの並び順を変える
     fht_run(); // FFTを実行し、fht_input[]に格納
     fht_mag_log(); // FFTの結果の絶対値の対数を計算し、fht_log_out[]に格納
     sei();  // 割り込み許可
     // PCへデータを送信。ここを変更するのは可。
     Serial.print( "0\n0\n0\n0\n" );
     for( int i=0; i<FHT_N/2; i++ )
       Serial.println(fht_log_out[i]); // i番目の結果を送信
   }
 }


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS