前回で、Navaの組立てパーツを片っ端から集める事が出来た。既にお解りだろうがNavaは電子パーツだけで1200部品以上からなる。一つのプロダクトとしてはとてつもない規模のものだ。もしも、はんだ付け途中に電子パーツの不足が生じたり、仕様を読み違えて実装したりしたら目も当てられない。そのため組立る前にパーツ表の検証は完璧に終えておく必要があった。
結果、私はいくつかの方法で確実にパーツ表を検証する方法を確立したのでここに記す事にした。Navaの組立てとは直接関係ないかもしれないが、これを残す事はとても有用なものであると確信している。是非読んでいただきたい。
Nava v1.02 2つのパーツ表を徹底検証
Interactive BOM
Navaを組もうとパーツを集めたものの早速難問が降りかかってくる。Nava公式ドキュメントはv1.0を基準に書かれている。全部が全部という訳ではないがv1.02固有のものが把握できないので、正確に全容を知る術がないのだ。特に「Interactive BOM」と「Mouser BOM」には差異があってホトホト困り果てた。これは両方の情報をきちんと突合させなくてはならない。まずは一番の信頼できる情報源になるであろう「Interactive BOM」をとことん解析した。
Interactive BOMとは
有志の手により作成されたNava v1.02の「Interactive BOM」はNava公式のフォーラム記事からダウンロードできる。私はこれの情報の有用性に目を付けた。Interactive BOMはNavaのCADデータを基に生成されている。それならば、その部品番号(以下、パーツNo.)は基板に実装されているもの(=シルク印刷されている)であると確信が持てるからだ。
※v1.2とあるがこれはスペルミスだ。v1.02の物で間違いない
これを自分のパソコンにダウンロードして「Nava_v1_2.html」をブラウザで開くだけだ。

このInteractive BOMはとても便利で、パーツ表にマウスオーバーすると、そのパーツが基板上のどこに実装されるのかをハイライト表示してくれるという優れものだ。
Interactive BOMの改造
私はこのInteractive BOMを見て思ったのは、Navaのような膨大な部品点数があるプロダクトを管理するのは厳しいという事だった。現状のデータには各セクションに分ける術がないため、はんだ付け中に、毎回1つ1つのパーツ番号を入力してハイライトさせるというのは非常に手間がかかる。なので、各セクションごとにまとめて表示できないか?という願望が出てきたのだ

jsデータの改造
Interactive BOMのパーツ表を生成しているのは「index.js」だ。つまりJavaScriptによって記述されている。中身を見てみると綺麗なプログラムになっている。これならパーツ表を生成する処理に目的の処理を付け足す事が出来そうだった。そこで私はパーツ表の一番右の列に「Groups」という項目を追加して値にセクション名を表示するよう細工をした(※下の画像の箇所だけではない)

これによりオリジナルのInteractive BOMに手を加えた状態で、更にpcbdata.jsonのデータを加工して更新するとGroups列とセクション名が表示された!これでフィルターによりセクション名だけを纏める事ができた。これは大きな前進だ。あとは膨大な数のパーツを全てセクションごとに分ける必要がある。手作業では非常に辛い作業だ。

Mouser BOM
さて、一旦ここで別の話をしよう。当たり前の話だが、必要な電子パーツを揃えなければ電子工作は始められない。パーツは実店舗や通信販売を利用して調達するわけだが、1200点数以上のパーツをまとめて調達するのは非常に骨が折れる。そこでMouser BOMを利用する事にした。
Mouser BOMとは
大手電子パーツ通販会社のMouserが提供しているパーツ表のインポートリストだ。
これを使えばMouserでそのまま目的のパーツを一括購入できる。そう、簡単に揃うはずだった。

しかし、実際に購入して到着したパーツを確認していくと、おかしなことに気付いた。数にかなりの違いがあるのだ。Mouser BOMのメンテナンスが追い付いていないようでv1.0の情報や、品切れの部材が残って居たりしていて、そう簡単には読み解けないほど混乱したパーツ表になっていた。これではv1.02を正しく組むことが出来ない。直ちにを修正したいが、どこが正しくてどこが間違っているのかを判断できなかった。これはかなり大変な作業になるなと覚悟しつつ、まずは解析するためMouser BOMをエクスポートしてExcelにて開いてみた。

このようにMouser番号・メーカー番号・説明(見切れているが個数も入っている)があった。私はこれらのパーツをナンバリングし、Interactive BOMのどのパーツと符合しているか整理する事にした。
Mouser BOMの整理
Interactive BOMを基準に紐づけして並べ直したものがこの表になる。いくつかは同じパーツを使用するようになっていたし、またInteractive BOMにはない沢山のパーツも存在した。

これは先が思いやられる。ただ、これでInteractive BOMを各セクションごとに分ければスンナリといくようになるだろう。そう思っているが完成まではかなり先の話となるのであった。
2つの自動生成マクロを作成する
さて、ここまで2つのBOMを検証するにつれて、次の作業を自動化したくなってきた。
- pcbdata.jsonを改造してセクションを表示するデータを自動生成する
- ブログに載せる各セクションのパーツ表を自動生成する
1はセクションごとのパーツ表をメンテする時にすぐ反映できるので便利だ。2はセクションごとでNavaを作り上げるのに必要となる。この2つを自動生成できるようになれば強い武器になる事は間違いないだろう。
pcbdata.jsonデータ自動生成マクロ
正確な全体のパーツ表を入手
まず、このInteractive BOMから正確な全体のパーツ表を手に入れるのは簡単だった。Interactive BOMの構成ファイルの中に「pcbdata.json」なるデータがあるのでそれをエディタ等で開くとバッチリ確認できた。

