[swest20 s4d]キーボードを自作しよう
エンジニアとして成長するために
富士通コンピュータテクノロジーズ
石田 晴幸

目次
⚫自己紹介
⚫背景⚫目的⚫イントロ～キーボードの世界⚫問題～考え方～施策⚫キーボードを自作するための技術⚫終わる前に
2

COPYRIGHT 2018 HARUYUKI ISHIDA

自己紹介
項番項目

内容

1

氏名

石田 晴幸

2

所属

株式会社富士通コンピュータテクノロジーズ

3

業務履歴

プリンタファームウェア

4

プリンタドライバ

5

携帯電話ファーム

6

ストレージのWeb GUI

7モデル駆動開発のツール

8

二次電池の充放電試験装置

9

使用言語

10
11

C, C++, C#, Java, JavaScript, Python
UML, SysML

趣味

ジョギング・山登り・キーボード作り※今日のプレゼンは会社とは関係ありません。個人の活動です。
3

COPYRIGHT 2018 HARUYUKI ISHIDA

[背景]パーソナル・ファブリケーション環境の充実⚫3Dプリンタやレーザーカッター⚫ponoko(https://www.ponoko.com/)⚫FabCafe(https://fabcafe.com/tokyo/fab/)⚫フリーで使えるCAD⚫回路・基板設計 KiCAD(http://kicad-pcb.org/)⚫ケース設計 AUTODESK FUSION360(https://www.autodesk.co.jp/products/fusion-360/overview)※趣味で使う場合無料ライセンスを使用可能⚫個人向けPCB製造サービス⚫スイッチサイエンス(https://www.switch-science.com/pcborder/)⚫組込みソフト開発環境⚫Ardiono (https://www.arduino.cc/)⚫Mbed (https://www.mbed.com/)⚫設計図の共有⚫Let's Split Guide (https://github.com/nicinabox/lets-split-guide)⚫自分で思い描いた組込みシステムをそこそこのコストで実現できる！

4

COPYRIGHT 2018 HARUYUKI ISHIDA

本講座の目的[目的]⚫ソフト技術者にエレキ・ハードの世界へ踏み出す一歩の提案⚫ソフト屋だって少し手を伸ばせばPCBやハードが作れる⚫他分野からソフトを俯瞰できる技術者は貴重！
他人に言われたものを作るだけから脱却しよう⚫キーボードを自作するための基本的な技術の習得

5

COPYRIGHT 2018 HARUYUKI ISHIDA

なぜキーボードを作るのか[目的]⚫筆者：ソフト開発者として資料作成やソースコード作成の日々⚫肩がこる⚫もっと速く正確に入力したい⚫キーボードを越える入力機器がでてこない⚫HHKBは良かったけど不満もある
明確なゴールは分からない⚫顧客は自分
DevOpsみたいに運用しながら改善してみよう
6

COPYRIGHT 2018 HARUYUKI ISHIDA

イントロ～
キーボードの世界

7

COPYRIGHT 2018 HARUYUKI ISHIDA簡単なキーボードの例(1/4)

イントロ.

Arduinoのスケッチ
const uint8_t PIN_BUTTON = 15;
int btnStat;

写真は https://www.sparkfun.com/products/12640 より引用

void setup(){Keyboard.begin();
pinMode(PIN_BUTTON, INPUT_PULLUP);
btnStat = HIGH;}
void loop(){
int lastStat = btnStat;
btnStat = digitalRead(PIN_BUTTON);// ボタンが押下から放された瞬間
if ((lastStat == LOW) && (btnStat != LOW)){
Keyboard.print("Hello");}}8

COPYRIGHT 2018 HARUYUKI ISHIDA簡単なキーボードの例(2/4)

イントロ.

⚫AVRマイコン ATmega32U4
項番

項目

説明

1

コア

8ビットAVR

2

フラッシュ

32Kbyte

3SRAM

2.5Kbyte

4

EEPROM

1Kbyte5

USB対応

USB仕様改訂2.0(Universal Serial BusSpecification Rev 2.0)完全適合

6

動作電圧

2.7～5.5V

7

最大速度8MHz/2.7V, 16MHz/4.5V

データシート： https://avr.jp/user/DS/PDF/mega16U4.pdf

9

COPYRIGHT 2018 HARUYUKI ISHIDA簡単なキーボードの例(3/4)

イントロ.

マイコンによる入力ピンのプルアップ

ATmega32U410

COPYRIGHT 2018 HARUYUKI ISHIDA簡単なキーボードの例(4/4)

イントロ.

Arduino開発環境を用いてファームのビルドと装置への書き込み

画面は Arduino IDEをスクリーンショットしたもの
https://www.arduino.cc/en/Main/Software

11

COPYRIGHT 2018 HARUYUKI ISHIDA

[イントロ]どんなキーボードを作ってきたのか

12

COPYRIGHT 2018 HARUYUKI ISHIDA

フルかコンパクトか

キーボードの世界.

フル

https://upload.wikimedia.org/wikipedia/commons/5/57/ModelM.jpg より引用

60%
http://www.pfu.fujitsu.com/hhkeyboard/lineup/pdkb400ws.html より引用

13

COPYRIGHT 2018 HARUYUKI ISHIDA

キースイッチの配置(1/2)

キーボードの世界.

https://deskthority.net/wiki/Staggeringより引用

14

COPYRIGHT 2018 HARUYUKI ISHIDA

キースイッチの配置(2/2)

キーボードの世界.

https://deskthority.net/wiki/Staggeringより引用

15

COPYRIGHT 2018 HARUYUKI ISHIDA

一体型か分離型かキーボードの世界.
一体型

分離型

http://www.pfu.fujitsu.com/hhkeyboard/lineup/pdkb400ws.html より引用

http://www.mistelkeyboard.com/barocco-series/ より引用

https://imgur.com/a/aLZXH より引用

https://pbs.twimg.com/media/C5rxH7-UYAAX2IT.jpg より引用

https://imgur.com/a/aLZXH より引用

https://atreus.technomancy.us/ より引用

https://imgur.com/gallery/YlT79 より引用

16

COPYRIGHT 2018 HARUYUKI ISHIDA

キー配列

キーボードの世界.

⚫キー配列
項番 名称

説明

1

QWERTY

タイプライターからつづく伝統あるレイアウト。

2

Dvorak

英文の文字の出現頻度と相関性から設計。
母音を左手ホーム行に集約、左右交互打鍵による高速入力を狙う。
1943年に発表された。

3

Colemak

QWERTYから17キーを変更。
頻度の高い文字をホーム行に集約。
AZXCVなど良く使う編集用キーは変更なし。
2006年に発表された。

4

Minimak

QWERTYから段階的に移行できる。
最小の変更で最大の利益を狙う。

17

COPYRIGHT 2018 HARUYUKI ISHIDAQWERTY

キーボードの世界.キー配列.

https://en.wikipedia.org/wiki/QWERTYより引用

伝統をいまに引き継ぐ
わざと打ちにくくした、というのはデマらしい

18

COPYRIGHT 2018 HARUYUKI ISHIDADVORAK

キーボードの世界.キー配列.

左右の手で交互打鍵、高速入力を狙うLinuxの人は ls –l がきつい（小指多用）
日本語の「か行」ローマ字入力で交互打鍵が崩れる

19

COPYRIGHT 2018 HARUYUKI ISHIDA

COLEMAK

キーボードの世界.キー配列.

https://en.wikipedia.org/wiki/Colemakより引用

最強なのでは？
Ctri-A, Ctrl-Z, Ctrl-X, Ctrl-C, Ctrl-VがQWERTYと同じ親切設計
ホーム行の高ヒット率で入力を効率化する

20

COPYRIGHT 2018 HARUYUKI ISHIDA

minimakキーボードの世界.キー配列.

⚫minimakQWERTYから8キー変更

QWERTYから4キー変更

QWERTYから12キー変更

画像はhttp://www.minimak.org/より引用

QWERTYから段階的に移行できる
21

COPYRIGHT 2018 HARUYUKI ISHIDA

問題
考え方
施策
22

COPYRIGHT 2018 HARUYUKI ISHIDA

遠いマウス問題.

マウスが遠いと肩が凝る
23

COPYRIGHT 2018 HARUYUKI ISHIDA

手首の角度問題.

手首に角度をつけると肩・腕が疲れる
24

COPYRIGHT 2018 HARUYUKI ISHIDA

小指の酷使問題.

小指を酷使すると前腕が疲れる
25

COPYRIGHT 2018 HARUYUKI ISHIDA

マウスを近くに考え方.

テンキーレスでマウスをホームポジションの近くに置く
カーソルキーなどはレイ
ヤキーとの同時押しで、ホームポジションのまま使えるようにする。

※レイヤキーについては後述します。

26

COPYRIGHT 2018 HARUYUKI ISHIDA

手首の角度の改善

考え方.

分割キーボードで手首の角度をなくす。

27

COPYRIGHT 2018 HARUYUKI ISHIDAモディファイアキーは親指で考え方.

親指に力を入れても、残りの指は自由に動ける
28

COPYRIGHT 2018 HARUYUKI ISHIDA

施策.現在のキーボード

29

COPYRIGHT 2018 HARUYUKI ISHIDA

キーボードを自作するための技術
30

COPYRIGHT 2018 HARUYUKI ISHIDA

全体構造

技術.

<<ソフト>><<エレキ>>キー
マトリックス<<エレキ>>

qmk_fiamware
マトリックス
スキャン

キーマップ
変換

アクション
制御

USB
通信制御

<<外部システム>>

PC

LED制御

LED

31

COPYRIGHT 2018 HARUYUKI ISHIDA

技術.エレキ.スイッチマトリックス(1/2)
VCC

マイコン

簡単キーボードをそのまま拡張すると…

IN1
IN2
IN3・・・

INxcv

cv

cv

・・・

cv

GND

スイッチの数だけマイコンのピンが必要？
100個のスイッチなら100本の入力ピン！？
32

COPYRIGHT 2018 HARUYUKI ISHIDA

技術.エレキ.スイッチマトリックス(2/2)
VCC

列1
マイコン

列2列3IN1行1IN2行2IN3行3

OUT1

OUT2
OUT3

扱えるスイッチ数は 行数 × 列数
必要なマイコンのピン数は 行数 ＋ 列数
例：100個のスイッチは (10＋10)=20本のピンでＯＫ！
33

COPYRIGHT 2018 HARUYUKI ISHIDA

PCB

技術.エレキ.

https://deskthority.net/keyboards-f2/inexpensive-pcb-custom-boards-t12065.html より引用

google で pcb 個人 製作 で検索

KiCad (http://kicad-pcb.org/)
34

COPYRIGHT 2018 HARUYUKI ISHIDA

スイッチ

技術. ハード.

⚫種類⚫メカニカルスイッチの構造⚫メンブレン⚫メカニカル⚫パンタグラフ⚫静電容量⚫etc..

https://sketchfab.com/models/4f4cfbf9f50949b193ab99e43f4ca23dより引用

35

COPYRIGHT 2018 HARUYUKI ISHIDA

スイッチ.使用感技術. ハード.

https://jp.steelseries.com/blog/gaming-keyboard-mechanical-switches-44より引用

http://cherryamericas.com/product/mx-series-2/より引用

36

COPYRIGHT 2018 HARUYUKI ISHIDA

スイッチ.作動力

技術. ハード.

45cN

60cN

80cN
http://cherryamericas.com/product/mx-series-2/より引用

軽い

重い

37

COPYRIGHT 2018 HARUYUKI ISHIDA

キーキャップ(1/4)

技術. ハード.

⚫プロファイル

DCS

DCS

SA

38

COPYRIGHT 2018 HARUYUKI ISHIDA

キーキャップ(2/4)

技術. ハード.

⚫材質
項番

材質

耐熱温度価格

特徴1ABS

100℃

安価

色が多い2

PBT140℃

高価

サラサラ感
昇華プリント可

⚫加工法
項番加工法

価格

特徴

1

プリント

安価

擦れて文字が消える

2

ダブルショット

高価

文字が消えない
バックライトで映える

39

COPYRIGHT 2018 HARUYUKI ISHIDA

キーキャップ(3/4)

技術. ハード.

⚫加工法.ダブルショット

https://imgur.com/a/OhRd4#NV57Oxa より引用

40

COPYRIGHT 2018 HARUYUKI ISHIDA

キーキャップ(4/4)

技術. ハード.

⚫職人

google で keycaps artistanで検索した結果
41

COPYRIGHT 2018 HARUYUKI ISHIDA

ケース

技術. ハード.

⚫アクリル板⚫3Ｄプリント

https://www.thingiverse.com/thing:983332より引用

https://imgur.com/a/fOSwe より引用

42

COPYRIGHT 2018 HARUYUKI ISHIDA

技術.ソフト.

qmk_firmware

https://qmk.fm/より引用43

COPYRIGHT 2018 HARUYUKI ISHIDA

技術. ソフト.qmk_firmware.マトリックススキャン⚫設計パラメーター（キーボードごとに違う）
ソース qmk_firmware¥keyboards¥<keyboard名>¥config.h⚫行を選択して列をセンス／列を選択して行をセンス#define DIODE_DIRECTION COL2ROW⚫行・列とマイコンのGPIOピンとの対応#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B6, D4, B1, B7, B5, B4, D7, D6, B3 }⚫デバウンシングの有無・時間※スイッチがONになる瞬間に電気信号がHi/Loを繰り返す
信号が変化してから安定するまでセンスしない（だいたい5msec)#define DEBOUNCING_DELAY 5⚫ソース：qmk_fiamware¥quantum¥matrix.c⚫初期化 matrix_init()⚫スキャン実行 matrix_scan()44

COPYRIGHT 2018 HARUYUKI ISHIDA

キーマップ

技術. ソフト.qmk_fiamware.

⚫ソース qmk_firmware¥keyboards¥<キーボード名>¥keymaps¥<キーマップ名>¥keymap.c※数えたら987個のキーマップファイルがありました。
どんどん増えていきます。

⚫キーマップ定義
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS]⚫キーマップの構造⚫レイヤーごとに繰り返す（後述します）⚫マトリックスの行ごとに繰り返す⚫マトリックスの列ごと繰り返す◦ キー１つの定義⚫キー１つの定義⚫通常のキー⚫モディファイア操作＋通常キー⚫アクション（後述します）

