【JLCPCB】自作キーボード初心者がATMEGA32U4直付のPCBを作ってみた
(追記1) 参考Webサイトにノイズ対策.COMを追加
(追記2) 受け取った商品に問題があった場合の対応についてを追加
(追記3) 参考WebサイトにSelf-Make Keybords in Japanを追加
普段Twitterで自作キーボードの制作状況などを呟いているcopkbdと申します。自作キーボード歴自体はとても浅く、今年の7月に一台目のキーボードを設計・製作しただけの初心者中の初心者です。
今回、JLCPCB(新規ユーザー向けの総額$54のクーポンが配布されています)さんにご提供いただきまして、二台目の自作キーボード作りに関連して、初めてPCB(*1)の設計・発注にチャレンジしてみました。
さらにPCBの発注に加えて、抵抗やダイオードなどの表面実装部品を業者側で取付まで行ってもらうPCBA(*2)にも挑戦しましたので、参考になる点があれば幸いです。
*1 PCB: Printed Circuit Board、プリント基板。いわゆる電子基板
*2 PCBA: Printed Circuit Board Assembly、プリント基板+組み立て。プリント基板に部品の実装まで機械で行う。JLCPCBではSMT Assemblyという名称で提供されている
Pro Microを使わない設計にする
初めて自作したキーボードは、Pro MicroというATMEGA32U4マイコンを搭載したArduino互換のモジュールを利用して作りました。Pro Microを利用すると簡単にUSB接続の機材が作れるので、自作キーボードを設計する際にはポピュラーな選択肢となります。ちなみに現在はRaspberry Pi PicoやSeeed Studio XIAOなどのマイコンモジュールもよく使われています。
これらのマイコンモジュールを使う場合は、設置するスペースを設計するキーボード内に確保する必要があります。コンパクトに収めようとするとキースイッチ用のPCBとマイコンモジュールの2層構造にする必要があり、マイコンモジュール分キーボード本体が僅かに厚くなります。
僅かな厚みの違いですが使用感には大きく違いが出ます。個人的にはこの厚みが気になるので、二台目の自作キーボードではマイコンモジュールを使用せず、チップ部品のATMEGA32U4を直接キーボードのPCBに載せたPCBを作ろうと考えました。
ちなみに一台目の自作キーボード用にAliexpressで購入したPro Micro(Type-C接続、互換品)は、基本的には正常に動作するのですが、罠がありました。というのもコストダウンのためか抵抗が2つ省かれているのでUSBケーブルのパソコン側に接続するコネクタ形状がType-Aでないと認識されません(電源供給すらされない)。MacbookのようにType-Cのポートしか持たないパソコンには変換コネクタを利用する必要があります。
このような罠も今回ATMEGA32U4直付のPCBを設計する上で、アドバイスをいただけたことでと知識を得る事ができました。
ATMEGA32U4を直接搭載したPCBを作る
ATMEGA32U4を直接PCBに載せるとは、言い換えるとPro Microの回路とキースイッチの回路を合わせて1つのPCB上に配置するということです(間違っていたらすいません)。
作る前は難しそうだなと考えていましたが、偉大な先人達が公開してくれている情報を参考にすることで無事設計する事ができました。私が参考にした情報は次の通りです。
参考書籍
いくつも有名なキーボードを開発されているfoostanさんのまとめられた書籍です。ATMEGA32U4を直接利用した設計に関する情報はありませんが、自作キーボードを設計するにあたっての必読書と言えます。
自作キーボード設計入門にもKiCadの使い方の概要は載っていますが、きちんと使い方を理解したいと思ったので購入しました。自分は5.1版を持っています。自作キーボード設計入門と合わせて読むとKiCadを使ったキーボード設計の一通りの知識が揃います
参考Webサイト
人気のキーボード設計者のai03さんが公開してくださっているドキュメントです。ATMEGA32U4直付のPCBを作りたくなった人なら必ず到達する情報かと思います。ステップごとにまとめられているのでとても分かりやすいです。
Type-Cコネクタの周りの設計で参考にしました。ai03さんをはじめ、数名のキーボード設計者が共同で行ったオープンソースのプロジェクトだそうです。
自作キーボード界隈では著名なサリチル酸さんが設計された汎用キーボードケース、GL516に対応するPCBを設計するためのガイドです。PCBでスイッチプレートを作る際に参考にさせていただきました。特に「Chapter10 完成度を上げる」は私が知りたかった情報が全てまとまっていたので大変参考になりました。
(追記1) プリント基盤を設計するにあたっての基礎知識がまとめられております。自分は全て読んだわけではありませんが、設計するにあたっての基本的なお約束が載っていますので大変参考にさせていただきました。
(追記3)自作キーボードに関する情報がスクラップ形式で集約されています。例えばATmega32U4に関してはこのようなスクラップがあり、データシートを読み慣れていない自分にとっては使えるピンの情報やクリスタルの選定などありがたかったです。
その他に公開されているPro Microの回路図なども参考にしました。また、Twitter上で製作状況を呟いていましたら、先人の方たちよりリプライでアドバイスをいただくことができました。
無事(?)設計できた基板及びスイッチプレートが次の画像です。
ここで具体的な設計手順をまとめるととんでもなく長くなってしまうので、もし疑問点がありましたらTwitterの私のアカウントにリプライをください。お答えできることでしたらお答えします(が、如何せん素人なのでその点はご容赦ください)。
製造業者の選定
PCBの設計ができたので、製造業者に発注します。
今回はJLCPCBに発注を依頼することにしました。主に次の点が選定理由となりました。
自作キーボード界隈で利用されている方が多く、安心感がある
発注方法の簡易さ
表面実装部品をPCBに実装してもらうPCBA(JLCPCBではSMT Assembly)の利用しやすさ
他の業者でもPCBAの利用はできますが、発注方法が圧倒的に簡単そうで、PCBの発注自体が初挑戦の自分にはうってつけだったのが大きいです。
ちなみに自分も含めて初心者の方は、いきなりPCBAには手を出さずにPCBの発注から始めてみた方が良いです(部品の指定を間違て発注すると修正が大変なので…)。
初めてJLCPCBを注文する方向けの総額$54のクーポンも用意されていますので是非利用しましょう。
発注に必要なデータ
PCB製造及びSMT Assembly(PCBA)の発注に必要となるデータは次のように大きく4種類です。
ガーバーファイル
ドリルファイル
BOM(部品リストのファイル)
部品配置ファイル(CPLファイル)
ガーバーファイルとドリルファイルはPCBを発注する上で必須のファイルとなります。BOMと部品配置ファイルはSMT Assemblyを利用する場合にのみ必要となります。
ここからの手順は、フリーの基盤設計CADであるKiCAD v6の利用を前提として説明していきます。
JLCPCBのライブラリからパーツを選定する
※ SMT Assembly(PCBA)を利用せずPCBのみ発注する場合は「PCB発注用ファイルの作成」まで読み飛ばしてください。
早速ですが、BOMと呼ばれる部品のリストファイルと、これらの部品をPCB上のどこに配置するかを記録した部品配置ファイルを生成するための準備を
していきます。
部品サイズの確認
まずは利用する表面実装部品のサイズを回路図エディタから確認します。回路図エディタで該当のシンボルのプロパティを開き、フットプリントから表面実装部品のサイズを確認します。
ここでは例として22Ωの抵抗の部品サイズを確認します。画像の通り0805_2012が表面実装部品のサイズです。なお0805がEIAというインチ単位の規格で2012がJISのミリ単位の規格です。数字の小さい方がEIA規格と覚えておくと良いです。手作業ではんだ付けする可能性もあったのでこのサイズにしています。
表面実装部品のサイズを表す規格(パッケージ)は他にもありますが、ここでは説明しませんので調べていただけると幸いです。
部品の選定
サイズの確認が完了したら使用する部品の選定に入ります。
JLCPCBのSMT AssemblyでPCBに実装できる部品は、基本的にはJLCPCB Parts Libraryにあるものから指定します。このライブラリのパーツはJLCPCBの関連会社のLCSCという電子部品販売会社と連携しています。そのためここで選んだ部品だけをLCSCから直接購入することも可能です。
先ほどの22Ωの抵抗を部品ライブラリから検索します。JLCPCBはグローバルサービスですので、EIA規格の部品サイズ0805を使って検索します。ここでは0805 Resistor 22Ωと検索して該当するパーツを絞り込みました。
後述しますが、選択する部品の絞り込み条件としてBasic Partsにチェックを入れておくようにします。
絞り込めたら部品名をクリックして詳細画面を開きます。部品のデータシートや価格等を確認して問題がなかったら選定完了です。
この中のJLCPCB Part #という項目のC17561が発注用のファイルに必要な情報となりますのでメモしておきます。
回路図のシンボルと選定した部品を紐づける
回路図エディタに戻り、再度シンボルのプロパティを開きます。プロパティにLCSCという項目を作って、先ほどメモしたC17561という部品番号を追加します。
これで後ほど生成するBOMファイル・部品配置ファイルとJLCPCB Parts Libraryの部品を紐づけることができました。
この作業をSMT Assemblyで実装したい部品全てに対して行います。同じ部品であっても全てのシンボルに対して行います。
Basic PartsとExtend Parts
部品検索時にBasic Partsによる絞り込みを行いました。
SMT Assemblyでは専用の機械が基板上に部品を並べていくわけですが、この機械に常にセットされている部品がBasic Partsとなり、SMTの基本代金と部品代金のみで実装してもらうことができます。
対してExtend Partsは注文が入った時点で都度機械にセットするので、別途人件費として$3加算されます。使用するExtend Parts1種につき$3加算なので、なるべくExtend Partsが少ない方がコストは抑えられます。
コンデンサを検索する時の単位について
コンデンサの単位で使われるμ(マイクロ)はギリシャ文字なので、環境によっては表示されません。従ってμではなくuで代用します。実際に後述するSMT Assemblyオプションを利用してBOMファイルと部品配置ファイルをアップロードした後に表示されるページでは、μは文字化けしておりました。
uによる代替はISOで認められている表記方法です。回路図の表記でも揃えておくと良いでしょう。
また、0.1uFなどは100nFと単位変換されたうえで管理されているので、検索してもヒットしない場合は単位を変換した値で検索すると良いです。
部品がどのような値で管理されているかはAliexpressのコンデンサの販売ページが参考になりました。
PCB発注用ファイルの作成
※ SMT Assemblyを利用せずPCBのみ発注する場合はこの項目から読み進めてください
SMT Assemblyを利用する・しないに関わらずPCBを発注する場合はガーバーファイル(+ドリルファイル)が必要になります。
KiCad v6でJLCPCB向けのガーバーファイルを生成する方法は公式がまとめてくれています。
ガーバーファイルの生成
まずはガーバーファイルを生成します。ガーバーファイルはPCBエディタ上の各レイヤーに紐づいた情報をそれぞれ出力したファイルです。
PCBエディタを開き、メニューから「プロット」ダイアログを開きます。
各種オプションの選択が完了後、「出力ディレクトリー」からガーバーファイルの出力先を選択します。なおガーバーファイルと後述のドリルファイルはzipで1つにまとめて発注します。適宜自分の管理しやすい場所を指定してください。
指定したらダイアログ右下の[プロット]ボタンを押してガーバーファイルを生成します。出力メッセージの最後に「完了」と表示されたら生成成功です。
そのまま続けてドリルファイルを生成します。
ドリルファイルの生成
先ほどのプロットダイアログの下部にある[ドリルファイルを生成...]ボタンを押すと「ドリルファイルを生成」ダイアログが表示されます。ガーバーファイルの時と同様に次のオプションを有効化します。
出力フォルダーがガーバーファイルと同じフォルダが指定されていることを確認したら、右下の[ドリルファイルを生成]ボタンを押してファイルを生成します。メッセージに「完了」が表示されたら成功です。
オプションとのことですが、JLCPCBでは出力を推奨しておりましたのでマップファイルも生成しておきます。同じダイアログ下部にある[マップファイルを生成]ボタンを押してマップファイルの生成は完了です。
発注用にまとめて圧縮する
ガーバーファイルとドリルファイル(+マップファイル)が次のように出力できましたので、フォルダをzipで圧縮します。JLCPCBにこのzipをアップロードすることで発注ができます。
まとめたzipファイルは、tracespace viewなどのガーバービューアーにアップロードしてみて意図した通りになっているかを確認すると良いでしょう。
PCBを発注する
発注自体はとても簡単です。このページから先ほどのzipファイルをアップロードして各種オプションを選択するだけです。
アップロードが完了したら各種オプションを選択します。主に次のオプションを変更していくことになると思います。
Base Material: 基板の素材。基本的にはFR-4を選択する
PCB Qty: 基板の発注数。5枚から注文ができる
PCB Tickness: キーボードで一般的に使われるのは1.6mmだが、薄い物を選択する場合もある
PCB Color: 基板の色。どの色でも料金が変わらないので嬉しい
Surface Finish: はんだ付けするパッドやスルーホールに対するメッキ処理の有無。鉛の有害性が気になるなら「LeadFree HASL-RoHS(鉛フリーはんだ処理)」か「ENIG-RoHS」を選択する
Remove Order Number: JLCPCB側の管理番号の印刷有無。「Specify a location」を選択すると自分で指定箇所に管理番号を印刷してもらえるので、部品で隠れる場所や捨て基板になるような場所に印刷するように指定できます
オプションが選べたら右カラムの[SAVE TO CART]ボタンでカートに追加し、決済手続きに進みます。
なお、SMT Assemblyを利用する場合はこの時点ではまだカートに入れないでください。
SMT Assemblyオプションを追加する
SMT Assemblyを利用する場合はガーバーファイルをアップロードしオプションを選択した後、続けてBOMファイルと部品配置ファイルをアップロードする必要があります。ファイルのアップロード後、カートに追加し決済手続きに進みます。
それではBOMと部品配置ファイルをKiCadから生成する手順をまとめます。
部品配置ファイルの生成
PCBエディタを開き部品配置ファイルを生成します。ガーバーファイル生成の時と同様に、「部品配置ファイルを生成(.pos)...」からダイアログを開いてください。
選択するオプションは次の画像のようにします。
出力先フォルダを選択して[部品配置ファイルを生成]を押し、ファイルを生成します。なお、出力先フォルダがガーバーファイルと同じになっていることがありますが、BOMと部品配置ファイルはそれぞれ個別にアップロードするのでガーバーファイルとは異なるフォルダを指定した方が良いです。
また、部品配置ファイルは裏・表と2ファイル生成されますが、JLCPCBでは片面のみ部品実装を依頼する事ができますので、不要な方は削除してしまった方が発注時に間違いがなくて良いかもしれません。
出力された部品配置ファイル(CSV形式)はJLCPCB向けに少々編集する必要があります。ファイルを表計算ソフトかテキストエディタで開き、表のタイトルを次のように変更してください。
Ref > Designator
PosX > Mid X
PosY > Mid Y
Rot > Rotation
Side > Layer
以上で部品配置ファイルの準備は完了です。続いて、BOMファイルを生成します。
BOMファイルの生成
まずはBOMファイル生成に便利なKiCad用のプラグイン(スクリプト)を追加します。arturo182/bom2grouped_csv_jlcpcb.xslというスクリプトをGitHub上から[Download ZIP]でダウンロードします。次に、ダウンロードしたファイルを任意の場所に設置します。User/Documents/KiCad/6.0/scripting/bom2grouped_csv_jlcpcb.xslあたりに置くのが良いと思われます。
スクリプトの設置ができたら回路図エディタを開き、上部ツールバーの[BOM]アイコンを押します。
次のようなダイアログが表示されるので、[+]ボタンを押して先ほどダウンロードしてきたbom2grouped_csv_jlcpcb.xslを回路図エディタに追加します。
スクリプト名を選択した状態でダイアログの下部にある[生成]ボタンを押すと、KiCadプロジェクトフォルダ直下に<プロジェクト名>.csvとして次のようなBOMファイルが生成されます。
BOMファイルの準備はこれで完了です。シンボル名と部品番号に相違がないかなど、確認しておきましょう。自分は深夜に作業したものを翌日確認したら結構な間違いを見つけました、見直し大事。
ファイルのアップロード
必要なファイルの生成が済んだので、先ほどガーバーファイルをアップロードしたページの下部にあるPCB Assemblyオプションを有効化します。
なお、部品実装の依頼は片面しかできません。その点には注意してください。
Assembly Side: 部品を実装する面を選択する
PCBA Qty: PCBの発注枚数が5枚の場合は試作品と判断されるので、部品を実装する対象枚数を5枚全てか5枚中2枚のみを選べます
Tooling holes: はんだペーストを塗る際に使用するステンシルの位置合わせのために、PCBに小さい穴を開ける必要があります。穴の位置をJLPCBA側にまかせるか、自分で指定するかが選択できます。詳しくはドキュメント参照
Confirm Parts Placement: JLCPCBのエンジニアによって部品配置と極性を修正してもらうためのオプション。ほとんどタダみたいなもの($0.43)なのでチェックしておく
SMT Assemblyの利用規約に同意した上で[Confirm]ボタンを押すと、先ほどKiCadから生成したBOMファイルと部品配置ファイル(CPLファイル)をアップロードする画面に遷移します。BOMファイルと部品配置ファイルを選択したのち、製品の使用用途を選択後に[NEXT]ボタンを押すとファイルのアップロードが実行されます。
※ KiCadから生成された部品配置ファイルは裏面用・表面用がそれぞれ異なりますので間違えないようにしてください。
アップロードが完了すると次のような表が表示されるので、今一度回路図と見比べて選択した部品が正しいかを確認しましょう。
ちなみに私の場合はBOMで部品番号を指定していないATMEGA32U4-AUがリストに入っていてびっくりしました。
指定子忘れと推測されて追加してくれたのでしょうか。今回ATMEGA32U4-AUは秋月電子で購入して自分ではんだ付けする予定なのでチェックを外しました(半導体不足とは言え5個で$100ドル越えの部品価格はきつい...)。
[NEXT]を押すと次のような画面になります。
プレビューで部品の位置がおかしなことになっていますが、これはKiCadが吐き出す座標データとこのシステムとの相性が悪いことに由来するようです。一つ一つ自分で修正することもできますが、発注後にJLCPCB側のエンジニアが部品を配置して再度チェックするタイミングがありますので、必要な部品があるかだけを確認して、このまま[Save To Cart]を押してカートに追加します。
画面右側にはSMTにかかるコストがそれぞれ表示されています。
Setup fee: SMTの基本料金
Stencil: はんだペースト用のステンシルの代金
Components: 部品代金の総額。めちゃくちゃ安いですね...
Extended components fee: ここではExtend Partsを3種類使用しているので、人件費がそれぞれ$3加算されています
SMT Assembly:
Confirm Parts Placement: 部品配置のチェック(オプション)完了時にメールを送ってもらうオプション
カートに追加したらその後は決済手続きに進むだけです。発注した内容に問題がなければそのまま決済に進んでください。
発注完了後
ここからは決済後のやり取りをまとめます。今回、少しイレギュラーと思われる対応も発生しましたので、こちらでなるべく詳細にまとめておきます。
レビューの開始
支払いが完了すると、Order Historyページに遷移し発注したPCBのレビューが開始されたことがわかります。
ちなみにスイッチプレートのような穴の多い形状は追加料金を取られますが、十分安いのでそのまま支払って作業を続行します。私はスルーホールでの装飾あり・なしの2バージョンのスイッチプレートを比較のために発注しておりましたが、どちらも追加料金は同じでした。
問題の確認・修正依頼
製造中に問題が発生しそうな箇所については別途JLCPCBから確認のメールが送られてきます。データを修正するかそのまま製造を進める(しかし問題が起きてもクレームは言えない)かなどを聞かれますので適宜返答してください。
ちなみにこの装飾ありのデータはJLCPCBではできない加工方法が含まれていたので注文をキャンセルしてもらいました。追加料金を支払い済みだったのですが返金はすぐ実行されました。
キャンセルした注文が製造審査に失敗したというステータスになったので注文全体がPending状態になっています。新しく発注し直すか、審査に失敗したデータ(キャンセルしたデータ)を無視してこのまま処理を進めるかを聞かれておりますので、[Confirm Production]をクリックしてこのまま注文を続行します。
発注後のキャンセル依頼などイレギュラーなことをしなければこの表示は出ないと思います。
注文の続行を選択すると再度正常に処理されはじめました。しばらく経つと、SMTでの部品配置に対する確認ができるDFM Analysisがのリンクが表示されました。
[DFM Analysis]をクリックすると、JLCPCBのエンジニアが修正してくれた部品配置を確認できます。左側のCorrected Part Placementで表示されている画像をダウンロードしたのち、問題がなければそのまま生産に進んでもらいましょう。
ちなみに[Download]リンクから画像がダウンロードできなかったので表示されている画像を右クリックしてダウンロードしました。
ちなみに私の場合はダイオードの配置が一つ間違っていたので、No modification neediedから画像と修正指示用の文章をアップして修正してもらいました。極性などがある部品は必ず目を通しましょう。ダイオードひとつくらいだったら自分で修正できますが、表面実装なので部品によっては取り外しが困難な場合があります(ホットプレートやヒートガン等利用すれば外せますが)。
ここで修正依頼をすると、エンジニアからメールで確認が来て簡単なやりとりがありました。
修正が完了すると再度、部品配置の確認が求められますので間違いがないか確認します。
問題がなければYes, please proceed to production.をチェックし[Submit]ボタンを押します。
製造作業の開始
ここからはPCBの製造が終わるまでのんびり待ちましょう。ちなみに各工程の動画が観れるのでどんな作業が行われたのかもなんとなく把握できます。
発送から到着まで
特に急いでいなかったので、配送業者は一番安いOCS Expressを決済時に選んでいました。OCSは航空会社ANAのグループ企業です。大体1週間くらいで手元に無事到着しました。国内配送はクロネコヤマトでした。佐川の場合もあるようですが、地域によると思われます。
PCBとスイッチプレートはそれぞれ次のような仕上がりです。PCBを使わず、手配線でも実用には耐えるので十分と思っていたのですが、改めて手元にPCBが届くと"製品感"が段違いでむちゃくちゃテンションが上がりました。
JLCPCBの製造用管理番号が指定の位置に印刷されている事が確認できます。
SMT Assemblyの位置合わせ用の穴の位置は指定しておりませんが、適切な位置にあけてもらえていました。ちなみにこのくらいのサイズであれば管理番号も穴もPCB本体側にあっても気にならないと思います。
今回は、既に持っていたリセットスイッチとATMEGA32U4-AUは自分ではんだ付けすることにしました(JLCPCBだとATMEGA32U4-AUは1個あたり$20以上、手ハンダできないATMEGA32U4-MUは1個$5くらい)。
※ はんだ付けする前に、各部品が設計通り実装されているかを確認しましょう!
保護用回路を入れておりますが、不測の事態に備えてUSBハブ経由でPCに繋ぎました。
問題なさそうだったのでファームウェアを書き込み、正しくスイッチが動作するかピンセットでショートさせて確認します。ここまで来ると自作キーボードではお馴染みの光景です。
ソケットのはんだが完了したら、スイッチプレートとキースイッチを取り付けて無事完成です。
プロによる製造なので、素人が設計したとは思えない完成度で満足感が半端ではありません。
ケースがまだありませんが、JLCPCBにレジンの3Dプリントを発注済みですので、手元に届いたらその様子もアップいたします。
円安が進んでいますが、そもそもの値段が安いので興味のある方は是非PCBを設計・発注してみてはいかがでしょうか?
一度発注してみると思っているより全然簡単でした。英語でのやりとりが不安な場合でもDeepLなどの翻訳ツールを利用すれば全然問題ありません。
新規会員登録の場合は次のリンクより合計$54分のクーポンがもらえるので是非利用してみてください。
次の目標
次は、アルミ削り出しのケースやRP2040(ラズパイに搭載されているマイコンチップ)を搭載したキーボード基板、昇華印刷による自作キーキャップを作ってみたいと思っております。だいぶのんびりした制作ペースですが、完成次第、改めてnoteに投稿いたします。
(追記2) 商品への異議申し立て
商品到着後、受け取った商品に問題があった場合の異議申し立てをするためのリンクが表示されておりました。
Order historyページの発注した商品それぞれの右側に画像のようなQuality Complaintというボタンが表示され、クリックすると異議申し立てフォームのページへ遷移しますので、問題について送信してください。