Arduino/ESP32C3でエフェクトペダルをWiFiコントロール Arduino/ESP32C3でエフェクトペダルをWiFiコントロール

English

[NEW!]Arduino/ESP32C3でエフェクトペダルをWiFiコントロール

自作ギターエフェクターの作り方を一覧で紹介

エフェクタ自作 歴代作品自作したエフェクトペダルの一覧ページを作りました。好きなエフェクターの自作記事を探してみてください。

基板のタイプ(万能基板、スルーホール/面実装プリント基板)や、ケースのサイズ(ノーマル、ミニ)ごとに、どのように自作したかの記事が見られます。

自作ギターエフェクター一覧ページを見る

【目次】

iPhoneやPCからアンプやエフェクタを操作
Arduinoを使ってエフェクトペダルをコントロール
エフェクトペダル WiFiコントローラの構成
実現性の確認
Arduinoのソースコード
今後の計画
[参考] PT2399 + V571で無調整で確実に音が出るディレイペダル自作

iPhoneやPCからアンプやエフェクタを操作

最近、PCやiPhone、iPadからアンプやエフェクタのツマミを操作する製品が登場しています。iPhoneやPCの画面に入力した数値や、画面上のつまみを回すことで、実際のアンプやエフェクタの音を変えたりすることができます。

実際の製品の殆どは、アナログ回路の可変抵抗等を操作する訳ではなく、DSP(デジタル処理プロセッサ)のパラメータをソフトウエアで操作する仕組みになっています。多くの製品が、マイコン(ARM Cortex系)とDSP(アナログデバイセズ SHRAC)の組み合わせでできています。

私は、アナログにこだわったギターエフェクトペダルを数多く自作してきました。アナログエフェクターは、可変抵抗(ボリューム)のツマミを回して音を変化させています。そこで、自作可能なマイコンボードを使って、今まで作ってきたエフェクタのボリュームノブを、iPhoneやPCをからコントロールすることに挑戦してみます。

Arduinoを使ってエフェクトペダルをコントロール

Arduinoは、プログラミングが簡単で、ライブラリが豊富な開発環境です。販売されているCPUボードは、マイコン、ペリフェラルの組み合わせが多種多様で、目的に合わせて選ぶことができ、価格も非常に安価です。

今回は、Arduinoでプログラミングができ、WiFiが使えるIoT向けのボード「Seeed XIAO ESP32C3」を使ってみました。

CPUはオープンソースの「RISC-V(ブイでなくファイブ)、32bit」が使われており、160MHzで動作します。

秋月電子通商さんで、なんと千円でお釣りが来る価格でした。

エフェクトペダル WiFiコントローラの構成

Seeed XIAO ESP32C3に、キャラクタディスプレイ、ロータリーエンコーダ、タクトスイッチ、デジタルポテンショメーター(デジタルボリューム)を組み合わせて構成してみようと思います。ESP32C3には、i/oピンが11本しか無いので、割り振りを考えて、各デバイスとの接続ライン数を図中に記載しています。

実現性の確認

ブレッドボードで試行

実際に実現できるかを確認するために、ブレッドボードに組み上げ、Arduinoの開発環境でプログラムを書きながら試してみました。ESP32C3のセットアップ方法と、LEDを点滅させるサンプルは、開発元のSeeedのサイトに掲載されていますので、簡単にスタートできました。

ESP32C3はIoT向けのボードのため、非常に小さく、ほぼ10円玉くらいの大きさです。WiFiアンテナの極小端子がついており、アンテナも添付されています。黒い四角いシートにアンテナの導体が印刷されています。感度を計測したわけではないですが、このアンテナでなんの問題もなくWiFi送受信できます。

LCDキャラクタディスプレイを接続

パラメータなどの表示様に、16文字X2行のLCDキャラクタディスプレイ(AQM1602Y)を使ってみました。秋月電子通商で、安く売っているものです。ESP32C3の「SDA」と「SCL」の端子にI2Cで接続するだけで使えます。電源電圧は3.3Vのため、ESP32C3が出力する3.3V電源をそのまま使っています。

Arduinoの表示用のライブラリ「ST7032」があり、簡単に内蔵のキャラクタが表示できます。コントラストはコマンドにより設定する方法になっており、回路は簡略化できてよいのですが、コントラスト値を誤ると文字が全く見えないので、最初は動いているのかが分からず、戸惑ってしまいました。


