KiCadで初めて部品実装基板をおこしてみた

["KiCadで初めて基板をおこしてみた"](https://qiita.com/nobu_e753/items/47ace2bcbd985b12e1c4)の部品実装基板編です．

# できたもの
ディジタルゲームへの入力をプログラミングするためのミドルウェア["GameControllerizer"](https://sites.google.com/view/gamecontrollerizer)の専用基板．平たく言えば**「プログラムを通じて電子的にボタンが押せるゲームパッド」**です．

**試作機（rev. 0.0）**
![image.png](https://qiita-image-store.s3.amazonaws.com/0/156705/1d568b66-30d2-38e5-d497-2fcb68f71635.png)

- ゲーム機と接続するだけでゲームを拡張（制御をハッキング）可能
    - 試作機：PSXゲームパッド / HIDゲームパッド，をエミュレート
- ビジュアルプログラミング環境
    - Node-RED (with RasPi)
    - Makecode (with micro:bit)
    
# 前記事との違い
|   | 前回 | 今回 |
|:-:|:-:|:-:|
|Tool|KiCad (4.0.3)|KiCad (4.0.3→5.0.2)|
|発注先|Elecrow|**FusionPCB**|
|部品実装|なし|**あり**|

部品実装基板設計全般というより，そこに至った背景や，KiCADやFusionPCBに固有のことを中心に書きます．

# きっかけ
数年前から[モーションで格闘ゲームをプレイ]
(https://protopedia.net/index.php/prototype/ec5aa0b7846082a2415f0902f0da88f2) というネタを趣味でやっており，最近では強化学習によるゲーム制御を試しています．しかしこの手の取り組みの一番の課題は**ゲーム機へのつなぎこみ**です．自身のプログラム（pythonやnode.js）からゲーム機を制御するためには，都度ゲームパッドを改造したI/Fを仕立てる必要があり大変でした．
（もちろんエミュレーターを使うなどのグレーな手段はありますが）

![DSC_0251.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/66b1cbeb-09d3-e835-23fa-868a7917994e.jpeg)
※USBシリアル経由でPS2を動作させるI/F．パッドを改造するのがとても大変..

そんなかな，[HCI/ゲーミフィケーションを研究していらっしゃる大学の先生](http://www.unryu.org/)と知り合い，研究/教育の分野でも同じ問題を抱えていること知りました．そこで**これらを簡便に行うためのミドルウエアを共同開発することにし**，本基板はそのコアパーツになります．

# 基板制作前の状況（2018年5月）
苦闘の末，市販のマイコン＋RasPiを使い「http経由でPSXを制御できるI/F」までは完成させていました. `http://xxxx/btn/A` にアクセスすると「Aボタンを押す」ようなことができます．
![before.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/f8ff9110-d7b0-ec58-d12d-80c639ee95e4.jpeg)
※写真は1台目．以降はマイコンをLPC11U35に変換し，3セット作成．

ゲームパッドを毎回改造するよりは随分楽になりましたが，とても**研究者/学生の方に簡便に使っていただける状態ではなく量産もできません**．チーム内（といっても私と大学の先生の2人）で議論した結果

「RasPiにマウントできる拡張基板形状なら，皆使いやすいよね」

となり，それを目指すことにしました．ただ**コンパクトな基板に必要機能を収めるためには，どうしても小さな部品（=手ではんだづけできない）を使わねばならず，部品実装基板が必須になりました**．本業はS/W開発で，H/Wは素人＋α程度の自分には非常に高いハードルに思えましたが，いくら考えてもそれ以外に方策が思いつかず腹をくくりました．

# 基板の設計（2018年5月～）
## 構成検討
"基板化したい回路" そのものはできていたので（上記），これを基板に落とし込むことを第一目標としました．図表にすると以下です．[前回](https://qiita.com/nobu_e753/items/47ace2bcbd985b12e1c4)よりは複雑度が上がるので，簡単な構成図を作成しました．
![overview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/ee6124b4-65ed-2deb-80f9-df615026907c.png)

メイン部品はNXP社のLPC11U35としました．理由は，

- すでに動作が確認できていた
- USB経由でF/W書き込みができる

です．**基板を起こすにあたり新たな回路とするより，すでに動いているものをポーティングするほうがなにより低リスク**に思えました．とはいえ，この時点でデバイスの特徴をよく理解して選択したわけではなく「今，動いている構成が正義！」くらいのノリでした．

## 業者選定
事前調査で

- [Elecrow](https://www.elecrow.com/)（前回利用） 
- [Fusion PCB](https://www.fusionpcb.jp/)

が定番と知りどちらかに依頼することを考えていました（国内業者は高すぎて最初から候補にいれず）．そんな折，お知り合いの[Seeed K.K.](https://www.seeed.co.jp/)の中の方に，ご好意で設計相談に乗っていただいたこともあり今回はFusion PCB（=Seeed社が提供する製造サービス）で進めることにしました．

## 回路図作成
KiCADでの回路図設計についてのフローは，[書籍](https://www.amazon.co.jp/dp/B07BF23K1V/)であったり，[Webサイト上の記事](http://www.kicad-de-kiban.net/archives/kicad5_dcjack1.html)がよくまとまっているので省略します．でも詰まるところは，フローより"具体的なところ"，つまり**「サンプルじゃなくて，今自分が実現したい回路をどうやって書けばいいのかわからん！」**かもしれません（私も出だしは途方にくれました）．

いろいろ考えた末，とかっかかりにしたのは**"自分の目標としている物に近い構成を持つマイコン基板の回路図をひたすら読む"**です．例えば，LPC11U35を使ったマイコン基板であれば，

- [LPC11U35 QuickStart Board](https://www.embeddedartists.com/products/lpc11u35-quickstart/)
- [LPC11U35 QuickStart Board 互換基板](http://akizukidenshi.com/catalog/g/gK-12144/)

や[個人制作の製品](http://www.iccraft.com/MC11U35.html)などが見当たります．これらの回路図を並べ，

- レギュレーターまわりは？
- リセット回路まわりは？
- 水晶発振器まわりは？

というように部分ごとに見比べ，腹落ちした部分から順に回路図へおこしました．例えば水晶発振器ならどれもこんな感じなので，
![crystal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/01380667-5b31-59b9-15a1-75167563e80c.png)

- 「基本構成はこんな感じか..」
- 「キャパシタの容量をいくつにすればいいかはわからんから調べよう..」（←デバイスメーカのスペックシートにちゃんと求め方がのっていました．

と一つずつ進めました．部品実装基板では費用が〇万円だと聞いていたので，その不安からおのずと調査にも身が入りました．

## 部品選定
回路図作成と並行して行ったのが部品選定です．主要な部品（LPC11U35）以外にも

- 抵抗，コンデンサ
- LED
- 発振器
- レギュレーター（5V→3.3V）
- コネクタ

をすべて決定/購入する必要があります．部品商社のMouserやDigikeyのリストを見ると多数のメーカーが同種の部品を出しており「正直知るか！」って感じでした．

ですが，FusionPCBの場合は**[Seeed OPL](https://www.fusionpcb.jp/opl.html)という"工場にストックしてある定番部品リスト"が回路図/フットプリント（一部）と一緒に提供されておりここから選ぶことでかなり楽に進められました**（「食堂の定番定食」的なものだと理解しています）．

![opl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/e65ff945-ba42-7894-dbdb-1e227f2f22f9.png)
※OPLを使う際には，Fusion PCBが提供するKiCAD用ライブラリをセットアップしておくとスムーズです．

これを使うメリットは，

- 迷いが減る
- 自分で部品を購入/送付しなくていい（発注時に部品代が自動加算される）
- 納期が早くなる

です．ガーバーデータと一緒に部品リストさえ出せば，Fusion側で部品用意→実装までしてくれます．しかも800種もあるので，mbedやArduinoの互換機を作る程度ならすべての部品をこのリストから賄えます（今回使用した部品はすべてSeeed OPLから選択）．

※この作業をしていたのは2018年6月頃ですが，その後2018年末ごろ新たにShenZhen OPLなる部品リスト（10000種以上）が追加され「ほぼなんでもある」状態に．

## 部品情報の割り当て
部品実装のためには，例えばLEDであれば"LED"という抽象的なシンボルに対し"〇〇社の△△"という部品の対応付けを行うことが必要です．すでに対応付けがとられているライブラリ（Seeed OPLもその一つ，今回はこちら）を使えばシンボルを配置するだけですし，そうでない場合（ShenZhen OPLや自分でOPLにない部品を使う場合）は自分で部品情報を付与することが必要です．

回路図内のシンボル上にて，[シンボル選択]-[プロパティ編集]で以下のような画面が出ます（KiCADのバージョンによって多少の差異あり）．ここでシンボルに割り当てられている具体的な部品情報を確認できます（メニューから[ツール]-[シンボルフィールドの編集]で一覧が見えます．私はこちらをつかいました）．

赤枠で囲った箇所のパラメータ（フットプリント, MPN, SKU）が，上記OPLページの部品表に書かれている値とマッチしているか？ 自分が使おうとしている部品に間違いないか？確かめておきます（**ここを間違えると意図しない部品が実装されてしまうので**，文字通り何十回も確認しました）．

![parts.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/cf45aab7-a150-ac92-4b8f-566d8e41a8db.png)

## レイアウト
回路図作成と同じく情報が多いので省略します．注意した点としては

- 水晶発振器（ICに近い場所に配置，等長配線）
- USBコネクタ（等長配線，並行配線，裏面に別配線を置かない）

など比較高速な信号が流れる箇所です（12MHz程度なら気にしなくてもよいのかもしれませんが）．"もし適当なレイアウトをして動かなかったらどうしよう.."という心配が募り，Web上にある記事/サンプルレイアウトをたくさん見ながらレイアウトをしました．

あとは，背面にシルクを配置するときは"反転"しての配置が必要でした．ここでも3Dビュワーでの確認が役に立ちました．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/36aeb2e7-430a-a675-d45e-e926d77069ee.png" width="640px">

# 製造発注（2018年7月～）
## 製造データの出力
発注時に必要となったのは以下2つでした．部品実装位置を示すposファイルというものが必要とされる業者も多いようですが，この時はなくても大丈夫でした（全部品の実装位置/向きを示したシルクを基板上に設けていたからかもしれません）．

- ガーバーデータ
- 実装部品リスト（BOM）

#### ガーバーデータ
公式サイトに[手順を示したページ](http://support.seeedstudio.com/knowledgebase/articles/1187731)があり，この通りの実施で大丈夫でした．
#### 実装部品リスト（BOM）
こちらは回路図作成画面から出力できました．[ツール]-[部品表を作成]から"bom2grouped_csv"を選べばOKでした．出力ファイルが

1. xxx （中身はCSV）
2. xxx.xml

のようになりました．1の中身を[規格書](http://support.seeedstudio.com/knowledgebase/articles/1889083)にあわせて編集すればOKでした（Reference,MPN,Quantityの3カラムだけにする）．
![bom.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/125771d0-71b6-eefe-458f-2ab2b3509af1.png)

## 発注
必要なファイルができたらいよいよ発注です．https://www.fusionpcb.jp/fusion_pcb.html のフォームから，それぞれのファイルをアップロードします．これだけです．

- [製造サービス/ガーバーファイルを追加] -- ガーバーファイル追加後にWebビューワーでデータ確認ができる
- [実装サービス/BOM（部品表）を追加] -- BOM追加後に在庫状況が表示される

![bom_update.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/a7844efe-3b07-dfe4-e4e0-a532386c915f.png)

2つをuploadした時点で即金額も出力されます．今回の試作では**10枚で$309！でした．基板製造だけにくらべるとめっちゃ高い！！** この値段に怯んで再度デザインをチェックする，というループを発注前に何度も繰り返しました（汗．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/691aeb1b-93df-76dd-3c08-ab730d64aa56.png" width="160px">

デザインをuploadした後は，配送先，配送業者選択（今回はDHLを選択），paypalでの支払い手続きが続きます．

## ひたすら待つ
支払い＆発注後は不気味なくらいなにも連絡がありませんでした．むしろ「お前のデザインおかしいから再度チェックしてくれない？」とでも言ってくれたほうがホッとするくらいの気分でした（それぐらい自信がなかったです）．
そんな不安にあるとは知らず，Web上で確認できる製造ステータスは着々と進みました．

|  日付  | 状況 |
|:------:|:----|
| 2018/07/17 | 発注＆製造開始（In Production） |
| 2018/07/23 | 基板製造が完了（PCB Awaiting Packing）<br>多分部品実装がない場合はここで出荷 |
| 2018/08/03 | 部品実装が完了（PCBA Awaiting Packing）|
| 2018/08/03 | 出荷（Traceable）<br>Fusion PCBから"完成したので発送したよ"とメールが来る<br>基板の写真＆追跡番号付きで，DHLサイトで配送状況確認可能になる | 
| 2018/08/06 | 受け取り．受け取り時に通関費用（5000円弱）が必要でした |

## 到着
段ボール＋梱包材につつまれてやってきました．箱から出す～基板にテスト用のLチカF/Wを焼いて動作を確認する，間の緊張はすさまじく，心臓がドクドクいっているのが自分でわかりました．
動作を確認できた時は本当にほっとしたのと同時に達成感でいっぱいでした．あとただのLチカに，かつてないほど感動しました．
![box.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/e777fd03-a1bc-be89-c89d-72400e26167a.jpeg)

（プロやセミプロの方から見たらわかりませんが）仕上がりも素晴らしものだと思いました．職場のデザイナーさんが好意で作ってくれた裏面のロゴも，きれいに出力されていました．
![DSC_0221.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/4597c922-216b-5653-6257-06c2f21128b2.jpeg)

# 詰まった（悩んだ）箇所
例のごとく，自分のような未経験者は経験者の思いもよらないところで迷います．．．

## 配線はどこまで細くできるのだっけ？
物理製造である以上「線がどれだけ細くてもいい」なんてことにはなりませんが，その下限値についてはFusion PCBの[規格書](http://support.seeedstudio.com/knowledgebase/topics/141763)に掲載されていました．例えば，

- 最小パターン幅：6mil
- ドリルホール系：0.2mm - 6.5mm

でしたので，これらより大きな値を最低値として設定しレイアウト作業を行いました．部品配置間隔についても限度があるので同様に注意しました．
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/b458bc11-a3fb-f901-8020-64db3374e098.png" width="480px">

## OPLのリストには載っているがライブラリ内にその部品がない
Seeed OPL / ShenZhen OPLのリストにはあるものの，Fusion PCBから提供されるKiCAD用ライブラリ内には存在しないシンボル・フットプリントが結構ありました．これらについては**自分で製作しました**．
特にShenZhen OPLについてはほぼないので，[KiCADのライブラリサイト](http://kicad-pcb.org/libraries/download/)から取得したり，既存のデザインを改造してそろえました．部品数が多くなかったのでそれほどの労力ではありませんでした．

## OPLにない部品を使いたい
今回はやりませんでした．[公式のガイド](http://support.seeedstudio.com/knowledgebase/articles/1889083)を見ると，製品名と購入先リンクを乗せておけば代理購入してくれる...ようです（？）

## 部品配置箇所をしめしたシルクを消したい
今回はやりませんでしたが，基板のデザインによっては部品位置を示すシルクを消したいこともありそうです．その場合は部品実装位置/向きはどうやって指定するのか気になりましたが，[よくある質問](http://support.seeedstudio.com/knowledgebase/articles/1810918)に項目がありました．

Q: 基板にシルクがない場合、実装の注文はどのように進めますか？
A: もしそうであれば、コンポーネントの配置ファイルをPDF形式でまとめて、ガーバーファイルと共にZip / RARに入れて、ご送信ください。

## タクトスイッチの押し心地がわからない
どうしようもないので，ぶっつけ勝負でした．

## 出来上がってきたものがおかしい！
試作時には特に問題が起こりませんでしたが，こののち量産したときにいろいろありました．別途まとめる予定です．．

# まとめ
KiCadを使い部品実装基板を，設計・発注・動作確認までを行うことができました．部品実装なしの基板設計に比べると設計の労力も費用も大きく気軽にできるとはいいがたいですが，**コンパクトな基板を量産できる"手段"を個人でも持てるというのは非常に強い**と思いました．（実際10台量産できたことで，この後の周辺S/W開発が非常にはかどりました）．

また設計過程での問題解決についてですが，デバイスメーカーや製造業者のQA/テクニカルドキュメント/ベストプラクティス集などに助けられることも多く「意外とちゃんと書いてあるな」感がありました．それらを十分理解できていない箇所もあるかもしれませんが，それでも**"一つずつ読んで進めれば素人＋αでも何とかなる"**という成功体験を得られたことは大きかったです．

ご厚意で事前相談に乗ってくださった[Seeed K.K.](https://www.seeed.co.jp/)の方々に感謝いたします．

# おまけ
その後，頒布用に量産機（100台！）を作りました．
![DSC_0354.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156705/f827e463-cf26-2e24-a99d-d2d21b872f92.jpeg)