Leafony向けセンサ基板を自作する

# 前回のあらすじ
Leafonyで温度、湿度、照度を測定する環境センシングIoT Beaconを作り、Raspberry PiとGoogle SpreadSheetを使って可視化されたデータをスマホやPCなどでどこからでも見れるようになりました。

* [Google SpreadSheetとBluetooth LE BeaconキットでIoTハードウェア開発からデータの可視化まで1時間で完成させる](https://qiita.com/s_nkg/items/3615862323923162f71a)

# 今回の内容
前回作成したLeafonyのIoT Beaconを利用して、気圧やガスなど、自分が作りたいIoTサービス用に**センサを選び、プリント基板を設計し、オリジナルのLeafonyセンサ基板でデータの可視化を行いましょう。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/f8630369-f9fb-d9f5-7ae3-477752b02c94.png)


この記事は**回路の設計やプリント基板の開発を初めて行う人を対象に書いています**ので、少し説明が冗長になってしまいますがお付き合いください。

また、自作のプリント基板を作るのには何か工具を使ったり、部品をはんだ付けをしないといけないのかと思うかもしれませんが、大丈夫です。

**はんだ付けをしなくても、工具をもっていなくても、基板は簡単に製造できます。**

今回は[PCB gogo](https://www.pcbgogo.jp/)という基板メーカーに基板の設計データを送ることで、安く、簡単に自作のプリント基板を製造しました。基板の製造だけでなく、部品の調達、はんだ付けなどもやってくれますので、PCさえあれば手元に完成した基板が届きます。

実際にどのようにしてプリント基板を設計し、製造したのかを紹介したいと思います。

# 何を作るか
今回は**研究室内の各デスクごとの快適さを可視化するシステム**を作ります。
**快適さの評価基準は、温度、湿度、気圧、空気中の揮発性有機化合物濃度**という評価基準で行いたいと思います。

突然、**揮発性有機化合物濃度センサ**といわれてもさっぱりですが、どうやら建物の壁や家具に塗られている塗料、カーペット、オフィス機器、アルコール製品などから放たれる揮発性の物質の濃度をセンシングするようです。自分の作業している環境がどれくらい空気の品質がいいのかわかると楽しいですね。

このような室内の空気質の測定を目的としたセンサは簡単に手に入ります。
Bosh製の[BME680](https://www.digikey.jp/ja/product-highlight/b/bosch-sensortec/bme680-integrated-environmental-unit)というセンサモジュールは温度、湿度、気圧、揮発性有機化合物を3mm×3mmのサイズのチップで測定できてしまいます。
また、[BME680用ArduinoライブラリもGithub上で公開されています。](https://github.com/adafruit/Adafruit_BME680) Arduino互換ボードのLeafonyでも簡単に扱えそうです。

さあ、BME680基板を作って2cm立方の小さなIoTデバイスで仕事環境を改善しましょう！

# 基板設計の流れ

　今回の記事では、基板の設計ツールとして[KiCad](https://kicad-pcb.org/)を使い、設計したデータを[PCB gogo](https://www.pcbgogo.jp/)という深センの基板製造会社に送り、基板の製造と部品の実装を依頼します。

部品の調達やハンダ付けはすべてPCB gogoに依頼して、完成された基板を送ってもらうので、工具などは必要ありません。

各行程と今回の目安時間は下記のとおりです。

1. 使いたいセンサを選ぶ
2. 回路図を設計する (1時間程度)
3. 基板をレイアウトする (1時間程度)
4. 基板の製造依頼をする (1時間程度)
5. 部品の実装依頼をする (30分程度)
6. 基板が届くのを待つ (5日程度)

# 開発環境

* [KiCad](https://kicad-pcb.org/) 5.1.5

[KiCad](https://kicad-pcb.org/)というプリント基板設計ソフトウェアを使います。オープンソースの開発環境ですが、個人で使うには十分すぎるくらいの機能が揃っています。

# 今回作ったサンプルデザインのデータ

あらかじめこれから作る基板の設計データを下記のリンクに置きました。
わからないところがあれば下記のデータを参考にしてみてください。

* [制作した基板のデータ](https://github.com/taltalp/leafony_bme680)

# 基板設計
それでは早速基板を設計していきましょう。

## 1. 使いたい部品(センサ)を選ぶ
まず初めに何を測定したいのか、なにを作りたいのかを考え、使う部品を選ばないことには基板を作り始められません。
[秋月電子通商](http://akizukidenshi.com/)や[Digi-Key](https://www.digikey.jp/)、[スイッチサイエンス](https://www.switch-science.com/)などの電子部品を販売しているサイトでセンサカテゴリ等を見て、自分の用途に合ったセンサを見つけましょう。

実際にどのような基準で部品選びをしていくか、今回の例をご紹介します。

今回は温湿度・圧力・ガスセンサが1つのモジュールとなった、Bosch製のBME680というセンサモジュールを選び、センサを中心としてその他の部品を選定していきます。
センサを選ぶにあたって、下記のような点に注意して選びました。

* サイズが小さい
* 省電力
* 制御が簡単 ： データの読み出しはI2CやSPIを使って簡単に行えます。また、スリープモードへの移行も簡単です。

　**注目したのはスリープモードへの移行方法**で、データシートを見ると、4つのセンサ値を読み出したあと、**自動的にスリープモードに移行**します。スリープの処理をマイコン側で行わなくても良いのでコードが簡単になりますし、スリープモード移行コマンドを発行するための通信時間で発生する無駄な電力が削減できるので非常に便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/354c07a4-1c5c-1f2c-b821-a32deb4d22e2.png)
(BME680 Datasheet より引用)

## 2. 回路図を設計する (目安1時間)

### 2-1. データシートの参考回路図を見つける
センサのデータシートにはほとんどの場合、センサの使い方として参考回路図が書かれています。**安全に、かつ素早く基板を開発するために、まずは参考回路図の通りに基板を作りましょう。**
下図のようにBME680はI2CやSPIで接続する際の回路図が違うようです。今回はI2Cで接続するため、(a)の回路図をそのまま使用します。
センサに限らず、多くのICやセンサのデータシートには、参考回路図が載っているため、基本的にはこれらを組み合わせていくことで回路の設計が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/17d1eddd-8e0e-7dbf-21a7-86a93dc92709.png)
(BME680 Datasheet より引用)


### 2-2. テンプレートからKiCadプロジェクトを作成
KiCadでLeafonyの基板を設計するときに、**テンプレート**を使うと便利です。
基板を作るためには通常、基板の形を決めたり、基板を製造する上でのルールを設定する必要がありますが、テンプレートを使用することで、これらが既に設定された状態で開発をすすめることができます。

下記からLeafonyのテンプレートをダウンロードします。

* https://github.com/Leafony/cad-template

KiCadを起動して、`File -> New -> Project from Template`をクリックし、`User Templates`でダウンロードしたLeafonyテンプレートのフォルダを選択し、`OK`をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/d50caabb-bec2-2796-2a3d-c026fd710a87.png)

適当なファイル名で保存すると、`.kicad_pcb`ファイルと`.sch`ファイルが生成されます。
`.sch`が回路図、`.kicad_pcb`が実際の基板のレイアウトファイルです。
`lib`には部品のライブラリが保存されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/f622a155-0df5-ded3-a15a-8e0149fd9be1.png)

`.sch`ファイルを開いてみましょう。すでにLeafonyのコネクタが配置されているはずです。ここに回路図を描いて行きます。
コネクタのピンにはそれぞれ役割ごとに名前がついています。通常はLeafonyのデータシートを見ながらピンの名前を確認しなければいけませんが、テンプレートでは既にこれらが書かれているので楽です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/5e6ec6b3-1cf5-447f-99a0-10a244005d4a.png)


今度は`.kicad_pcb`ファイルを開いてみましょう。Leafonyの外形とコネクタが描かれています。こちらでは基板のデザインをしていきます。
こちらもテンプレートでは既に基板の外形線が描かれています。データシートを確認しながらこの形を描くのは結構面倒なので、最初からあるのは非常に便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/7248ac65-ce95-2fec-04b4-22bdb8423543.png)

このように、テンプレートを使うと必要最低限の設定がされたプロジェクトを作成することができます。

## 2-3. 回路図を描く
再度`.sch`ファイルを開いて、回路図編集画面へ戻りましょう。
画面横の`シンボルを追加`アイコン（三角形のアンプ型のアイコン）をクリックすると、部品リストが出てきます。ここでBME680を選択すると回路図に配置できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/a9bec951-975c-dcba-7a2e-f5c437839a3f.png)

`R`や`C`と検索すると抵抗やコンデンサも配置でき、`GND`や`+3.3V`と検索すると電源関連のシンボルを置くことができます。

BME680の参考回路図の通りに部品の配置と配線を終え、下図のような回路図になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/3ffa9c8e-eaa5-6b0f-7a1d-52e144bfbf85.png)


