PASのブログ

PASの中の人が書く雑記ブログです。

アナログマルチエフェクターを作ろう②→アナマル②

アナログマルチエフェクターを作ろう、は長いのでアナマルにします。

前回は、ArduinoIDEのインストールからLチカまでやりました。

実はこれで、スイッチを制御するという目的の何割かは終わっています。 なので今日はそのあたりから解説していきます。

そもそもマイコンでスイッチャーを作るってどういうこと?

何をするのか目的がはっきりしないと説明が頭に入ってこないと思いますので、まずは、そのあたりを説明します。

スイッチの使い方

10年以上前に書いた絵で恐縮ですが転載します。

スイッチは、エフェクターにおいては主にバイパスとエフェクトの切り替えに使うわけですが、接続の仕方によっては問題が起きることがあります。

f:id:pas_fx:20200602231243p:plain
良くないスイッチの使い方

OFF(バイパス)の時、エフェクト回路の入力がどこにも繋がらないことなどが原因で、ノイズが発生したり、切替時にノイズが大きく発生したりと良くないことがありますので、通常はこうします。

f:id:pas_fx:20200602231630p:plain
一般的なスイッチの使い方
OFFの時は入力がグランドに繋がり、つまり安定しますし、無信号が入力されたまま回路は動作していますが、無信号入力なので出力から出てくるノイズも最小限です。 当然電源の揺れも最小限です。。。。

と。

リクツは置いておいて、このように使う、とだけ理解して頂ければ大丈夫です。

マイコンではリレーを使う。

リレーとは、内部に電磁石とスイッチが入っていて、電磁石に電圧をかけるとスイッチが切り替わるものです。

イメージとしてはこんな感じです。

f:id:pas_fx:20200602232823p:plain
リレーの使用イメージ 出典:omron

なぜこんなものを使うのかと言いますと、同時に複数のスイッチを切り替えることが出来るからです。

akizukidenshi.com

今回は秋月電子さんで販売されているこれを使います。

f:id:pas_fx:20200602233641p:plain

下から見た、ピンアサイン(どのピンが何の機能か)です。

1と16番ピンがコイル(電磁石)で、4.6.8と13.11.9がスイッチです。

4.6.8で説明すると、コイルに電圧をかけていないときは6と4が繋がり、電圧をかけると4と8が繋がります。

これをもとに、先程のトゥルーバイパスを作ってあげれば良いわけです。

マイコンには何をさせるの?

マイコン(今回はArduino)は、いろんな判定や処理をさせるために使います。

○どのスイッチが押された?
○どのリレーを動作させる?
○どのLEDを点灯させる?
○ディスプレイとかつける?

このよう判定や処理を、プログラム(スケッチ)を書いて覚えさせます。

どこから始めるの?

前回でLEDを(何もわからないまま)点滅させることに成功しましたので、一つずつスケッチを書いては実験し、段階を踏んでいこうと思います。

○スイッチに反応してLEDを点灯させる。
○ディスプレイを表示する。
○マニュアルモード(普通に4つのエフェクターを直列につないだ状態)で作ってみる。
プログラマブルモード(複数のエフェクターを一気に切り替えたりする状態)を作ってみる。
○プログラム変更機能を作ってみる。

だいたいこんな感じで進めていこうと思います。

前回のスケッチ"Blink"の解説

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

何やらとても長いですが、/から/で囲まれた部分と、//からその行の後ろは、コメントアウトと言って、説明やコメントを書くところですので、実際はこれだけです。

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

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   
  delay(1000);                       
  digitalWrite(LED_BUILTIN, LOW);   
  delay(1000);                       
}

これは2つのプロックに分かれています。

void setup() {   }

void loop() {   }

void setup() { }という部分は、プログラムが開始してから1度だけ処理する命令を書きます。 それに対して
void loop() { }という部分は、それ以降延々と繰り返す命令を書きます。

通常のマイコンでは、他にも複雑なことが出来ますが、Arduinoの場合は簡略化されていますが、それでもかなりのことが出来るようです。

pinMode(LED_BUILTIN, OUTPUT);
pinModeは、ピンの動作を入力か出力に設定します。 えーと、ピンというのは、 f:id:pas_fx:20200603005341p:plain この、上と下に並んでいるコネクタです。実際にはマイコン(AVR)につながっています。 Arduino UNOには
・デジタルI/Oピン:x 14
・PWM出力可能ピン:x 6
・アナログ入力ピン:x 6
とありまして、PWMはデジタルと共用しています。

pinMode(ピン番号,入出力の指定)ですから、 ピン番号 = LED_BUILTIN
入出力の指定 = OUTPUT
と書いてあります。
LED_BUILTINとは、元々ArduinoについているLEDです。これは、13番とつながっていますので、逆に言えば pinMode(13, OUTPUT);
と書いても同じように動作します。

digitalWrite(LED_BUILTIN, HIGH);
digitalWriteは、HIGHまたはLOWを、指定したピンに出力します。 LED_BUILTINをHIGHにしなさい、という意味です。
デジタル出力はHIGHまたはLOWの2段階を出力します。
HIGHは、マイコンの電源電圧と同じ電圧。このボードは5V。
LOWは、0Vです。

delay(1000);
delayは、 ms(ミリセカンド、1/1000秒)待ちなさい。という命令です。

つまり、日本語でこのスケッチを書くとこうなります。

一回だけやりなさい
{
LEDを出力にしなさい
}

上から順にぐるぐる回しなさい
{
LEDを点灯させなさい
1秒待ちなさい
LEDを消灯させなさい
1秒待ちなさい
}

このように、マイコンはざっくりと指示しても動けないので、手取り足取り命令してあげる必要があります。
ですが、流石Arduinoは楽そうです。
普通のマイコンだとここに来るまでに細く設定をしてあげる必要があることが多いです。

では、今回はこのへんで。