特集 - 自作キーボードの作り方(入門編)

自作キーボードの世界

ショップに数多のキーボードが市販されているのに、なぜ「キーボードを自作する」のか?

その理由は、キーボードには
「キーの配置」
「キーの間隔」
「キーの種類」
など、個人の好みが分かれる点が非常に多くあり【自分の好みに合ったキーボード】は意外と存在しないのです。
自分の好みに合ったキーボードを見つけるには、キーボードを購入し自分の好みに合っているのか試し、合っていない場合は別のキーボードを購入して試す・・・と非常に長い時間とお金がかかることが多いです。 このため、どこかのタイミングで妥協している人が多いと思います。

また販売されているキーボードの中に気に入った物が見たかったとしても、何年後かにキーボードが壊れて再び購入しようと思っても【全く同じ仕様のキーボード】は入手不可能であることが多く、 この場合は長い時間とお金をかけて再びキーボード探しをすることになります。

この他にもキーボードは【JIS規格】や【ANSI規格】という規格が存在し、市販品はこの規格に沿った仕様で作成されていることが多いので、 数多くのキーボードが売られてますが以外にも画一的であったりします。

以上のような事情があるため【自分に合ったキーボードが欲しい】を追及すると
「既製品に頼らず自分好みのキーボードをDIYするしかない」
という選択肢が出てきます。これが自作キーボードの世界となります。

自作キーボードで検索してみるとわかるように市販品では見られない非常にユニークなキーボードが多いことが判ります。
当然、自分好みのキーボードを作ったつもりでも「もう少しこうしたい」など改善点が見つかると、再びキーボードを作成して試してみるという、これまた深い深い沼にハマることになりますが、これはまた別のお話・・・

キーボードの基本の「き」

多くのキーボードはパソコンにUSBで接続しますが、この時パソコン内部では『HID(human interface device)』という機能を使って接続されています。
HIDで接続されるものとしてはキーボードの他にマウスやタッチスクリーンなども該当し、Windowsでデバイスマネージャーを開くと多くのデバイスがHIDによって接続されていることが確認できます。

自作キーボードを作る時も、このHIDを使う必要があります。

HIDは複雑な仕様であり専門家以外が【仕様書を読んでプログラムする】ことは少々難しいのですが、『Arduino』を使うとHIDを処理してくれる機能やライブラリ(=プログラム)があるので、
【ボタンが押されたことを検出】
【ボタンに対応するキーを送信】
という非常に簡単なプログラムを記述するだけでキーボードが作れるようになります。

Arduinoって何?

Arduinoは日本語で「アルドゥイーノ」や「アルデュイーノ」「アルディーノ」と読みます。

Arduinoはパソコンをギュッとおよそ名刺サイズから切手サイズの大きさに小型化したもので、パソコンと同様に【CPU】と【メモリ】を持っています。 ただ【モニタ】や【キーボード】といった入出力装置は接続出来ないのでArduino単体では何もできませんが、 その代わりに『GPIO』と呼ばれるピンで電気信号を読み書きして【外部の電子機器を制御する】ことに特化しています。

Arduinoの開発は、パソコン(=開発機)にインストールした『Arduino IDE』という開発ツールを使ってスケッチ(=プログラム)を記述します。

Arduino IDE上で記述したスケッチは、Arduino本体をパソコンとUSBで接続(=正確にはUSBシリアル(=シリアルとは【RS232c】や【COM】と呼ばれる物)で接続されます)した上で、 Arduino IDEからスケッチをArduinoにアップロード(=正確にはコンパイルしたバイナリをアップロード)することで動作させます。

さて、ここまで単純に「Arduino」と表現してきましたが、Arduinoには【公式】なものと【互換機】(=ここではArduino IDEで開発できるものを互換機とします)があります。

公式なものとしては『Arduino Uno R3』『Arduino Uno R4』等があります。

また互換機として有名なところでは『ESP32』『M5Stack』があります。

それ以外にも自作キーボード界隈で古くから使われているものとして『Pro Micro』というものがあります

これら様々なArduinoをArduino IDEでは『ボード』と呼んでいます。

ボードが変わっても【標準的なArduinoのスケッチ】の場合はそのまま動作しますが、公式なボードであったとしてもボードが変わるとCPU種類やメモリサイズ、GPIOの増減など【完全に同じ】ではないことに注意が必要です。 特にキーボードを作成する時に必要となるHIDサポートの有無は、記載が無かったり小さくさらっと記述されていたりとさまざまなので出来れば同じボードを使うようにしてください。 逆に言えばArduinoの環境に慣れるまでは異なるボードを使うのはリスキーです。

例えば上記にある「Arduino Uno R3」はHIDサポートが無いので自作キーボードでは使えません。 また「ESP32」と「M5Stack」はBluetooth接続のHID(=BLE HID)はサポートしていますが、USB接続のHIDには対応していなのでスケッチが異なります。

キースイッチの闇

