ファーム書き込みジグを作ってみる。アクリル加工編

さて、データができたのでカインズホームのDIY工房に持ち込んで加工編です。

結論から言うと、とてもすばらしいデキで加工ができました。

ただし、後でまとめますがいくつかツマヅイた点があり、時間がかかってしまったために延長料金になってしまいました。
ちなみにレーザー加工機の使用料は20分で1,500円。延長が45分まで1,500円。なので結局、簡単な加工なのに3,000円もかかってしまいましたが、勉強代としておきましょう。次の機会にはちゃんと今回の失敗を反映してサクッとやりますよ。


上の写真では、まだアクリル表面のカバーシートは剥がしていません。カットラインは非常になめらかで、美しく仕上がっています。

時系列でツマヅキポイントを整理してみます。

  1. データを持ち込んだUSBスティックが読めなかった。
    このために一旦家に戻ってやり直ししました。何がいけなかったって、USBスティックの中でパーティション切っていたこと。もともとManjaro LinuxをインストールするためにISOイメージとEFIを焼いてあったUSBスティックの空き部分をFAT32ボリュームにして、そこにデータを入れていったんですが、カインズのPCではそのFAT32ボリュームを認識してくれなかったのでデータ自体が読み取れなかった、ということです。
    教訓その1: USBスティックでデータを持ち込む場合には、パーティション構成に気をつけて必ず1ボリュームのみにしましょう。
  2. データのパス(線)の太さが間違っていた。
    これが今回一番引っかかったところです。FreeCADから "Flattened SVG" で出力してInkscapeで読み込むと、線の太さは0.35ptになるようです。が、今回のレーザー加工機ではその線の太さが0.001ptである必要があり、それ以外の太さの線は認識しないようです。
    これは現場で、すべての線を選択して0.001ptに変更してやっと動くようになりました。
    家に戻っていろいろと試してみると、Inkscapeで0.001ptを設定しても、Illustratorに読み込むと0ptになってしまうようです。
    教訓その2: SVGをIllustratorに読み込んだら、全選択して0.001ptに設定しましょう。
  3. データのパス(線)が二重になっていたため、レーザーが往復していた。
    FreeCADで3Dモデルから "Flattened SVG" に出力しましたが、もとが3Dのため、Z軸方向から投射した場合には上のエッジと下のエッジが重なって出力されます。当然その場合にはパスが2本重なっていますので、レーザーが2回カットすることになります。これは害にはなりませんが加工時間が倍になってしまいますので、レンタル時間が延びてしまう要因になります。
    データを作成するときには、線が重なっていないことを確認したほうがいいでしょう。
    教訓その3: パス(線)が二重になっていないか確認しましょう。
  4. 彫刻部分(止まり穴)を彫るのは難しかった。
    今回、基板の位置決めピン(φ3.0)を立てるための止まり穴をレーザーで彫れるかと考えていました。彫刻モードでならできるかな、と思ったのですが、このモードではせいぜいマーキング程度しかできないようです。出力を調整すればできるとは思いますがそのための時間が取れないため、現実的ではなさそうです。なので、レーザーでは精密な位置のマーキングだけにして、止まり穴自体はφ3.2の鉄工ドリルビットで掘ることにしました。
  5. 彫刻の塗りつぶし指定を忘れないこと。
    これは止まり穴のことですが、最初に輪郭の円だけ描いておしまいになっていました。これを同じ色指定で塗りつぶすことで、苑の中身までをしっかり彫刻してくれます。円だけだとちょっと色が薄いため、中身も彫刻してほしい場合にはしっかり塗りつぶしておきましょう。
  6. グループ解除について。
    グループ解除についてはよくわかりません。やったほうがいいのかやらなくても大丈夫なのか。今回は全部解除して行いました。が、レーザー加工機はプリンタとして使用する形になるため、SVG上のグループ指定は問題にならないように思います。心配な場合には解除しておけば間違いないでしょう。

以上のポイントをしっかり押さえておけば、Illustrator CCはSVGファイル読み込めますのでInkscapeでの編集でいけることがわかりました。

ファーム書き込みジグを作ってみる。アクリル設計編

仕事で設計している基板はPICマイコンを搭載していて、中国のPCBCartに製造(基板製造、部品購買、実装)をお願いしているんだけれど、納品された状態ではファームウェアが書き込まれていません。

