Arduinoで遊ぼう - エレクトレット・コンデンサ・マイクでオーディオレベルメータを作る



Arduinoとエレクトレット・コンデンサ・マイクを使ってオーディオレベルメータを作ってみた。マイクで拾った音の大きさに応じて、LED8個を段階的に点灯させている。

エレクトレット・コンデンサ・マイク(以下ECM)は音の強弱により容量が変わる一種のコンデンサだ。ECMから音声信号を取り出すためには+極に電圧をかけ、その電圧をコンデンサを介して取り出す。音の強弱によりECMの容量が変化し、充放電することで電圧の変化となり、それが音声信号となる。

ECMの音声信号はとても小さく、そのままArduinoに入力してもノイズと区別がつかない。そんな時はOPアンプを使う。小さな信号を大きな信号に変えるOPアンプの使い方を紹介しよう。今回、OPアンプとして低電圧オーディオアンプ「LM386」を使った回路を紹介する。

回路図


エレクトレット・コンデンサ・マイク 回路図

OPアンプの出力をArduinoのアナログ端子0番に接続。OPアンプから出力される音声信号はArduinoの電源電圧の半分=約2.5Vを中心に±約2Vの範囲で値が変化する。analogRead()で読み取った値は100~900の間で変化する。

実体配線


emc_lm386_arduino_brd.png
ECMには極性があるので注意すること(+端子に印がついている事が多い)。

スケッチ


abs()を使ってanalogRead()で読み取った値の絶対値を求める。map()を使って50~380の絶対値を0~8段階のオーディオレベルにマッピングしている。

int levelLeds[] = { 
  2,3,4,5,6,7,8,9 };

void setup()
{
  for(int i=0;i<8;i++){
    pinMode(levelLeds[i],OUTPUT);
    digitalWrite(levelLeds[i],LOW);
  }
  Serial.begin(9600);
}

int ecmPin = 0;

void loop()
{
  static int lasEcmLevel = 0;
  int input = analogRead(ecmPin);

  Serial.print(input);
  Serial.print(", ");

  input = abs(input - 512);

  Serial.println(input);

  int ecmLevel = map(input, 50, 380, 0, 8);

//  if(ecmLevel > lasEcmLevel)
//    lasEcmLevel++;
//  else if(ecmLevel < lasEcmLevel)
//    lasEcmLevel--;
  lasEcmLevel = ecmLevel;

  int pos;
  for(pos=0;pos<lasEcmLevel;pos++){
    digitalWrite(levelLeds[pos],HIGH);
  }

  for(;pos<8;pos++){
    digitalWrite(levelLeds[pos],LOW);
  }

  delay(5);
}



DIY Tengu on a breadboard
http://tinkerlog.com/2007/10/22/diy-tengu-on-a-breadboard/

実用・電子工作 - マイクアンプ基本形
http://www002.upp.so-net.ne.jp/jsrc/densi/micamp.html

スイッチサイエンス - エレクトレット・コンデンサ・マイク・モジュール
http://www.switch-science.com/products/detail.php?product_id=141



Ads by Google

コメント

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: はじめまして

電源はUSBのバスパワー5Vを使っています。
プログラムはPC上で作成し、マイコンの方にやっぱりUSB経由で書き込んでいます。

ボタン電池でも問題ないと思いますよ。
LEDを点灯させるには電池を直列にして電圧を稼ぐ必要がありそうです。

マイコンを使わずにおなじようなことをしたい場合、
次のLEDドライバなどが良さそうです。
入力電圧レベルの大きさを12ドットのLEDで表示するICです。
http://eleshop.jp/shop/g/g6C9131/

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: 先日はありがとうございました。

電子工作系の書籍は買ったことがないので、
ちょっとわかりませんね。。

電子工作系のページは沢山ありますから、
googleで調べてみればすぐに見つかると思いますよ。

手当たり次第に全部読んでみるのもいいと思います。
自分が作りたいと思っていたものが、
すでに作られていることもよくあります。

私は関西の人間なので、関東のお店はよく分りませんが、
秋月電子や千石、マルツあたりでだいたいそろうのではないでしょうか。

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: はじめまして

こんな感じかな?

int onoff = 0;
void loop()
{
int input = analogRead(ecmPin);
input = abs(input - 512);
if(input > 300){ // ここは調整すること
if(onoff == 1){
onoff = 0;
}else{
onoff = 1;
}
}
digitalWrite(ledPin, onoff);
}

管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

Re: 初めまして

あと必要なものはオシロスコープとか安定化電源とかステーションタイプの半田ごてとかでしょうか;)
まぁとりあえずそんだけあれば十分だと思うよ。
必要な部品は回路図にぜんぶ書いてあるからそれを参照してください。
ArduinoはUNOでもduemilanoveでもMEGAでもOK。
あとはやる気と根性だな。

オーディオレベルメータ

この記事を参考にし同じものを作ろうとしているのですが、
うまく動いてくれません。

電子工作は初めてなので的はずれな質問なのかもしれないのですが、
回路図と実態配線でR1の抵抗の値が違うのですがどちらを参考にすれば良いのでしょうか?

No title

たぶん2.2kΩでいいとおもう。
MICの使い方調べてみて。

No title

素早い返答ありがとうございます。

MICについてはあまり知識がないので、
もう一度よく調べてみます。

よく調べもせずに質問してしまい申し訳ありません。
Secret

Ads by Google
最近の記事
カテゴリ
Arduino (114)
電子工作 (114)
スタバッテルミン (5)
スタバカップアンプ (17)
電光掲示板 (7)
イベント (59)
太陽電池 (12)
ニキシー管 (19)
ARM (8)
PIC (20)
USBデバイス (7)
V850 (17)
Xfind (6)
プログラミング (5)
Android (3)
未分類 (25)
カメラ (6)
本 (18)
mbed (2)
SoftModem (0)
3Dプリンタ (35)
Amazon.co.jp
最近のコメント
三ツ星トラフィック:MPPT太陽電池充電(7) (08/29)
nameless911:Ogaki Mini Maker Faire 2014に行ってきたよ。 (08/28)
claynets:オープンソースのPCBCAD「KiCad」。 (08/26)
arms22:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (08/11)
Sekine:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (08/10)
arms22:ArduinoでSDメモリカードを読み書きする (08/05)
arms22:ArduinoでSDメモリカードを読み書きする (07/24)
arms22:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (07/22)
Sekine:Arduinoで遊ぼう-AVRライタを使わないBootloaderの書き込み (07/20)
arms22:Arduinoで遊ぼう - OAuthを使って安全につぶやくライブラリ「Stewitter」 (07/11)
リンク
Ads by Google
以前の記事
プライバシーポリシー
当サイトでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 (氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、ここをクリックしてください。