キーボードの文字を入力するためについているキーのことを自作キーボード界では「キースイッチ」と呼んでいます。 キースイッチには様々な方式が存在するのですが、一般的な方式としては「メンブレン式」「パンタグラフ式」「メカニカル式」の3種類があります。

メンブレン式

ゴムの様に「ぷにぷに」と柔らかい素材でスイッチ部分を作ったキースイッチ。
価格が安く作れるのでパソコンを買うと付属してくるキーボードにメンブレン式の物が多いです。
「安いから悪い」という訳でもなく、このタッチが好きという人もいるのは事実。

かくゆう私も、キーボードの種類が今ほど多くなかった時代はメカニカル式よりも軽いタッチでスッと押し込めるのでメンブレンキーボードを愛用してました。

パンタグラフ式

ノートパソコンについているキーボードがパンタグラフ式で、他のキースイッチに比べて非常に薄く作れるのがメリットです。
また軽いタッチで入力出来るものが多いようです。
最近はアイソレーションというキ―スイッチとキースイッチの間に隙間があり、隣のキーをミスタッチしないように工夫されたことにより更に使いやすくなりました。

近年は業務でもノートパソコンを使うことが多く、そのためパンタグラフ式のキーボードを使うことが多いです。
ちなみに今は販売されていませんがAppleのMac Book 12のキーボードはストローク(=キースイッチが凹む距離)がほとんどないものでした。
ストロークはほぼいらないという私にはちょうどよかったのですが、人気が無かったのかMac Book 12以外では使われていないようでした。
個人的にはMac Book 12仕様のキーボードが出てほしいなと思う今日この頃。
(Appleさんお願いします。ちなみにMagic Keyboardを使ってますが、こちらは普通のパンタグラフキーボードです。)

メカニカル式

現在の高級キーボード、および自作キーボードで使うのがメカニカル式になります。 キースイッチ1つ1つが独立しており、結線すればスイッチとして動作します。 メカニカル式キースイッチの中にも更に様々な種類があるので一概には言えませんが「カチッ」と音やクリック感のあるものが多いです。 またLEDを内臓し、様々な色に光らせることができるものがあったりします。

このメカニカル式でデファクトスタンダードとなっているキースイッチが「Cherry MX」という会社のものになります。 自作キーボード界でも、およそこの「Cherry MX」か、その互換品を使ってキーボードを制作します。

その昔はメカニカル式しか無かったこともあり、個人的には「なつかしい」と感じるキースイッチですが、 最近はクリック感が無いものがあったり、キースイッチのタッチの重さが異なったりと非常に多くの種類があります。 その種類の豊富さは遊舎工房のキースイッチの選び方を見るとわかると思います。

またその豊富さからキースイッチを変えては試し、変えては試し……と繰り返す底なし沼にはまることもあります。
キーボードにはおよそ80個ほどついているので、いろいろ試すうちに1台分以上のキースイッチを抱え「使っていないキースイッチが100個くらい余ってるんですけど要りませんか?」という謎会話が繰り返されているようです。
(ああ…おそろしや)

何はともあれキーボードを作成してみる

ここまでいろいろ説明してきましたが、習うよりも慣れろ。ということでキーボードがどれだけ簡単に作成できるかやってみましょう。

ここでは2023年現在最新のArduino公式ボードである「Arduino Uno R4」にHIDサポートが入ったので、この機能を使ってキースイッチが1つのキーボードを作成してみます。
開発環境はWindows 10以降(作成時環境はWindows11 22H2)になります。

Arduino Uno R4の購入方法

2023年現在Arduino Uno R4には「Arduino Uno R4 Minima」と「Arduino Uno R4 WiFi」という2種類が存在します。
「Arduino Uno R4 WiFi」は「Arduino Uno R4 Minima」に「Wi-Fi」「Bluetooth」「LEDマトリックス」等が追加されているものになります。 どちらでもよいのですがキーボードを作るだけであれば安いほうの「Arduino Uno R4 Minima」で問題ありません。
『スイッチサイエンス』『秋月電子通商』といった電子部品を扱う店で購入できます。

秋月電子通商さんは実店舗でも販売しているようです。

キースイッチの購入方法

『遊舎工房』のようなキーボード専門店で探すとよいでしょう。

遊舎工房さんは実店舗でも販売しており、試し打ちもできる場合があります。
また、様々なキースイッチを1個ずつ集めてまとめた『キースイッチテスター』というものも販売しているので、必要な個数を揃える前にそちらを試してみるのもよいでしょう。

手頃なキースイッチが無い場合はタクトスイッチ等なんでも構いません。
ただしタクトスイッチを使う場合は別途ブレッドボードが必要になります。

ジャンパーワイヤーの購入方法

Arduino Uno R4とキースイッチを結線するために以下のようなオス-メスになったブレッドボード用のジャンパーワイヤーを購入します。

今回は2本あれば十分です。
秋月電子通商に10本単位で売ってます。

タクトスイッチを使う場合はオス-オスのジャンパーワイヤーが必要になります。

キースイッチ台の購入方法(任意)

