Korg SQ-1のGate出力は2系統しかありません。自作のリズムマシンのKIK01と同期するためにGate信号を増やすモジュールを作りました。
ブロック図
SQ-1はSync信号が出ていますので、これを間引いてKIK01に入力するGate信号とします。シーケンスパターンの設定は簡単に8PのDIPスイッチで行います。ボタンを並べたりちゃんとしたユーザーインターフェースを作るのは骨の折れる仕事ですし、自作するよりもう1台SQ-1を購入して同期させたほうが安く済むかもしれません。
コントローラーとしてArduino Pro Miniを2個使用しました。
SQ-1のSync信号は5Vですが、Gate信号は10Vですので、間違ってSQ-1のGate出力をつないでも大丈夫なように入力に保護回路を入れています。
電源はArduino Pro Miniにもリニアレギュレータが載っていますが、あまり性能が良くないので別途7805を使った5V電源を載せています
回路図
外観
ケースはタカチPB-2です。最近このケースのサイズのバリエーションが増えたようですね。
背面の穴あけを左右逆に間違えてしまって、背面のパーツの配置は間に合わせです。
Korg SQ-1と接続
9V電源で、電源電流は35mA~38mA程度です。
Arduinoのスケッチ GateSequncer_01
//
// Gate Sequencer
// Sync-in -> Gate sequence
//
// 2021.04.27
//
#include <MsTimer2.h>
#define PIN_SYNC_IN (2)
#define PIN_GATE_OUT (12)
#define PIN_GATE_LED (11)
#define PIN_PULSE_WIDTH (A0)
#define CNT_N (8)
byte sequence[CNT_N] = {0};
int cnt = 0;
int pulseWidth = 20;
void gateOff()
{
digitalWrite(PIN_GATE_OUT, LOW);
digitalWrite(PIN_GATE_LED, LOW);
}
void step()
{
digitalWrite(PIN_GATE_OUT, sequence[cnt]);
digitalWrite(PIN_GATE_LED, sequence[cnt]);
cnt++;
if (cnt >= CNT_N) {
cnt = 0;
}
MsTimer2::set(pulseWidth, gateOff);
MsTimer2::start();
}
void setup() {
pinMode(PIN_SYNC_IN, INPUT);
pinMode(PIN_GATE_OUT, OUTPUT);
pinMode(PIN_GATE_LED, OUTPUT);
// DIP switch
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
pinMode(6, INPUT_PULLUP);
pinMode(7, INPUT_PULLUP);
pinMode(8, INPUT_PULLUP);
pinMode(9, INPUT_PULLUP);
pinMode(10, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(PIN_SYNC_IN), step, RISING);
}
void loop() {
// Read DIP switch
sequence[0] = !digitalRead(3);
sequence[1] = !digitalRead(4);
sequence[2] = !digitalRead(5);
sequence[3] = !digitalRead(6);
sequence[4] = !digitalRead(7);
sequence[5] = !digitalRead(8);
sequence[6] = !digitalRead(9);
sequence[7] = !digitalRead(10);
// Read pulse width
pulseWidth = analogRead(PIN_PULSE_WIDTH) / 10; // 0~102 ms
}
Sync信号の受信はハードウェア割り込みで行っています。出力Gate信号をオフにするタイミングを取るためにMsTimer2を利用しています。
Arduinoには2枚とも同じスケッチを書き込みます。
出力例
C1:Gate1 C2:Gate2
メモ:
電源の入れ方によって、2枚のArduinoのシーケンスの開始がずれる場合があります。RSTボタンを押して同時にリセットをかけると同期します。起動時に同期させる仕組みを入れたほうが良いと思います。