質問: MicData + hosei; Serial.println( (MicData)); } ``` --- **変更点 2016.11.17** ------------------ 参考サイトの回路を試してみました。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/4ccdd71a14236c45cd680fd9ac7b4172.png) ■増幅なし (-の値が出てないだけで、実際は0が中心になっている!?) (ただし、時間が経つと基準点が上がってしまい、20分ほどで120が基準点となっていました・・・) ![コンデンサ→増幅なし](https://teratail.storage.googleapis.com/uploads/contributed_images/b0a8e305d3927bdcc8cca3b89d4d6350.jpeg) ■オペアンプ LM386-N1 による200倍 (参考サイト通り) 参考サイト Arduinoで遊ぼう - エレクトレット・コンデンサ・マイクでオーディオレベルメータを作る ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/815b58ee0669d7347be773c8855cc9ba.jpeg) ■オペアンプ LM386-N1 による20倍 コンデンサを外して倍率を200→20倍に変更 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/c640cbddb0c2789cd3795780dffd8d92.jpeg) ■現状 どうにも理解が進まず、どのような手順で進めていくかがわかっていない状態です。 参考サイト通りに回路を組むことで、 >>約2.5V(図の縦軸512)を中心とした >>±約2Vの範囲で値が変化 (読み取った値は100~900の間で変化) ということは検証できました。 また、この回路であれば >>- 3.強い振動の後に、コンデンサマイクの値がすぐに戻らない という問題もおきませんでした。(抵抗R1を2.2kΩにしただけでは解決しませんでした。) ●疑問点1 : この参考サイトの回路では、コンデンサC2の後に電源・抵抗を繋げていないようですが、オペアンプによって基準点(ニュートラル時の電圧)を引き上げているのでしょうか。 ●疑問点2 : 私の用途としては >>読み取った値は100~900の間で変化 ではなく、0~1024の間で変化させたいのですが、参考サイトの回路のどの部分でそういった処理を行っているのかが不明です。 また、なぜ参考サイトでは100~900と範囲を狭めているのでしょうか。なるべく広く取得したほうが、レベル分けを細かくできるかと思いますが・・・ ●疑問点3 : 増幅率を200から20倍に変えることで、基準点が500だったものから500と少しまであがってしまうのですね。どこでそのような処理になっているかわかっておりません。 ■これからの予定 LM386のオペアンプを使うと簡単に参考サイトの処理は実装できましたが、やはり増幅率(利得)が大きすぎて用途に合わないようです。 10倍ほどあれば十分だと思うのですが、1-10倍のレールtoレールのオペアンプなどは市販されていないのですかね。 (秋月電子のwebサイトを見ましたが、それらしいものが見当たりませんでした。また、あまりに種類が多すぎて適切なものを選択できる自身もありませんでした。) --- 本当に申し訳ないのですが、MasahikoHirata様にお教え頂いた手順を理解しきれませんでした。 整理してみましたので、補足頂けますと幸いです。 ●増幅しない場合 1R1はマイクのデータシートにも書いてある通りRL2.2kΩで固定 2電源は5Vを仕様 3C2(-)に2.5ボルト電源から10KΩで接続 4??? ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/4d6e33b07eea65a4adedd14a56bfc5ac.jpeg) ためしに3まで試してみた(2.5Vを取れなかったので実際には3.3Vを接続の状態で実装)ところ、たしかにArduinoのA0で得られる値の基準点が上がりました。 しかし、接続した後に2.5Vを排除したところ、基準点は上がったままの状態でした。推測ではあるのですが、MIC1もC2もどちらもコンデンサだと思うので、GNDとしての0点を正しく設定できておらず基準点が定まっていないように思われます。参考サイト通りにアンプを接続した状態でC2(-)の値を測ると0を基準点としていましたが、そうでない状態でC2(-)の値を測ると基準点がずれてしまいました。 ●増幅する場合 →おそらく3倍ほどに増幅できれば十分だと考えています。そもそもそのようなオペアンプなどはあるのでしょうか。 --- また、理解不足でわからない点についてまとめます。 >>ADCの電源範囲内に信号が収まるように回路を用意 →増幅率が私の目的にあったオペンプを用意する という意味でしょうか >>貴殿のような形ではなく(波形を求める)恐らく、低速の処理で’音声’が入力された時の電圧の累積(コンデンサーマイク側)の電圧の低下(音が入ると電圧が低下して、接続コンデンサの反対側の電圧が上がる)これをADCで量子化(デジタル化)した値でLEDを点灯してますね。 →ArduinoのアナログピンではADCでデジタル化された値のみしか取得できないはずなので、私も最終的にはデジタル化された値をつかって処理をする予定です。これは低速の処理なのですかね? >>従って、抵抗値はカタログデータ通りのRL2.2Kで、そして波形でなければADCの値を基にレベルを示せば希望している結果になるかと →音声信号解析などを行う予定ではないので、基準点からの電圧の増減を取れれば目的が実現できると考えています。 >>(中間値は関係なく)無音状態を’ニュートラル’として考えた場合、これを最低値として考え、最大(最大の音)の値の間でデータが変動すれば目的が達せられるのでは? →基準点を512に上げるのではなく、基準点を0のままでコンデンサ側の電圧上昇のみを取得したほうがよい という認識で間違いないでしょうか? --- 大変恐縮ですが、 コンデンサマイクの値を取得する回路で、 ・基準点(ニュートラル時)が2.5V(512)になる。 ・0~5V (0~1024)を取る。 ・倍率が1~20倍ほどを変更できる。 といった回路のアイディアをお教えいただけますと幸いです。 --- **変更点 2016.11.18** ------------------ トランジスター(2SC1815)で増幅を行っているサイトを新たに参考にしました。 【きむ茶工房ガレージハウス】音センサー(マイク)でLEDを点灯させます その結果、電圧の分圧をやっと理解しまして、次のようにすることで2.5V(512)の基準点を安定して取ることができました。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/35ea23754c46e6bf7b720085401e8333.jpeg) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/9446d96b40af999b56da1d8766428cc6.jpeg) 基準点を取れてから試して見たところ、やはり増幅せずに使うには信号が小さすぎるようです。 このままトランジスターで増幅を行ってみようと思います。 参考にしたサイトではトランジスターを二重に配置していましたが、一重でどの程度増幅されるか試してみることにします。 お教えいただいた流れとして 1増幅率を目的の値(0~5V の0~1024を取るよう)にする 2基準点を目的の値(2.5vの512)にする ことで今回の目的を達成できそうです。 今回欲している増幅器があるかについては質問内容を増幅器だけにまとめて質問し直そうと思います。 ご回答いただきありがとうございました。
回答: まず’1.アンプ(増幅器)は不要であるか?’については参照されたサイトでも書かれている通りで、ノイズに’音’が埋もれないためや、伝送の時の信号の劣化を抑えるのに’あったほうが良い’ですね。 ’3.強い振動の後に、コンデンサマイクの値がすぐに戻らない’は、使用されたマイクの仕様をみるとRL=1KやRL=2.2Kと定格の値がありますが、実際は8Kで復帰に掛かる電流が不足しているためですね。マイクとArduinoの接続にコンデンサーを入れているのは直流成分が直接Arduinoに流れ込まないようにするためです。 最後に'2.信号の基準点はどのように指定するか'は逆方向で考えていくと分かりやすいのですが、ADCの電圧範囲内に信号が収まるように回路を用意。回路は無信号の時に5Vの半分の2.5Vにしたい。となるとOPAMPでその範囲に収まるように抵抗値を決定。その入力にはコンデンサーマイクを使用する。と考える。 ここまで決まればまずOPAMPは5Vの単電源で動くもので0~5Vの範囲でスイングするからレール to レールのもの。(出力がVcc、つまり電源範囲を超えることは無いからある意味Arduinoの保護回路) それで回路と参照を見てみるとLM386の回路そのまま使えば簡単ですね。(回路図でPIN6にVs=Vcc=5V)を忘れないように。それと参照サイトの回路図にもRLは2.2Kになってますよ。 これからアンプの先の信号の電圧を確認すればADCからの値の処理が必然的に決まると思います。