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と戯れてしまった…。試験前って、無性に違うことやりたくなるんだよなぁ…)

ということで、また次回をお楽しみに。