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ボタンを押して同時にリセットをかけると同期します。起動時に同期させる仕組みを入れたほうが良いと思います。
0 件のコメント:
コメントを投稿