なのでこちらで書き込む必要があるのですが、ICD3を使うにせよPICkit3を使うにせよ、数をこなすとなるとなかなか面倒です。アダプタつないで書き込みケーブルつないで、と。
そこで、アクリル板と金属スペーサーを使って書き込み用のステージを作ることにしました。

まず基板のサイズとアダプタのプラグ固定のためのスペースを見繕って、FreeCADで3Dモデルを作ってみます。

こんな感じ。


仕様は3mm厚のアクリル板で、サイズは80x120mm。下の板は金属スペーサー用の3.2φのキリ穴が4つのみで、四方の面取りだけしています。上の板はDCジャックを通す穴と、基板固定用の3つのピン。あとはサブ基板を裏に貼り付けてテスト用の金属プレートを貼り付けます。3つのピンは3.2φで深さ2mmの止まり穴をあけておいて、そこに3φのアクリル棒を5mm程度の長さに切ったものを接着剤で固定しようと考えています。

一応3D図面はできました。FreeCADではここから三面図などの2D図面に落とすのは少々手間がかかるのですが、今回は作るのは1台だけなので余計なことはしたくありません。アクリル板を買ってきて、ノコで切ってドリルで穴あけ…すればできるのはわかっているのですが、どうせならきれいに作ってみたい。

そこで、カインズホームのデジタル工房でレーザー加工機があったのを思い出しました。
データを持ち込めば20分1500円でやってくれるようです。さらにレーザー加工ならば、元データが正確ならばきちんときれいに加工できそうです。

利用方法を調べてみると、カインズで材料を購入してからデータをSDカードかUSBメモリで持ち込み、Adobe Illustrator CCを使ってデータ読み込み、線に色を付けてから色データと加工種類を関連付けて「印刷」とすればいいようです。

さらに調べてみると、ここで使っているレーザー加工機はtrotec Speedy300とのこと。彫刻、カット、マーキングができるようです。彫刻ができるなら止まり穴も開けられるかも。

ということで手持ちのツールでデータを作成できるかどうかを調べてみました。Illustratorはいわゆるドローツールなので、Inkscapeで同じことができるかもしれません。Inkscapeのデフォルトのファイル形式はSVGです。一方、FreeCADもSVGへのエクスポートは可能です。そしてIllustrator CCは体験版をダウンロードしてみるとSVG形式は読み込めるようです。こちらにも扱えるファイル形式の一蘭がありました。
つまり、こちらサイドではFreeCAD→Inkscapeでデータを作成しておいて、それをカインズに持ち込んでIllustratorで読み込めばうまくいきそうです。

まずはFreeCADで作成したプレートをSVGでエクスポートします。
部品はひとつずつ処理したほうが間違いがないので、まずは上プレートをやります。
Part ワークベンチで加工面を正面にして表示し、モデルを選択します。


その状態で "File" → "Export" → "Flattened SVG" を選択して出力します。同じことを下プレートでも行います。

次にInkscapeを起動します。
用紙サイズを設定しますが、カインズのオンラインストアで調べてみるとアクリル板のサイズは180x320mmが標準のようです。3mm厚ということだと、アクリルEX板001透明180x320x3ミリがよさそうです。ちょっと高い気もしますが。

Inkscapeで用紙サイズを320x180(横長)に設定し、先程出力したSVGファイルを並べます。ワークサイズが大きいので、ついでに下プレートをもう2枚取ることにします。何かで使えるかもしれないので。


上プレートはピンを立てるための止まり穴が3つあり、マニュアルでは彫刻部分の線の色を変えるように書かれています。なので上プレートを選択してグループ解除し、止まり穴の色を変えました。"ストロークの塗り"を選択して、RGB=255:0:0の赤を選択。


マニュアルではベクターデータにしろとあるので、一応すべてのオブジェクトのグループを解除しておきます。そうしたらこれを「アクリル板カット用.svg」という名称で保存しました。

次にこれをAdobe Illustrator CC体験版で読み込んでみます。


ちゃんと読み込めているようです。ただ、オブジェクトをクリックすると全部まとめて「パス」ということになっているようなので、右側のクイックメニューから「グループ解除」してみました。その状態で各パスの長さを見てみるときちんと設計通りになっているようなので、色を付けるところまでやっておけばあとはデータを持ち込んで読み込み→グループ解除でいけそうです。

早速明日やってみます。

Bloggerの投稿日付の扱い。

このブログを見れば一目瞭然なんですが、各投稿記事のところ、日付はなくてなぜか時刻のみになっています。
自分的感覚としては、投稿した時刻よりも投稿した日付のほうが重要だと思うんですが…なんでこうなっているのか。

