Da Vinci 32U

Da Vinci 32U に関する記事です。



Da Vinci 32U

Da Vinci 32U は小型の Arduino Leonardo として使う事ができます。

MCU は Arduino Leonardo と同じく Atmel ATmega32U4 で、書き込めるスケッチの最大サイズは 28,672 バイト (約 28KB) です。フラッシュメモリが 32KB で、うちブートローダーが 5KB となっています。

See Also:


購入

Strawberry Linux で購入できます。Arduino として使う場合にはブートローダー入りのものを購入する必要があります。

ピンヘッダやピンソケットも付属しており、普通の Arduino と同じ感覚で使えるようにしたり、ブレッドボードに直接挿して使えるようにしたりできます。ただ、付属のピンヘッダは太ピンヘッダなので、ブレッドボードに挿す事があるのであれば、別途細ピンヘッダを用意した方がいいように思います。


各部詳細

形状は Arduino Micro に似ていますが、ピンアウトは異なります。Da Vinci 32U での Arduino 相当のピン配置図は以下の通りです。


セットアップ

Strawberry Linux のサイトからドライバを入手します。但し、このドライバは署名されていないため、Windows 8.x 以降の Windows へインストールするにはちょっとコツが要ります

また、最近の Arduino IDE だと readme.txt の通りに boards.txt をコピーし、Da Vinci 32U を選んでビルドしてもコンパイル時にエラーが出ます。以下の手順で boards.txt を更新してください。

  1. <Arduino IDE インストールフォルダ>\hardware\arduino\avr にある boards.txt をデスクトップ等にコピー
  2. コピーした boards.txt を LF 改行ができるテキストエディタで開く
  3. 以下の内容を追記する
    ##############################################################
    
    davinci.name=Da Vinci 32U
    
    davinci.upload.tool=avrdude
    davinci.upload.protocol=avr109
    davinci.upload.maximum_size=28672
    davinci.upload.maximum_data_size=2560
    davinci.upload.speed=57600
    davinci.upload.disable_flushing=true
    davinci.upload.use_1200bps_touch=true
    davinci.upload.wait_for_upload_port=true
    
    davinci.bootloader.tool=avrdude
    davinci.bootloader.low_fuses=0xff
    davinci.bootloader.high_fuses=0xd8
    davinci.bootloader.extended_fuses=0xcb
    davinci.bootloader.path=caterina
    davinci.bootloader.file=davinci.hex
    davinci.bootloader.unlock_bits=0x3F
    davinci.bootloader.lock_bits=0x2F
    
    davinci.build.mcu=atmega32u4
    davinci.build.f_cpu=16000000L
    davinci.build.vid=0x1774
    davinci.build.pid=0x8032
    davinci.build.core=arduino
    davinci.build.usb_product="Da Vinci 32U"
    davinci.build.board=AVR_DAVINCI32U
    davinci.build.variant=leonardo
    davinci.build.extra_flags={build.usb_flags}
  4. boards.txt を元の場所に書き戻す

UAC が有効な場合、%ProgramFiles% 以下にあるファイルは直接書き換えられないため、ファイルコピーで置き換える必要があります。


Arduino Micro 化

Arduino UNO をお持ちであれば、Da Vinci 32U を Arduino Micro 化する事ができます。ドライバ未署名の件を回避でき、機器設定ファイルの書き換えも不要なので面倒がなくていいかもしれません。

  1. Arduino UNO と Da Vinci 32U をいずれかの方法で接続します。ケーブルの色は 共立エレショップの AVRWRT 用ブレッドボード ISP ケーブルに準拠しています。
  2. Arduino UNO を PC と USB 接続し、ボードを Arduino UNO、ポートを認識されている COM 番号に合わせます。
  3. Arduino UNO をブートローダ書込装置 (In-System Programmer / In-Circuit Serial Programmer) にするためにスケッチを開きます。[ファイル | スケッチの例 | ArduinoISP] が書込装置にするためのスケッチです。
  4. Arduino UNO にスケッチを書き込みます。
  5. [ツール | ボード] でボードを Arduino Micro に変更します。
  6. [ツール | 書込装置] で書込装置の種類を Arduino as ISP に変更します。
  7. [ツール | ブートローダーを書き込む] で Arduino Micro 用のブートローダーを書き込みます。

    書き込み中には Arduino UNO の (TX / RX) LED が点滅を繰り返します。
  8. 書き込みが完了したら Arduino UNO と Da Vinci 32U の接続を外し、今度は USB で Da Vinci 32U と PC を接続します。
  9. ブートローダーが正しく書き込まれていれば、Arduino Micro として認識されます。

