ちょっと考えごとするとき Google Keep にとにかくタイピングしていく、みたいなことが多々あるが、図を入れようとすると途端に困難になるので、ペンと紙という便利な道具を使うことにしてみた。

できればデジタルガジェットで解決したかったがコストの割に性能で満足いくか微妙に感じた結果、良いペンと紙を使うほうが気持ちいいのではないかと考えた。

マルマン ノート ニーモシネ A5 方眼罫 N182A - マルマン(maruman)

マルマン(maruman)

5.0 / 5.0

別段こだわりがないし思考過程を保存しようとも思わないので、紙とかコピー用紙でいいかと思ったが、思いのほかスムーズに書けずイライラしたので、調べた結果ニーモシネが良いだろうという感じだった。装丁がかっこいいのと、方眼の薄さがちょうどよくて気にならない。

ペンは手持ちにあった LAMY の Safari (なんかのときにもらった) の細字(F)と、kakuno の中字(M)、細字(F) で良さそうなのでこれのまま。(Safari も kakuno も学習用の安い万年筆。LAMY のFはkakunoのMと同じかそれより太い線)

LAMY ラミー 万年筆 F 細字 サファリ ブラック L17-F 正規輸入品 - LAMY

LAMY

5.0 / 5.0

パイロット 万年筆カクノ M ソフトブルー FKA1SRSLM - パイロット(Pilot)

パイロット(Pilot)

5.0 / 5.0

この組み合わせはかなり気持ち良く書ける。ペンは安くても紙はちゃんとしたのを使ったほうが良いということを学んだ。

現状

紙 vs コンピュータという点では、結局筆記で書いていくのは自分の場合長くは続かない気がしている。

今のところ8ページぐらい消費したけど、今やっていることに対してはそこそこ良い感じがする。ある程度以上に複雑になると図がないと厳しいけど、コンピュータ上で図を書くのは、書けないことはないけど今のところペンで書くよりも早く書けない。

一方で書いた図を編集させるのが難しいので図の試行錯誤はしにくいのと、字を書く分にはコンピュータ上に書いたほうが早いので、思考過程を最終的にデジタル化したいなら最初っから Inkscape 極めたほうが有益そうではある。

  1. トップ
  2. tech
  3. 紙とペン

モバイルバッテリーのロードバランサ | tech - 氾濫原 の続き。5V 2A (10W) 出力のモバイルバッテリー複数使って、30W ぐらいの電力を得ようというやつ。

その後、2個ぐらい専用のロードバランサICを使ったりしてみたが、高負荷時にスイッチングノイズで入力電圧が大きく変動するのをカバーできず挙動が不安定だった。

ということで、改めて基本的な回路で実装したら結構うまくいった。

回路図

前回は 5V バッテリーの出力を直接合成しようとしていたが、それだとバッテリーの個体差によって電圧の差が大きく、うまくバランスできないうえに、損失が大きくなるという問題があった。

今回はバッテリー出力それぞれを欲しい出力電圧付近まで DC/DC で昇圧してから合成することにした。これにより、DC/DC で電圧で調整が効き、かなり近くに電圧をあわせられる。昇圧後に電流制限回路とダイオードを入れ、ロードシェアさせている。

FET は、最大で、許容する電位差×最大電流値だけの損失を発生させる。±0.5V 700mA だと 700mW。空冷でもよさそう。ただ、全体の許容電流を超えた電流を流そうとすると損失が激しく増えて熱くなるので危険。

結果

電圧を高めにして、ゆっくり電流を増やしていくと最大28Wぐらいとれた。

問題点

入力側過電流

不定期に電流をとろうとすると、DC/DC 基板についているコンデンサを放電しきってしまうようで、昇圧の入力側すなわちバッテリー出力側に過電流が流れ、バッテリー側の過電流検知にひっかかることがあった。

これは電流制限を昇圧後に入れているせいなので、昇圧前にも入れれば解決するが、それはそれで面倒くさい。

