Picture

Hi, I'm marksard.

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

コルネキーボードを作りました ~LED取り付けに四苦八苦記~

img

俺はまだ沼の入り口にいるだけさ(そう言って彼は少しずつ沈んでいった)

 自作キーボード界隈も沼が意外と深くてあれこれ目移りしてしまいます。個人的に気になるのはPlanck、XD75、MiniVanに現在KickstarterされてるKUMO Keyboard(MiniVanのホットスワップスイッチ対応版)、MFT2018で販売されたMint60、今度出るFortitude60…そんな中、6月に発売されたKosuke Adachiさん(@foostan)コルネキーボードキット(Crkbd)を買いました。  

42keyしかないミニマルさ

 ErgoDox、Irisライクなカラムスタッガードに親指押下用にオフセットされたデザイン、それらよりさらにキー数を減らした42キーのキーボードのキットです。
 アルファベット26文字を抜いた残り16キーにスペースや機能キーを割り当てられます(当然16キーでは足りない)。キーマップを自分専用によーく練ってデフォルトからそぎ落としていかないといけないのでかなり上級者向けと言えます。このCrkbdはオプションで自分で基板をカットすることでMiniDoxと同じ36キー仕様に変えることもでき、もはや常人では到底使いこなせなそうなスパルタンなキーボードにもなります。

LEDの取り付けにハマる

 前回Helixを組み立てた時LEDはUnderglowを選択してムズそうな表面実装LEDのハンダ付けを省略したんですけど、コルネはLEDを付けたいと思いました。

 半田ごては中学で作った半田ごて作成キットの半田ごて(gootの30w)をずっと使ってて、Helixでも表面実装のダイオード(NotLED)を手早く付けてたので大丈夫だろうと思って最初はその半田ごてを使いました。

 遊舎工房で購入したLEDは70個。キーを光らせる42個+裏面光らせる12個の合計54個を実装、16個予備が出来るのでそこまで失敗しないでしょ!と高をくくってたんですが、片手ぶん実装し終えて試験点灯して1個しか点灯しなくて絶望しました…。
 ここで私が行ったLED点灯デバッグの方法をメモしておきます。

チップLED(SK6812mini)が付かない場合のデバッグ方法

所見

 このLEDの実装は中々の難易度の高さです。大半の取り付け場所はLEDのパッドと基板のパッドが物理的に触れることがなく、ハンダブリッジでの電気的結合&LEDの保持を行うというもの。
 またLEDが落ち込まないようにLEDをはめ込む穴のほうが少し小さく基板からほんの少し浮いてて、さらに表面実装LEDは熱に弱くて温調半田ごてでないとすぐに壊れてしまうという条件もあって難易度がさらに高くなっています。
 LED取付用の冶具を付属していただいてなければさらにむつかしかったかも…

必要なもの

  • ブレッドボードで使うようなピン付きのジャンパ線(ジャンパ線)
  • 抵抗値を図ってくれるテスタ(テスタ)

接続に関して理解しておく必要があります。

基本データ

SK6812miniデータシートから引用します。
img

  • 1番パッド:DIN(Digital INput)。プロセッサからのLEDコントロール情報を入力するピンです。
  • 2番パッド:VDD(Voltage Drain Drain)。要は電源の+です。
  • 3番パッド:DOUT(Digital OUTput)。ちゃんと見てませんがDINからの入力をスルーして出力しているピンです。
  • 4番パッド:VSS(Voltage Source Source)。要は電源の-です。

普通のLEDだと電源の+と-を繋ぐと点灯するんですが、このLEDはフルカラーで輝度、色味を制御するためにDINとDOUTがあります。そして基板の配線とこのDINとDOUTが他のLEDと直列につながって点灯する仕組みです。
Crkbdに関してはビルドガイドのLED(オプション)の番号でつながっています。

点灯しない要因は以下の通り。

  • 点灯していないLEDのはんだミス
  • 点灯していないLED自身が壊れている
  • 点灯していないLEDの前の番号の、点灯しているLEDのDOUTが基板と接続されていない
  • 点灯していないLEDの前の番号の、LEDが点灯していてもDOUTだけ壊れている

これらを踏まえて以下の順でチェックしました。

チェックシート

  1. ProMicroにCrkbdのデフォルトキーマップのファームを書き込んで基板と接続しどのLEDが光ってるか確認してください。(デフォルトを入れた直後だとLEDが赤く光るはずです)
  2. 点灯しないLEDの前の番号のLEDが光っているところがチェック対象です。
  3. 以下をチェックします。
    • 向きが正しいか
    • 正しい向きに付け直します。 * 点灯していないLEDのハンダミスを確認する
    • VDD,VSSの接続確認
      • テスタで抵抗値チェックでLEDのパッドと基板のパッドをあてて抵抗値を読む。-とか計測不可な場合はハンダ不良なので、ハンダを付け直して点灯したら2.に戻って次の点灯しないLEDを調査。0ohmなら接続自体はOKなので次の項目へ。
    • VINの接続確認
      • 前の番号のLEDのVOUTと、調査中のVINにジャンパを当てる。点灯したらVINのハンダ不良なので、ハンダを付け直して点灯したら2.に戻って次の点灯しないLEDを調査。点灯しない場合は次の項目へ。
    • VINの接続確認2
      • 前の番号のLEDのVINと、、調査中のVINにジャンパを当てる。点灯したら前の番号のLEDのVOUTが死んでいる可能性が高いので交換し、付け直して点灯したら2.に戻って次の点灯しないLEDを調査。点灯しない場合は調査中のLEDが死んでいる可能性が高いので交換します。

