回路図作成ソフト「fritzing」で「M5Camera」のカスタムパーツ（.fzpz）を作成

**Create custom parts (.fzpz) for "M5Camera" with schematic creation software "fritzing".**
Click [here](https://github.com/saka-guchi/Fritzing) for English commentary and deliverables.

# はじめに
マイコンを使ってモノづくりを目指している初心者の方を想定しています。
本記事の成果物としては、fritzingでM5Cameraを配置するところまでになります。

※途中、ドローソフトを扱いますが、手順の詳細については割愛します。

## fritzingとは
![fritzing_公式バナー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/d9653c3d-884b-bdc3-285f-5582ee1f54c7.png)
いわゆる回路図設計ソフト（CAD）です。

マイコンと部品（LEDや抵抗とか）を実際に繋げる前に
**ソフトウェア上で配線の取り回し**などを検討できます。

日本語での説明や、ソフトウェアの導入は下記を参考にされるといいと思います。
[電子回路の回路図エディタ Fritzing を試してみた](https://qiita.com/twinoze/items/b08b279b40c8dc1ca5c1)

※名前の由来はドイツ語？（揺らぎ、バグる、ちらつき）

以下、参考までに。

- [fritzing 公式](https://fritzing.org/)
- [fritzing 公式GitHub](https://github.com/fritzing/fritzing-app#readme)
- [Fritzing Wikipedia](https://en.wikipedia.org/wiki/Fritzing)

### fritzingを使用するメリット

- 組み立てた回路をバラバラにしても、図をもとに短時間で再現できる
- スパゲッティ配線を回避して、効率のよい配線を設計できる
- 電源ピンへ複数接続する場合に、空きピンの有無を確認できる

などなど。

### fritzingでLチカのイメージ
Arduinoの各種ボードは最初からパーツに入っています。
ドラッグアンドドロップするだけで簡単に使用できます。（簡単！）
![fritzing_Lチカ_サンプル画像](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/720d9522-7188-01c7-df41-eec595bf4096.jpeg)

## カスタムパーツとは
基本的に使用されるパーツは最初からツールに入っていて、
公式サイトからも追加でダウンロードできます。

但し、新しいパーツやニッチなパーツは無かったりするので
皆さん自作されています。

各所でアップロードされていますが、下記サイトでまとめられています。
[Fritzing用パーツ配布サイトまとめ](https://l-w-i.net/l/fritzing_parts.txt)

## M5Cameraとは
![M5Camera](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/a09272e5-678b-5926-3483-3a84c69a7d1e.jpeg)


2000円で買えるWebカメラです。（激安！）

**購入した状態（プログラミング不要）**[^1]で、
WiFi経由で**カメラの映像をブラウザ（スマホとか）から見れます**。（感動！）

[^1]: USB Type-C経由（PCやモバイルバッテリー）での給電は必要

マイコン（ESP32）にイメージセンサが接続されていて、
Arduino IDEでもプログラムできます。

サンプルコードには、Webサーバーの立ち上げ機能の他に
機械学習（ディープラーニング？）による**顔検出＆認証機能**も入っています。
但し、検出フレームレートは遅いです。

その他、詳細なスペックは下記を参考にされるといいと思います。
[M5Camera クイックスタート](https://docs.m5stack.com/#/ja/unit/m5camera)

### M5Cameraの利用イメージ

「走れ！モバイルバッテリー」 made by ロボファーム
https://www.robofarm.jp/

![走れ！モバイルバッテリー](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/397b37af-c25e-b546-5b69-566bbbc66b8b.png)


# 成果物は「M5Camera」のカスタムパーツ
作成したfritzingのパーツはコチラ。
[M5STACK-M5CAMERA.fzpz](https://github.com/saka-guchi/Fritzing/blob/master/M5Camera/M5STACK-M5CAMERA.fzpz)

同階層には、使用したSVGファイルとかイラレのファイルも置いてあります。
[GitHub M5Camera](https://github.com/saka-guchi/Fritzing/tree/master/M5Camera)

## 成果物のイメージ
右側の黒いやつ。
※写真っぽいですが、イラレで作成しました。

※実際には「Grove（Gnd/5V/SDA/SCL）のコネクタ端子」がボディ下部から出ています。
※前面からコネクタが見えにくいのでスルーホールを配置しました。
※背面は文字が多いパッケージデザインでトレースが面倒だったので断念しました。

![M5CameraとArduinoの接続図](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/a1df8178-0f71-cec4-8d3b-054afab12d47.jpeg)

# 作成手順
## 1. fritzingアプリを立ち上げて、ベースとなる類似パーツを探す

### 1.1 fritzingの「パーツ」ウィンドウから「Grove」で検索

端子が似たものをベースにすると作業が簡単になります。
今回はM5Cameraの外部端子であるGrove（I2C用）部品を採用しました。
（左から、GND/VCC/SDA/SCL）

![fritzing_パーツ検索](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/599fc00e-abd7-3380-3857-9df1a685c8da.jpeg)

## 2. 部品編集エディタ「Parts Editor」を開く

### 2.1 右クリックして「Edit (new parts editor)」を選択
![fritzing_新規部品編集](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/968750d5-a5ad-4ff7-a9ab-35117be6d97d.jpeg)

### 2.2 上部のボタンを一通り押して作るものをイメージする

左から順に。

- 1. ブレッドボード：見た目通りの図
- 2. 回路図：回路記号で書かれた図
- 3. プリント基板：基板上の端子（ホール）位置を確認する図
- 4. アイコン：「パーツ」ウィンドウで確認できる図
- 5. Metadata：「パーツ」ウィンドウで確認できる説明文
- 6. コネクター：端子名、説明文、タイプ（♂♀）の設定

1から4はSVG形式のファイル。（4は1で代用できるので実質3ファイル）
5と6はテキスト入力だけなので数分で終わります。
※1が時間掛かるが、あとは惰性で何とかなる。


![fritzing_部品エディタ_ベース](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/7847f22f-e538-5ed8-d8ae-aa3ab382d860.jpeg)


## 3. SVG形式ファイル「.svg」を取得する
### 3.1 「ファイル＞エクスポート＞as Image＞SVG」を選択して保存

「ブレッドボード」、「回路図」、「プリント基板」のボタンを順番にクリックして、**3種類のSVG形式ファイルを取得**します。

※ファイル名の末尾を「\_breadboard」、「\_schematic」、「\_pcb」とすると後で分かりやすい。
※保存したSVGの中身が空の場合は、3.2に進む。空で無ければ4.へ進む。

![fritzing_部品エディタ_エクスポート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/bac80860-7e0b-0f1b-68e7-44cb4e261773.jpeg)

### 3.2 「ファイル＞Save as new part」で新規部品として保存

![fritzing_部品エディタ_新規部品として保存](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/a0c6dc72-f7a6-20c5-0dd1-002198b69664.jpeg)

※後で消すので、ファイル名は何でもよいです。
![Fritzing_PartsEditor_SaveAsNewPart_FileName.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/89aef6d7-8b8b-a177-5e8f-9456e1eabf79.jpeg)

### 3.3 「パーツ」の「My Parts（MINE）」に部品が追加されたことを確認

### 3.4 右クリックから「Export Part」を選択して「.fzpz」形式ファイルを保存

![fritzing_マイパーツからエクスポート](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/ffe03ea1-908b-9890-7505-11232b50bbe3.jpeg)

### 3.5 ファイルの拡張子を「.fzpz」から「.zip」に変更して解凍
拡張子が「.svg」のファイルが4つくらいあるはずです。
それぞれ、ファイル名の末尾で種類を判断できると思います。

- \_breadboard：ブレッドボード
- \_schematic：回路図
- \_pcb：プリント基板
- \_icon：アイコン

## 4. SVG形式ファイルの中身を覗く

### 4.1 ブレッドボードのSVG形式ファイルを開く
ドローソフト（ベクターグラフィックソフトウェア）を使用します。

以下、オススメ。

- 無料：[Inkscape](https://inkscape.org/ja/)
- 有料：[Adobe Illustrator](https://www.adobe.com/jp/products/illustrator.html)

### 4.2 ピンの名称を確認する
この名前は、あとで使います。

- GND：connector0pin
- VCC：connector1pin
- SDA：connector2pin
- SCL：connector3pin

**Inkscape版**
![Inkscape_ピン名確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/91a477e4-b466-52fd-d111-2a4908fa7abd.jpeg)

**Adobe Illustrator版**
![Illustrator_ピン名確認](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/9277dfe1-4a1d-0d9c-1c7e-2a1252e3497a.jpeg)

## 5. SVG作成の準備をする

1～4ではベース部品の確認をしました。
ここからは、実際に今回の目的であるM5CameraのSVGを作っていきます。

### 5.1 fritzingのルールの存在を知る

まず、fritzingに部品として認識させるには、いくつかのルールに従う必要があります。
大事なのは、**フォント、ピンとピンの間の幅（0.1inch = 2.54mm）、ピンの色**。

以下、参考サイト。

- [Fritzing's Graphic Standards](https://fritzing.org/fritzings-graphic-standards/)
本家のルール。英語ですが分かりやすく記載されています。

- [Fritzing カスタムパーツの作り方](https://jumbleat.com/2017/01/18/making_custom_parts_fritzing/)
インクスケープ使いの人はこちら

- [Fritzing用のパーツをIllustratorで作成する](https://leico.github.io/TechnicalNote/Arduino/fritzing-part)
イラレ使いの人はこちら

### 5.2 必要なファイル一式を入手する
下記リンク先から「Download .zip file」でダウンロードします。

- [template download page](https://fritzing.org/learning/tutorials/creating-custom-parts/download-fonts-and-templates)
    - Droid Sans font：フォント（これか下のフォントを使う必要があります）
    - OCRA font：フォント
    - Breadboard View graphics template：ブレッドボードのテンプレート（今回は使用しません）
    - Schematic View graphics template：回路図のテンプレート（今回は使用しません）
    - PCB View graphics template：プリント基板のテンプレート（今回は使用しません）

## 6. 「ブレッドボード」用SVG作成

以降、Illustratorで説明します。（inkscapeはWebに情報が沢山あったので割愛）

### 6.1 部品の長さを測り、アートボードのサイズを設定する

実際に部品の縦と横の長さを定規で確認します。（M5Cameraは、幅24mm x 高さ48mm）
次に、Illustratorを立ち上げて、「ファイル＞新規」でアートボードのサイズを設定します。

この後、回路図とプリント基板を作成するのでアートボードの数を「3」にして
横に並べて編集するとやりやすいです。

![Illustrator_アートボード設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/607f96ef-c594-dfe2-cd4b-58111cdf4b08.jpeg)

### 6.2 部品の写真を撮り、別レイヤーでトレースする
写真を拡大縮小して、アートボードに接するように配置します。
（両サイドの脚は今回無視しました）
![Illustrator_写真をアートボードにフィッティング](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/9916fcb3-5270-4acd-59e7-c133164e25a5.jpeg)
トレースするとこんな感じ。
![Illustrator_PhotoTraced.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/73fcc773-e70b-b73d-2b1d-59226083503a.jpeg)


### 6.3 ピンを作成する

ルール（[Fritzing's Graphic Standards](https://fritzing.org/fritzings-graphic-standards/)）に従って作成します。
※諸事情により、ボディ下部にピンを配置

- ピン間の幅：0.1[inch] = 2.54[mm]
- ピンの直径（幅と高さ）：0.03[inch] = 0.762[mm] 以上
- ピンの色：R=154, G=145, B=108
- フォントの種類：ICは「OCR A」、それ以外は「OCR A」または「Droid Sans」
- フォントのサイズ：5pt
- フォントの色：R=230, G=230, B=230

※他のフォントも使えます。その場合、SVG保存時にテキストをパスへ変換してください。

![Illustrator_ピンのデザイン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/d0df08af-bd6f-dbe6-33b1-38af00c97a91.jpeg)

### 6.4 ピンの名前を「4.2で確認した名前」にする
「レイヤー」からラベル名を変更します。

- GND：connector0pin
- VCC：connector1pin
- SDA：connector2pin
- SCL：connector3pin

![Illustrator_ピンの名前](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/7a7a6c79-468e-40a0-968a-ba95a9e9d0a7.jpeg)


## 7. 「回路図」用SVG作成
（ここから先は惰性で行けます）

パーツの外形を作成して、コネクタ用の線をつなぎます。

左側が完成図。右側は場所ごとのルールを記載しています。
![Illustrator_SchematicExplainMarged.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/c3c551cc-d8cb-1a97-a883-1de24b7189a0.jpeg)

## 8. 「プリント基板」用SVG作成
左側が完成図です。

ブレッドボード同様にピンを作成して、右側の図ように「copper0」「copper1」というサブレイヤーを作ります。
その下にピンを移動して「4.2で確認した名前」に変更します。

- ピンの名前：
    - GND：connector0pin
    - VCC：connector1pin
    - SDA：connector2pin
    - SCL：connector3pin
- ピンの色：R=247, G=189, B=19
![Illustrator_PCBExplainMarged.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/1cb3f71c-c731-d8e4-1d5d-1c1536a12376.jpeg)

## 9. fritzingでSVGをインポートしてパーツを完成させる

再度、1.と2.を実施して
部品編集エディタ「Parts Editor」を開きます。

### 9.1 4つのモードでSVGをインポートする
メニューから「ファイル＞Load image for view...」を選択して、作成したSVGファイルを読み込みます。

ファイル名末尾で判断できると思います。

- ブレッドボード：「\_breadboard」
- 回路図：「\_schematic」
- プリント基板：「\_pcb」
- アイコン：「\_breadboard」 **※ブレッドボード流用**

![Fritzing_部品編集エディア_画像読み込み](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/9d62bacc-cb50-53c8-7c4a-e9869ad6d589.jpeg)


### 9.2 3つのモードでピンの位置を指定する
右側の「コネクター」ウィンドウ内の「Connector List」内のピン名を上から順番に選択して、ピンの位置を設定していきます。

- ピン名の右側に表示される「Select graphic」をクリック
- 図のなかで該当するピンの位置をクリック
- 名前の横にチェックが表示されれば登録完了

以上の設定を下記モードで実施します。

- ブレッドボード
- 回路図
- プリント基板

![fritzing_部品編集エディタ_ピン位置指定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/b0409bcf-f875-6926-8a2e-a4f4bd88c158.jpeg)


### 9.3 部品の情報を入力する
「Metadata」をクリックして、記入します。
他のパーツの情報を参考にしながら埋めていけば問題ないと思います。

![fritzing_部品編集エディア_メタデータ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/c52693a4-fca5-8951-f568-de4c3c40dadb.jpeg)

### 9.4 部品のピンの名称と形状を入力する
「コネクター」をクリックして、記入します。

ピンの名前と詳細、端子のオス・メス設定を入力します。
idがSVG形式ファイルの内容と一致していればOKです。

![fritzing_部品編集エディタ_ピンの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/4e8da9b7-d0c4-14e2-ba04-adcdadb58f6d.jpeg)

## 10. 動作確認と部品のエクスポート

### 10.1 部品をブレッドボード上に配置して動作を確認する
「パーツ」ウィンドウ内の「My Parts（MINE）」に部品が追加されていることを確認します。選択すると、下部に先ほどMetadataで登録した情報が表示されます。

ブレッドボード上に配置して、ピン付近にマウスカーソルを持っていきます。端子情報がポップアップ表示されれば動作確認は完了です。

※ポップアップ表示されない場合は、fritzingがピンを認識できていません。6から9までの手順に加え、参考サイトも合わせてご確認ください。

![fritzing_動作チェック](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/b4383a42-0b89-e3bc-1df9-cece7540d333.jpeg)

### 10.2 My Partsのエクスポート
My Partsに登録した内容は、fritzingをアンインストールすると消えるため、3.4の手順でエクスポートして保存しておきます。

# まとめ
fritzingという回路設計ソフトで使えるパーツ（.fzpz）を作製しました。
中間生成物の3種類のSVG形式ファイルと合わせて下記に置きましたので、ご自由にお使いください。

[GitHub M5Camera](https://github.com/saka-guchi/Fritzing/tree/master/M5Camera)

![Illustrator_Output.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/691672/38ec9390-7476-9828-1def-ed5ae9701e05.jpeg)


## 作ってみた感想
初回は右も左も分からずサイトをあちこち参考にして1日かかりました。但し、一度作ってみて大まかな手順やルールの存在を知ったことと、今回の部品を流用することで、次からは短時間で出来そうです。