じっくりとpcbdata.jsonの構造を確認する。大きく3つのブロックに分ける事ができる。そのうちBOMデータの上下のデータは不変なので、要は真ん中にあるBOMデータさえ書き換えれば良いのだ。

そうとわかればBOMデータに、セクションの情報を付け足せばよいのでExcel VBAで処理が出来そうだ。
BOMデータをコピーしてメモ帳に貼り付けてからCSV形式で保存した。そのあとExcelでCSVを開くと下記のように、カンマで区切られた各要素が分かれて扱いやすいデータで表示される。ここまでくれば、あとは数式を使い、必要なパーツNo.をK列に抽出した。
最終的にM列に出力したように行の末尾にセクション名が入ったデータに変換して、テキストファイルにアウトプットすればよい。ただ、インポートしたデータにセクション名を入れるのは大変になる。さて、どうしたものか。

各セクションごとのパーツ表の作成
そこで、私は一旦別作業を始めることにした。各セクションは下記のように分類した。スイッチやノブも含まれている。

では、どうやって各セクションごとの正確なパーツ表を作成したらいいのか。実に難しく地道な作業となった。まずはNava公式サイトからNava v1.02のシルク印刷情報をダウンロードした。それをNavaの各セクションごとにパーツの文字だけを画像抽出して保存したもの(画像内:赤字)と、基板を写真に撮ったものとで画像を重ね合わせて比較をしながら間違いがないか確認した。もちろんだが完全に一致していた。

次に、このシルク印刷情報をExcelに貼り付けて、その下のセルに片っ端からインプットしていった。つまり人力トレースだ。OCRが完璧にできるのであれば使いたかったところだが、無料で使えるものはまだ信頼しきれるものではなかった。ここは自分自身の手と目で地道にインプットしていくしかない。

このようにExcelで人力トレースしたものを数式によって1列にまとめて、各セクションごとにナンバリングしてリスト化した。(7と書いたのはHITOMセクションのことである)

これらを繰り返しようやく全てのセクションのパーツ表を手入力した。そして入力したものとInteractive BOMとで突合すると、いくつかは無いものがあった。

Navaの公式フォーラムや既にNavaを組んだ人の情報などを調べてみる。そのほとんどがv1.02では不要(v1.02では未実装で大丈夫)になっていたことがわかった。

これで全てのパーツの出どころが判ったのでBOMデータに反映させるマクロを作成した。簡単に表現しているがこの作業が一番時間が掛かっている。
Function CSV_Output(save_file As String) '///////////////////////////////////////////////////// ' CSVデータ変換 '///////////////////////////////////////////////////// Dim line As String Dim buf As String Dim r As Integer Dim RowEnd As Integer RowEnd = Cells(Rows.Count, 1).End(xlUp).Row 'Debug.Print (RowEnd) Dim OutProc As Object Set OutProc = CreateObject("ADODB.Stream") With OutProc .Type = 2 .Charset = "UTF-8" .Open End With 'インデックスの書き込み line = "" '初期化 For r = 1 To RowEnd line = ActiveSheet.Cells(r, 13) OutProc.WriteText line, adWriteLine line = "" Next r OutProc.SaveToFile save_file, adSaveCreateOverWrite OutProc.Close Set OutProc = Nothing End Function
生成されたBOMデータを連結させるのはマクロから呼び出したバッチファイルで実行する。

copy /b before.json + bombom.json + after.json pcbdata.json
これでpcbdata.jsonはマクロ一発で更新が簡単にできるようになった。
パーツ表自動生成マクロの作成
各セクションごとの部品表への展開
pcbdata.jsonデータ自動生成マクロの作成の作業でInteractive BOMとMouser BOMのパーツはそれぞれ紐づけてある。あとは様式を決めたExcelのシートを生成するマクロを作成するだけだ。
これは正直作るのが大変だったので知人にマクロを作成してもらった。公開出来るかの確認を済ませていないのでとりあえず動作だけどんな風に行っているかを動画にしてみたので見ていただきたい。
出来上がったパーツリストは、各セクションごとの組立てブログにコピーペーストするだけでWordPressが立派なテーブルに整形してくれる。
下が実際に貼り付けたパーツ表(電源部)になるが、Mouserでの購入リンクも付けるようにしたので、再購入やメンテもしやすくなるしで言う事無しだ。

最後に
今回のマクロについて
なぜ、ここまで手を掛けてパーツ表をメンテナンスしたのか。それは「誰かが再びこの道を歩む時できるかぎり楽にしてあげたい」からである。Navaが1台でも多く作られれば私にとっても喜びである。なので、必要であればアップロードして共有したいのだが、まだマクロ作成者の了承を得られていない。場合によってはマクロの結果のみを提供する形をとる予定だ。少しお待ちいただきたい。
次回は
いよいよ、組立て編へと入っていくことになる。まずは「電源部」からのはんだ付けとなる。この様子は配信をしてのちに残す事にしているので乞うご期待。
コメント