11月25日発売 書籍『Arduinoと3Dプリンタでロボットを作ろう』を出させて頂きました!

【電子工作 / PCB】初めての自作キーパッド『4KeyPad』の製作!

以前書いたこちらの記事の追記となります。

【電子工作 / PCB】シンプルな自作キーパッドの製作を考えています!

初めての自作キーパッドとなる『4KeyPad』が完成しました!

4キーのみのシンプルなキーパッドですが、1からキーレイアウトやPCBを設計しキーボード用のファームウェア(QMK)も作成、REMAPによるキーマップの変更等にも対応でき、初めての自作キーパッドとしては満足できるものが出来たと思います。

これで自作キーボードの世界に少し足を踏み入ることが出来ました!

初めてということもあり見様見真似で製作したのですが、個人的に得るものが非常に多かったプロジェクトでした。

初めての自作キーパッド『4KeyPad』の製作!

KiCadで基板設計をする際によく使うショートカットキーをいくつか割り当てて使える小規模な左手キーパッドがあれば便利そう・・・
これが今回製作した自作キーパッド製作のきっかけでした。

4キーほどのものならCH552GやATmega32U4といったUSB機能があるマイコンを使い普段使い慣れているArduinoとしてプログラムを作り動作させることは比較的簡単なんですが、自作キーボードの世界にも前々から興味を持っていたのでQMKといったキーボード用のファームウェアを使うことを前提で製作することにしました。

CADのイメージ

『自作キーパッド』なので自分が使いやすいことが大前提となります。
自分の左手の指の位置に合わせてキーの配置を決め、形状を作っていきました。

初めての自作キーパッド製作となるので、既存のマイコンボードを実装出来るサイズで作れればPCBの設計に関しては簡単に出来るのですが・・・

なるべく無駄なスペースは作りたくなく自分が使いやすいサイズ感で設計すると既存ボードをマウントするサイズでは作れないことから、この時点でUSB機能が使えるMCU(マイコンチップ)をPCBに直実装する方向になりました。

PCBのサイズや形状、スペーサーパネルを含めた全体構成をFusion360上でまず完成させました。

トップ・メイン・ボトムの3枚のPCBの間にパネルを2枚挟んだ構成になります。

全体構成および各パーツの形状が作れたので、それらデータをKiCad側に持っていきPCBの設計に入ります。

回路構成

全体構成が決まったので、次はメインとなるPCBの設計です。

QMKファームウェアが使えるPro MicroやRaspberry Pi Picoといった既存のボードが使えれば基板の設計は簡単なんですが、CAD上でイメージしたものにはサイズ的に既存ボードが収まらないのでマイコンチップを直実装させることにしました。

ブレッドボードでのテストでは、Pro Micro(ATmega32U4)とRaspberry Pi Pico(RP2040)での動作確認は出来ていたのでどちらのMCUを使っても回路設計は出来るのですが・・・

これまでの自作基板製作で何度か使って慣れているATmega32U4を使うことにしました。
シンプルな構成で組むことが出来ます。

4キーのみなのでダイオードを使ったマトリクス配置にはせず、QMKファームウェアではダイレクトピンが使えるようなので各キーにGPIOピンを1本ずつ割り当ててGNDに落とす回路構成にしています。

そしてキー直下にそれぞれRGB LED(SK6812MINI-E)を配置し、ボトム側を照らすLEDも外周に4つ使った計8つのRGB LEDの構成としました。

また、何かしらトラブルがあった場合に備えATmega32U4のブートローダーの書き換えが出来るようにISP端子も付けています。

全体の回路構成はこのようになりました。
非常にシンプルな構成です!

基板設計

Fusion360上で全体の構成&イメージができ回路構成も決まったので、次に基板(PCB)の設計です。

PCBの間に挟むパネルの形状はFusion360上で設計が出来ているので、その形状をKiCadのレイヤーに割り当てればメイン基板との干渉部分の確認が出来ます。

パネル部分を避けパーツを配置し配線していきました。

メインPCBはこれで完成です!

実は1回目の基板発注ではメインPCBのLEDのフットプリントに誤りがありました。
これに関しては後述します。

メインPCBが出来れば次にトップとボトムPCBです。
Fusion360上でキーの配置は決めているので、トップPCBはその位置に合わせフットプリントを配置するだけです。