## 2-4. アノテーション
次に`U?`や`C?`となっているところに番号をふり、`U1`や`C1`のようにします。
番号を割り振ることを**アノテーション**といいます。
画面上側の赤枠で囲まれたアイコンをクリックして、下図のような設定でアノテーションしましょう。番号が自動的に割り振られたはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/d37d47f9-cc89-7153-a471-0204d8ad8ca8.png)

アノテーション後の回路図は次のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/c137f30c-4c65-d0c7-04c6-1479d58931c8.png)

### 2-5. フットプリントの割り当て

次に、それぞれの部品がどのような形の部品なのか（どのようなフットプリントなのか）を決定していきます。

ツールバーの赤枠のアイコン（回路図シンボルとフットプリントの図）をクリックして、各回路図シンボルとフットプリントを紐付けていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/cc8e810e-3e72-ca8b-addf-402b68ddec48.png)

下図の赤枠のアイコンをクリックすると、今選択しているフットプリントを表示してくれます。これを見ながら、データシートに描いてあるフットプリントと同じかどうかをよく確認しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/59f25faa-8a6f-9229-484b-2bb237146b53.png)

今回は下図のような割り当てにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/81952cd1-4857-db0e-5e6b-6bf559ae4539.png)


ここまでで回路図の設計は終わりです。

