自作ギターエフェクターの作り方を一覧で紹介自作エフェクトペダルの一覧ページから、好きな記事を探してみてください。ペダルを使用したオリジナル楽曲もあります。 |
最近、PCやiPhone、iPadからアンプやエフェクタのツマミを操作する製品が登場しています。iPhoneやPCの画面に入力した数値や、画面上のつまみを回すことで、実際のアンプやエフェクタの音を変えたりすることができます。
実際の製品の殆どは、アナログ回路の可変抵抗等を操作する訳ではなく、DSP(デジタル処理プロセッサ)のパラメータをソフトウエアで操作する仕組みになっています。多くの製品が、マイコン(ARM Cortex系)とDSP(アナログデバイセズ SHRAC)の組み合わせでできています。
私は、アナログにこだわったギターエフェクトペダルを数多く自作してきました。アナログエフェクターは、可変抵抗(ボリューム)のツマミを回して音を変化させています。そこで、自作可能なマイコンボードを使って、今まで作ってきたエフェクタのボリュームノブを、iPhoneやPCをからコントロールすることに挑戦してみます。
Arduinoは、プログラミングが簡単で、ライブラリが豊富な開発環境です。販売されているCPUボードは、マイコン、ペリフェラルの組み合わせが多種多様で、目的に合わせて選ぶことができ、価格も非常に安価です。
今回は、Arduinoでプログラミングができ、WiFiが使えるIoT向けのボード「Seeed XIAO ESP32C3」を使ってみました。
CPUはオープンソースの「RISC-V(ブイでなくファイブ)、32bit」が使われており、160MHzで動作します。
Seeed XIAO ESP32C3に、キャラクタディスプレイ、ロータリーエンコーダ、タクトスイッチ、デジタルポテンショメーター(デジタルボリューム)を組み合わせて構成してみようと思います。ESP32C3には、i/oピンが11本しか無いので、割り振りを考えて、各デバイスとの接続ライン数を図中に記載しています。
実際に実現できるかを確認するために、ブレッドボードに組み上げ、Arduinoの開発環境でプログラムを書きながら試してみました。ESP32C3のセットアップ方法と、LEDを点滅させるサンプルは、開発元のSeeedのサイトに掲載されていますので、簡単にスタートできました。
ESP32C3はIoT向けのボードのため、非常に小さく、ほぼ10円玉くらいの大きさです。WiFiアンテナの極小端子がついており、アンテナも添付されています。黒い四角いシートにアンテナの導体が印刷されています。感度を計測したわけではないですが、このアンテナでなんの問題もなくWiFi送受信できます。
パラメータなどの表示様に、16文字X2行のLCDキャラクタディスプレイ(AQM1602Y)を使ってみました。秋月電子通商で、安く売っているものです。ESP32C3の「SDA」と「SCL」の端子にI2Cで接続するだけで使えます。電源電圧は3.3Vのため、ESP32C3が出力する3.3V電源をそのまま使っています。
Arduinoの表示用のライブラリ「ST7032」があり、簡単に内蔵のキャラクタが表示できます。コントラストはコマンドにより設定する方法になっており、回路は簡略化できてよいのですが、コントラスト値を誤ると文字が全く見えないので、最初は動いているのかが分からず、戸惑ってしまいました。
iPhoneやPCからWiFi経由でコントロールするために、ESP32C3にWebServer(HTTPD)のArduino版を実装し、iPhoneやPCのWebブラウザで、エフェクトペダルのボリュームなどのパラメータをESP32C3に渡すことにしました。
Arduinoには、「HttpServerUpdater」の名前で、簡易版WebServerのサンプルがあり、ほぼそのまま使えました。ESP32C3をネットワークに繋いだときのIPアドレス(自宅のWiFiルータが割り付けている)をhttpアクセスし、POSTまたはGETでブラウザからパラメータ送信すると、ESP32C3で受け取ることができます。
WiFiのライブラリには、mDNS(Multicast Domain Name System)の機能があるため、ボード名として「esp32」を登録すると、IPアドレスではなく、「http://esp32.local」でボードをアクセスできます。
【動作シーケンス】 ※詳細はソースコードを
(1)ブラウザからのルートアクセスをトリガにして、ESP32C3内に配列で格納した「設定用WEBページ」の文字を、ブラウザに送信する
(2)iPhoneのブラウザで「設定用WEBページ」にパラメータを設定し、POST/GET送信(submit)する
例) http://esp32.local/setvol?v1=128&v2=92&v3=188
(3)ESP32C3のWebUpdaterが「setvol?v1=128&v2=92&v3=188」を受け取る
(4)パラメータ(v1=128&v2=92&v3=188)をパースして、LCDに表示する
(5)デジタルポテンショメーターにシリアルでパラメータを設定し、抵抗値を変える
■Webブラウザに表示するページデータ (index_html.ino)
■Arduinoプログラム (ESP32C3_HTTPD.ino)
デジタルポテンショメーターには Analog Devicesの「AD8403ARZ100」を使ってみようと思っています。100kΩの可変抵抗が4つ入っており、256ステップで抵抗値を変えられます。i/oは3線のシリアルです。共立エレショップで購入できるようです。
この可変抵抗に自作したアナログエフェクトペダルのボリューム部分に接続すれば、ESP32C3でエフェクト量などの調整ができます。
ただ、このチップの電源電圧は5.5Vまでなので、9V系のエフェクトペダルの回路に合わせるには、工夫が必要かもしれません。
AD8403 Functional Block Diagram
ArduinoのSPI機能を使って、シリアル信号の出力を確認してみました。ライブラリには標準の「SPI」を使っています。XAIO ESP32C3の11本のi/oのうち、シリアル用のピン「MOSI、MISO、SCK」を使っています。シリアル通信にはこれらの信号の他に、シリアルのラッチに使う信号(Arduino SPIの「SS」)が必要です。下の画面が、デジタルポテンショメーターAD8403に必要な2バイトのデータを送信した様子です。
// SPI setup
SPI.begin();
pinMode(SPI_SS, OUTPUT); // SPI_SS -> D9
digitalWrite(SPI_SS, HIGH);
// ditital pot SPI
digitalWrite(SPI_SS, LOW);
SPI.transfer(ch);
SPI.transfer(encoder_newPos);
digitalWrite(SPI_SS, HIGH);
上から順に、CLK、SDI、/CS
(持っているオシロは2chなので、下の青い波形2つは、Photoshop合成しています)
上のシリアル出力をAD8403に接続して、動作を確認してみました。AD8403の電源は5Vにしましたが、ESP32C3から来るシリアルは3.3Vです。AD8403の仕様書には、デジタル論理のしきい値は2.4Vとありますので、そのまま接続しましたが、動作は問題あリませんでした。
購入したAD8403は、可変できるポットの抵抗値は「100kΩ」のバージョンです。抵抗の可変ステップ数は256ですので、127をシリアルで送信すると、半分の50kΩになるはずです。
下の写真が、AD8403の抵抗値パラメータに「127」、「63」を送信したときの抵抗値をテスターで測った様子です。パラメータに従って、リニアに抵抗値が変化することが確認できました。
127を送信すると、ぴったり1/2の50kΩになりました(LCD上段:パラメータ値127)
63を送信すると、1/4の25kΩになりました(LCD上段:パラメータ値63)
ここまでで、実現性の確認はできました。今後、別ページ「ArduinoでエフェクトペダルをMIDIコントロール」で確認したMIDI接続によるパラメータチェンジも取り込んで、WiFi+MIDIの両方でアナログペダルをコントロールするシステムを考えたいと思います。
次に、プリント基板を制作して、最近作った「PT2399を使ったノイズレスディレイ」を改造し、ディレイタイムとフィードバック、エフェクトレベルをコントロールできるペダルを作ってみようと思っています。
BBD以外のデバイスで、ディレイペダルに「PT2399」が使われ始めました。このチップは内部はデジタル処理されていますのでアナログではないのですが、最近ではBBDを使用したアナログディレイの代わりに、アナログっぽい音を出すICとして、各社のディレイペダルに使われています。
そこで、好きが高じて、4台目のディレイペダルになりますが、DM-3の回路をベースに、BBDをPT2399に変更し、V571を組み合わせて、昔のdbxやDolbyのノイズリダクションに似た音を出すディレイペダルを作ってみました。
■ノイズレス!ディレイペダル 手軽なディレイIC「PT2399」使用