ArduinoのI2C端子をLCDに接続

ArduinoにWebServerを実装

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)デジタルポテンショメーターにシリアルでパラメータを設定し、抵抗値を変える


HTTPアクセスのシーケンス


ブラウザからのパラメータを受信してLCDに表示した様子

参考:Arduinoのソースコード

■Webブラウザに表示するページデータ (index_html.ino)

■Arduinoプログラム (ESP32C3_HTTPD.ino)

アナログエフェクトペダルのコントロール

可変抵抗に Analog Devices 「AD8403ARZ100」を使用

デジタルポテンショメーターには Analog Devicesの「AD8403ARZ100」を使ってみようと思っています。100kΩの可変抵抗が4つ入っており、256ステップで抵抗値を変えられます。i/oは3線のシリアルです。共立エレショップで購入できるようです。
この可変抵抗に自作したアナログエフェクトペダルのボリューム部分に接続すれば、ESP32C3でエフェクト量などの調整ができます。

ただ、このチップの電源電圧は5.5Vまでなので、9V系のエフェクトペダルの回路に合わせるには、工夫が必要かもしれません。


AD8403 Functional Block Diagram

ArduinoのSPI(Serial Peripheral Interface)動作

ArduinoのSPI機能を使って、シリアル信号の出力を確認してみました。ライブラリには標準の「SPI」を使っています。XAIO ESP32C3の11本のi/oのうち、シリアル用のピン「MOSI、MISO、SCK」を使っています。シリアル通信にはこれらの信号の他に、シリアルのラッチに使う信号(Arduino SPIの「SS」)が必要です。ただ、ESP32C3には11本しかi/oがなく、この3本以外はすべて塞がってしまったので、使用しない入力ピン「MISO(Master In Slave Out)」のピンを強引にデジタル出力ピンにアサインして使ってみました。ライブラリ内部では、何かが干渉して問題があるかもしれませんが、とりあえず動作しているのでOKとします。下の画面が、デジタルポテンショメーター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に接続して、動作を確認してみました。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を使ったノイズレスディレイ」を改造し、ディレイタイムとフィードバック、エフェクトレベルをコントロールできるペダルを作ってみようと思っています。

[参考] PT2399 + V571で無調整で確実に音が出るディレイペダル自作

BBD以外のデバイスで、ディレイペダルに「PT2399」が使われ始めました。このチップは内部はデジタル処理されていますのでアナログではないのですが、最近ではBBDを使用したアナログディレイの代わりに、アナログっぽい音を出すICとして、各社のディレイペダルに使われています。

そこで、好きが高じて、4台目のディレイペダルになりますが、DM-3の回路をベースに、BBDをPT2399に変更し、V571を組み合わせて、昔のdbxやDolbyのノイズリダクションに似た音を出すディレイペダルを作ってみました。

ノイズレス!ディレイペダル 手軽なディレイIC「PT2399」使用


【Googleキーワード検索】

当サイト内のGoogleキーワード検索ができます。素早く記事を見つけられます。

<自作を始める>
自作情報サイト
プリント基板
万能基板
ストリップボード
KiCad
面実装

<エフェクタージャンル>
オーバードライブ
ディストーション
オートワウ
アナログディレイ
アナログコーラス
アナログオクターバー
コンプレッサー
フェイザー
ノイズリダクション
ノイズゲート
キャビネットシミュレータ

<自作部品>
パーツの購入
スルーホール
THD
面実装
SMD
チップ部品
ケース

<エフェクタボード>
エフェクターボード
ソルダーレスケーブル

<デバイス名称>
オペアンプ
BBD
VCA
トランスコンダクタンスアンプ
Coolaudio
ゲルマニウムダイオード
2SK30A(FET)
V3205(BBD)
V3207(BBD)
V2164(VCA)
V3102(Clock Driver)
V571(Compander)

<自作ツール>
ハンダコテ
コテ台
ワイヤーストリッパ
テスター
電動ドリル
テーパーリーマー
ソケットレンチ
配線用ワイヤー
デジタルオシロスコープ

<Tips>
ホームレコーディング
スイッチャー
エフェクターラベル
フェンダーストラト
ピックガード
ステージピアノ
モニターヘッドホン
DAW
Studio One