⌨️

知識ゼロから完成までの自作キーボード作成過程

に公開

始めに

キーボードの知識ゼロから設計、製作した過程をまとめたものです。

この記事で自作キーボードに対し興味がある方の役に立てば良いな思います。
(製作過程で疑問に思ったことなどを細かく書いています。)

経緯

keyballの無線化が流行っていた。しかし、keyballの在庫がなく入手困難であった。
思考段階でkumakeyさんのroBaをTwitterで拝見した。
自分の構想と近いものだったためroBaを自分なりに改良してキーボードを作ってみようと考えました。

自分にできるか不安な人へ

自分が作成する前に不安だった点と実際作ってみた感想を共有します!

不安点

  1. はんだ付けできるか不安
  2. 設計知識何もない
  3. サイズ感がよくわからない
  4. 完成までにかかる金額がわからない
  5. プログラム書いたことない。できるか不安。

実際に製作してみて

  1. 安全面に気を付けて動画を見て学べば誰でもできると思います。

詳しくは組み立て内に記載

  1. 本を見て学べばそこまで難しくない印象です。わからないことがあれば質問すれば大体返答してもらえます!
  2. 自分はroBaの試作基板を購入させていただきました。なんでもいいので実際に基板に触れてみることでサイズ感やモチベにつながると思います。
  3. 作るものにかなり依存しますが、自分の場合を参考程度に示します。
    (大体のキーボードはこれより安く作れていると思います)
    動作確認まで : 約16000円
    完成まで : 約15000円
    はんだ用工具: 約10800円
    合計 : 約42000円
  4. プログラミングは考え方がすべてだと思っています。
    まずはpaizaioというコードエディタのサイトを使って、何でもいいのでプログラムを書いてみるのが良いと思います(最初の学習はC言語が良い気がする)。何を書けばいいかわからないというのがあればchatgptに質問することで基本的にコードを書いてくれたり、コードの意味を教えてもらえます!
    プログラミング言語について自分の印象を少し示します。
    C言語 : 実際使われることは少ないが基本的な考え方が身につく。
      書く内容が多い = 細かいことまで書く必要がある ので逆に理解しやすい。
    Python : 実際のソフトウェア等で多く使用される。オブジェクト指向という少し理解するのに難しい考え方。
    html : 簡単なウェブサイトに用いられる言語。書いたものが目でわかるから楽しい。学習には向かないかも。
    実際にファームウェアを書くときは、githubとの連携のしやすさ、複数のファイルの編集のしやすさという点からvscodeというコードエディタを使用することをお勧めします!
    実際に使用するファームウェアは書き方が違う場合がほとんどだと思いますが、まずはコードを何度か書いてみて雰囲気を確かめてみるのが良いと思います!

まとめ

不安な要素は上記以外にもあると思います。まずは簡単なことでいいので実際に行動を起こしてみることがカギかなぁと思いました。また不安なことは質問してみても良いと思います!


作成手順

構想

どのようなものを作りたいのか、どんな機能が欲しいのかなどを決める

使用用途

勉強中やネットサーフィン等の普段使い(ゲーム等は想定しない)

求める機能

勉強中に邪魔にならない & 使用しやすい
→ 分割だと間にノート等をおける
ペンを置かずにカーソル移動したい
→ 利き手と反対でマウス操作

  1. 無線
  2. 分割型
  3. トラックボール付き → 左手配置
  4. プログラミングのしやすいキー配置
  5. ロープロファイル(ホットスワップ)

製作途中で構想案が没になれば追加されることもあるし、想定していた手順通りにならなかったりと実際は思い通りにはいきません。最初は実現できるかなどは気にせず創造のままに書きだすのが良いと思います!!

当時の構想案

当時の構想案


知識づけ

自作キーボードに対する知識を最低限つける。(回路設計、ケース設計の大まかな方法)

回路設計の方法はBoothで販売している自作キーボード設計入門で勉強しました。
また、ケース設計にはBlenderを利用しようと考えたためYoutube等で学びました。(今からやるならFusion360がおすすめかも)
調べてもわからないことがあるときはDisscordサーバーで質問すると、知識人の方々からいろいろ回答をもらうことができます。

Disscordサーバーのリンクは協力してくれた方に示す

この段階でkumakeyさんから試作基板を購入させていただきました。


回路図設計

キーボードの回路図を設計する。