ESR が大きめのコンデンサを出力につけておけばだいたいいい感じになりそうだったがちゃんと試してない。

実装面積

DC/DC をそれぞれにつけるせいで実装面積が大きい。 DC/DC は小さくしようがないので、ロードシェアの基板を小さくするしかないが、それほど小さくはならなそう。

  1. トップ
  2. tech
  3. モバイルバッテリーのロードバランサ2

http://cho45.stfuawsc.com/GrblServer/browser/gcode-viewer.html



GrblServer で使うために実装を書いた。もともとプログレスバーを時間ベース(パスの長さとフィードレートから求めた値)にしたくてG-codeパーサを書いてたけど、結局ビューワー作るのと同じコストがかかることがわかったので、デバッグがてらビューワーも書いた、という感じ……

three.js を初めて使ってみたけど、かなりお手軽の WebGL 使えて良かった。WebGL の API はかなりローレベルなので 3D 初心者には使えない感じだけど、three.js なら誰でも使えるレベルになっている。

ただ、ちょっと凝ったことをしようとすると自力でシェーダープログラムを書く必要はある。今回 Z 軸が 0 以上ならパスを半透明にしたくてシェーダープログラムを書いた。

そして最近のスマートフォンだと three.js で書いたコードがものすごくヌルヌル動くのですごい。ブラウザゲームとかマジでネイティブ疎遠ないレベルで作れるのでは!!??? と思ったけど、別に作りたくはない。

  1. トップ
  2. tech
  3. G-code での切削パスをブラウザでプレビューするやつを書いた

Grbl の現在のバージョン(v0.9)にはジョギング(手動で軸を送れる機能)がない。GUI にあったりするが、基本的には偽物である。

理想的な(というか普通の)ジョギングは、スイッチを押している間だけ設定したフィードレートで動くという機能なのだが、Grbl はGコード単位でしか駆動信号が出せないため、このような挙動ができない。

オフィシャルな解決方法

https://github.com/grbl/grbl/wiki/Interfacing-with-Grbl にもFAQ的に書かれている。ここで書かれているのは、planner buffer queue size (設定すると status として出力できる) を見ながら、一定のキューサイズを保つ、という方法である。

しかしこの方法には以下のような問題がある

  • planner buffer queue size を status に表示させるのが面倒
    • 毎回 $コマンド送るの?みたいな
  • キューサイズを決めるのが難しい
    • 少なすぎるとスムーズに送れず、多すぎると止まるまで時間がかかる
  • どっちにしろ入れたキューは消せないため、うまくやらないと止まるまで時間がかかる

Hold & Reset

次に思いつくのは Hold してから Reset するという方法である。Grbl は Hold など一部のコマンドはリアルタイムで処理されるため、キューサイズに影響されない。

つまり、動いているときに Hold させて即時停止させるということは可能。そしてその状態から Reset を行えばキューをクリアできるため、実質的にジョギング相当になる。

しかしこの方法には以下のような問題がある

  • Hold -> Reset の遷移が安定しない
    • Reset during cycle エラーがでたりする (位置がずれてる可能性がありますよということ)
  • Hold → 実際の Hold までディレイがある場合 (ネットワーク経由でHoldするとか) 停止までの時間が安定しない

ということで使えない。

インターバル方式

ということで別の方法を考えた。これは1つのGcodeあたりの実行時間を一定とし、一定時間ごとにキューイングする方式。

理想ジョギングはステップ単位で進むわけではなく、フィードレートのみに依存しているわけで、それに近い挙動をすることができる。

インターバルは Grbl へ送信してキューに入るまでの時間よりも長い時間をとる必要がある。ネットワーク経由だと少し大きめに設定する。

例えば 0.3sec インターバルでフィードレート800mm/minで送る場合、4mm ずつ送ることになる。

この方法のメリットは

  • 一定時間(インターバル)以内に必ず動作が止まる
  • 追加の設定が必要ない
  • 実装が簡単