またボトムPCBはリセットスイッチ用の穴を空けています。
メインPCBに配置したリセットスイッチの位置に合わせて小さなドライバー等が入るホールを開けています。

以上でPCBの設計は完了です。

プレートの作成

PCBの設計が出来たので、最後にプレートの作成です。
こちらもFusion360上で既に設計が出来ているのでDXFファイルを出力し厚みを指定してアクリルプレートとして当初製作する予定でしたが・・・

PCBの製作でスポンサーになって頂いているJLCPCBさんの計らいで3Dプリントサービスを試させて頂く機会があったので、透明レジンを使った3Dプリントパーツとして製作することにしました。

JLCPCBの3DプリントサービスJLC3DPガイドラインによりビスの穴径や厚みなど少しデータを修正する必要がありましたが、結果的に非常に良いパネルとして仕上がりました。

アクリルパネルでは出来ない?凝った形状のものも3Dプリントパーツでは作れるので、PCBとの相性も良くこれからJLC3DPの方も利用頻度が高くなりそうです。

PCB & 3Dプリントパーツの発注

PCBおよびパネルの発注はJLCPCBを使いました。
PCBはJLCPCBに発注、パネルは同サービスのJLC3DPへの発注となります。

MEMO
2024年5月現在、JLCPCBではPCBと3Dプリントサービスとの同梱発注は出来ないようなので別々に発注する必要があります!

PCBの発注

まずPCBの発注です。

トップ・メイン・ボトムの3枚のPCB構成になっているので異種基板の面付けとして1基板データにして発注しようかとも考えましたが、標準サイズとなる10cm×10cm以内に収まる基板サイズだったので格安で製造することが出来るため、それぞれ個別基板として発注することにしました。
基板のアウトラインも個別基板として製造した方がカット面も綺麗に仕上がります。

基板データ(ガーバーファイル)をダウンロード出来るようにしておきます。
製作に興味がある方や、また何かの参考になればと思います。

PCB発注時の選択項目はデフォルトで設定されているものを選択すれば問題ありませんが(基板カラーはお好みで)、基板製造時に任意の位置に入ってしまう基板製造番号を削除するオプションを付けて発注しました。
1.5ドルの有料オプションとなりますが透明パネルを付けて中のPCBが見える状態なので、製造番号を削除するオプションを付けて発注するのがいいと思います。

3PCBともに以下項目を選択しておけば問題ありません!

またメインPCBはステンシルも一緒に発注しました。
ATmega32U4はQFPパッケージのものを使ったので手はんだでももちろん実装は可能ですが、リフローでパーツを実装することを予定しているのでステンシルがあると作業効率は大きく上がります。

配送方法にOCS Expressを選択し、トータル25ドル程で製作することが出来ます。(ステンシル&オプション料金込み)

JLCPCBでの基本的な基板発注方法に関しては、こちらの記事で詳しくまとめているのであわせて見て頂ければと思います。

【電子工作】はじめての基板製作!JLCPCBさんに基板を発注してみました。ユーザー登録・データ納品・基板到着までの一連の流れをご紹介!

プレート(3Dプリントパーツ)の発注

次にプレート(スペーサー)パーツの発注です。
こちらは3Dプリントパーツとして発注するので、JLCPCBの3DプリントサービスJLC3DPでの発注となります。

プレートデータ(STL)もダウンロード出来るようにしておきます。(解凍して下さい!)

マテリアル(材料)は[8001レジン]で[透明]を選択し製造しました。
透明レジンでの製造は120時間と結構時間がかかりますが、サンディングやオイルスプレーといった後処理もやってくれるため非常に綺麗な仕上がりになります。

配送方法にOCS Expressを選択し、2プレート送料込みで7ドルほどで製造出来ます。

JLCPCBの3DプリントサービスJLC3DPの発注方法は、こちらの記事で詳しくまとめているのであわせて見て頂ければと思います。

【JLCPCB / JLC3DP】JLCPCBの3Dプリントサービス(JLC3DP)を利用してみました。発注手順などをご紹介!

PCB & 3Dプリントパーツの到着