なお、Arduino Leonardo をブートローダ書込装置にするには、ArduinoISP のスケッチを一部変更する必要があるようです (配線は同一です)。

#include "pins_arduino.h"
//#define RESET     SS
#define RESET     10

See Also:


チュートリアル

UNO のチュートリアルを参考にしてください。


USB フットスイッチ

Da Vinci 32U は Arduino Leonardo と同等なので、HID キーボードとして動作させる事ができます (ドライバのインストールは不要)。これを利用して USB フットスイッチを作ってみました。

USB フットスイッチは Amazon で何種類も売ってありますが、どれもこれも 「壊れる」 とレビューされています。そこで、踏まれるのがお仕事KORG PS-1 をスイッチとして使い、フットスイッチを作ろうと思ったのです。なにより Da Vinci 32U を使えばプログラマブルなので、ペダルを踏んだ時の動作を好きなようにカスタマイズできますよね。

部品表は以下の通りです (税込: 8%)。

品名 購入先 単価 数量 金額
ダ・ヴィンチ32U with Arduino Bootloader Strawberry Linux 1,620 1 1,620
金属ケース YM-100 秋月電子 510 1 510
6.3mm モノラルジャックパネル絶縁型 MJ-185LP 90 4 360
USB ケーブル Aオス-ミニBオス 1.5m 110 1 110
KORG ペダルスイッチ PS-1 Amazon 1,418 2 2,836
合計 (送料別) 5,436

この他に 3mm 赤色 LEDx4 と 1kΩ抵抗x4、配線材として AWG24 のより線を使っています。予算の都合でペダルは2つにしましたが、最大4つのペダルを接続できるようにしてあります。KORG PS-3 という少し安価なペダルもありますが、プラ製なので耐久性がちょっと心配です (PS-1 は金属製)。

配線は単純にデジタルピンに接続しているだけです (Switch: D2~D5, LED: D8~D11)。Arduino のチュートリアルの最初の方でやる事しかやっていません。スイッチには内部プルアップ抵抗を利用しているため、抵抗は取り付けてありません。

Da Vinci 32U が小さいので、LED インジケータをオミットしてペダルスイッチのコードを直接配線すれば、フリスクケースに収まるサイズでフットスイッチが作れると思います。


ソフトウェア (Windows 10 仮想デスクトップ切替)

Windows 10 で利用できる仮想デスクトップの切り替えを行うスケッチです。仮想デスクトップは 〔Ctrl〕+〔Win〕+〔←〕/〔→〕で切り替えられます。新規仮想デスクトップを作るには〔Ctrl〕+〔Win〕+〔D〕です。〔Win〕キーのキーコード定数は Arduino 言語で KEY_LEFT_GUI または KEY_RIGHT_GUI として定義されています。

/* Windows 10 Virtual Desktop */

/* DIGITAL PIN */
const int BTN_PIN_LEFT  =  2;
const int BTN_PIN_RIGHT =  3;

const int LED_PIN_01    =  8;
const int LED_PIN_02    =  9;

// KEY
int PRESSED_KEY = 0;

void setup() {
  pinMode(BTN_PIN_LEFT , INPUT_PULLUP);
  pinMode(BTN_PIN_RIGHT, INPUT_PULLUP);
  pinMode(LED_PIN_01, OUTPUT);
  pinMode(LED_PIN_02, OUTPUT);
  Keyboard.begin();
}