デメリットは

  • インターバルよりもキューイングに時間がかかった場合スムーズに送れない

ぐらい。

実際のインターフェイス

実際はステップジョギングと可変フィードレートを併用できるのほうが嬉しいため、以下のような挙動にした。

  • マウスダウン直後は1ステップ送る
  • 終了後1秒間そのままでいるとステップから計算した可変フィードレートで上記インターバル方式のジョギングを行なう

かなり自然なジョギングができるようになって満足

  1. トップ
  2. tech
  3. Grbl でのジョギング

シェーダープログラムはGPU内で動く。性質上並列(parallel)に実行される。

vertex shader

頂点ごとの処理内容。線分だったら始点と終点。頂点の最終的な位置を決定する。ついでに頂点ごとの属性 (attribute) から fragment shader に渡すものをどうするか決めたりする。

最終的に gl_Position にスクリーン座標を代入する。

fragment shader

ある断片ごとの処理内容。線分だったら始点から終点までの各要素を分割した1要素 (線分をレンダリングしてピクセル単位にしたときのピクセル単位)

最終的に gl_FragColor に vec4 型で色情報を代入する。

varying として vertex shader から渡された値は、各断片ごとに値が変更されて渡ってくる。

gl_FragCoord という変数があり、これには実際に処理しようとしているピクセル座標が入ってくる (スクリーン座標系)

gl_FragCoord から元の世界座標系を計算するのは面倒なので、fragment shader で世界座標系が欲しい場合 varying で座標を渡すのがてっとりばやい。


varying variables

varying は vertex shader と fragment shader とを繋ぐものだが、vertex shader でセットした値がそのまま fragment shader に渡るわけではない。fragment shader に渡るときに該当する fragment について計算された値が渡ってくる。

https://www.opengl.org/sdk/docs/tutorials/ClockworkCoders/varying.php

  1. トップ
  2. tech
  3. GLSL の覚え書き

ちょっと前に掘った


SketchUp と、歯車描画プラグインで書いて SkechUCam で gcode にしたけど、ぴったりサイズにしたらハメるのが硬すぎて厳しかった。細かい凹部はエンドミルでは削れないというのもありそう。

歯車描画プラグインは、ものによって SketchUCam と相性が悪くて使えなかったりする…… 機能がすくなそうなやつのほうがうまくいくっぽい。

  1. トップ
  2. tech
  3. CNC フライスで遊星歯車装置を掘った

複数シャンク径を使いわけたい場合、都度コレットを交換する必要がある。ググってみてもいまいち正しいやりかたが出てこなくて歯痒いが、以下のようにすると交換できる。

コレットナットを軸からはずす

普通に緩めて外すだけ

ナットからコレットを外す

コレットをちょっと押してみると、ナットの位置によって傾むくほうと傾かないがあることがわかる。

傾むくほうを下にして、そのまま下に少し強めに押すと外れる

傾かない状態

傾いた状態

ナットにコレットをつける

ナットの内側をよくみると、コレットの溝にはまるようにリングがついていることがわかる。そしてそのリングが一方が深く、一方が浅いようになっている (偏心している)

なので、深いほうを先に入れ、浅いほうに向けてコレットを押しこむとつけられる。

ナットを軸につける

普通に締めるだけ

いちいちナットにコレット脱着するのが面倒だ!!

ナットだけ追加で買って、1コレット1ナットをセットにしてしまうのが早い。これなら、緩めて別のナットをつけるだけですむ。

  1. トップ
  2. tech
  3. ER11 コレットの交換方法

CNC フライスで基板をつくる | tech - 氾濫原 の続き

穴開け用の φ0.5mm刃長1mmのエンドミルを入手したので、0.8mm 厚の基板で試した。

条件

配線パス切削:Vカッター (前回と同じもの)

  • S10000 F200 (前回と同じ)
  • 両面テープ固定 (前回はクランプ)

