M5Stackのスピーカボリューム調整機構
ドロイド君開発で必要になったので、M5Stack開発に本腰を入れはじめました。
今回は、手始めに少し前から問題になっている、M5Stackスピーカ爆音問題に取り組んでみました。
M5Stackには、ハードウェア的なボリュームがついておらず、普通に音源を再生するとスピーカーが割れるレベルの音量で再生されてしまいます。
そこで、ボリューム調整機構を取り入れた動画がこちらです。
元々、対策案としてこちらのサイト様(N.Yamazaki's blog)にて、抵抗を使ったボリューム調整法が紹介されていました。
ほほう、なるほど!と思いつつ、これをもう少し応用して、可変抵抗でボリュームを調整する機構を取り入れてみましたので、ご紹介しておきます。
(やり方が合っている保証もないので、自己責任でお願いします)
回路のイメージ
やりたいことは、こんな感じ。
可変抵抗を間にかませ、DAC1の出力とGND間で分圧したものをAMPへ入れてやることで、ボリュームを調整します。
これを実現するためには、ESP32とAMP前コンデンサ間のどこかしらで、可変抵抗挿入用の線出しが必要になります。
しかし、M5Stackが小さくまとまっているため、それをうまくできそうな場所が基板上にない…。(少なくとも私の技術的に)
なので、N.Yamazaki's blog様でもやられているように、元々DAC1から音を出力していたのを止めて、代わりにDAC2から出力します。
そして、その出力をボリューム調整用の可変抵抗にかませたのち、元々のGPIO25(DAC1)経由のAMP結線に戻してやる、という方法をとりました。
使った可変抵抗は、10kΩです。
ハードウェアの変更点
ここにM5Stackがあるじゃろ?
これをこうして
こうじゃ!
今回は、M5Stack内に可変抵抗を収めたかったので、分解して頑張りました。
きっと使うことはないであろうGroveソケットをつぶして、そこに入れ込んでいます。
可変抵抗を入れられるよう、可変抵抗とソケット側をそれぞれ削りました。
ちょうどGNDピンが出ているので、これを可変抵抗に接続しつつ、他のピンはカットします。(写真はカット前の状態)
そして、取り付けてケースに収めた結果がこちら。
M5Stack Grayの色に合わせて可変抵抗も塗装したんですが、あんま綺麗にできなかったやね…。
分解するのが怖い、という方は、素直にスタック先で可変抵抗をかませるのもアリだと思います。
【追記】もう一台のM5Stackで試したのですが、別に分解せんでも、ボトムを外した状態で改造できました。
ソフトウェアの変更点
ポイントとしては以下の2点かと。
音声出力をDAC1からDAC2に変更
基本、GPIO25に対して行っていた設定を、GPIO26に変更すればOK。
M5Stackソースだと、utility/Config.hの#define SPEAKER_PIN 25を26にすればいい感じ?
(動作未確認。私はドロイド君のESP32プログラムを流用しているので、M5Stack用ベースを使っていません…)
ドロイド君プログラムでは、I2Sで音を鳴らしているので、今回はi2s_set_dac_mode(I2S_DAC_CHANNEL_RIGHT_EN) の引数を I2S_DAC_CHANNEL_LEFT_EN に変更しました。
GPIO25(DAC1)をオープンドレインに
回路的には、DAC2の信号をAMPに入れるために、元々のGPIO25(DAC1)の線へ戻すわけですが、AMPだけじゃなくESP32へも信号がいってしまうわけです。
なので、GPIO25をフローティング状態にするため、オープンドレイン設定する必要があります。
ソース的には、pinMode(25, OPEN_DRAIN) でOKのはず。
(一応、GND-GPIO25間の抵抗値測ったら、絶縁表示になりました)
おわりに
やっぱり、ボリューム調節できたほうが、何かと便利よね、うん。
ただし、AMPを通す前の信号線を延ばしているので、音質的にはあまり推奨される方法ではありません。(ノイズが乗りやすくなります。聴感的には特に感じませんでしたが)
元々、M5Stackのスピーカーにそこまで音質を期待している方は少ないと思いますが、一応ご参考まで。
今回は若干雑な記事ですみません。明日、資格の試験なんです。
(勉強もせずM5Stackと戯れてしまった…。試験前って、無性に違うことやりたくなるんだよなぁ…)
ということで、また次回をお楽しみに。
この記事へのコメント等