## 3. 基板をレイアウトする

### 3-1. 回路図からフットプリントを読み込む
次に、`.kicad_pcb`ファイルを開き、基板のレイアウトエディタ画面へ移動します。
ここから、実際の基板をイメージしながら部品の配置や配線をデザインしていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/353d09cb-e80d-e6ff-7d99-9da70fdc65b6.png)

下図の赤枠のアイコンをクリックし、`Update PCB`を実行すると、回路図に描かれた部品がレイアウトエディタにも読み込まれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/8ede670a-a255-b5cd-a908-f6b61f3a3b19.png)

適当な場所にひとまず置いておくと、必要な部品のフットプリントのパッド部分から白い線が出ています。
この白い線を導線で繋いでいくことで回路図と同じ配線の基板が完成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/16d826b6-93d1-28f7-7fb0-8e31cb1f5196.png)

### 3-2. 実際の基板をイメージしながら作る
**4層基板の図を載せて、導線層について理解してもらう。**

### 3-2. 部品を配置する

部品をクリックして選択し、`Mキー`で移動、`Rキー`で回転などをしながら部品を配置していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/dfcebdc1-450e-9454-b18a-4d47172e0159.png)

### 3-3. 配線する

ツールバーの配線アイコン![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/1d61e31b-7e9d-3885-c147-7bb559de357a.png)をクリックし、配線したいパッドをクリックすると導線を引くことができます。
配線の太さは左上のプルダウンリストから選択できます。
すべての白い線を配線し終えたら基板の設計は完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/e437c44f-ca4a-acc6-dfd4-3c1d1a30faa1.png)

