鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

MAX4466+コンデンサマイクのモジュールをためしてみる

マイクからの波形で遊ぼうと思って、色々とためしております。
昨日MAX4466のマイクモジュールが届きましたのでためしてみます。
f:id:kechiya:20170624055723j:plain

こちら無音の時。
f:id:kechiya:20170624090008p:plain

こちら声を出した時。
f:id:kechiya:20170624090131p:plain

3.3Vで使用しています。
ゲインは可変抵抗で帰られますが、これで目一杯です。
もう少し感度が欲しい気もしますね。
左右、だいたい同じような波形が出ています。

マイクを外して
秋月で買ったコンデンサマイクを取り付けたくなってしまいますが。
そこは壊してしまいそうなので、とりあえず我慢。

こちらが、購入したモジュールです。航空便で届くので結構早めに届きました。1週間程度。
rover.ebay.com

AndroidタブレットのUSB端子をマグネテック化(WSKEN)使用感は最高です!

AsusタブレットZenpadのマグネテック化だいぶいい感じだったので
妻のタブレットもマグネテック化してみました。
1mのケーブルはいっぱいやすいのがあるのですが、
1mだとちょっと短い感じが否めないので2mのものを探しました。
上下があるんですが、マグネットがひっつく方向が決まっていて
間違えずに刺せる仕様となっていてさすがだなと感心してしまいました。
WSKENは本当にクオリティが高く、超オススメです。
色々悩まず、WSKEN一択ですね。

rover.ebay.com

サーボブラケットの使い方を調べよう

サーボモータ単独だと、面白くないので
雲台みたいな感じで使いたい。

回転部分の金具をサーボホーンというらしい。
サーボブラケットで雲台として使う方法を調べよう

U字型のブラケットとL字型のブラケットがあるらしい
手軽に使えそうなのはL字型かなー。

# サーボホーンとブラケット
直径14mmでM3のねじ4本で止めるタイプ
rover.ebay.com

Arduinoでコンデンサーマイクからの入力を2chにすると値がうまく取れない。

グラフは無音状態での計測です。
1chのマイクだといい感じに計測できるのですが・・
2chにすると、値がうまく拾えなくなってしまう。無音の状態なのに
大きな値(1chの無音の数値を超えている)となってしまう。何が原因なんだろう。

秋月で購入したコンデンサーマイク(C9767BB422LFP)にLM386というオペアンプを接続して増幅してアナログ入力(A0,A1)に入れています。
今回参考にして実装した回路は以下を参考にしました。
2.2kΩと10μF,1μFの電解コンデンサーで組んでいます。
ただし、電源は3.3Vの方から取りました。
arms22.blog91.fc2.com

f:id:kechiya:20170610153902j:plain
f:id:kechiya:20170611095328p:plain
f:id:kechiya:20170611095351p:plain

マイクの回路ググった結果

同じくマイク用増幅回路でも色々あるみたい。
How to Connect a Microphone to an Arduino
lm386 ecm mic amp | rakko studio

キットだと

秋月のキット500円で売っています。

akizukidenshi.com

ebayだと
rover.ebay.com

コンデンサーマイクのタイプ

どの方向でも音を拾うマイクのことを
omnidirectionalマイクと呼ぶらしい。
さて、私の秋月で買ったマイクのタイプは・・・
C9767BB422LFPというタイプでデータシートによるとOMNIと書いてありました。
大丈夫です!!

http://www.diva-portal.org/smash/get/diva2:830430/FULLTEXT01.pdf

Arduinoでマイク接続して、波形を解析したいのだ。

サンプリングレートどれくらい出せるのだろうと思いましたが、
アナログリード100usecかかるようで最大でも10kHZということでしょうか。
2chで録音すると5khzになってしまって、ちょっと足りない気もしますが・・・
Arduino - AnalogRead

さて、実機Genuino101で測ってみると・・・
28マイクロsecond出てました。
結構早いかもかも。
こいつはintelの16bitCPU積んでるらしく早いらしい。
まぁ、なんでもいい。当初の目的が果たせれば!

const int TRY_COUNT = 1000;
unsigned long microTime[TRY_COUNT];
unsigned int wave[TRY_COUNT];
int total = 0;
void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
}

void loop() {

  total = 0;

  for(int i=0;i<TRY_COUNT;i++){
    int val = analogRead(0);
    microTime[i] = micros();
    wave[i] = val;
  }
  for(int i=0;i<1000-1;i++){
    total = total +   microTime[i+1] - microTime[i];
    Serial.println(wave[i]);
  }
  Serial.println("average");
  Serial.println(total /(TRY_COUNT - 1));
  delay(1000);
}