見出し画像

自作キーボード備忘録。2: 1キーのキーボードの動作原理を知る

自作キーボードを基盤からガッツリ作ろうと思います。大学の授業でたまたま集まった6人がメンバーです。でも、誰一人として自作キーボードの知識は(大して)ありません。4ヶ月くらい経ってプロジェクトもちょいちょい進展してきてダニングクルーガーの頂点を超えたあたりになってきたのでここらで整理した形で残しておきます。

キーボードの動作原理を知りたい

さて、前回の記事で僕が3年前に自作キーボードに挑み、挫折し、ブランクが空いたのは自作キーボードというある種"沼"を、舐めていたからということがわかりました。そして自分の性格上、動作原理もわからんものを自作するというのはなかなかきついものがあるわけです。というか、自作キーボードにおける本当の自作とは自分で回路から作ることであって、キットを買ってやるのは人の自作PCを真似てパーツ構成を同じにして自分の自作PCを作ってる感がある。※1

超簡単なキーボードの動作原理

スイッチが押されたらそれをマイコン(殆どの場合ProMicro)が認識してPCに送信する。です

まぁこれはなんとなくわかるでしょうが、僕の場合これだけでは終わりません。「どうやって認識してどうやって送信してるの…?」「じゃああの大量のダイオード※2は何の役割を…?」などと言った疑問が湧いてきます。ここを解消しましょう。

とりあえず1キーで見てみる

物事を理解するときにはゆっくりと初歩のレベルから見ることが大事です。複数のキーよりまずは1キーで様子見しましょう。

まず、キースイッチの構造を見てみます。Kailhというキースイッチを作っている会社のプロダクトページにはこんなふうに書いてあります。

画像1

重要なのは1番下のCircuitってやつです。Circuitっていうのは日本語で言うところの回路ですね。要するにここに回路記号が書かれていて、それを見る限りキースイッチは本当にスイッチの役割を果たしています。※3

ということは、普段は電流が流れてないけど、押されたときには電流が流れて、それを察知すれば良いわけです。例えば、電池と、スイッチと電球を用意して、直列(まっすぐ一直線)につなげます(もちろん最終的には電池のマイナスに返ってくるので完全に一直線ではない)。そして、スイッチを推せば電球が光ります。これを察知して誰かが僕の代わりにキーを押してくれます。

これがめっちゃ簡単な仕組みです。でも人を使うのはもったいないのでマイコン(マイクロコンピュータ、ちっちゃいコンピュータ)を使います。

僕はArduino Leonardを使って実験しましたが、何を使ってもらってもOKです。

コード例(日本語訳付き)

#include<Keyboard.h> //今からキーボードとして使うよって宣言してるようなもんです
const int sw1 = 1;   //1という値をsw1として呼ぶことにします。

void setup() {       //最初に一回だけ行われるプログラムです
pinMode(sw1,INPUT);  //1ピンをインプット(なんかが入ってくるよ)状態にします。
Keyboard.begin();    //キーボードとして使えるようにしますよ~
}

void loop() {                           //以降繰り返し行われるプログラムです
if(digitalRead(sw1) == HIGH){           //1ピンを読み取って、HIGH(=電圧が高い)なら
 Keyboard.press('A');                   //Aを押したことにしてください。
 delay(200);                            //0.2秒待って
 Keyboard.release('A');                 //Aを離してください。
}
else{                                   //HIGHじゃないとき
 delay(100);                            //0.1秒まってください。
}
}

このときの回路は簡単に言うとこんな感じ(実は間違いがありますが、次回言います。)

画像2

抵抗の意味は※4を見てください。実際には電池の部分は、Arduinoの5Vピンを使います。理由は電池を別に用意するのがめんどくさいからです。

そして、電池のマイナス極に当たる部分はGND(グラウンド、アースとも言われる。)になります。ここは電位の0Vの基準みたいなもんです。そしてスイッチを押されたときだけ、1ピンの電位が5Vになり(※5)、HIGHなので、キーを押す動作をやってもらう、というわけです。(じゃあHIGHかどうかの判定はどうしてるのか、は一旦後回しにさせてもらいます。)

ここで問題が出てきます。勘のいい人なら気づくかもしれません。

「あれ、でもキーボード自作するとき、抵抗なんて使わなくね?」

はい。実際は抵抗は使わないのです。なぜか、それはマイコン側に便利な機能があるからです。その名も

「内部プルアップ抵抗」

は????と思われた方、大丈夫です。僕も意味がわかりません(でした)。今回は長くなってしまったのでここまで。次回は内部プルアップを実際に使ってみます。(あとダイオードの意味がわかるのはもうちょっと先です)

注一覧

※1ちょっとまって、自作PCは動作原理とかわかってないのにやってるやん、と思った人もいるかもしれません。はい。僕にとっての動作原理はとりあえず”この部分がこういう役割でこういうことをしている”程度で構わないです。例えばCPUは計算処理を、メモリは一時的な情報のプールを、などです。そしてある日さらに気になってCPUの仕組みを知りたいと思い始めるのはまた別の話ですね。

※2一般的にキーボードでは1つのキーにつき、1つのダイオードを使用します。すなわち、キーボード自作においてダイオードのはんだ付けは避けられないものです。

※3 回路記号がわからない方へ。要するに左右の導線が途切れていて、スイッチを押すとつながるよってのがあの回路記号です。

※4 このときの抵抗のことをプルダウン抵抗といい、何もスイッチが押されていない時、確実に電位が0Vであるようにするための抵抗です。要するに、スイッチが押されていない時でも、電池のマイナス極と電位を読み取る部分をつなげておかないと、0Vの基準がなくてHIGHかLOWか判別しづらいからダメだよねってことです。

※5 先程上で「押されたときには電流が流れて、それを察知すれば良いわけ」と言っていたのに、急に電位の話になったり、電位がなぜ5Vになるのかわからないという方向けの記事を作成中です。

この記事が気に入ったらサポートをしてみませんか?