OCS Expressを選択しPCBは発注から8日、3Dプリントパーツは12日で手元に届きました!
PCBおよび3Dプリントパーツの製造は他社を圧倒する安さにも関わらず製造&到着が早い、JLCPCBのサービスほんといいですね!

メインPCBは白レジスト、トップとボトムPCBは黒レジストで製作しました。

2枚のプレートも非常に綺麗に仕上がっています!
JLCPCBの3Dプリントサービスは安価ですが、レジンを扱った後処理といった面倒なこともしっかりとやってくれます。

今回初めてJLCPCBの3Dプリントサービスを利用したのですが、透明レジンを使ったパネルがここまで綺麗に仕上がるとは正直思ってなかったので驚きです!

パーツの実装

0603サイズのパーツをメインで使っておりATmega32U4(QFP44)はリード線のピッチが0.8mmと小さいので、SMDパーツに慣れていないとパーツの実装は少し難しいかもしれません!

このサイズのパーツなら慣れていれば手はんだでも十分可能ですが、今回はリフローで実装を行いました。
ステンシルも発注していたので実装は比較的簡単に出来ました!

リフローにはMHP50を使いました。
MHP50はMiniwareのMHP30の後継機となり非常に便利なミニリフロー装置で毎回愛用しています。

MHP50に関しては後日MHP30の記事に追記しておきます。

【電子工作】コンパクトボディーで安全設計!ミニリフロー装置『Miniware MHP30』を使ってみる!

今回製作したPCBはMHP50のホットプレートサイズを超える大きさがありますが、このようなMHP50専用の治具スタンドを製作しておくと大きな基板にも対応出来て便利です!

MHP50ユーザーの方は非常に便利なので、こちらの記事も見て頂ければと思います。

【電子工作 / PCB】Miniware MHP50で使えるスタンドの製作。大きな基板やいろんなリフロー方法に対応出来るので便利ですよ!

そしてパーツ実装時に気付いたのですが、使用したRGB LED(SK6812MINI-E)のフットプリントの誤りがありました!

RGB LED SK6812MINI-E について!

SK6812MINI-Eは自作キーボードやキーパッドなどの製作でよく使われているRGB LEDです。

4本のリード線が浮いた位置に取り付けられているという、ちょっと変わったLEDとなっています。
PCBに実装する際にフットプリントにホールを開けておかないとリード線がパッド部分に接地しないということですね。

参考 SK6812MINI-E データシート秋月電子通商

キー直下に接地したLEDにはホールを開けていたのですが、PCBの背面を照らす外周に取り付けたLEDのホールを入れ忘れていました!
LEDのリード線を少し曲げて一応実装は出来たのですが・・・

少し変わった実装方法のパーツなので1度目のPCB発注ではフットプリントを間違ってしまったのですが、修正したPCBを再度発注して完成させました。(上記ダウンロード出来るガーバーファイルは修正済みデータです!)

ホールを開けLEDを設置する向きを変えることにより、実装面を片側に統一しPCBの表面・裏面を点灯させることが出来る便利なRGB LEDです。(同じ位置に両面実装も出来ます)

他のRGB LED、例えば5050(WS2812B)といったLEDではPCBの点灯面に実装する必要があるため、PCBの表面・裏面を点灯させたい場合は両面実装となってしまいリフローによる実装の難易度が上がってしまいますからね!

組み立て

組み立ては簡単です!

ボトムPCBにM2×3×12mmスペーサーを固定してパネル・PCBを挟み込んでいきます。(指定サイズのスペーサーを使って下さい!)

試作の段階では自宅にある3Dプリンタを使い白フィラメントで出力したプレートを使っていました。
RGB LEDは結構輝度が高いので、それでも綺麗に光を透過してくれるのですが・・・

JLCPCBで製造した透明レジンプレートの出来が非常に良く、製品のような仕上がりで完成させることが出来ました!

動作確認

ファームウェアの書き込み

最後に動作確認です。
ATmega32U4には出荷時にDFU機能のあるブートローダーが書き込まれています。
PCに接続し直接QMKファームウェアを書き込むことが出来ます。

今回製作した4KeyPad用のQMKファームウェア『4keypad_via.hex』を作成したのでこちらをまず書き込みます。(zipファイルを解凍して下さい!)