無くてもいいのですが、キースイッチを置く台である「キースイッチ台」があると作業が楽になります。
(キースイッチはブレッドボードやユニバーサル基板に端子が刺さりません)

Arduino IDEのダウンロード

スケッチ(=プログラム)を記述するのに使用するArduino IDEをダウンロードします。

Arduino IDEは Arduino IDEの公式配布ページからダウンロードできます。
以下画面が表示されるので「DOWNLOAD OPTIONS」から、自分のマシンのOS用のファイルを選んでダウンロードします。

今回の開発環境はWindows 11なので「Windows Win 10 and newer, 64bis」のリンクをクリックしました。

以下の画面になるので、寄付する場合(ぜひ寄付してあげてください)は「CONTRIBUTE AND DOWNLOAD」を、寄付しない場合は「JUST DOWNLOAD」をクリックします。
今回は「JUST DOWNLOAD」をクリックしました。

以下の画面になるので、
「email」項目に自分のメールアドレスを入力、
「I confirm to have read the Privacy Policy and to accept the Terms of Service」にチェックを入れ、
「JUST DOWNLOAD」をクリックします。

以下の画面になるとダウンロードが始まります。

Arduino IDEのインストール

ダウンロードしたArduino IDEをインストールします。
インストールは公式ドキュメントのインストール手順に従ってインストールします。
以下はWindows 11でのインストール手順になります。

ダウンロードされたファイルをダブルクリックして起動します。

以下画面が開くので「同意する」ボタンをクリックします。

以下画面が開くので、そのまま「次へ」ボタンをクリックします。

以下画面が開くので、そのまま「インストール」ボタンをクリックします。

インストールが開始します。インストールが終わるまで待ちます。

インストールが終わると以下の画面になるので「Arduino IDEを実行」にチェックが入った状態で、「完了」ボタンをクリックします。

以下画面が表示された場合は「アクセスを許可する」ボタンをクリックしてください。

以下画面が表示された場合はそのままの状態で「インストール」ボタンをクリックしてください。

以下の画面が表示されるとArduino IDEが使えるようになりました。

キー1つのキーボード

Arduino Uno R4にジャンパーワイヤーを使ってキースイッチを1つ配線します。
ジャンパーワイヤーとキースイッチの接続方法はいろいろ試してみましたが、コネクターをそのまま使おうとすると抜けてしまうので、メス側の先端を切ってはんだ付けしてください。

キースイッチの片方をArduino Uno R4のGPIO 2番ピンに、もう片方をArduino Uno R4のGNDに接続します。

ArudinoをPCに接続

Arduino Uno R4をPCに接続します。
Arduino側のUSBコネクタ(Type-C)と、PC側のUSBコネクタ(AでもCでもOK)に、データ通信ができるUSBケーブルで接続します。

Arudino IDEでスケッチを記述

Arduino IDEを起動し、新規スケッチを作成します。
左上に「Select Board」というプルダウンメニューを開くと、接続した「Arduino Uno R4」(=今回は「Arduino Uno R4 Minima」)が一覧にあるので選択します。
※一覧に出てこない場合はArduino IDEがArduino Uno R4を認識出来ていない可能性があります。この場合はArduino IDEを起動し直してみてください。

初めてArduino Uno R4を接続した場合は必要なファイルのインストールを促すダイアログが出るので、「Yes」を選択します。

これでArduino Uno R4を使うために必要な機能のダウンロードが始まります。
※画面右下にダウンロードの進行状況が表示されます

ダイアログが消えたら準備完了です。

キースイッチを押したら「W」を入力するスケッチを書いてみました。
Arduinoをキーボードとして動作させるには『Keyboard.h』というヘッダーをインクルードする必要があります。
このヘッダーはArduino IDEに標準で付属しています。

#include <Keyboard.h>

void setup() {
  //2番ピンを入力(プルアップ)に設定
  pinMode(D2, INPUT_PULLUP);

  //キーボード動作開始
  Keyboard.begin();
}

void loop() {
  //2番ピンに繋がっているボタンが押されるまでループ
  while(digitalRead(D2) == HIGH)
  {
    //押されてない場合は200msウエイト
    delay(200);
  }

  //押された場合は'w'を押されたことにする(=送信する)
  Keyboard.press('w');

  //100msウエイト
  delay(100);

  //押されているキーを全て解除
  Keyboard.releaseAll();
}

動かしてみる

スケッチが書けたら、左上の『→』をクリックして、Arduino側にプログラムをアップロードします。

プログラムのビルドが成功しアップロードが完了すると、「Output」に「Done!」と表示されます。

プログラムのアップロードが成功したら、既にArduino Uno R4はキーボードとして動作しています。
メモ帳を起動してからキースイッチを押してみます。

キースイッチを押すとキーボードのWキーを押した時と同じように「w」が入力されれば成功です。

以上でキーボードが作成できました!
このようにArduinoとライブラリを使うことで、簡単にキーボードを作成することができます。
後はキーの数を増やすことで本格的なキーボードも作成可能です。