オープンソースの制御ソフト【OpenPNP】
自作チップマウンターという道に踏み込むと一度は目にする名前かと思います。基本的なヘッド部分の制御やチップを認識するための画像処理関連の機能などチップマウンターに必要なものが一通り揃っており、Maker Faireでもこれを利用している作例をいくつか拝見できます。素晴らしいソフトですので完成を急ぐのであればOpenPnPを使わない手はないですが、”既成のツールに頼らずに作りたい”という思いが強いので今回の利用は見送りました。やはり自作したチップマウンターの制御は自作ソフトでしたいですよね!
実装するべきもの等々
制御ソフトを自作するに当たり、機械的なものも含めチップマウンターに必要な機能(自分が求めるもの)を書き出してみます。
- Kicadの.posファイルを投げるだけで使える
- 実装精度±0.06mm(想定している最小部品のパッドに対する許容ズレ)
- ピックした部品の位置を画像処理で検出して補正(上記を満たすため)
- スプロケットホールを自動検出
- 座標とスロット情報等をシリアル通信で投げる
- 原点およびZ軸自動調整(実装前に一回走る)
- SMTノズルの自動交換
- ヘッド軌道の干渉判定
- 静音(昼夜構わずに使いたい)
- リッチな操作GUI(優先度低)
こんなところでしょうか…。実装精度はかなり辛目の基準なので実装速度との両立が難しければ妥協する可能性大です。.posを読み込んで適当にいじってから座標をUART等で投げるだけならWindows Formで容易に実装できそうですが画像処理まわりが殆ど未経験なので時間を要しそうです、諸事情で11月までにまとまった進捗を出す必要があるのでこれでは困ります。色々試した結果、上記の機能を比較的容易に実装可能そうなUnityを使うこととしました。
Unityで制御ソフト作り
ゲームエンジンであるUnityを制御ソフトに投入するに至った経緯として
- 秀逸なGUIエディタ
- 画像処理など高レイヤーとの相性の良さ
- 情報が多い(情報が多い)
が挙げられます。UnityはSystem.IO.Portsライブラリでシリアル通信もできるのでハード部分も特に問題なさそうです。過去にKicadと連携(?)したギャグソフトを作ったことも今回の選定を後押ししました。
kicadで作った基板を走れるクソゲーできた。 pic.twitter.com/qjyN1N5Xia
— やえ (@tokyotoniosumai) October 11, 2020
これまで作ったUI関連のスクリプトも流用することができ、短期間である程度の完成度が見込めると判断しました。
UI設計
モチベーション高ぶっている内にイメージする完成像をUnityに落とします。最近人気のシンプル(ミニマル?)なUIを目指します。UnityなのでUI作りは直感的でラクチンでした。ひとまずボタン配置などに加え、C#で「部品位置情報ファイルを読み込み」→「中の部品情報をリスト」→「部品数カウント(機能していない)」の機能を実装しました。設定画面のボタンはOnClick処理が空っぽなので押しても何も起こりません^^;
そろそろハード側にも着手しないと…