Cover Image for Arduino でユーロラックモジュールから GATE を受け取りたい

Arduino でユーロラックモジュールから GATE を受け取りたい

 

ユーロラックモジュールから安全に Arduino で GATE を受け取るメモです。ネット上にはいろいろな回路が散見されるので、自分的ベストプラクティスをまとめました。

問題 🧐

ユーロラックモジュールからは -12V から +12V の電圧が出力される可能性があります。一方、Arduino の入力ピンが受け取れる電圧は 0V から +5V なので、良い感じに電圧をクランプする必要があります。

解決方法

エミッタ接地の反転スイッチ回路を使うことで、良い感じに電圧をクランプすることできます。マイクロコントローラとして ATMega328p を使っている Mutable Instruments - Grids が今回やりたいことの構成に近いので、こちらのクロック入力回路を参考にしました。

CLOCK IN

LTspice でシミュレーションもしてみます。-12V から +12V の 200Hz のサイン波を入れて出力を確認してみます。青が入力の電圧、緑がクランプされた電圧です。出力が反転し、0V から 5V の間に収まっていることが確認できました ⚡️

LTspice - Simulation

Arduino で GATE を処理してみる

こんな回路・スケッチを用意して、

  • ユーロラックモジュールから受け取った電圧が HIGH なら LED を光らせる
  • ユーロラックモジュールから受け取った電圧が LOW なら LED を消す

な実験をしてみます。

Schematic

const int clockInPin = 2;
const int ledPin = 13;

bool gateState = LOW;

void setup() {
  pinMode(clockInPin, INPUT);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  bool readClock = gateRead(clockInPin);

  if (readClock != gateState) {
    gateState = readClock;
    digitalWrite(ledPin, gateState ? HIGH : LOW);
  }
}

bool gateRead(int pin) {
  // 反転して返す
  return !digitalRead(pin);
}

実験の様子

Doepfer A-146 LFO2 から GATE を与えた様子です。パルス幅にもしっかり追従し、良い感じです。