自作キーボード(ではない何かか)を作る
Project, TechArduino, c, Embedded, HW, Japanese
モチベーション
RaspberryPiとかのセットアップでUSBキーボードが欲しくなる場面が時々あるが、小型のものでも少し大きく感じるので、小さいキーボードに興味があった。
過去にはタクトスイッチとTeensyで、こんなの作ってみたりもした。


でもまだ大きさには満足できず、もっと小さいスイッチを探したり、PCBを自分で起こしてみたい、などと考えていた。
それと並行して、ワンキーキーボードとか、ネタ的には面白いかも?と考えていた。
RubyKaigi2018のお昼休みに、実際に現物を見て、普段使い用の実用的自作キーボードにも興味が湧いて出てきた。
Lunch time(11:45〜)に大ホール出た左側のheroku スペース(写真のところ)で自作キーボード会議やります。みんなで集まってご飯食べながらキーボードについて話すだけのゆるい感じでやる予定です。興味のある方は誰でも参加OKですのでお気軽にどうぞ。 #rubykaigi pic.twitter.com/a5ywCdRmiB
— Toshio Maki (@Kirika_K2) June 2, 2018
いずれにせよ自作PCBは何かで挑戦してみたいので、自作キーボードは良いお題に思える。
その前に、キースイッチの取り回しの確認も兼ねて、簡単に作れそうなワンキーキーボードを作ってみることにした。
準備
下記のような部品を準備。
- ProMicroの互換品
よく自作キーボードで使われているもの。Aliexpressだと500円くらいで買える。 - 液晶
http://akizukidenshi.com/catalog/g/gP-07005/ - キースイッチ
https://www.amazon.co.jp/gp/product/B0721RVRZC/ref=oh_aui_detailpage_o02_s00?ie=UTF8&psc=1 - ロータリエンコーダ
http://www.aitendo.com/product/7443 - ユニバーサル基板
https://www.amazon.co.jp/gp/product/B010GXAZ9G/ref=oh_aui_detailpage_o07_s00?ie=UTF8&psc=1
キーキャップはとりあえず耐久性無視して3Dプリンタで自作。

ロータリエンコーダになんとなくプルアップ抵抗つけているけど、Atmega32U4内部のものを使えば足りると思う。
設計
ロータリエンコーダで文字リストのポインタ位置を制御して、キーを押されたタイミングで、選択中の文字をキー入力としてPCへ送信する。
ProMicroで使えるArduino用のUSBキーボードのライブラリがあるので、とても簡単に実現できる。
配線ではどのピンに何をつなぐか確認。割り込みに使えるPinが限られているので注意(一敗)

組み立て
まず、秋月の液晶は変換基板にはんだ付けして、ブレッドボードで動作確認。
うまくユニバーサル基板に乗るように配置してはんだ付けして、配線する。

液晶の基板がProMicroに微妙に干渉するので、ハンドグラインダーの研磨砥石で1mm程度削った。
あと、キースイッチ取付用にユニバーサル基板にドリルで穴を開けた。
ケース
ユニバーサル基板や部品の位置などをデジタルノギスで採寸して、Fusion360でケースをデザインして、3Dプリンターで印刷。

無駄な張り出し残してしまったので、干渉している部分をラジオペンチで剥ぎ取った。
うちのプリンターだとどうしても長方形が微妙に歪むので、上と下の箱を合わせるのが難しい。面倒なので適当に重ねて無理やり瞬間接着剤でつけている。
ソフト
液晶については、こちらの方のライブラリで制御。
https://synapse.kyoto/hard/MGLCD_AQM1248A/page001.html
余裕があれば、フォントを大きく表示できるように改造したい。
加えて、ロータリエンコーダの信号を割り込みで検出して、
ボタンについては、画面更新と合わせて、ポーリングで検出。
ボタンが押されれば、選択中の文字に対応するキーイベントを送信する、という単純なもの。
完成


動画
https://twitter.com/kishima/status/1006909707032805377
とりあえずジョークデバイスとして作ってみましたが、次はちゃんとしたキーボード作ってみたい。
まずは、PCBの練習も兼ねて、テンキーあたりからがよいかな?
結構キースイッチとキャップも値が張るので。
せっかくつくったので、もし真面目に使うなら、1文字入力ではなくて、キーワード入力できるようにするとか、一応拡張用に残したI2CにGPIO拡張ICをつないで、マウス機能も付加するとか、考えられる。
けど、とりあえずは別のやりたいことにシフト。
関連記事
直近の活動予定
直近の対外的な活動予定を記載しています。 今後のイベント 特になし (技術書、も ...
ESP32-WROVER-B のSPI-SRAMを試してみる
ついに8MBのSPI-SRAMを搭載した技適マーク付きのESP32-WROVER ...
Arduboy互換機を作ってみた
思い立って、Arduboy互換機を作ってみましたので、自作Arduboyの参考に ...
技術書典5でmruby/c本を頒布します
そういえば、ブログの記事には起こしてなかったので、一応書いておきます。 mrub ...
TokyuRuby会議12のLTスライドまとめ
個人的に再確認したかったので、TokyuRuby会議12のLTスライドで公開して ...
FabGLとmruby-ESP32ボードの構想
(最新状況はこちら) 何気なくTwitterを見ていたら、気になるツイートを発見 ...
ディスカッション
コメント一覧
まだ、コメントがありません