なぜかバリも全くでずに綺麗にできた。やはり両面テープのほうがZ軸が安定する。両面テープは切削対象部分にはできるだけ全部貼ったほうがいい(ビビらないように)

穴開け・外形切削:φ0.5mm 刃長1mm

  • S10000 F80
  • 0.9mm 厚まで切削

で綺麗にいった。

メモ

これとは別にもう一枚切削したが、そちらはちょっとZが安定しなかった。おそらく両面テープ不足。また、バリがかなり出てしまった。ビビったせいかもしれない。とにかく、固定はしっかりしたほうがいいっぽい?

φ0.5mm のエンドミルはかなり扱いが怖い。φ0.8のミルも注文したけどまだ届いてない。

0.8mm厚だと切削したパスが表面から透けて見えるので、部品の配置がやりやすい。1.6mm よりいいかも?

  1. トップ
  2. tech
  3. CNC フライスで基板をつくる 2

プリントしないプリント基板 (PCB) とやらです。

現状


ふとやってみよう、と思ったので、0.8mm のエンドミルを使うべきところ (穴あけ) に 1mm のエンドミルを使っており、ランドが消滅していたりする。実際はシミュレーションとほぼ同じように削れたので、0.8mm にすれば解決するだろう。

Eagle -> G-code

Eagle -> G-code は直接出力する ULP が公開されているものがあったので、これを使ってみた。キデッジ メイカーズ ブログ -卓上CNCでプリント基板を簡単に作ろう!- CNCとEAGLEによる片面プリント基板の自作法!, キデッジ メイカーズ ブログ -卓上CNCでプリント基板を簡単に作ろう!- ドリル、外周カット用ULP version2!

これらのうち以下だけを使った。

  • 1_linepattern_gcode_bottom.ulp
  • 2_drill_holes_cutoff_v2.ulp

1_linepattern_gcode_bottom.ulp

  1. スピンドルスピードが設定されておらず回転しないでぶつかるぞ

X軸を中心に反転した座標で吐かれるので、Y軸原点にオフセットが必要 (X軸は+方向に、Y軸は-方向に進む)。左下が (0, 0) なら、左上 (0, +Y) を作業座標としてゼロにセットする必要がある。

--- 1_linepattern_gcode_bottom.txt	2015-09-07 01:19:30.000000000 +0900
+++ 1_linepattern_gcode_bottom.ulp	2015-09-06 23:23:36.000000000 +0900
@@ -42,7 +42,7 @@
 //////////////////// ユーザー設定 ////////////////////
 //////////////////////////////////////////////////////
 
-string  DefaultSuffix   = "_bot.tap";   //お使いのCNC似合わせた拡張子に変更してください
+string  DefaultSuffix   = "_lines.gcode";   //お使いのCNC似合わせた拡張子に変更してください
 real    Width           = .3;           //実際に削る線幅を指定してください
 real	Lift            = 1;            //空中移動時の高さを指定してください
 real	Depth           = .1;          //実際に削る深さを指定してください
@@ -129,7 +129,7 @@
          printf ("G0Z%2.3f\n",Lift);
 //         printf ("G0Z0.23\n");
          printf ("G0X0Y0\n");
-         printf ("M03\n");
+         printf ("S10000 M03\n");
          printf ("\n");
          printf ("(Begin)\n");
 }

2_drill_holes_cutoff_v2.ulp

  1. G90 が指定されておらず、機械側のモードがG91だと死ぬぞ
  2. 最初に原点復帰しないせいで原点以外から再開しようとすると死ぬぞ
  3. スピンドルスピードが設定されておらず回転しないでぶつかるぞ

dtool 以下の穴についてはG-codeが生成されない。cut_up がなんかおかしくてエンドミル一本折ったので少し大きめに指定するといいでしょう……

--- 2_drill_holes_cutoff_v2.txt	2015-09-07 01:19:20.000000000 +0900
+++ 2_drill_holes_cutoff_v2.ulp	2015-09-07 00:16:18.000000000 +0900
@@ -12,13 +12,13 @@
 //////////////////// ユーザー設定 ////////////////////
 //////////////////////////////////////////////////////
 
