3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

親指 ・タクトスイッチ 自作キーボード

Last updated at Posted at 2024-04-19

1.はじめに

 パソコンのキーボード、親指がスペース キーを押すだけではもったいない!
 ホームポジションから両手を移動させることなく、
 よく使用するキーを押せる自作キーボードを作りました。
 ご紹介、並びに作り方を説明します。
 ※(注意事項)製作基板は販売しておりません。展示会等で無料配布予定です。

2.開発経緯・紹介

(1)開発経緯
 事の流れは、次の①~⑤の通りです。
 ①自作キーボードにて、仕事の作業効率を向上させたい。
 ②作業効率向上をどうすればできるか?
 ③現在の問題(押しにくいキーがある)を解決すれば良い。
  |・キー押す際に、キーの位置を探す
  |・キー押す際に、ホームポジションから外れて次の入力が遅れる

 ④しかし、自分が求めるものがない。
 ⑤だったら作ろう。
  スペースキーしか押さない、遊んでいる親指を活用しよう。

(2)紹 介
 ①製作物は次の写真の赤枠で示す部分になります。
  24.04.18-3.jpg

  24.04.18-4.jpg
  ※キースイッチは、タクトスイッチです。

 ②各キースイッチの機能は、次表の通りです。
  ※プログラムの書き込みにより、変更可能です。

  上 側   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)手順
 ①タクトスイッチの端子線をペンチでまっすぐに伸ばしてからニッパーで短く切断する。
  (はんだ付け後に切断すると、端子線が出っ張るため)
   24.04.18-1.jpg

 ②はんだ付け
 ・マイコンボードを基板に載せ、穴に、切断した端子線を差し込む。
 ・穴に、ハンダを流し込む感じで はんだ付けする。
 ・最後に、タクトスイッチをはんだ付けする。
  ※しっかりと差込み、浮き上がりがないように 注意してください。
  24.04.18-2.jpg

 ③プログラムの書き込み(ソフトはArduino IDE)
  プログラム内容を末尾に示します。
  
(3)その他
  ・タクトスイッチキャップは、個人の好みで取り付けてください。
  ・キーボードへ ねじで固定する場合、キーボードを破損させるおそれがあります。
   恐れ入りますが、自己責任で取り付けてください。

プログラム内容

20240709_keyboard22_11_03.ino
#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(); 
}

以下は過去のプログラムです。
参考になると思い、改訂の際、削除せずに残しました。

20240405_keyboard22_11_03.ino
#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();    }

}

以上となります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?