Publish 2019.06.09
アナログマルチプレクサを使ってみました。
以前からアナログマルチプレクサなる存在は知っていたものの使ってませんでした。
使ったのはお馴染み?の74HC4051です。
8つのピエゾを74HC4051を使ってESP32に繋げてBLE MIDIでPCと通信してみました。
アナログマルチプレクサを使うとアナログピンを増やすことができるんですが、実際に増えている訳ではなくて、高速でIC内のスイッチを切り替えることで、あたかもアナログピンが増えたかのように扱うことができます。なのでアナログスイッチとも言うらしいです。
さて、まずは回路です。紆余曲折ありまして以下のようになりました。
紆余曲折というのは抵抗とダイオードのことです。
今までは1つピエゾに対して1MΩの抵抗を1つ繋げていただけなんです。こんな感じ。
しかし、これと同じ回路を74HC4051につないで、1つのピエゾ叩くと全部反応しちゃって全く使いものになりませんでした。UNOではかろうじて使えるものの強く叩くとやっぱり他のピエゾも反応しちゃって困りました...
同じ状況の質問を見つけたのですが、完全に解決はしておらず...
しかし、偉大なる先人の自作電子ドラムプロジェクトでは74HC4051が使われてたことを思い出して、上の回路を試したら見事に干渉がなくなったというわけです。
ところで先人のプロジェクトというのはMegaDrumというプロジェクトです
2007年から開発が行われているMIDIトリガーモジュールです。メインのICはATmega324pです。回路図とファームウェアをダウンロードすることができ、部品リストもあって制作可能なんですが、ファームウェアのソースコードは公開されていません。あくまで作れるだけです。とはいえ回路図は参考になります。Vdrumフォーラムのスレッドによると、MegaDrumのインプット部分のアナログ回路はRolandのTD-10に非常に似ているとのことです。
さて、コードです。
特に難しいことはありません。Sparkfunのチュートリアルがわかりやすいです。ただ値をよむだけなら以下のコードを使えばOKです。for文でスイッチを切り替えてるだけです。
これで、以下のように8つのピエゾの値を読めます。
値を読めたので過去のコードを使ってセンシングしてMIDI送れます。
でも、センシング部分に自作ライブラリを使いたいんですよね。
というわけで自作ライブラリをESP32とアナログマルチプレクサに対応させました。
長くなりそうなのでライブラリのアップデート内容については次の記事で。
ライブラリを使ったテスト動画はこちら。