作りたい形を指定するだけでプラレールのレールの3Dプリントデータを作成するOpenSCADスクリプト
カテゴリー:3Dプリンター「3Dグレコ」でイロイロDIY(記事数:60)

2018.03.01

作りたい形を指定するだけでプラレールのレールの3Dプリントデータを作成するOpenSCADスクリプト

子育てとはこんなにも苦労が多いのか、息子(4歳)の教育が悪かったのか、無いものは作ればよいじゃんと言うようになってしまってパパ大変ですw。


使えない無茶なレールもこの通りw。こういうレールも息子のオモチャ箱に放り込むことで教育になるかもw


まずは手持ちのレールを物差しで測ってサイズを調べます。手書きで失礼、最近雑記帳がソニーのデジタルペーパーDPT-RP1なんです。


レールの軌跡はt[0〜1]で定義するとします。レール中央の部分(body)と飛び出た凸構造部分(out)、凹部分(in)部分の3つに分けます。


t=t1における座標を(x1, y1)とする。この時の進行方向のベクトル、その時の垂直方向のベクトルを一般化。この式を用いて(x1, y1)から垂直方向にD離れた場所の座標(XA,YA)を一般式化、シンプルな式として表せるね。


同様に進行方向にD離れた座標(XB,YB)も簡単な式で表せる。


上記式でスクリプトを組んでいきます。

下記が全スクリプトです。OpenSCADにコピペしたら動きます。$fn=10ってのは3Dモデルをレンダリングする時の解像度を表しています。気にしなくて良し。


-----------------------------------------------------
$fn=10;
function t2xy(temp)=[(30+100*temp)*sin(temp*720),(30+100*temp)*cos(temp*720)];

// sub-routin
function XY(angle,distance)=[Sign(angle[0])*sqrt(pow(distance,2)/(1+pow(angle[1]/angle[0],2))),
Sign(angle[1])*abs(angle[1]/angle[0])*sqrt(pow(distance,2)/(1+pow(angle[1]/angle[0],2)))];
function Sign(temp)=temp/abs(temp);

pitch=0.02;
// body
for (t=[0:pitch:1]){
Dir1=t2xy(t+pitch)-t2xy(t);
Ver1=[-Dir1[1],Dir1[0]];
Dir2=t2xy(t+pitch*2)-t2xy(t+pitch);
Ver2=[-Dir2[1],Dir2[0]];

linear_extrude(height = 1.5,center=true){
polygon(points=[t2xy(t)+XY(Ver1,19),t2xy(t)-XY(Ver1,19),t2xy(t+pitch)-XY(Ver2,19),t2xy(t+pitch)+XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)+XY(Ver1,19),t2xy(t)+XY(Ver1,17.5),t2xy(t+pitch)+XY(Ver2,17.5),t2xy(t+pitch)+XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)-XY(Ver1,19),t2xy(t)-XY(Ver1,17.5),t2xy(t+pitch)-XY(Ver2,17.5),t2xy(t+pitch)-XY(Ver2,19)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)+XY(Ver1,9.5),t2xy(t)+XY(Ver1,8),t2xy(t+pitch)+XY(Ver2,8),t2xy(t+pitch)+XY(Ver2,9.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[t2xy(t)-XY(Ver1,9.5),t2xy(t)-XY(Ver1,8),t2xy(t+pitch)-XY(Ver2,8),t2xy(t+pitch)-XY(Ver2,9.5)]);
}
}
//start out
for(t=[0]){
Dir=t2xy(t+pitch)-t2xy(t);
Ver=[-Dir[1],Dir[0]];

//hiraban
translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 1.5,center=true){
polygon(points=[-XY(Ver,3),-XY(Dir,7.5)-XY(Ver,5),-XY(Dir,7.5)+XY(Ver,5),XY(Ver,3)]);
}}

translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 8,center=true){
polygon(points=[XY(Ver,3),XY(Dir,1.5)+XY(Ver,3),XY(Dir,1.5)+XY(Ver,8),XY(Ver,8),XY(Ver,4.5),
-XY(Dir,9)+XY(Ver,6.5),-XY(Dir,9)-XY(Ver,6.5),-XY(Ver,4.5),-XY(Ver,8),XY(Dir,1.5)-XY(Ver,8),
XY(Dir,1.5)-XY(Ver,3),-XY(Ver,3),-XY(Dir,7.5)-XY(Ver,5),-XY(Dir,7.5)+XY(Ver,5)]);
}}
}
//start in
t=1;
Dir=t2xy(t+pitch)-t2xy(t);
Ver=[-Dir[1],Dir[0]];