void loop() {
  /* LED ON */
  if      (digitalRead(BTN_PIN_LEFT) == LOW) {
    PRESSED_KEY = KEY_LEFT_ARROW;
    digitalWrite(LED_PIN_01, HIGH);
  }  
  else if (digitalRead(BTN_PIN_RIGHT) == LOW) {
    PRESSED_KEY = KEY_RIGHT_ARROW;
    digitalWrite(LED_PIN_02, HIGH);
  }
  else
    return;
  /* KEY SEND */
  Keyboard.press(KEY_LEFT_CTRL);
  Keyboard.press(KEY_LEFT_GUI);
  Keyboard.press(PRESSED_KEY);
  delay(50);
  Keyboard.releaseAll();
  delay(200);
  /* LED OFF */
  if      (PRESSED_KEY == KEY_LEFT_ARROW)
    digitalWrite(LED_PIN_01, LOW);
  else if (PRESSED_KEY == KEY_RIGHT_ARROW)
    digitalWrite(LED_PIN_02, LOW);
}

このスケッチでは2つのペダルを使用します。ペダルを踏んだ瞬間、インジケーターとして LED が点灯します (切り替えの間のみ)。

単純に左右カーソルキーだけを送るようにすればパワポのページ送りができるので、ろくろを回すのが捗るかもしれませんよ? (^^;A


ソフトウェア (Sysinternals Desktops 仮想デスクトップ切替)

Windows 8.x 以前の Windows でも、Sysinternals (Microsoft のフリーウェア群) にある Desktops をインストールすれば仮想デスクトップを導入できます。

Windows 10 の仮想デスクトップとの違いは最大で 4 つの仮想デスクトップしか作れない事と、仮想デスクトップ切り替えが絶対指定であるという事です。Windows 10 の場合、仮想デスクトップ #1 から仮想デスクトップ #4 へ直接切り替える事ができませんが、Desktops ならそれができます。また、Windows 10 へ Desktops をインストールした場合、Windows 10 の仮想デスクトップとは別に扱われます。

/* Sysinternals Desktops */

// SETTINGS
#define USE_ALT_KEY    // Alt キーを伴う
#define USE_CTRL_KEY   // Ctrl キーを伴う
//#define USE_SHIFT_KEY  // Shift キーを伴う
//#define USE_GUI_KEY    // Windows キーを伴う

#define USE_FUNC_KEY   // F1, F2, F3, F4 を使う (使用しない場合: 1, 2, 3, 4)

/* DIGITAL PIN */
const int BTN_PIN_01 =  2;
const int BTN_PIN_02 =  3;
const int BTN_PIN_03 =  4;
const int BTN_PIN_04 =  5;

const int LED_PIN_01 =  8;
const int LED_PIN_02 =  9;
const int LED_PIN_03 = 10;
const int LED_PIN_04 = 11;

// KEY
#ifdef USE_FUNC_KEY
int KEY1 = KEY_F1;
int KEY2 = KEY_F2;
int KEY3 = KEY_F3;
int KEY4 = KEY_F4;
#else
int KEY1 = '1';
int KEY2 = '2';
int KEY3 = '3';
int KEY4 = '4';
#endif

int PRESSED_KEY = KEY1;
int OLD_KEY = KEY1;

void Toggle_LED(int aKey, int aMode) {
  if      (aKey == KEY1)
    digitalWrite(LED_PIN_01, aMode);
  else if (aKey == KEY2)
    digitalWrite(LED_PIN_02, aMode);
  else if (aKey == KEY3)
    digitalWrite(LED_PIN_03, aMode);
  else if (aKey == KEY4)
    digitalWrite(LED_PIN_04, aMode);
}

void setup() {
  /* PIN MODE */
  pinMode(BTN_PIN_01, INPUT_PULLUP);
  pinMode(BTN_PIN_02, INPUT_PULLUP);
  pinMode(BTN_PIN_03, INPUT_PULLUP);
  pinMode(BTN_PIN_04, INPUT_PULLUP);
  pinMode(LED_PIN_01, OUTPUT);
  pinMode(LED_PIN_02, OUTPUT);
  pinMode(LED_PIN_03, OUTPUT);
  pinMode(LED_PIN_04, OUTPUT);
  /* INIT LED */
  digitalWrite(LED_PIN_01, HIGH);
  digitalWrite(LED_PIN_02, LOW);
  digitalWrite(LED_PIN_03, LOW);
  digitalWrite(LED_PIN_04, LOW);
  /* INIT KEYBOARD */
  Keyboard.begin();
}

void loop() {
  /* BUTTON PRESS */
  if      (digitalRead(BTN_PIN_01) == LOW)
    PRESSED_KEY = KEY1;
  else if (digitalRead(BTN_PIN_02) == LOW)
    PRESSED_KEY = KEY2;
  else if (digitalRead(BTN_PIN_03) == LOW)
    PRESSED_KEY = KEY3;
  else if (digitalRead(BTN_PIN_04) == LOW)
    PRESSED_KEY = KEY4;
  else  
    return;
  if (PRESSED_KEY == OLD_KEY) 
    return;
   // LED ON / OFF
  Toggle_LED(PRESSED_KEY, HIGH);
  Toggle_LED(OLD_KEY, LOW);
  OLD_KEY = PRESSED_KEY;
  /* KEY DOWN */
  #ifdef USE_CTRL_KEY
  Keyboard.press(KEY_LEFT_CTRL);
  #endif
  #ifdef USE_SHIFT_KEY
  Keyboard.press(KEY_LEFT_SHIFT);
  #endif
  #ifdef USE_ALT_KEY
  Keyboard.press(KEY_LEFT_ALT);
  #endif
  #ifdef USE_GUI_KEY
  Keyboard.press(KEY_LEFT_GUI);
  #endif
  Keyboard.press(PRESSED_KEY);
  delay(50);
  /* KEY UP */   
  Keyboard.releaseAll();
  delay(200);               
}

このスケッチでは最大で4つのペダルを使用します。ソースコード先頭にある #define をコメントアウト / アンコメントする事で、Desktops のホットキーに合わせる事ができます。

起動時には LED #1 が点灯しています。ペダルを踏んで仮想デスクトップを切り替えると、現在のデスクトップを示す LED がインジケーターとして点灯します (点灯し続けます)。


ソフトウェア (OS X Mission Control 切替)

OS X の Mission Control を切り替えるコードです。Windows 10 仮想デスクトップ切替とほぼ同じですね。

/* OS X  Mission Control */

/* DIGITAL PIN */
const int BTN_PIN_LEFT  =  2;
const int BTN_PIN_RIGHT =  3;

const int LED_PIN_01    =  8;
const int LED_PIN_02    =  9;

// KEY
int PRESSED_KEY = 0;

void setup() {
  pinMode(BTN_PIN_LEFT , INPUT_PULLUP);
  pinMode(BTN_PIN_RIGHT, INPUT_PULLUP);
  pinMode(LED_PIN_01, OUTPUT);
  pinMode(LED_PIN_02, OUTPUT);
  Keyboard.begin();
}

void loop() {
  /* LED ON */
  if      (digitalRead(BTN_PIN_LEFT) == LOW) {
    PRESSED_KEY = KEY_LEFT_ARROW;
    digitalWrite(LED_PIN_01, HIGH);
  }  
  else if (digitalRead(BTN_PIN_RIGHT) == LOW) {
    PRESSED_KEY = KEY_RIGHT_ARROW;
    digitalWrite(LED_PIN_02, HIGH);
  }
  else
    return;
  /* KEY SEND */
  Keyboard.press(KEY_LEFT_CTRL);
  Keyboard.press(PRESSED_KEY);
  delay(50);
  Keyboard.releaseAll();
  delay(200);
  /* LED OFF */
  if      (PRESSED_KEY == KEY_LEFT_ARROW)
    digitalWrite(LED_PIN_01, LOW);
  else if (PRESSED_KEY == KEY_RIGHT_ARROW)
    digitalWrite(LED_PIN_02, LOW);
}

このスケッチでは2つのペダルを使用します。ペダルを踏んだ瞬間、インジケーターとして LED が点灯します (切り替えの間のみ)。

デスクトップ間だけでなく、デスクトップと RDP 等のフルスクリーンアプリケーションを切り替える事もできます。フットスイッチを Mac へ最初に接続した時に表示されるウィザードは無視して構いません。



ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。

メニュー: