Picture

Hi, I'm marksard.

Joy of making, Smile be making, Interest and making.

PCBから自作キーボードを作りたい(組み立て編)

組み立てて使っていきます

img

 前回作った基板を組み立てます。
 基板は10/1に来たので2週間くらいしか経ってないのですが待ち遠しかったのと丁度台風が来ていたのと、その前の台風の影響で関空の航空便が遅延していたりとすごいヤキモキしました。

基板の確認

img

 自分で作成した基板なので自分の意図した通りに配線されているか導通テストをしておきます。テスターを導通確認用のモードか抵抗計測モードにしてテストします。

  • ProMicro周辺
  • キースイッチ周辺
  • LED
  • TRRS、OLEDなど他のピン

KiCadで作った基板を開いてツールバーの「ネットのハイライト」を選択して繋いでる所をハイライトさせて実際の基板の導通を確認します。
シルクにキズがないかとか、スルーホールとランドがズレているとかはその辺やってたら気が付くかと思います。

組み立て

LED

img

 バックライトLEDを組み込みます。
 QMKのhelixにあるled_testマップがそのまま使える(ピン互換がある)ので事前にpro microに書き込んで取り付けておきます。
 片方はcrkbdに入っていたチップLEDが落ち込まないようにする冶具を使ってハンダ付け。もう片方は冶具無しでやってみましたが無しでも全然出来ました。
 コテ温度は220℃くらいの位置。
 一気に全部付けてLEDが点かないと精神的ダメージがデカいので、2個~4個付けたらpro microにUSB付けて通電して点いたら次へ、ついてなかったらデバッグ、を繰り返します。

ダイオードとホットスワップパーツ

img

 ダイオードの取り付けは全部向きが一緒。スイッチ面にも裏面にも取り付けられます。

img

 ホットスワップパーツはあらかじめ基板のランド(取付面)をハンダでちょっと濡らしてからホットスワップパーツを乗せて、コテに少しハンダを乗せてパーツのスチール面の溝にコテをあててハンダを溶かし流すイメージで盛ります。

ほか

 リセットスイッチ、OLED用のソケットとハンダブリッジ作業、TRRSコネクタをハンダ付けすればハンダ作業は終了。
 スプリングソケット化済みのpromicroと、ピンを付けたOLEDを載せておきます。

プレート

 基板にOLED保護プレート用のスペーサーをねじ止めし保護プレートのせてねじ止め。
 ボトムプレートにスペーサーをねじ止めして基板をはさんでトッププレートをねじ止めすればねじ止め作業終了!  基板を下から支えるスペーサーが役に立つのかちょっと不安でしたが、
トッププレート - スイッチ
スイッチ - 基板
基板 - ボトムプレート
の隙間に不具合もなく仕上がりました。

img
img

キースイッチ

 基板にお好みのキースイッチをはめ込んでいきます。スイッチを付けていない状態だとプレートと基板に遊びがあるので両隅のスイッチからはめ込んでいきます。はめ込む際に出来るだけまっすぐ入れるイメージではめ込まないと基板にもスイッチの端子にも負荷がかかるので注意しながら作業します。

img

完成

 というわけで出来ました…!

キーボード仕様

 二つ組み合わせてキーボード。
 キーキャップはXDA 40V。

img

 OLED保護のアクリルカバーは下半分を彫刻して目隠しさせたんですが、バックライトの光が柔らかくなって良い感じになったのはうれしい誤算。

img
img

 小物入れ用のポーチに2つ収まります。

img

キーボード仕様キーマップ

 英字を入れると左端、右端にまったく余裕がないのでQMKの機能を有効利用しています。配置は42キーのcrkbdと48キーのJJ40で使っている自分用のキーマップを元に調整しました。
 句読点とハイフン、スペースとShiftをBaseレイヤーに入れて英文、和文をタイプしやすくしています。
 モデファイアキーを左の最下段に集約していますが大体の組み合わせは出来るように工夫しています。

img

キーパッド仕様

 キーキャップはSAプロファイルの9009ライクなものを選んでみました。
 キーキャップを透過するタイプのに変更してみたいですね…

img

 underglow用にテープLEDを付けられるようにもしているのですが、それはまた別の時にでも。

img
img

 ホットスワップ仕様なのでいつでも気軽にスイッチの特性を変更出来て、スイッチの特性と自分の指のリーチに合わせてスイッチを変更するカスタムがやりやすくなります。
 5のキーとレイヤー切り替えとエンターキーにークリッキー軸を入れてみました。

img

キーパッド仕様キーマップ

 キーパッドは数字と演算子、カッコやA-Fの英文字など入力出来るようにしたので、カラーコード、MACアドレス、IPアドレス、エクセルの入力が捗ります。

img