translate([t2xy(t)[0],t2xy(t)[1],0]){
linear_extrude(height = 8,center=true){
polygon(points=[-XY(Ver,8),XY(Dir,9)-XY(Ver,4.5),XY(Dir,9)-XY(Ver,9.5),-XY(Dir,1.5)-XY(Ver,9.5),
-XY(Dir,1.5)+XY(Ver,9.5),XY(Dir,9)+XY(Ver,9.5),XY(Dir,9)+XY(Ver,4.5),XY(Ver,8)]);
}
linear_extrude(height = 1.5,center=true){
polygon(points=[XY(Ver,11),XY(Dir,9)+XY(Ver,11),XY(Dir,9)+XY(Ver,17.5),XY(Ver,17.5)]);
}
linear_extrude(height = 1.5,center=true){
polygon(points=[-XY(Ver,11),XY(Dir,9)-XY(Ver,11),XY(Dir,9)-XY(Ver,17.5),-XY(Ver,17.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[XY(Dir,9)+XY(Ver,17.5),XY(Dir,9)+XY(Ver,19),XY(Ver,19),XY(Ver,17.5)]);
}
linear_extrude(height = 8,center=true){
polygon(points=[XY(Dir,9)-XY(Ver,17.5),XY(Dir,9)-XY(Ver,19),-XY(Ver,19),-XY(Ver,17.5)]);
}}
-----------------------------------------------------


スクリプトが出来てしまったので、今後は2行目の

function t2xy(temp)=[(30+100*temp)*sin(temp*720),(30+100*temp)*cos(temp*720)];

を変更すれば色々な形のレールを出力します。関数t2xyが、今回のぐるぐるまわるレールの軌跡を示す関数です。tが0〜1まで動く時に720度回転して、それぞれのx,yの値を返します。

関数XYは距離と傾きのベクトルを与えるとその座標を返します。関数Signは数値がプラスかマイナスかを返します。pitchはbody部分をどれぐらいに分割して出力するかを示します。


まずはbody部分。


out部分。


in部分。


よ〜し、ふざけたレールを量産するぞー。

Category:3Dプリンター「3Dグレコ」でイロイロDIY



■ ■ ■ コメント ■ ■ ■

いいっすね!=45
001 [03/01 15:09]とくめいー@Biglobe:螺旋にするのって難しいの? (9)
002 [03/01 21:08]@InfoWeb:車両が曲がれるサイズの割り出しも難しそう…。 (9)
003 [03/02 02:14]@Biglobe:早く3Dスキャナー買おうぜ。プリンターだけじゃ楽しみ半分だぞ (5)
004 [03/02 12:21]exe:私は3DCADを使って仕事をしているので、プログラムでモデリングする人を見ると素直に凄いと思う。 (4)
005 [03/03 05:32]鈴木:私はこちらに変なレールをいろいろ置いてあります。よろしければこちらもどうぞ。https://www.thingiverse.com/tag:plarail/ (4)

名前 ↑B

コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数:


デルタ型3Dプリンター「3Dグレコ」でうまく印刷するためのTIPS

(1)印刷するためのコード「.gcode」ファイルはフリーソフトCuraで落ちているデータ「.stl」から作れる。
(2)Curaの設定でスタートアップコードにステージの高さをキャリブレーションするためのG29コードを追加する。
(3)ヒートベッドが搭載されていないのでABSは印刷しにくい、PLAの方が綺麗にゆがみなく出力可能。
(3)ABS樹脂でもPLA樹脂でも、ステージには「消え色ピット」をまんべんなく塗り、乾かして使用する。ゴミが溜まってきたらステージを取り外し、水につけると綺麗に取り除ける。マスキングテープをはり、その上に「消え色ピット」を塗るとステージを外して掃除する手間が省ける。
(4)ヘッドが変な動きをしたらモーターとベルトをつなぐイモネジがゆるんでいる可能性があるので締める。
(5)Initial Heightを0.2mmにするとしっかりステージに印刷するオブジェクトが固定される。


(6)印刷前にgcodeファイルをRepetier-Hostなどで確認すると良い、ポイントはきちんとステージに設置しているか、Brimは十分かなど。
ありとあらゆるノウハウがあるのでこのページに書かれている事を最初から最後まで熟読すると良い。

デルタ型3Dプリンター「3Dグレコ」 3DPRTRE2 ※日本語マニュアル付き サンコーレアモノショップ


→カテゴリー:3Dプリンター「3Dグレコ」でイロイロDIY(記事数:60) (コメント数)