1.はじめに
パソコンのキーボード、親指がスペース キーを押すだけではもったいない!
ホームポジションから両手を移動させることなく、
よく使用するキーを押せる自作キーボードを作りました。
ご紹介、並びに作り方を説明します。
※(注意事項)製作基板は販売しておりません。展示会等で無料配布予定です。
2.開発経緯・紹介
(1)開発経緯
事の流れは、次の①~⑤の通りです。
①自作キーボードにて、仕事の作業効率を向上させたい。
②作業効率向上をどうすればできるか?
③現在の問題(押しにくいキーがある)を解決すれば良い。
|・キー押す際に、キーの位置を探す
|・キー押す際に、ホームポジションから外れて次の入力が遅れる
④しかし、自分が求めるものがない。
⑤だったら作ろう。
スペースキーしか押さない、遊んでいる親指を活用しよう。
(2)紹 介
①製作物は次の写真の赤枠で示す部分になります。
②各キースイッチの機能は、次表の通りです。
※プログラムの書き込みにより、変更可能です。
上 側 | Ctrl | HOME | 上矢印 | END | ( | ) |
---|---|---|---|---|---|---|
下 側 | “ | 左矢印 | 下矢印 | 右矢印 | = | なし |
左上のCtrlキーを押しながら、他のキーを押すと、次の通り変更されます。
上 側 | Ctrl | Ctrl+PgUp | 上※ | Ctrl+PgDn | { | } |
---|---|---|---|---|---|---|
下 側 | ' | 左※ | 切替 | 右※ | = | なし |
・ =は変化なし
・ 上※、左※、右※ は「Win+矢印」のWindow画面配置操作です。
なお、上※は、0.5秒押し続けることで、Window画面を閉じます。
・ 切替は、アプリの切り替え「Alt+Tab」です。
3.作り方
(1)材料
・基板 1枚(非売品)
・マイコンボード 1個:Seeed Studio XIAO RP2040 (注意! RP2040です。)
・タクトスイッチ 11個:おすすめは秋月電子通商 タクトスイッチセット100個【販売コード101282】
・タクトスイッチキャップ ?個:必要に応じてネットで調べて購入してください。
・【ねじ(サイズM2) 6本】または【両面テープ】 (個人の考えで選択)
(2)手順
①タクトスイッチの端子線をペンチでまっすぐに伸ばしてからニッパーで短く切断する。
(はんだ付け後に切断すると、端子線が出っ張るため)
②はんだ付け
・マイコンボードを基板に載せ、穴に、切断した端子線を差し込む。
・穴に、ハンダを流し込む感じで はんだ付けする。
・最後に、タクトスイッチをはんだ付けする。
※しっかりと差込み、浮き上がりがないように 注意してください。
③プログラムの書き込み(ソフトはArduino IDE)
プログラム内容を末尾に示します。
(3)その他
・タクトスイッチキャップは、個人の好みで取り付けてください。
・キーボードへ ねじで固定する場合、キーボードを破損させるおそれがあります。
恐れ入りますが、自己責任で取り付けてください。
プログラム内容
#include <Keyboard.h>
void setup() {
Serial.begin(9600);
Keyboard.begin();
pinMode(D0,INPUT_PULLDOWN);
pinMode(D1,INPUT_PULLDOWN);
pinMode(D2,INPUT_PULLDOWN);
pinMode(D3,INPUT_PULLDOWN);
pinMode(D4,INPUT_PULLDOWN);
pinMode(D5,INPUT_PULLDOWN);
pinMode(D6,INPUT_PULLDOWN);
pinMode(D7,INPUT_PULLDOWN);
pinMode(D8,INPUT_PULLDOWN);
pinMode(D9,INPUT_PULLDOWN);
pinMode(D10,INPUT_PULLDOWN);
}
//共通内容を関数にした。
void ctrl() {Keyboard.press(KEY_LEFT_CTRL); delay(50);}
void shift(){Keyboard.press(KEY_LEFT_SHIFT); delay(50);}
void alt() {Keyboard.press(KEY_LEFT_ALT); delay(50);}
void win() {Keyboard.press(KEY_LEFT_GUI); delay(50);}
void r(){Keyboard.releaseAll();}
void com1(char a){Keyboard.print(a); delay(150);}
void com2(char a){Keyboard.print(a); r(); delay(150); Keyboard.press(KEY_F8);}
// KEY_F8は 日本語入力の際、全角から半角に変換するためのものです。
void loop() {
if( digitalRead(D1) ){shift(); com2('-'); } // =
if( digitalRead(D2) ){com1(KEY_RIGHT_ARROW);} // 右矢印
if( digitalRead(D3) ){com1(KEY_DOWN_ARROW); } // 下矢印
if( digitalRead(D4) ){com1(KEY_LEFT_ARROW); } // 左矢印
if( digitalRead(D5) ){shift(); com2('2'); } // ”
if( digitalRead(D7) ){com1(KEY_HOME); } // HOME
if( digitalRead(D8) ){com1(KEY_UP_ARROW); } // 上矢印
if( digitalRead(D9) ){com1(KEY_END); } // END
if( digitalRead(D10)){shift(); com2('8'); } // (
if( digitalRead(D0) ){shift(); com2('9'); } // )
while( digitalRead(D6) ){
ctrl(); // Ctrl
if( digitalRead(D10)) {r(); com2('}');} // { D6+D10にて
if( digitalRead(D0) ) {r(); com2('|');} // } D6+D0にて
if( digitalRead(D5) ) {r(); com2('&');} // ’ D6+D5にて
if( digitalRead(D7) ) {com1(KEY_PAGE_UP); } // Ctrl+PAGE_UP D6+D7にて
if( digitalRead(D9) ) {com1(KEY_PAGE_DOWN); } // Ctrl+PAGE_DOWN D6+D9にて
if( digitalRead(D2) ) {r(); win(); com1(KEY_RIGHT_ARROW);} // Win+右 D6+D2にて
if( digitalRead(D4) ) {r(); win(); com1(KEY_LEFT_ARROW); } // Win+左 D6+D4にて
if( digitalRead(D8) ) {r(); win(); com1(KEY_UP_ARROW); r(); delay(500); if( digitalRead(D8)) {alt();com1(KEY_F4); } } //D6+D8
if( digitalRead(D3) ) {r(); alt(); com1(KEY_TAB);while( digitalRead(D6) ){ if(digitalRead(D3)){com1(KEY_TAB);}}} //D6+D3
//上記 D6+D8 Win+上。0.5秒以上押し続けるとアプリ終了
//上記 D6+D3 Alt+Tab アプリの切り替え
}
r();
}
以下は過去のプログラムです。
参考になると思い、改訂の際、削除せずに残しました。
#include <Keyboard.h>
#define IN0 D0
#define IN1 D1
#define IN2 D2
#define IN3 D3
#define IN4 D4
#define IN5 D5
#define IN6 D6
#define IN7 D7
#define IN8 D8
#define IN9 D9
#define IN10 D10
void setup() {
Serial.begin(9600);
Keyboard.begin();
pinMode(IN0,INPUT_PULLDOWN);
pinMode(IN1,INPUT_PULLDOWN);
pinMode(IN2,INPUT_PULLDOWN);
pinMode(IN3,INPUT_PULLDOWN);
pinMode(IN4,INPUT_PULLDOWN);
pinMode(IN5,INPUT_PULLDOWN);
pinMode(IN6,INPUT_PULLDOWN);
pinMode(IN7,INPUT_PULLDOWN);
pinMode(IN8,INPUT_PULLDOWN);
pinMode(IN9,INPUT_PULLDOWN);
pinMode(IN10,INPUT_PULLDOWN);
}
void loop() {
if( digitalRead(IN1) ) {
Keyboard.press(KEY_LEFT_SHIFT);
delay(100);
Keyboard.print("-");
delay(100);
Keyboard.releaseAll(); }
if( digitalRead(IN2) ){
Keyboard.press(KEY_RIGHT_ARROW);
delay(150); }
if( digitalRead(IN3) ){
Keyboard.press(KEY_DOWN_ARROW);
delay(150); }
if( digitalRead(IN4) ){
Keyboard.press(KEY_LEFT_ARROW);
delay(150); }
if( digitalRead(IN5) ){
Keyboard.press(KEY_LEFT_CTRL);
delay(200); }
else{Keyboard.releaseAll();}
if( digitalRead(IN6) ) {
Keyboard.press(KEY_LEFT_SHIFT);
delay(100);
Keyboard.print("2");
delay(100);
Keyboard.releaseAll(); }
if( digitalRead(IN7) ){
Keyboard.press(KEY_HOME);
delay(200); }
if( digitalRead(IN8) ){
Keyboard.press(KEY_UP_ARROW);
delay(150); }
if( digitalRead(IN9) ){
Keyboard.press(KEY_END);
delay(200); }
if( digitalRead(IN10) ) {
Keyboard.press(KEY_LEFT_SHIFT);
delay(100);
Keyboard.print("8");
delay(100);
Keyboard.releaseAll(); }
if( digitalRead(IN0) ) {
Keyboard.press(KEY_LEFT_SHIFT);
delay(100);
Keyboard.print("9");
delay(100);
Keyboard.releaseAll(); }
}
以上となります。