ここまで来たらKicadを使用してキーボードの回路図を設計していきました。

Kicadの公式ページはこちら

回路図を設計するときはgithub等で、kicadデータを公開してくれている方が多くいるので似たような機能を持つキーボードを探し参考にすると失敗は少なくなると思います。

roBaの回路図を参考に回路図を設計していきました。
自身の回路図の一部抜粋

自身の回路図の一部抜粋

それぞれの回路図がどこを示すのか書いておくと後から参照したときに理解しやすくなります。

細かい回路の設計方法は前述した本などを参考に行ってください。

部品等選定

キーボードを作るのに必要な部品を作成する

求める機能、回路図をもとに部品を選定していきます。参考にしているキーボードがある場合はそのキーボードの部品を利用することが簡単です。

部品を決めるときは型番,値段,データシートをメモしておくと後の作業が楽になります。

  • マイコン:Seeed XIAO BLE nRF52840
  • ソケット:choc v2 hotswapソケット
  • エンコーダ : EC12E2440301
  • センサ:pmw3610
    etc…

詳しくは購入品一覧を参照してください。


PCB設計

回路図をもとにPCBの設計を行う

回路図、部品表をもとにPCBの設計を行います。
部品を配置する際、それぞれの部品が干渉しないよう十分に気を付けてください。
実際に組み立てることを想像しながら配置することをお勧めします。
(自分はスライドスイッチとキースイッチが干渉しました...。)

実際に使用するデータシートと設計したPCBを照らし合わせて配置します。
配線は自動でしてくれるものもありますが、自身で修正等が必要なため最初から自分でやるのがおすすめです。
下に名前書くと自分で作った感出ておすすめです!!

PCB設計も回路設計同様、前述した本を参考にすれば大体できると思います。

部品発注

設計したPCBを含む動作確認までに必要な部品を発注する

PCB、PCBAの発注先は好きなところで構いませんが、JLCPCBに発注してる人が多いイメージです。JLCPCBへ発注する方法は以下の記事を参考にしました。

基板データの出力と基板の製造

参考までにいくつか部品の購入先を示します。

部品 値段 購入先
xiao ble 2500 秋月電子
スライドスイッチ 25 秋月電子
ダイオード 220 遊舎工房
キーソケット 187 遊舎工房
Lipoバッテリ 999 Amazon
pmw3610 500 aliexpless
lofree goast 500 DailyCraftKeyboard

lofree goastスイッチを45個以上買う場合DailyCraftKeyboardで購入するとlofree製キースイッチプラーが付属するのでおすすめです

送料などを考えると部品の購入先を決め、まとめて購入するのが良いと思います。


ファームウェア設計

部品がすべてそろうのに時間があるのでその間にファームウェアを設計していきます。
今回、無線型のキーボードを作るため無線系の機能が多く備わっているZMK Firmwareを使用しました。

今回は参考にしたキーボードのファームウェアが公開されていたためそれを参考に書き換えることで作成しました。
初めてファームウェアを作成する場合、自分はZMK Firmwareをおすすめします。
ZMK Firmwareは世界中の有識者がいるZMK公式のサーバー(詳細は協力してくれた方)があるため、ハード面を含めわからない点を質問することができます。また無線機能を使う際、省電力等の無線に関するいくつかの機能をサポートしているのも特徴のひとつです。

zmkのdiscordサーバーは基本英語でやり取りされています。そのためchatgptなどを活用して英訳してもらいましょう。


組み立て

部品がそろったら実際に組み立てます。

ダイオード、キーソケット、PHコネクタ、エンコーダ、スライドスイッチ、マイコンの順番ではんだ付けをしました。
表面

表面

裏面

裏面


はんだ付けをしたことがない人へ

はんだ付けしたことがなくて自作キーボードに抵抗がある人は多いと思います。
自分が行った感想を簡単に言うと、はんだ付けはきちんとした知識を身に着ければ誰でもできると思います!
自分は最初「なんであんな小さな位置にはんだをのせることができるんだ?」と思っていました笑
実際は基本的に基板の銀色の部分にしかはんだは乗らないし、はんだ付けの動画を見れば初心者でもはんだ付けするのは簡単です。
ただし、はんだごては危険な道具です。簡単だからと言って雑に扱ってしまうと事故につながります。
使用する前に必ず動画や説明書を読んで学習してから行うようにしてください。

