Anycubic MEGA-S向け改造の備忘録2-1(スピーカー静粛化)
MEGA-Sは電源入れたときとかタッチパネル押したときとかの音が結構気になる。電源入れたときの音はカスタムファームウェアを使えば鳴らなくなるので良かったのだが、タッチパネルの音はファームウェアをいじってもピコピコやかましかった。
どうもスピーカーが2つあるらしく、タッチパネルのピコピコはその違う方のスピーカーをどうにかする必要があるらしかった。
いざ分解
ひとまず蓋を開ける。すぐ見えてくるのはひっくり返った円筒形のスピーカー(図中赤丸)で、これが純正ファームウェアでの起動音や、Marlinファームで設定できるサウンドを鳴らしているらしい。
このスピーカーに対しては、先端の穴を塞いであげればかなり音が軽減できるらしく、このためのキャップのデータがThingiverseに上がっていた。
ただ、プログラムでどうにかできるので個人的には優先度が低い。
タッチパネルのピコピコ音は、タッチパネルの基盤上のスピーカーから鳴っていた。
そしてこのスピーカー、厄介なことに穴が側面にあるのである。
ここまで穴が小さいスピーカーだと、おそらく本体そのものが振動して音出していると思われるので、こいつ全体をグルーガンとか何かしらの接着剤で完全にコーティングしてあげないと、抜本的な解決策にはならないと思われる。
あいにくコーティングできるものはないので、遮音シートを両面テープで貼り付けることにした。
スピーカーは9×9×3mmで、角2mm面取りされた形なのでちょっとめんどかった。
音量の低減効果
確かに少し静かになったが、まだまだピコピコ気になるレベルではある。もとの音量を10(max)としたら7くらいには低減したと思う。夜中にメッシュレベリングするのはまだまだ勇気がいる音量だ。
本格的にどうにかしたかったら、スピーカーを取り外すのがいいんだろうけど、裏側液晶パネルなので、自分の技術でそれができるかはアヤシイ。現実的なのはスピーカーを樹脂封止することくらいか……
あ、コネクタでつながってるだけだからスピーカーついてないLCDタッチパネルに付け替えてもいいのか。まあ検討してみよう。
Anycubic MEGA-S向け改造の備忘録1-1(Marlinビルド関連)
Anycubic MEGA-Sのタッチパネルはタッチすると毎回電子音が鳴るのだが、メッシュレベリングするときとかはやかましくなってきたので、ファームウェアいじって音がならないようにできないかを試してみた。
Configuration.hの書き換え
モータードライバーを一部だけTMC2208にした場合とかは、ここの設定を書き換えて.hexファイルを出力してあげる必要があるので、おそらくここだろうと思い、soundで検索をかけたところ、
あった。
ここの下を更に見ていくと、
// The duration and frequency for the UI feedback sound.
// Set these to 0 to disable audio feedback in the LCD menus.
//
// Note: Test audio output with the G-Code:
// M300 S<frequency Hz> P<duration ms>
//
#define LCD_FEEDBACK_FREQUENCY_DURATION_MS 0
#define LCD_FEEDBACK_FREQUENCY_HZ 0
こんな記述を見つけた。どうも一番下の2行の数字を設定してあげれば、LCDタッチパネルのサウンドフィードバックの持続時間と周波数(音の高さ)がそれに反映されるみたいで、0にすると音を無効化できるらしい。
ひとまず上のように0を入れてcuraでファーム焼き直してみた。
動作確認
結論から言うと、タッチパネルを押したときの音は変化しなかった。
ただ、印刷開始と終了時のビープが鳴らなくなったので、これはそっちの設定用の変数だったみたい。
まだまだ理解が足りないみたいだ。
今回使用したMarlinのバージョン
Marlin-Ai3M-v1.4.6
setPWMの動作(PCA9685)
サーボ用ioエキスパンダーのPCA9685を使おうとして出力で詰まったのでメモ
Arduinoでスケッチを書く際、PCA9685の出力はsetPWMを使う
setPWM(channel, on, off)
channel:PCA9685の出力端子番号(0~15)
on:Low→Highへ変化するタイミング
off:High→Lowへ変化するタイミング
参考
ArduinoでPWM出力する場合はanalogWriteを使ってデューティー比を指定する(実質HIGHの幅を指定する)のに対し、setPWMは幅をより細かく指定する(HIGHだけでなくLOWも明示的に与えている)。
なので以下のLチカスケッチを実行すると、LEDの輝度変化が両者で逆になる。
※LEDはPCA9685の0と8に接続し、抵抗220Ωを挟んだ。
ライブラリは秋月電子のサイトからダウンロードしたものを使用。
#include <PCA9685.h>
PCA9685 pwm = PCA9685(0x40);
void setup() {
pwm.begin();
pwm.setPWMFreq(1600);
for(int i=0;i<16;i++){
pwm.setPWM(i,0,0);
}
}
void loop() {
for(int i=0;i<256;i++){
int j=map(i,0,255,0,4096);
pwm.setPWM(8,j,0);
pwm.setPWM(0,0,j);
delay(10);
}
}