img

  • VDDとVSSが繋がっていることを確認する術がVINに信号を送るしかない
  • ひとつ前のLEDのVOUTが死んでいる可能性も調査しないとけいない
  • LEDの4つのパッドが全て生きていないと完成しない

というのがデバッグの難易度を上げていますが、慎重に一つづつ若い順番から調査していくことで解決していきました。当然ですが電源入れながら半田ごてを当てるのはショートする恐れがあるのでやめましょう。
単純に点灯してない箇所だけLEDを交換しても前段のDOUTが壊れていると点灯しないので、いつまでも正常に動作するLEDを交換し続けるループに陥る場合があるので注意してください。
あとLEDを剥がすときは270℃くらいに上げるとハンダに熱が通りやすくハンダ吸い取り機や吸い取り線の扱いもラクです。

私の作業

img

 私は全部付けちゃってから確認して絶望したので、HelixのLEDテスト用のファームを使って赤、青、緑の点灯パターンを見ながら、若い番号のDINと点灯していないLEDのDINに次々ジャンパで当てていくことでとりあえず点灯するかどうかは確認してました。そのあと点灯しなかった個所についてデバッグしていった感じです。

おすすめの付け方

 温調半田ごて(C型のこて先で)で220℃付近に設定して、フラックスをパッドに塗り、ほんの少しはんだをこて先につけてすぐにパッドに塗りつける感じでやっていきます。
 あと一気に付けてしまうのでなく、ビルドガイドのLED番号の1から順に2,3個づつつけてその都度点灯することを確認していったほうが精神的にラクです。

というわけで完成

img
img

 苦労して付けたLEDが全部点灯して、キースイッチとキーキャップを付けて完成!  当初Cherry赤軸が余ってるのでそれを付ける予定だったんですが、赤軸のケースがバックライトLEDを覆い隠して光らない事に後から気が付いてあわててKailh Proスイッチのバーガンディ軸を買いました。データシート的にはCherry赤軸よりストロークが短くて重い。コンマ以下のストローク変化とか数gの重さの変化なんて感じられないだろうと考えてたんですが、実際使ってみると変化に気づくもんですね。Kailh Proの打鍵感も好きかも。

 キャップはBig Bang MDA Profile Ortholinear Keycapsの出荷待ちでこれが来たら取り付ける予定なんですが、とりあえず使うための以前塗装した「連邦の白い悪魔」仕様のキャップを付けました。

キーマップ

 キーマップは到着する前にだいたい作ってたもので、やっぱり日本語JIS配列がベースです。
 Defaultレイヤから脱落したものを適宜LowerとRaiseに入れていますが結構一杯です。Lowerに記号とFキー、Deleteや漢字変換、Esc。Raiseに数字キーの(記号入力があるので)通常並びとテンキー風並びを用意して数字入力のしにくさを緩和しています。

const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
  [_QWERTY] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
        ESC,     Q,     W,     E,     R,     T,                      Y,     U,     I,     O,     P,  MINS,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       LSFT,     A,     S,     D,     F,     G,                      H,     J,     K,     L,    UP,   ENT,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      LCTRL,     Z,     X,     C,     V,     B,                      N,     M,  COMM,  LEFT,  DOWN,  RGHT,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                   LGUI, LOWER,  BSPC,      SPC, RAISE,  GUAP \
                              //`--------------------'  `--------------------'
  ),

  [_LOWER] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
        TAB,    F1,    F2,    F3,    F4,    F5,                  XXXXX,  MINS,   EQL,  JYEN,  LBRC,  RBRC,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      _____,    F6,    F7,    F8,    F9,   F10,                  XXXXX, XXXXX, XXXXX,  SCLN,  QUOT,  BSLS,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      _____,   F11,   F12, XXXXX, KANJI,   ENT,                  XXXXX, XXXXX,  COMM,   DOT,  SLSH,    RO,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  _____, _____,   DEL,    XXXXX, _____,   APP \
                              //`--------------------'  `--------------------'
  ),

  [_RAISE] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
      _____,     1,     2,     3,     4,     5,                      6,     7,     8,     9,     0, XXXXX,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                  XXXXX,     4,     5,     6,  QUOT, XXXXX,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      _____, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,                      0,     1,     2,     3,   DOT, XXXXX,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  _____, _____, XXXXX,    XXXXX, _____,  LALT \
                              //`--------------------'  `--------------------'
  ),

  [_ADJUST] = LAYOUT_kc( \
  //,-----------------------------------------.                ,-----------------------------------------.
        RST,  LRST,  KNRM,  KSWP, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX, XXXXX, XXXXX,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
       LTOG,  LHUI,  LSAI,  LVAI, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX, XXXXX,  PGUP, XXXXX,\
  //|------+------+------+------+------+------|                |------+------+------+------+------+------|
      LSMOD,  LHUD,  LSAD,  LVAD, XXXXX, XXXXX,                  XXXXX, XXXXX, XXXXX,  HOME,  PGDN,   END,\
  //|------+------+------+------+------+------+------|  |------+------+------+------+------+------+------|
                                  _____, _____, XXXXX,    XXXXX, _____, XXXXX \
                              //`--------------------'  `--------------------'
  )
};
Back to Top