-string  DefaultSuffix   = "_cut.tap";           // お使いのCNC似合わせた拡張子に変更してください
+string  DefaultSuffix   = "_cuts.gcode";           // お使いのCNC似合わせた拡張子に変更してください
 real    dtool           = 0.8;                  // エンドミルの直径を指定してください
 real    zstep           = 0.4;                  // Z軸のステップ値を指定してください
-real    depth           = -1.5;                 // 基板の厚さを指定してください
-int    fvalue          = 200;                   // XY軸のF値を指定してください
+real    depth           = -1.7;                 // 基板の厚さを指定してください
+int    fvalue          = 80;                   // XY軸のF値を指定してください
 int    z_fvalue        = 50;                    // Z軸のF値を指定してください
-real 	cut_up 		= 1;  			// 空転移動時の高さを指定してください
+real 	cut_up 		= 2;  			// 空転移動時の高さを指定してください
 int     drill_cut       = 1;                    // 取り付け穴のパスが必要ない場合は0にしてください
 int     drill_on        = 1;                    // エンドミルによるドリルのオンオフ
 int     pecker_mode     = 1;                    // キツツキドリルのオンオフ
@@ -764,7 +764,10 @@
   {
     line_counter();
     checkturn_right_or_left();
-    printf("T2 M06 S0 M03\n");
+    printf("G90\n");
+    printf("G0Z2\n");
+    printf("G0X0Y0\n");
+    printf("T2 S10000 M03\n");
     
     if (drill_cut == 1)
     {

他人がつくったG-Code生成器は本当に良く良く確認したほうがよくて(確認したつもりでもつらいことがおきる)、特に以下は絶対にチェックする必要がある

  • OpenSCAM で開いて意図した通りのパスになっているか
  • 冒頭らへんに座標指定 G90 があるか (G90=絶対座標, G91=相対座標)
  • 冒頭らへんに原点復帰 (G0Zxx, G0X0Y0) があるか
  • 冒頭らへんに M3 S10000 とがあるか
  • G-code 全体を見て、X軸Y軸が増えていくか減っていくか。(作業原点の設定位置に関わる)
  • 実行直前に G-Code 実行器 (grbl) をリセットすること

OpenSCAM で確認したから安心、とはいかない。G-Code 実行器はモーダルなため、何かしらの状態が残っていると困ったことになることがある。

そして、座標指定まわりがおかしいと、本当にとんでもないことになるので一旦 Z 軸をあげた状態で動かしてみるといい。

実際の切削

基板をしっかり固定するのが重要なのは言うまでもないけど実際難しい。基板自体が反ってしまっている場合、両面テープで貼ろうとしてもどうしても浮いてしまうし、クランプするとクランプした周辺だけ浮かない状態になって削れなくなってしまう。

切削で楽をしようとするなら、基板作成の段階のデザインルールで0.5mmぐらいのルールをしくのがよさそう。ユニバーサル基板の代わり(自動配線したいだけ) なら、このほうが圧倒的に楽

あと処理

結構バリがでるのでなんらかの方法でとりたい。

  1. トップ
  2. tech
  3. CNC フライスで基板をつくる

コネクタの種類は実際のところ大量にあって、しかもはっきりしたデファクトスタンダートっぽいものもあまりない。というか異種接続防止のためか意図的に規格の異なるコネクタがたくさん使われている。

よく見るコネクタ (入手性がよい) を調べた

あとは、汎用端子にハウジングをつけたもの T型コネクタ とかがある。

ENGINEER エンジニア 精密圧着ペンチ 圧着工具 オープンバレル バレルが長い 端子 PA-21 - ENGINEER

ENGINEER

5.0 / 5.0

圧着端子の圧着にラジオペンチ使うのはだんだん嫌気がさしてくるのでさっさと汎用品を買いましょう (圧着端子メーカー純正に比べればアホみたいに安い)

  1. トップ
  2. tech
  3. 汎用コネクタ

個人で何か開発するなら、何らかのプロダクトに対する哲学が必ずあるはずだと考える。「作りたいから作った」はそうだけど、「作りたい」という気持ちには必ずなぜ作りたいと思ったかの理由があり、突き詰めると自分の根本的な考えかたが出てくるはずだと考える。

WebAudio で入門する 信号処理

メインセッションは、いつも20分枠に応募して、かなり説明をはしょりまくってもギリギリ、という感じだったので60分(50分)にしてみたのですが、時間配分が難しくて結局あわあわしてしまいました。これならもっと切りつめて20分のほうがメリハリがあってよかったので、大変大変反省しています。

いちおう少しでも面白いという反応が頂けのがよかったです。少しでも WebAudio 面白そうということで手を出していただければ幸いです。

LT コミュ力あげてこ

音量がうまくでないトラブルがありご心配をおかけしました。接続テスト時にネタバレをしたくなかったので、別のツールで「音が出る」ことだけを確認して、音量ならいくらでもあがるやろwwwと思っていたら全然あがらなくてあせりました。

本当は 1.5分ぐらいひたすらモールス聞きとり(説明しませんでしたが、流れてくるモールスの聞きとりをやっていたのです)をやろうと思ったのですが、トラブルで時間をとられたので早々に諦めました (音が出た時点でデオチなので)。

ネタですがモールスやったらいいのにというのはマジ

YAPC::Asia Tokyo 2015

今回あんまりセッションを聞けなかったので、動画の公開を楽しみにしたいと思います。

とりあえず CONBU さんの LT が最高に面白かったし、衝撃的すぎて良かった。LT でいっぱい人が出てくるという発想がまず全くなかったのでやばかった。

あと、今回は LT のドラの前に終わる人が多いように感じた。自分もそうだけど焦りすぎたかもしれない。結構、20分トークぐらいのをLTで圧縮する(そしてドラがなる)というのが例年あった気がするけど、リジェクトコンとかが充実してきてそういうのがなくなったのかもしれない。

最後の YAPC::Asia Tokyo、牧さんはじめスタッフのみなさん本当にありがとうございました。

  1. トップ
  2. tech
  3. YAPC::Asia Tokyo 2015 - 「WebAudio で入門する 信号処理」「(LT) コミュ力あげてこ」

まっとうな人生を送るにはCNC フライスが必要だと思ったので、買った。

CNC Sable-2015 というやつで、本体・スピンドル・制御基板・電源など一式セットで10万円ぐらい。

これのほかに必須なのは

  • エンドミル
  • 固定用の何か (両面テープとかバイスとか)
  • USB 用のインターフェイス

10pcs エンドミル 1.0mm - SODIAL(R)

SODIAL(R)

4.0 / 5.0

ニチバン 強弱セロハン 両面テープ セルタック 15mm×20m CW-D15 - ニチバン(Nichiban)

ニチバン(Nichiban)

4.0 / 5.0

Grbl - USB G-code 実行

Grbl はシリアル経由で G-code を与えると制御用信号を生成してくれるファームウェアで、オープンソースで開発されている。Arduino に書きこめば動いてくれる。Arduino Nano 互換ボードに書きこんで使っている。

CNC 用のステッピングモータ制御基板は、古来からパラレルポート (という名のGPIO) をインターフェイスにしているが、現代のコンピュータにはパラレルポートは存在していないため、制御信号をコンピュータで直接つくるのではなくマイコンにやらせる、という感じ。

書きこんで設定すれば動くので特筆するようなことはない。

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=1 (dir port invert mask:00000001)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=50.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=25 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=1066.667 (x, step/mm)
$101=1066.667 (y, step/mm)
$102=1066.667 (z, step/mm)
$110=800.000 (x max rate, mm/min)
$111=800.000 (y max rate, mm/min)
$112=800.000 (z max rate, mm/min)
$120=150.000 (x accel, mm/sec^2)
$121=150.000 (y accel, mm/sec^2)
$122=100.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=150.000 (y max travel, mm)
$132=60.000 (z max travel, mm)

仕様通りに設定すればちゃんと動いた。

配線の回路図

とりあえず仮でリミットスイッチを強力な両面テープを使ってつけており、ホーミングも実際は有効にしている。

緊急停止ボタンは、一番最初のうちからつけておくべき。うっかり操作をミスったときにとても便利。だいたい機械側からガガガガ〜とか音がなるとパニくるので、停止ボタンだけはとにかく物理ボタンで目立つようにすべき。

ちなみにこの緊急停止ボタン、中国製の安いの買ってみたら接点が接触しないという、用途的に致命的だろという欠陥製品だった。一旦分解して接点にハンダ盛ったした……

ノイズ対策

制御基板まわりや Arduino まわりがデリケートで、スイッチング電源の近くに置くとちょいちょい誤動作することがあった。距離を離しつつパッチンコアを入れて対応したら完全に大丈夫になった。

防音箱

動かしている間結構なお点前の音を出すのと、安全性のため、最初から箱を作ろうと考えていた。

仕様に書いてあるサイズを信用できなかったので、届いたものの稼動範囲や、でっぱりを調べたところ、内径として

   H=420mm
   W=410mm
   D=530mm

ぐらいは必要ということがわかった。スピンドルのでっぱりがかなり大きかった…

一旦箱の全景を SketchUp でモデリングしたあと、板取図も SketchUp でおこし、エコモクという通販サイトにカットを依頼した。


かなり正確にカットされたのがきて良かった。板さえ完璧に切れていれば組立は一瞬なので最高。

材質はパーティクルボード。MDF よりも若干比重が高く (遮音性が高いということ)、そして安価なのでこれにした。板は安いが配送料がどうしても高くなる。

防音箱の下にはゴムの防振パッドをしいている。

また、中身に吸音シート (ホワイトキューオン) を貼っている。ホワイトキューオンは50mm厚のやつを裂いて4分の1にしてある。最初吸音材は貼らないつもりだったけど、実際やってみると共鳴音っぽい響きをしてしまったので結局入れた。

東京防音 吸音・防音材 ホワイトキューオン ESW-415 415mm×910mm×厚50mm 1枚入 - 東京防音

東京防音

5.0 / 5.0

東京防音 防音戸当たりテープ TP-25 黒 幅15mm×長2M×厚2.5mm 2本入 - 東京防音

東京防音

3.0 / 5.0

東京防音 防振マットTI-505V4黒 - 東京防音

東京防音

3.0 / 5.0

扉は、スペースに余裕がないため観音開きにし、マグネットキャッチによってできるだけぴったり閉まるように調整をした。最初、ローラーキャッチで試してみたけど、キャッチの力が弱くてダメだった。マグネットキャッチのほうが保持力が強いみたい。

LED のライトもつけてある。秋月で250円で売っているやつ。普通の部屋用のLEDライトだとオーバースペックだよなと思って試してみたけど正解だった。ちょうどいい。micro USB 端子から直接12Vに昇圧できるボードを入れて、配線を簡単にした。

制御まわり

別のエントリを書く

500 Can't connect to lowreal.net:443 (certificate verify failed)

  1. トップ
  2. tech
  3. CNC フライスを買った。

Grbl を使うのはいいとして、Grbl をコントロールして G-code を送りこむプログラムと、そもそも G-code を生成するプログラムなどが必要になってくる。

最初は Using-Grbl にある通り Universal G-code Sender を使ってみたのだけど、最低限の機能はあるんだけど、いまいち自分の要求が満たせなかった。このページの他のも見てみたけど、実装が微妙だったりしたので、結局自分で書いた。

GrblServer


https://github.com/cho45/GrblServer

そもそもやりたいこととして

  • 無線でジョギング(手動でXYZを動かす)
    • スマフォとか
  • 複数の端末で同時に表示を行いたい
    • 箱の近くのRaspiと、ネットワーク上の別のPCとか

で、これらを実現するため

  • シリアルポートで Grbl を通信しつつ WebSocket を喋るサーバ
  • そのサーバと通信して制御するHTMLのビュー

を作った。前者は nodejs、後者は Polymer を使って実装している。

実際の使用

Grbl のサーバはネットワークに繋げた Raspberry Pi で動かしている。WebSocket は same-origin ポリシーとかがないので、LAN 内なら接続を許可するようなコードにしてある (つもり)

サーバさえ立っていれば、LAN 内のどの端末でも Grbl を制御できるので、PC 上で G-code を作ったやつを実行させたり、スマフォで開いてXYZを手動で動かして原点を出したりとできる。自分的には現時点でそこそこ満足いく構成になっている。

G-code 生成ソフト (CAMソフト)

別のエントリを書く

CNC フライス、G-code 生成・CAM・CADソフト編 | tech - 氾濫原

  1. トップ
  2. tech
  3. CNC フライス Grbl 制御編

G-code 流しこむまではいいとして、そもそもG-codeを用意できなければならない。

無料なのも有料なのもいろいろあるが、簡単すぎるのから難しすぎるのまでピンキリで選定が難しい。

結論からいうと SkechUp MAKE を CAD として使用し、SketchUcam という SkechUp 用の CAM プラグインを使って G-code に落としこんでいる。

SketchUcam の勘どころ

SketchUcam は基本的に 2.5D CAM なので、パスの設定は完全に平面でなければならない。(Z軸方向の高さがあってはならない)

また、設定したセーフエリア外のオブジェクトは完全に無視される。SketchUp 上の複数の図面を書いたうえで、セーフエリアだけを動かせばそれぞれ別の G-code として生成できる。

2段以上の加工を行う場合、SketchUcam では一発で生成できないので、図面コピー + 切削条件再設定が必要。セーフエリアを動かして複数回 G-code 生成を行って、連結する。

SketchUcam でワーキングポジション設定

SketchUCam はセーフエリア(機械稼動範囲)の設定ができるが、セーフエリア左下に常に原点が固定されてしまう。しかし実際は「ここを中心(原点)にして機械を動かしたい」という場合がある。

可能なら任意の点を原点にできればいいんだけどできないので、オフセットを設定するしかない。

セーフエリア内の適当なところ(中心とか)にオブジェクトを起き、機械側でも原点まで移動させたあと、ゼロリセットではなく、オフセット分のリセットを行う。

例えば、セーフエリア原点から 50mm, 50mm オフセットした位置を中心にして図面を書いた場合、機械側の原点あわせは、中心点を手動であわせたあと、G10 P0 L20 X50 Y50 とか送ればいい。

生成済み G-code の確認方法

ビューの状態によってオブジェクトが出力されたりされなかったりするので、生成した G-code は必ず確認が必要。

この用途だと OpenSCAM が良さそうなので使っている。

  1. G-code を出力したら、 OpenSCAM 側でそのファイルを開く。
  2. OpenSCAM の Workpiece Settings を Manual にし、切削対象の大きさにあわせる
    • 最低でも Z 軸は正しくしないといけない。1mm厚で原点を上に設定する場合 Z Dimension は 1.00000, Offset は -1.00000 になる
  3. Tool View を選択し、エンドミル直径を変更する
  4. Simulation View の下側にある Rerun simulation ボタンを押す

特に Z 軸方向のチェック、例えば貫通すべきパスが貫通しているかとかをちゃんとチェックする。

出力しなおした場合、Rerun simulation すれば再度リロードされる。

これで正しく切削できそうなのが確認できればいよいよ実際に切削できる。

  1. トップ
  2. tech
  3. CNC フライス、G-code 生成・CAM・CADソフト編