スイッチテスター仕様

 よく売られているスイッチテスターは音や感触の確認が出来ますが、この基板ならホットスワップなので差し替えて遊べます。
 キーマップは文字入力しない設定になっていますが、動作点が分かるように押したら光るエフェクトを加えています。

 スイッチの光り具合はこんな感じです

img

不具合

 初自作なのもあり、いくつか不具合を見つけました。

基板へcolumn配線とソフトのcolumn配線の並びが逆だった

 ソフト側と私の頭の中で想定していたカラムの並びは左からcol0,1,2,3,4だったんですが、基板側は無意識にスイッチを配置してて左からcol4,3,2,1,0ってしてたようです。ソフト側で修正しました。

:rev1.h

#define LAYOUT( \
  L00, L01, L02, L03, L04, R00, R01, R02, R03, R04, \
  L10, L11, L12, L13, L14, R10, R11, R12, R13, R14, \
  L20, L21, L22, L23, L24, R20, R21, R22, R23, R24, \
  L30, L31, L32, L33, L34, R30, R31, R32, R33, R34  \
  ) \
  { \
    // ここのカラムの並びを逆にして対応
    { L04, L03, L02, L01, L00 }, \
    { L14, L13, L12, L11, L10 }, \
    { L24, L23, L22, L21, L20 }, \
    { L34, L33, L32, L31, L30 }, \
    { R00, R01, R02, R03, R04 }, \
    { R10, R11, R12, R13, R14 }, \
    { R20, R21, R22, R23, R24 }, \
    { R30, R31, R32, R33, R34 }, \
  }

バックライトLEDのON-OFFが左右で連動しない

 左マスター→右スレーブへの通信が出来てなくて、右手側のスレーブのキー入力は受け付けているのに、左手側のマスターで操作する各種LEDの操作がスレーブ側に反映されていませんでした。
 ソフトウェアはHelixのコードを元にしてて、ちゃんと読まずに文字列置換していた個所が原因になってました。

:matrix.c

uint8_t matrix_master_scan(void) {

    int ret = _matrix_scan();
    int mchanged = 1;

//↓問題個所:#ifndef KEYBOARD_helix_rev2→KEYBOARD_hashtwenty_rev1に置換したためコンパイル対象から外れていたのでコメントアウトした
//#ifndef KEYBOARD_hashtwenty_rev1
    int offset = (isLeftHand) ? 0 : ROWS_PER_HAND;

時々意図しないキーの押下がある

 左右をつないでいると時々i,o,p,k,lキーが勝手に入力されていました。どうも基板の設計がマズく通信線にノイズが載っている模様…
 ソフトウェアのほうで通信速度を調整して事なきを得ました。

:serial.c

// #define SELECT_SERIAL_SPEED 1→3に変更。
#define SELECT_SERIAL_SPEED 3
#if SELECT_SERIAL_SPEED == 0
  // Very High speed

右手側のpromicroとトッププレートが干渉してハマりにくい

 右手側を組んだ時に発覚しましたw幸いpro micro側のVカットが甘くエッジが汚かったので紙やすりで削って事なきをえました

目隠し部分がOLEDにギリギリ乗っかってちょっとダサい…

 OLED保護アクリルカバーに入れた彫刻処理の範囲が大きくてOLEDの下部にギリギリ少し被っていてちょっとアレ…
 アクリル側をヘタにいじるとすぐに割れるので観なかったことにしておきます

まとめ

 8月中旬あたりからなんとなく作ってみたいなと思いはじめて下調べしたりKiCad学習したりしてここまでたどり着きました。とりあえずカタチになって良かったです。
 ハードウェア的に修正しないといけない個所は何点かありますが(ベタアースの足りない箇所、配線キレイにしたいetc…)、ここまで出来たらあとは応用だなと感じたのでレイアウトを変えたりキー数を増減したりで楽しめるなと思いました。最初に48キーのものを作りたいと書きましたけど、3Dプリントの筐体作ってエルゴノミックなデザインのものにも興味が…

 この記事は#ash2entyを使って書いていますが、30キーのgherkinをエミュレートして遊んでいたのに比べるとモデファイアキーが独立しているので英文和文も打鍵しやすいですし、shift, esc, tab, winキーがこれまで自分で使っていたキーボードの配置と全然違うので戸惑うかなとおもっていたんですが、すぐに慣れました。  自分が想定していたようにバチっと組み上がったときは嬉しいですね。不具合はありつつもジャンパする必要もなく用意した機能がすべて動いたのはなかなかに奇跡です。

 helix作者のないんさん、crkbd作者のfoostanさん、そして自キ界隈の方々の知見(ブログやscrapbox)や情報提供にあらためて感謝の言葉を述べて、この記事の締めといたします。

おまけ

 こんな感じで撮影してます。(遠景撮影のためにちょっと片づけましたが)
 照明を消してモニターを面光源がわりにして撮影してます。モニターアームに4K 24inchのモニタを付けてるので光源の角度調整もしやすくて以外に便利だったり。

img

Back to Top