45

COPYRIGHT 2018 HARUYUKI ISHIDA

レイヤー

技術. ソフト.qmk_fiamware.キーマップ.

https://github.com/qmk/qmk_firmware/blob/master/docs/keymap.md より引用

46

COPYRIGHT 2018 HARUYUKI ISHIDA

アクション

技術. ソフト.qmk_fiamware.

⚫キーを押されたとき、キーボード内の状態を変えり特殊な動作をする⚫アクションの種類⚫レイヤー操作⚫レイヤー有効・無効にする⚫あるキーが押されている間だけレイヤーを有効にする⚫レイヤーの有効・無効をトグルする⚫あるキーと同時に他のキーが押されたらレイヤーキーとして扱う、あるキーが単体で押下・開放されたら通常キーとして扱う⚫次のキーだけレイヤーを有効にする⚫バックライト操作⚫バックライト点灯・消灯する⚫バックライト点灯・⚫バックライト輝度の増減⚫バックライト点灯・消灯のトグル

⚫その他
47

COPYRIGHT 2018 HARUYUKI ISHIDA

技術. ソフト.

USB通信⚫USB HID Keyboardのディスクリプタ⚫ USBプロトコルの詳細に入り込むと今日は帰てなくなるので要点だけ⚫USBキーボードは、キーが押された・放されたとき、USBホストへレポートを送る。
⚫レポートの形式はレポート・ディスクリプタとして定義する。
（レポートというデータの構造を表現するデータ）⚫ただし、PC起動時(BIOS)はBOOT キーボードプロトコルで通信する。
このときのレポート形式は決め打ち。
（ここではBOOTキーボードレポート形式と呼ぶ）⚫レポート・ディスクリプタを決める要因⚫Nキーロールオーバー（いくつのキーまで同時押しを扱えるのか）⚫BOOT Reportは6キーロールオーバー

