Da Vinci 32U
Da Vinci 32U に関する記事です。
Da Vinci 32U
Da Vinci 32U は小型の Arduino Leonardo として使う事ができます。ざっくり言えば Leonardo の小型化版です。Leonardo だから "Da Vinci (ダ・ヴィンチ)"、と。KUMA でもよかったんじゃないかなぁ…(^^;A
- MCU: Atmel ATmega32U4
- FLASH: 32KB
- SRAM: 2.5KB
- EEPROM: 1KB
- CLOCK: 16MHz
- OPERATING VOLTAGE: 5V
- USB SERIAL: Atmel ATmega32U4
*1 Strawberry Linux 社の製品で正式な Arduino ではない。 *2 SparkFun 社の製品で正式な Arduino ではない。
MCU は Arduino Leonardo と同じく Atmel ATmega32U4 で、書き込めるスケッチの最大サイズは 28,672 バイト (約 28KB) です。フラッシュメモリが 32KB で、うちブートローダーが 5KB となっています。
時系列で言えば Micro よりも Da Vinci 32U の方が発売が先です。Micro よりも小さく、Micro と違って片面実装なので薄いです。正直 Micro にはいい所がありません。
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 を更新してください。
- <Arduino IDE インストールフォルダ>\hardware\arduino\avr にある boards.txt をデスクトップ等にコピー
- コピーした boards.txt を LF 改行ができるテキストエディタで開く
- 以下の内容を追記する
##############################################################
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.file=da-vinci-32u/da-vinci-32u-master.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}
|
- boards.txt を元の場所に書き戻す
- ドライバの中にあった da-vinci-32u-master.hex を <Arduino IDE インストールフォルダ>\hardware\arduino\avr\bootloaders\da-vinci-32u にコピーする (da-vinci-32u フォルダは作成する)。
UAC が有効な場合、%ProgramFiles% 以下にあるファイルは直接書き換えられないため、ファイルコピーで置き換える必要があります。
Arduino Micro 化
Arduino UNO をお持ちであれば、Da Vinci 32U を Arduino Micro 化する事ができます (USBasp を使ってもできます)。ドライバ未署名の件を回避でき、機器設定ファイルの書き換えも不要なので面倒がなくていいかもしれません。
- Arduino UNO と Da Vinci 32U をいずれかの方法で接続します。ケーブルの色は 共立エレショップの AVRWRT 用ブレッドボード ISP ケーブルに準拠しています。
- Arduino UNO を PC と USB 接続し、ボードを Arduino UNO、ポートを認識されている COM 番号に合わせます。
- Arduino UNO をブートローダ書込装置 (In-System Programmer / In-Circuit Serial Programmer) にするためにスケッチを開きます。[ファイル | スケッチの例 | ArduinoISP] が書込装置にするためのスケッチです。
- Arduino UNO にスケッチを書き込みます。
- [ツール | ボード] でボードを Arduino Micro に変更します。
- [ツール | 書込装置] で書込装置の種類を Arduino as ISP に変更します。
- [ツール | ブートローダーを書き込む] で Arduino Micro 用のブートローダーを書き込みます。
書き込み中には Arduino UNO の (TX / RX) LED が点滅を繰り返します。
- 書き込みが完了したら Arduino UNO と Da Vinci 32U の接続を外し、今度は USB で Da Vinci 32U と PC を接続します。
- ブートローダーが正しく書き込まれていれば、Arduino Micro として認識されます。
なお、Arduino Leonardo をブートローダ書込装置にするには、ArduinoISP のスケッチを一部変更する必要があります (配線は同一です)。
追記: 最近のスケッチでは RESET は 10 番ピンに変更されているようです。
#include "pins_arduino.h"
//#define RESET SS
#define RESET 10
|
Da Vinci 32U のブートローダーに戻したい
上記手順の 5. で Da Vinci 32U を選んで実行してください。boards.txt を書き換えていない場合には、ドライバファイルの中にある da-vinci-32u-master.hex を手動で書き込んでください (USBasp の記事を参照)。
See Also:
チュートリアル
UNO のチュートリアルを参考にしてください。
USB フットスイッチ
Da Vinci 32U は Arduino Leonardo と同等なので、HID キーボードとして動作させる事ができます (ドライバのインストールは不要)。これを利用して USB フットスイッチを作ってみました。
USB フットスイッチは Amazon で何種類も売ってありますが、どれもこれも 「壊れる」 とレビューされています。そこで、踏まれるのがお仕事な KORG PS-1 をスイッチとして使い、フットスイッチを作ろうと思ったのです。なにより Da Vinci 32U を使えばプログラマブルなので、ペダルを踏んだ時の動作を好きなようにカスタマイズできますよね。
部品表は以下の通りです (税込: 8%)。
この他に 3mm 赤色 LEDx4 と 1kΩ抵抗x4、配線材として AWG24 のより線を使っています。予算の都合でペダルは2つにしましたが、最大4つのペダルを接続できるようにしてあります。KORG PS-3 という少し安価なペダルもありますが、プラ製なので耐久性がちょっと心配です (PS-1 は金属製)。
配線は単純にデジタルピンに接続しているだけです (Switch: D2~D5, LED: D8~D11)。Arduino のチュートリアルの最初の方でやる事しかやっていません。スイッチには内部プルアップ抵抗を利用しているため、抵抗は取り付けてありません。
- 穴はすべて手作業で開けていますので、多少位置がズレています。
- 黒い部分は再塗装し、ザグり痕を目立たなくしてあります。塗装に使ったのはミッチャクロン マルチスプレーとアサヒペン 高耐久ラッカースプレー ツヤ消し黒。
- LED は空中配線なので、耐熱絶縁テープ (KAPTON ではなく KOPTAN!) をあちこちに貼ってあります。
- LED は表から押されても引っ込まないようにホットボンドで固定してあります。
- Da Vinci 32U の基板を固定するいい方法を思いつかなかったので、プラダン (ホームセンターに売ってあります) で枠を作って固定しました...流石に基板を両面テープで直接貼り付けるのは嫌だったので。
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 */
#include<Keyboard.h>
/* 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 */
#include<Keyboard.h>
// 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 */
#include<Keyboard.h>
/* 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 へ最初に接続した時に表示されるウィザードは無視して構いません。
ここにある情報が役に立って、「調べる手間が省けたからオマイに飯でもおごってやるよ」 というハートウォーミングな方がいらっしゃいましたら、下のボタンからどうぞ。