[..]
Unicode直接入力キーボード
きっかけ
世界にはいろんなキーボードがありますよね。QWERTY配列やJIS配列、倉頡輸入法キーボードなど…
その中に漢字直接入力(通称:漢直)キーボードというものがある。昔存在していたということは知っていたが、自作キーボード界隈で今もなお使っている方がいるようだ。漢直には様々なキー配置の方法があるようだが、ネックになるところは同じだ。漢字のキー配列を覚えておかなければならないのだ。
そこで、考えた。結局キー配列を覚えておかなければならないのであれば、Unicodeを覚えるてそれを打つのでも苦労はあまり変わらないのではないかと…(<-落ち着いて考えると、絶対位置の方が覚えやすい気もするけど… そして、そもそもの、キーボードのできた経緯を逆行しているような気もするが)
それでも、Unicodeを直接入力することによるメリットもある気がする。(実用的な範囲になるまで覚えることができれば)
今、私はQWERTY配列で文字(主に日本語)を打っている。そうすると、ひらがなのほとんど場合は子音と母音の2ストロークしている(あ行を除く)。漢字に関しては、読みをローマ字で打った後に変換している。Unicodeではひらがなが第0面のU+3040~U+309Fにマッピングされている。詳細な仕様は後述するが、よく使う日本語をUnicodeの下2桁で打てたらどうだろうか。ストローク数的にはあまり変わらないのである。次に漢字だが、第0面にはU+4E00~U+9FFFにマッピングされている。つまり漢字は4桁すべて打つことで4ストロークで打つことができるのである。
ということで、原点回帰することで打つ回数を減らせるのではないかという算段である。
このキーボードは暗記が難しいが、実用的かどうかは置いておいて、効率の良く入力できるUnicode直接入力キーボードが存在する(選択できる)事実が重要なのだ。
配列設計
Unicode直接入力キーボードということで、できることならUnicodeに収録されているすべての文字、記号を打てるようにしたい。さることながら、打つ回数を減らすという当初の目的を遂行したい。
そこで、ファンクションキーを設けて、ひらがな以外はファンクションキーを押しながら打つことにする。
ファンクションキーの種類は、アルファベット入力、第0面入力、第1面入力、第2面入力、第3面入力、第14面入力の6種類にする。ひらがなを入力するときは、何も押さずに下位2桁を入力する。アルファベットはファンクションキーを押した状態で下位2桁を入力する。そのほかの文字、記号はそれぞれの面のファンクションキーを押した状態で4桁を入力することにする。
他には、エンターに相当するキーとバックスペースに対応するキーを配置することにする。エンターに相当するキーはCRLFを出力して、バックスペースはBSを出力するようようにする。
キーマップはこんな感じ
デメリットと言えば、アルファベット1文字打つのに2ストロークしないといけないこと。
プログラミングとかは絶対向いてない…
回路・基板設計
パソコンとの通信にはUSBを使うことにする。
そしてマイコンはPICの16F887にする。選定理由は現時点で販売されていて安価で40ピン(内GPIOは35ピン)もあること。USBとの接続は、USBシリアル変換ICを使用する。PICにもUSB機能が付いているものも発売されているが、複雑すぎてアセンブラで書けたものではないので、今回は変換ICを使用する。
変換ICの選定だが、最初はCH340Eにしようかと考えていた。しかし、ドライバを入れても認識しなかった。なので、ドライバが不要なFT232RLにすることにした。
スイッチの入力はプルアップでIOピンにインプットすることにする。
回路基板の設計はいつも通りKiCadで行うことにする。
製造に関してはPCBGOGOさんに提供していただいた。UV印刷ができるらしく、今回はUV印刷もお願いした。
というわけで、いつもの基板設計に加えてUV印刷のデザインも作ることになった。UV印刷のデザインについては、KiCadからSVG形式で出力した後、GIMPで編集していた。編集方法の詳細は後日書こうと思う。
前面UV印刷のデザインはこんな感じ。パステルカラーをメインに配色してかわいくしたかったが、作っていて"かわいい"を見失いそうになった。rMQRはここのURLになっている。
発注から1週間後無事基板が届いた。こんな感じ。
全体的に淡くなるため、水色は緑になってしまった。UV印刷の発色むずかしい…
もしかしたら、原色に近い方が得意なのかもしれない。
PIC側のプログラミング
PIC側のプログラムはスイッチにつながっているGPIOを監視して、押されたらシリアル通信で数字を送るだけである。
もちろん、アセンブラで書く。
GitHubにあげているので、よければ参照してください。
PC側のプログラミング
こちらもいたって簡単、シリアル通信で受信して、エンコードしSendKey関数に送るだけである。
こちらも
GitHubにあげていうるので、参照してください。
部品リスト
U1:FT232RL
U2:PIC16F887
C1,C2,C3,C4:0.1uF
C4:10uF
J1:USB typeB
RN1,RN2,RN3:1kΩ
R1:4.7kΩ
D1:LED
F1:リセッタブルヒューズ0.5A
SW1~SW24:ALPS ALPINE SKHCBEA010
完成形
こんな感じ…
このときはカンペを見ながら必死に打っているが、やはり慣れれば速いかもしれない。また、基本的にキーが16個しかないので片手でも打てるところも利点の一つだと思う。
当初の目的が達成できて非常に嬉しいし、キーボードとしての1ジャンルを確立できるかもしれない(さすがに過言)。
BOOTHにてキットを受注生産しているので良かったらぜひ!
作成日:2024/12/12
最終編集日:2025/1/6