ちなみに投稿時刻の上にマウスカーソルをホバーすると投稿日時がチップしますので、確認手段さえ知っていれば投稿日時を知ることはできますが、そこまでできるなら素直に表示してほしいところ。

ところがこれを表示するための設定項目というのがなくて、表示するためにはHTMLテンプレートをいじらないといけないようです。

ということでググって見るわけですが、引っかかってくるのは "data:post.dateHeader" を判定している部分を、判定をなくして "data:post.timestamp"を表示させればいいよ、というものばかり。ところがなぜか自分の使っているテーマではそもそも "data:post.dateHeader" を判定している部分がありません。

おそらくこちらの Show Date For All Posts in Blogger とか Bloggerで記事の公開日/最終更新日を表示してみた などがたぶん正解を示してくれているんだと思うんですが、なんか変。特に後者は2018年の記事なのに。
テーマを変更すると出てくるのかしら。

鉄製品の錆落とし。

錆びた鉄製品をサンポールに浸しておくと、赤錆がきれいに落ちる、という記事がけっこうあります。
ちょっとHTML記法的にどこまで表現できるかも含めて、化学式で表現してみます。

まず酸化鉄は酸化第一鉄(酸化鉄(Ⅱ))と酸化第二鉄(酸化鉄(Ⅲ))、それに四酸化三鉄(酸化鉄(Ⅱ,Ⅲ))などがあります。化学式はそれぞれ、FeO、Fe2O3、Fe3O4となります。
このうち、赤錆は酸化第二鉄、黒錆は四酸化三鉄が主成分です。錆びた鉄、という場合にはたいてい赤錆を指します。

