Kicadのスクリプトで部品を環状に配置する

環境:Windows10 + Kicad5(多分Kicad7もok)

環状(わっか)の基板を作る事になり、部品を輪のように配置することになった。つまり、部品の角度がひとつひとつ変わっていく。
部品一つごとに位置、角度を計算するのは間違いであるから、スプレッドシートで部品のx座標、y座標、角度を一覧にし、部品は108個、108*3=324カ所のパラメータを手打ちした。スマートではない。しかも案の定修正がかかった・・

Spread sheetで部品の座標を計算

環状に配置する部品のx座標、y座標をどうやって求めればよいのか。一瞬戸惑ったが、三角関数を用いればよかった。三角関数をまともに仕事に使うのは久しぶりだった。道具は需要があって発明される。三角関数はそもそも角度からx座標、y座標を求めるために発明されたので、しかるべき使用法だった。スプレッドシートで108個の部品の座標が求まった時、軽い感動を覚えた。
さて今度はKicadの配置配線ツール、pcbnewについて。配置された部品のパラメータを外部から設定する方法はないのかと調べたが、これというものが無かった。しばらく彷徨うと、スクリプトという機能が目に入った。Pythonのスクリプトが使えるとのこと。import pcbnewですべてが扱える。これが正解かと感心した。まあ、ModelSimとかすべてスクリプトが使えるようになっているのだから、当然の設計ポリシーと言えばそうなんだろうけど。今までPCBのCADでスクリプト対応してる物なんて見たことが無かったので。

今度はスプレッドシートから直接読み込みにトライしてみる。スプレッドシートをcsv形式でエクスポートしてファイルにする。ファイルを読み込んでPythonのリスト形式変数に格納する。

Pythonスクリプトファイル(hoge.py)がshellからimportで起動できると書いてあったのに、どうしてもできない。Windowsだから? また彷徨ううちにexecfile()というメソッドを発見。絶対パスで指定するとやっとhoge.pyスクリプトを実行することが出来た。もしかすると、importで絶対パスを入れたらうまくいったのだろうか。


絶対パスを入力。区切りは「\\」で入力しないとだめ

次にcsvファイルをopenするのだが、、どうもKicad5でのPythonバージョンは2.7の様子(上図に2.7とある・・) open()メソッドのパラメータに'newline'を入れていたらエラーが出た。
どうやらioライブラリのopenを使うと良いようだが・・ そもそもcsvの1行目に漢字があったので漢字の行を消したら読み込めた。以下ソース。

import csv
import pcbnew
from io import open

filename = 'c:\Users\user_name\Documents\project_name\hoge.csv'
#with open(filename, "r", encoding="utf8", newline="") as f:
with open(filename, "r", newline="") as f:
    board = pcbnew.GetBoard()
    csvreader = csv.reader(f)
    for row in csvreader:
        print(row)
        ref = "L" + str(row[0])
        print(ref)
        l = board.FindModuleByReference(ref)
        l.SetOrientation(int(float(row[3])*10))
        l.SetPosition(pcbnew.wxPointMM(float(row[1]),float(row[2])))

無事pcbnew上の108個の部品座標が変更された(直接データを変更したので、何かわざと変更を加えないと上書き保存はできない)。すばらしい!


環状に部品を配置できた

今後の特殊な配置に関してはかなり自信が持てた。

この記事が気に入ったらサポートをしてみませんか?