ギター用デジタルチューナーを分解する&改造する

ギター用に使っていたチューナーが壊れました。
クリップチューナーっていうんですかね、マイクで音を拾うのではなく、ヘッドにクリップで挟んで振動を拾うタイプの機器です。

上の商品画像と見比べてもらうとわかりますが、樹脂のクリップが割れてしまいました。5年くらい使っていたので寿命でしょう。
修理も難しそうなので、捨てる前に分解してみます。

分解する

クリップの根元を外してみると、奥にピエゾ素子が見えます。圧力や振動を加えることで電圧を発生する部品です。ギターのピックアップにも使われることがあります(アコギとかに後付けするやつ。エレキギターのは違う仕組み)。

↑こういうの

修理用に分解するときは壊さないように恐る恐るやって苦労する殻割りですが、今回は捨てるものなので勢いよく割ります。

1がピエゾの裏側、2がオペアンプ(電気信号を増幅するやつ)、3の中に周波数の解析と液晶の制御をするマイコンが入っていると思われます。
数字書いてないけど左下にある銀色のは水晶発振子です。特定の周波数で発振するファニーなやつです。
全体的な仕組みとしては

①ギターの振動をピエゾ素子で拾って電気信号に変換
②微弱な電気信号をオペアンプで増幅
③(なんやかんやあって)マイコンで周波数を解析(この時に基準として水晶を使用)
④結果を液晶に表示

という感じだと思います。

だいたいの仕組みはわかりましたね。裏面、液晶側も見てみましょう。

写真の配置がめっちゃわかりにくくて申し訳ないのですが、
一番左の「1」と書いてあるのが基板の裏側、その上に「2」「3」「4」の順番に重なっていました。
2はLEDの光を通すための透明板で、3はそれを拡散させるシート、4が液晶本体です。
4はさらに何枚かの板に分けられそうですが、今回はくっついていたのでそこまでやってません。

ちなみにこういう安価かつ小型の機器は、基板と液晶が線でつながっていないことが多いです。
じゃあ液晶はどうやって電源を取ったり制御信号を受け取っているかというと……

これはパカッと開いたところのイメージなのですが(実際にはこのあいだに2,3のシートが挟まっています)、四角いゴム部品(青矢印部分)がありますよね。これを液晶側の端子と基板側の端子(赤矢印)の間に挟むことによって、接続しています。
これは異方導電性ゴムコネクタというらしいのですが、導電性ゴムと絶縁性ゴムが交互に積層されていて、垂直方向にだけ電気を通すのだそうです。

↑こういう感じ。黒塗りの部分だけ電気を通します。(aitendo商品ページより引用)

分解は以上です。

改造する

クリップはこわれてしまいましたが、要はピエゾに信号が伝わりさえすればいいので、ギターに直接貼ってやればチューナーとして動作はしそうです。

しました。

しましたが、まあそりゃそうだよねという感じで感動は薄いですね。
もうちょっと変わったことをしてみたいですよね。

ピエゾを外して、Arduinoからチューナーに波形を直接流し込んで動かしてみたいと思います。
つまりこういうことです。


↑Wikipedia「水槽の中の脳」より引用、筆者改変

方針としてはこんな感じです

  • だいたい440Hz前後の波形をArduinoから出力
  • 抵抗を挟んで弱めた信号をチューナーに入力
  • 周波数は可変抵抗で調節できるようにする

実装したのがこちらです。

youtu.be

前半は注入している音がわかるように圧電スピーカーをつないで音を出していますが、チューナーは音を拾っているわけではなく、電気信号を直接受信しています。
それを示すために、後半ではスピーカーを外して無音で動作させています。

だからなんだと言われると全くなんでもないのですが、なんとなく征服感は得られました。満足です。

ちなみにここで使っている圧電スピーカーですが、これも中身はピエゾ素子です。

音→電気信号への変換もできるし、逆の電気信号→音の変換もできるんですね。不思議ですね。

最後にArduino用のコードと配線図を載せておきます。

const int potPin = A0;  // ポテンショメータのアナログピン
const int speakerPin = 9;  // 波形の出力ピン

// 周波数の最小値と最大値(A♭〜A#の範囲)
const float minFreq = 415.30; // A♭の周波数(Hz)
const float maxFreq = 466.16; // A#の周波数(Hz)

void setup() {
  pinMode(speakerPin, OUTPUT);
}

void loop() {
  // ポテンショメータの読み取り
  int potValue = analogRead(potPin);

  // 抵抗値をマッピング
  float frequency = map(potValue, 0, 1023, minFreq, maxFreq);

  // 矩形波を出力
  tone(speakerPin, frequency);

  delay(10);
}

抵抗は10kΩです。ピエゾの代わりに5Vのパルスを入れると強すぎるのでこの抵抗を入れています。分圧しないで直列でつないじゃっていいのかよくわかりませんが、ChatGPT君がいいって言うので直列にしました。
可変抵抗のほうは極端な値でなければ何でもいいと思いますが、ここでは10kΩを使っています。

買い換えた新しいチューナーは、特に不満はなかったので同じ機種でもよかったのですが、単に安いからという理由でこれを買いました。

音程が合うとバーンって液晶全体の色が派手に変わるのでわかりやすいです。

以上、チューナー改造記でした。