書き込み方法はいくつかありますが、こちらではQMK Toolboxを使って書き込みます。
以下のリンクから最新のQMK Toolboxをダウンロードして下さい。

Macの場合は[.pkgファイル]、Windowsの場合は[.exeファイル]をダウンロードして実行するとQMK Toolboxをインストールすることが出来ます。

参考 qmk_toolboxGitHub

QMK Toolboxを立ち上げ[Open]から上記ダウンロードした4KeyPad用ファームウェア[4keypad_via.hex]を選択、MCUは[ATmega32U4]を選択します。

PCB背面にあるリセットスイッチを押すと[Flash]ボタンが選択出来るので、これをクリックしてファームウェアを書き込みます。

無事ファームウェアの書き込みが完了するとこのように表示されると思います。

テキストエディタ等を開きキーをクリックすると左から[1][2][3][4]と入力されればOKです。(LEDは全て赤色に点灯していると思います)

キーマップの変更

デフォルト設定ではキーにそれぞれ[1/2/3/4]を割り当てていますが、REMAPを使いキーマップの変更等を行うことが出来ます。

参考 REMAP トップページREMAP

ブラウザでREMAPを開き[CUSTOMIZE YOUR KEYBOARD]をクリックします。

[KEYBOARD]をクリックし、

[4KeyPad]を選択し[接続]をクリックします。

設定用のjsonファイルを求められるので、以下設定ファイル[4KeyPad.json]をドラッグ&ドロップします。(解凍して下さい!)

現在設定されているキーマップが表示されます。

LEDの点灯を[Effect Mode]やカラーパレットを切り替えて確認して下さい。

問題がなければ、任意の文字やショートカット、レイヤーなどを割り振ってお使い下さい!

MEMO
販売等を想定して製作しているわけではない為、パーツ実装後にキーの入力やLEDの点灯などを簡易チェック出来るプログラムを用意していませんが、ご了承下さい!

REMAPの使い方はこちらでは割愛しますが、4キーのみのキーパッドなので長押しでレイヤーを切り替える設定をしておくと便利だと思います。

一例ですが、レイヤーキーを押した状態で各レイヤーに割り振ったキーで動作させる・・・
このような感じで割り当てると使いやすくなると思います!

ちなみに、[レイヤー1]の状態ではキー直下の4つのLEDが緑色に点灯[レイヤー2]では青色に点灯[レイヤー3]ではパープルに点灯し現在のレイヤーを視覚的に分かるようにファームウェアを作っています。

使用パーツ一覧

今回使用したパーツ一覧です。

パーツ定数入手先
コンデンサ
(0603)
C1/C3 22pF
C2/C5 15pF
C4/C8 100nF
C6 1μF
C7 4.7μF
AliExpress
ダイオードD1 1N5819WS
(SOD-323)
AliExpress
USB端子J1 Type-CAliExpress / 秋月電子
LEDLED1~LED8
SK6812MINI-E
AliExpress / 秋月電子
抵抗
(0603)
R1/R6 10kΩ
R2/R5 22Ω
R3/R4 5.1kΩ
AliExpress
MCUU1 ATmega32U4(QFP)AliExpress / 秋月電子
クリスタルY1 クリスタル16MHz
(SMD-3225)
AliExpress
スイッチソケットKailh Switch Socket(MX用)AliExpress / 遊舎工房
スイッチSW1~SW4 Cherry MX互換キー
(お好みで!)
AliExpress / 遊舎工房
SW5 RESETスイッチ
(SMD3×4×2.5mm)
AliExpress
スペーサーM2×3×12mm 6本Amazon
ビスM2ビス(4mm or 5mm) 12本ーーー

最後に!

初めて製作した自作キーパッドが無事完成しました!
なかなか良い仕上がりになったと思います。

キーレイアウトから始まりCADでのパーツ&PCBの設計、そしてファームウェアやREMAPへの対応など自作キーボード製作の一通りの流れを経験することができ、非常に得るものが多かったプロジェクトになりました。

自作キーボード製作に興味がある方は、今回ご紹介したものはPro Microでも再現で出来るのでブレッドボードで組みファームウェアを書き込み動作を確認するといったことも出来るので興味がある方はやってみるのも面白いと思います。

1 COMMENT

コメントを残す