配線中に`Vキー`を押すとビアを打つことができます。このビアは基板に小さな穴を開けて、別の配線層と接続することができます。
電源のような様々な場所で使われる線は内層をすべて電源専用層にしておき、ビアでつなげるようにすると簡単に引けます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/b4e9366e-fd78-123a-eab7-b9359fb42b8b.png)

また、どうしても導線が同じ層で引けない場合は、一旦ビアを打って下の層に配線を追いやることで配線することも可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/2ec88cf7-4b3a-00fa-e0bb-ecf2603c0414.png)

### 3-4. 電源層をつくる
`VDD`や`GND`などの電源配線は多くの部品に接続されています。もちろんすべて配線しないといけないので、部品が増えれば増えるほどこの配線が増えて配線の難易度が上がります。

この問題を解決する方法として、一般的に、4層ある導線層のうち、内部の2層を電源専用層に指定します。今回の場合は

* In1.Cu (上から2層目) を`GND`専用
* In2.Cu (上から3層目) を`VDD`専用

と決めます。この2層はすべての領域を導線で塗りつぶしてしまうことで、表面に置かれた部品から電源を取るときは、パッドの近くにビアを置けば、内層から電源を引っ張り出すことができて配線が非常に楽になります。

(こうすることで配線が楽になるだけでなく、信号線がノイズの影響を受けにくくなるなどの電気的な特性もよくなります。)

それでは、実際に塗りつぶしの設定をしてみましょう。
まず、電源だけ配線が引かれていない状態まで基板を設計しました。(下図左)
次に、Leafonyコネクタの`3.3V`と`GND`から少し太めの配線を引き、ビアを打ちましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/89298228-ed16-2d65-9bef-e6a988e80de0.png)

次に、右側ツールバーから![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/0a9d8531-b924-98d9-4d89-077bd7f857e0.png)領域塗りつぶしアイコンをクリックして、画面の適当な場所をクリックします。

出てきたプロパティウィンドウ（下画像左）で`In1.Cu`と`GND`を選択してOKを押しましょう。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/b4832a98-f925-eb72-3572-0ad2e612999a.png)

基板全体を囲うように塗りつぶし領域を設定すると、下図のようにGNDの層が生成されました。
`In2.Cu`も`+3.3V`となるように同様の作業を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/bcb0d954-0647-85e5-c3b6-6f3533e8716b.png)



### 3-5. デザインルールチェックをする

一通りの配線が終わったら、デザインルールチェックというものを行います。
ここでは、基板の製造ルールに従った設計がなされているかを自動的にチェックしてくれます。
配線が細すぎたり、ショートしていたらエラーとして表示されます。

図のてんとう虫のアイコンをクリックしましょう。出てきたウィンドウを図のような設定で`Run DRC`を実行します。実行後何もエラーが表示されていなければ基板は完成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/98715b79-549a-1f97-ed07-3a34c7aede2c.png)


### 3-6. 3Dビューワーで基板をチェックする

設計した基板におかしなところがないかをチェックする方法として**3Dビューワ**を使う方法があります。
この方法では、実際に製造される基板のイメージ図を3Dで表示してくれます。
デザインルールチェックではシルク（白い文字の部分）の配置がおかしいなど、基板の機械的、電気的なルール以外はチェックしてくれません。最後は自分の目で基板の見た目を確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410452/f6204ac5-94ef-653d-2e39-8daad5dde779.png)

## 次回
ここまでで基板の設計を終えました。
次回はPCB gogoに基板のデータと部品リストを送り、基板の製造依頼をしてみましょう。

(後日公開予定)

## Appendix
### 部品ライブラリがない場合
今回つかった部品はすべてKiCadの標準ライブラリの中にある部品を使いました。
しかし、実際に自分で基板を作ってみると、ライブラリに入っていない部品が必要になることが多々あります。
そのような場合は従来、自分で部品ライブラリを作るということを行っていたのですが非常に面倒です。

実はKiCad用の部品ライブラリはネット上に大量に転がっています。
特に、下記のサイトを使うと多くの部品をダウンロードすることが可能です。

* https://www.ultralibrarian.com/
* https://componentsearchengine.com/