48

COPYRIGHT 2018 HARUYUKI ISHIDA

Nキーロールオーバー

技術.

押下

Aキー 解放押下Bキー 解放押下

Cキー 解放時間→

ABCと入力するときに、前のキーを放す前に次のキーを押す
速く入力するとき、ひとはこのようにキーを操作する
同時押しを扱える最大キー数がN
49

COPYRIGHT 2018 HARUYUKI ISHIDA

レポート形式

技術. ソフト. USB通信.

6キーロールオーバー/ Bootキーボードレポート

00
押されているキーのコード群(最大6)空きは0x00

モディファイア

bit0: 左Ctrl
bit1: 左Shift
bit2: 左Alt
bit3: 左Gui (Windowsキー等)
bit4: 右Ctrl
bit5: 右Shift
bit6: 右Alt
bit7: 右Gui (Windowsキー等)
50

COPYRIGHT 2018 HARUYUKI ISHIDA

終わるまえに51

COPYRIGHT 2018 HARUYUKI ISHIDA

自作キーボード界隈情報

etc.

⚫Self Made Keyboard in Japan(日本語)https://discordapp.com/channels/376937950409392130/37693795040
9392132⚫Twitter #自作キーボード
https://twitter.com/hashtag/自作キーボード⚫r/MechanicalKeyboards
https://www.reddit.com/r/MechanicalKeyboards/⚫geekhackhttps://geekhack.org/⚫deskthority
https://deskthority.net/

52

COPYRIGHT 2018 HARUYUKI ISHIDA

まとめ⚫自作キーボードのとりかかりは簡単
Pro Microボードとスイッチ。Arduino IDEは無料⚫情報はインターネットに散在している
ハードのCADデータも、PCBのCADデータも、ファームのソースもgithub等にある⚫コミュニティも活発⚫海外の掲示板で世界中のオタクと交流（筆者も英語で書き込んだら、ドイツ人に褒めて貰えた）⚫日本語の掲示板もできた（ベトナムからの留学生が活発に発言してた）

日々使うものを自分で改善
新しいものへのチャレンジの日々
53

COPYRIGHT 2018 HARUYUKI ISHIDA