自分ははんだごて放置による事故が起こらないように、使用しないときは毎回コンセントを抜いています。


動作確認

思い通りに動作しているかを確認します。もし、想定と違うことがあればその都度メモしておくとよいです。

マイコンにファームウェアを入れ動作を確認します。
キースイッチがあるときは、実際に押してみてすべてのキーが反応するかをテストしました。
キースイッチがないときは、キーソケットの両端をピンセットでさわりキーが入力されるか確認しました。

自分の場合はPCBの設計も思いのほかうまくいき、1回目で動作面のみはうまくいった。
しかし、何点か改善点も見られた。
・電源スイッチとキースイッチの干渉問題 → 配置が近かったため少し干渉してしまったが、基板の裏に設置することで問題を解決した。
・ねじ穴の配置問題 → PCB固定用のねじ穴がキースイッチと近かったためねじを締めることができなかった。
・PHコネクタの+-が逆 → バッテリー側のケーブルを少しいじることで問題解決した。

動作確認時の状態

動作確認時の状態

まとめ PCB設計の際に組み立ることをしっかり想像してそれぞれの配置を考える。

この段階が終わったタイミングでTwitterで投稿したところ少しずつ反響をもらえるようになりました。

実際の投稿


外装設計

この段階は動作確認がしっかり終わってから行うようにしてください。
ケース、キーキャップ等の設計をする。(キーキャップは市販のもので代用可)

blenderやfusionなどの3DモデリングをできるソフトをPCにダウンロードしてケースやキーキャップを設計していきます。
設計したデータは3Dプリンタを購入し印刷するか、発注します。

自分は本体ケースは3Dプリント製、キーキャップは市販品を使用しました。

追記(2025.1.16)

いろいろ試行錯誤してキーボードケースを作った感じ、作成にはFusion360を使用することを強くお勧めします。blenderだとアプリの特性上細かい長さ指定が非常に困難であるためです。
また、ケース作成する際はKicadで外形等をDXF形式でエクスポート→Fusionにインポートすることで比較的簡単にケースを作成することが可能です。
実際に作りたい形の設計図を書いてから始めると作りやすいと思います。
頭だけで考えてやると、逆に時間がかかってしまう印象です。


発注・プリント、組み立て

外装を発注・プリントして組み立てる。

ねじを使って固定する場合、強く締めすぎると3Dプリンタ製の部品などは破損する可能性があるため締め過ぎに注意してください。


完成

完成図

完成写真


購入品一覧

必須なもの(動作確認までに必要となるもの)

  • マイコン : seed xiao ble nRF52840
  • キーソケット : choc v2 hotswap対応ソケット
  • センサ : pmw3610
  • PCB : メイン基板、トラボ基板
  • ダイオード
  • スライドスイッチ
  • エンコーダ
  • L字コンスルー
  • PHコネクタ
  • 25mm球
  • lipoバッテリー

必須でない(外装等)

  • キーキャップ : junana mx
  • ケース : 3DP
  • トラックボールケース : 3DP
  • マグネットコネクタ : magnet usb-c
  • ポロンシート : 2.5mm
  • m2ねじ
  • m2スペーサー
  • ゴム足

製作中に困ってしまったら

制作中に困ってしまった場合以下を試していただけたらと思います。
・chatGPTに聞いてみる : 簡単な問題は解決してくれると思います。
・サーバーに質問してみる:chatGPTに聞いてもわからないようなら質問してみるといいですね
・制作者さんにDMしてみる:どうしてもわからない場合の最終手段としましょう。参考にしているキーボードがある場合は有効かと思います。製作者さんに迷惑のかからない範囲でお願いします。(問題が起きても責任はとれません)


協力してくれた方


最後に

長い記事になってしまいましたが、ここまでご覧になっていただきありがとうございます。
この記事が何かしらの形で役に立ったり、読んで良かったなと思っていただけましたら恐れ入りますが#moNaとともに#moNa製作記事付けて宣伝してもらえると嬉しいです。

今回製作したキーボードは現在、試作版として不定期販売をしています。詳しくは私のTwitter(@Pooh_pol0)を確認していただけると幸いです。
最後になりますが、よろしければ私のX(旧Twitter)(@Pooh_pol0)含め、協力してくれた方のXのフォローをしていただけると嬉しいです。

Discussion