産業的には赤錆はフロッピーディスクの磁性面に利用されたり、微粒子を装飾品やガラスレンズの研磨剤としても利用していたようです。現在でも研磨剤として使われていて、グラインダーなどで使用する赤棒は酸化鉄を使用しています。
余談ですが研磨棒は赤→白→青の順に粒度が上がり、白は酸化アルミニウム、青は酸化クロムが主成分になります(https://jp.misumi-ec.com/tech-info/categories/surface_treatment_technology/st01/c1981.html - MiSUMi-VONA 技術情報から)。


閑話休題。


赤錆は酸化第二鉄 Fe2O3 が主成分なのでこれをターゲットとします。一方サンポールは塩酸 HClが主成分です。なので、

Fe2O3 + 6HCl → 2FeCl3 + 3H2O

となるかと思いきやさにあらず。

実は赤錆はその主成分は酸化第二鉄ですが、実際には水和物として存在しているらしく、FeOOH(オキシ水酸化鉄)をもとに考えないといけないようです。別の書き方としては、Fe2O3・H2O となります。そのため、反応式は以下のようになるようです。

2FeOOH + 6HCl → 2FeCl3 + 4H2O

ですがこのとき水中では塩化鉄() FeCl3 はイオンとして遊離しているため、Fe3+ + 3Cl- となっているようです。

赤錆が溶け出した状態では主にこの Fe3+ が水中にありますが、ここに炭酸ナトリウム Na2CO3 を投入します。
すると鉄とナトリウムのイオン化傾向の差によって、

2FeCl3 + 3Na2CO3 → 2Fe↓ + 6NaCl + 3CO2

となって、二酸化炭素の泡が出て、溶けていた鉄が沈殿し、水溶液は食塩水になる、はずです。たぶん。なるといいな。

実際には赤錆以外の鉄も塩酸中に溶け出しているでしょうし、酸化第三鉄なども含まれているでしょうから、必ずしもこの通りになるとは限りませんが、大筋としての理解はこれでいいのではないかな、と思います。

ただし実際に実験する場合、サンポールを使うと塩酸以外の成分も含まれているので、ちょっと舐めてみるというのはやめたほうがいいでしょう。

それにしても、高校のときにも思ったけれど、鉄イオンは2価と3価があり、さらに水和してみたりα、γ、δなどの相に化けてみたり、身近なのに分かりづらすぎ…。

そういえばセスキ炭酸ナトリウムが最近キッチンや洗濯用に出ていて結構な人気だけれど、これは炭酸ナトリウムと炭酸水素ナトリウムを1:1で混合したもので、弱酸性ではあるけれどタンパク質や脂質を溶かすので衣類の汚れ落としなんかに重宝してるんですが、そろそろパナマ風帽子がひと夏過ぎてちょっとニオイがしてるので洗濯しようと思ってます。

いろんなtailユーティリティ。

Apacheとかその他のサーバ類でログを見ながら設定ファイルをいじったりするときに、重宝するのはやっぱりtail系のユーティリティです。

NetBSDでは標準のtailは '-f' オプションを付けると1つのファイルしか受け取りません。

Apacheではリクエストのログ (access_log) とエラーのログ (error_log) の2つのファイルを設定していますが、

  • まとめて1つのスクリーンで見たい
  • さらに特定のURLへのアクセスのみ見たい
  • あるいはgrep的にフィルタしたログのみを見たい
などという場合が多々あります。

そこでちょっとpkgsrcを覗いてみました。
locate tail | grep pkgsrc
などとするといくつかあるようです。

  • misc/colortail: 出力をカラー化してくれるtail。別途色設定ファイルも必要。複数のファイルには対応していないっぽい。C++で書かれている。
  • misc/mtail: 出力をカラー化してくれるtail。Python2で書かれている。http://matt.immute.net/src/mtail/
  • misc/multitail: 複数のファイルをスクリーンを分割して出力してくれるtail。
  • misc/xtail: 複数のファイルあるいはディレクトリ以下の全ファイルを同時にtailする。
  • sysutils/wtail: multitailと同様に複数のファイルをスクリーンを分割して出力してくれる。
ちょっと使ってみたんですが…。
  • colortail: 複数ファイルに対応しているけれど、そのファイルを出力する際にファイル名を別途出力するのでけっこう見づらい。カラー化自体は好みかも。
  • mtail: colortail同様、ファイル名は別途出力されるので、どのファイルの出力家を見るのが辛い。
    ちなみにファイル名はこんな感じで表示される。
    ==> /var/log/httpd/access_log <==
  • multitail: RLoginで表示しているときにマウスでスクリーンをクリックすると、なぜかバッファが動いてしまう場合があるけど、オプションも豊富で、正規表現でのパターン指定('-e'オプション)ができるし、排除パターンの指定('-ev'オプション)もできるので便利。
  • xtail: pkgsrcで利用しているソースのREADMEには、"1989年7月にcomp.sources.miscに投稿された"とあって、めちゃくちゃ古い。平成元年。"XコンソーシアムとかSGIとかが "xtail" という名前を盗もうとした、騙されるな、オリジナルはこっちだ"とも書いてある。
    '-f' オプションはないので、xtail起動以降にファイルに追加された部分を随時表示していくけど、パターン指定ができないのでそういう用途には不向き。
    あと、終了時はESCや'q'ではなく、CTR+CやCTRL+DですらないCTRL+'\'という変則的なものなので、知らずに起動すると別のコンソールからkillしなくてはならない。
  • wtail: オプションはないらしく、 xtail /var/log/httpd/*log したらログを全部表示してから '-f' オプション相当の動きになって、大変なことに。
どうやらいちばん良さそうなのは multitail あたりでしょうか。カラー化含めて設定ファイルをいじってみるといいかと思います。

BlenderからFreeCADのファイルを読み込む。

objフォーマットとかstlフォーマットとか、受け渡しに使えるファイル形式はあるんだけれど。

もうちょっとなんとかならんかいなと思ったらこんなのを見つけました。

Blender FreeCAD importer updated

ずばり、BlenderからFreeCADのFCStd形式のファイルを読み込むためのアドオン…なんですが…。

詳細はこちら。yorikvanhavre/io_import_fcstd.py

なんでいきなりシオシオなのかというと、これを使うためには "Python3でコンパイルされたFreeCAD" が必要だからです。

# WARNING

# This addon requires FreeCAD to be installed on your system.
# The default versions of FreeCAD that you can download from the FreeCAD
# website or from your distribution's repositories is usually compiled
# with Python2. However, Blender supporting only Python3, this addon
# requires a version of FreeCAD that is compiled with Python3. This might
# require you to compile FreeCAD yourself at the moment, or find a kind
# soul (maybe on the FreeCAD forum above...) who will be willing to
# compile a Python3 version for your system.

なんてことがファイルの中に書かれてまして。
確かに、BlenderはPython3 (しかもいささか古いPython 3.5.3…)でコンパイルされており、一方のFreeCADはPython2 (Python 2.7.14)でコンパイルされています。
Python2とPython3の間にはふかーい溝があるので使えないんですよ、使いたければFreeCADを自分でコンパイルしてね、ということです。

ところで、FreeCADをPython3でコンパイルする方法は、FreeCAD WikiのPython 3のページに書いてあります…Ubuntu用ですが。

そしてさらにPivyとPySideのPython3.5版が必要になります。が、pivyはプロジェクトのページが応答しないし、PySide (Qt for Python)はpipでインストールしようとするとPython3.4までしかサポートしてないのよ、といわれます。
Pivy自体はcoin3d.orgから外に出て https://github.com/FreeCAD/pivy にリポジトリがあるようですが。Coin3D自体も https://github.com/Alexpux/Coin3D にあるようです。


これは茨の道ですね。茨の道なので後回しです。

FreeCADでレイトレーシング。

今のところちゃんと動いていないため、とりあえず状況の整理を。

OS: Windows10 Pro
FreeCAD 0.17.13541 (2018.8.16)

FreeCADから利用できると書かれているOSSのレイトレーシングソフトは、POV-rayとLuxRenderとなっていますが、LuxRenderは2017年末に再起動し、2018年4月にLuxCoreRender V2.0beta2として最初の公式リリースを出しています。

レイトレーシングは正直これまでアプリのデモ程度でしか触ったことがないため、よくわからないわけですが…。

ちょっと調べてみたところ、POV-rayはGPUを使用せずにCPUのみでゴリゴリやるため、たいへん時間がかかるようです。

LuxCoreRenderはOpenCLを使ってGPUを利用し、さらにCPUも使い倒しているようです。
ためしにLuxCoreRenderのダウンロードページから壁紙をダウンロードし、描画させながらタスクマネージャーのパフォーマンスグラフを見ると、内蔵GPUを5割ほど使用している様子がわかります。



また、GTX960mを組み込んだCore i7のノートPCでは、GTXも内蔵GPUも両方使い、さらにCPUも使って計算しているようです。

実際のところ、本気の映像クリエイターでもない限りは可能な限り計算時間は短いほうがいいでしょうから、LuxCoreRenderを使用することにしようと思います。
ちなみに現在使用しているCPUは第4世代Core i7プロセッサーの4790K(オーバークロックなし)です。2014年のCPUなのですが、これ以降では劇的に性能が上がっているとかいうことはないので、まあこれでいいやという感じになっています。そうは言っても近いうちに8700Kにしたいなぁなどとは思っているんですが。

ともあれ、LuxCoreRenderのダウンロードページを見ると "BlendLuxCore v2.0" というのが目に入ります。これはLuxCoreRenderをBlenderのアドオンにするためのビルドのようです。その下には "Standalone release v2.0" と、 "LuxCore API SDK release v2.0" というのがあります。3種類もあってどれを使えばいいのか、FreeCADのところにも書いてません。

わからないときはソースを読めという格言の通り、関係ありそうなソースを探してみます。
幸い、FreeCADのgitリポジトリにそれらしきものがありました。

https://github.com/FreeCAD/FreeCAD-render/blob/master/renderers/Luxrender.py

def render(project,external=True):

    if not project.PageResult:
        return
    p = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Render")
    if external:
        rpath = p.GetString("LuxRenderPath","")
        args = ""
    else:
        rpath = p.GetString("LuxConsolePath","")
        args = p.GetString("LuxParameters","")

render()関数の引数で external にTrue (デフォルト)がセットされると LuxRenderを呼び出し、Falseなら LuxConsoleが呼び出される、ということらしいです。

余談ですがこのgitリポジトリにはAppleseed.pyなんてのもあって、これはAppleseedというレンダラを使うためのファイルのようですね。たぶんFreeCAD 0.18? いずれにしろこちらはメニューには出てこないようです。

閑話休題、上記の3つのダウンロードのうち、FreeCADから呼び出して使うのは "luxcoreui.exe" のようです。なので "Standalone" を使うことにします。


とりあえず部品作成はFreeCADで、シーン合成などはBlenderを使って、レイトレーシングをLuxCoreRenderで進めてみようかなと考えていますが、とりあえず使えるかどうかの確認です。


FreeCADでワイングラスを作ってみました。

これをレンダリングしてみますと…。


なんか違う感がハンパない…。

SWDなら3線でいいとはいうものの。

 安価で優秀なデバッグプローブはないかしら、と探したら、 Raspberry Pi Debug Probe というのがあったんですが、これは3線がにゅるんと出てるだけです。 もちろんSWDなら3線を繋げばいいのではありますが、汎用的に考えるなら5x2のリボンケーブルコネクタが欲し...