ArduinoでDavinciResolve用の左手デバイスを自作する

マイコン/Arduino

前々回にArduinoでロータリーエンコーダーを使い、ゲームデバイスを作る方法を紹介しました。

今回はこれを応用して、DavinciResolveを操作するためのデバイスの作り方を紹介します。

ProMicro
「ProMicro」の記事一覧です。

DavinciResolve

無料で使えて高機能な動画編集ソフト・DavinciResolveですが、使っているとこんなデバイスがほしくなってきます。

Amazon.co.jp

ですがなかなか良いお値段になので、趣味レベルで買うにはちょっと気が引けますね。それならば同じようなものを自作してみましょう。

Arduinoはキーボード化するためのライブラリが用意されていますのでそれを利用します。
で、ロータリーエンコーダーやボタンに応じてDavinciResolveのショートカットキーに合わせてキーボードコマンドを設定するだけなので簡単です。

配線図

配線は次の通りにします。

1つ目のロータリーエンコーダーのA相とB相をそれぞれArduinoの20番と21番に接続します。
2つ目のロータリーエンコーダーのA相とB相をそれぞれArduinoの10番と16番に接続します。

ソースコード

#include "Keyboard.h"
#include <Wire.h>
#include <MsTimer2.h>

volatile byte enc1c;
volatile byte enc1p;
volatile byte enc2c;
volatile byte enc2p;

volatile int Counter1 = 0;
volatile int Counter2 = 0;

//ロータリーエンコーダー
const int PinEnc1A = 20;
const int PinEnc1B = 21;
const int PinEnc2A = 16;
const int PinEnc2B = 10;

const int RotOnTime = 25;
const int RotOffTime = 5;

void setup() {
 pinMode(PinEnc1A, INPUT_PULLUP);
 pinMode(PinEnc1B, INPUT_PULLUP);
 pinMode(PinEnc2A, INPUT_PULLUP);
 pinMode(PinEnc2B, INPUT_PULLUP);

 Keyboard.begin();
 MsTimer2::set(1, ROTALY); // 1msごとに割り込み
 MsTimer2::start();
}

void loop() {
 if (Counter1 > 0)
 {
  Keyboard.press(KEY_LEFT_SHIFT);
  Keyboard.press(KEY_LEFT_CTRL);
  Keyboard.press('-');
  delay(RotOnTime);
  Keyboard.releaseAll();
  delay(RotOffTime);
  Counter1--;
 }
 else if (Counter1 < 0)
 {
  Keyboard.press(KEY_LEFT_CTRL);
  Keyboard.press('-');
  delay(RotOnTime);
  Keyboard.releaseAll();
  delay(RotOffTime);
  Counter1++;
 }

 if (Counter2 > 0)
 {
  Keyboard.press(KEY_RIGHT_ARROW);
  delay(RotOnTime);
  Keyboard.releaseAll();
  delay(RotOffTime);
  Counter2--;
 }
 else if (Counter2 < 0)
 {
  Keyboard.press(KEY_LEFT_ARROW);
  delay(RotOnTime);
  Keyboard.releaseAll();
  delay(RotOffTime);
  Counter2++;
 }
 delay(1);
}

void ROTALY()
{
 enc1c = (digitalRead(PinEnc1A) << 1) | (digitalRead(PinEnc1B));
 if (!(enc1c == enc1p))
 {
  byte enc1 = enc1p << 2 | enc1c;
  if ( enc1 == 0b0001) //0b0001
  {
   Counter1++;
  }
  else if (enc1 == 0b0100) //0b0100
  {
   Counter1--;
  }
  enc1p = enc1c;
 }
 enc2c = (digitalRead(PinEnc2A) << 1) | (digitalRead(PinEnc2B));
 if (!(enc2c == enc2p))
 {
  byte enc2 = enc2p << 2 | enc2c;
  if ( enc2 == 0b0001) //0b0001
  {
   Counter2++;
  }
  else if (enc2 == 0b0100) //0b0100
  {
   Counter2--;
  }
  enc2p = enc2c;
 }
}

やっていることは前々回紹介したものと全く同じです。
エンコーダー1には拡大縮小、エンコーダー2にはフレーム送り/戻りを割り当てています。

キーボードよりも直感的に操作ができるので、これだけでも相当に編集効率を上げられます。そして何よりも、つまみをグリグリしながら編集するのは楽しいです。

”DavinciResolve ショートカット”などで検索すれば一覧がでてくるので、自分の好きな機能を割り当ててみてください。

コメント