3Dプリンターで多重交差するプラレールをDIY(OpenSCAD出力スクリプトあり)
カテゴリー:3Dプリンター「3Dグレコ」でイロイロDIY(記事数:64)

2018.06.27

3Dプリンターで多重交差するプラレールをDIY(OpenSCAD出力スクリプトあり)


↓3DなプラレールのDIYが行き詰っているので楽しい方向で遊び中

基本は以前紹介したDIYプラレールOpenSCADスクリプトの応用です。↓
↓頑張って説明Youtube動画作りました↓


少しは動画作り成長してる?

以下、技術的説明です。

↓先日紹介したDIYプラレールのスクリプトを1本設置したところ。


↓もちろん重ねて設置出来ますが、交差部分に壁があり通れません。


↓そこで複数のレールを設置後に、レールの軌跡から車輪走行部分のオブジェクトを作ります(プラレールは両面走行可なので、裏表分作っています。この部分をOpenSCADのdifferenceで差し引きます。


↓完成。


↓こんなメチャクチャに交差しているレールも問題無しです。


スクリプトはこのようになります。複雑になりすぎて正確にプレビューされないし、高速なPC使わないとレンダリングにものすごく時間かかるのは仕様です。

----------------------------------------------------
$fn=10;

pitch=1/72;
wall_body=8; // normal=8
innerwall_body=8; //normal=8
wall=8; //normal=8
width=38; //normal=38

//main /////////////////////////////////////////////
difference(){
body1();
body2();
}

in(t2xyz(1),t2xyz(1+pitch));
out(t2xyz(0+pitch),t2xyz(0));
in(t2xyz2(1),t2xyz2(1+pitch));
out(t2xyz2(0+pitch),t2xyz2(0));
in(t2xyz3(1),t2xyz3(1+pitch));
out(t2xyz3(0+pitch),t2xyz3(0));
in(t2xyz4(1),t2xyz4(1+pitch));
out(t2xyz4(0+pitch),t2xyz4(0));

module body1(){
for (t=[0:pitch:1-pitch]){body(t2xyz(t),t2xyz(t+pitch),t2xyz(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){body(t2xyz2(t),t2xyz2(t+pitch),t2xyz2(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){body(t2xyz3(t),t2xyz3(t+pitch),t2xyz3(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){body(t2xyz4(t),t2xyz4(t+pitch),t2xyz4(t+pitch*2),t);}
}
module body2(){
for (t=[0:pitch:1-pitch]){bodyDelete(t2xyz(t),t2xyz(t+pitch),t2xyz(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){bodyDelete(t2xyz2(t),t2xyz2(t+pitch),t2xyz2(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){bodyDelete(t2xyz3(t),t2xyz3(t+pitch),t2xyz3(t+pitch*2),t);}
for (t=[0:pitch:1-pitch]){bodyDelete(t2xyz4(t),t2xyz4(t+pitch),t2xyz4(t+pitch*2),t);}
}

////////////////////////////////////////////////////
function t2xyz(temp)=[temp*100-50,temp,0];
function t2xyz2(temp)=[temp*70-35,temp*70-35,0];
function t2xyz3(temp)=[temp,temp*100-50,0];
function t2xyz4(temp)=[temp*70-35,-temp*70+35,0];

function XY(angle,Ddis,Vdis)=[
sign(Ddis*angle[0])*sqrt(pow(Ddis,2)/(1+pow(angle[1]/angle[0],2)))+sign(Vdis*-angle[1])*sqrt(pow(Vdis,2)/(1+pow(angle[0]/angle[1],2))),
sign(Ddis)*angle[1]/abs(angle[0])*sqrt(pow(Ddis,2)/(1+pow(angle[1]/angle[0],2)))+sign(Vdis)*angle[0]/abs(angle[1])*sqrt(pow(Vdis,2)/(1+pow(angle[0]/angle[1],2)))];


module body(pos1,pos2,pos3,tt){
Dir1=pos2-pos1;
Dir2=pos3-pos2;
translate([0,0,pos1[2]]){
linear_extrude(height = 1.5,center=true){
polygon(points=[pos1+XY(Dir1,0,width/2),pos1+XY(Dir1,0,9.5),pos2+XY(Dir2,0,9.5),pos2+XY(Dir2,0,width/2)]);
polygon(points=[pos1+XY(Dir1,0,-9.5),pos1+XY(Dir1,0,-width/2),pos2+XY(Dir2,0,-width/2),pos2+XY(Dir2,0,-9.5)]);
polygon(points=[pos1+XY(Dir1,0,8),pos1+XY(Dir1,0,-8),pos2+XY(Dir2,0,-8),pos2+XY(Dir2,0,8)]);
}

linear_extrude(height = wall_body,center=true){
polygon(points=[pos1+XY(Dir1,0,width/2),pos1+XY(Dir1,0,width/2-1.5),pos2+XY(Dir2,0,width/2-1.5),pos2+XY(Dir2,0,width/2)]);
polygon(points=[pos1+XY(Dir1,0,-width/2),pos1+XY(Dir1,0,-width/2+1.5),pos2+XY(Dir2,0,-width/2+1.5),pos2+XY(Dir2,0,-width/2)]);
}
linear_extrude(height = innerwall_body,center=true){
polygon(points=[pos1+XY(Dir1,0,9.5),pos1+XY(Dir1,0,8),pos2+XY(Dir2,0,8),pos2+XY(Dir2,0,9.5)]);
polygon(points=[pos1+XY(Dir1,0,-9.5),pos1+XY(Dir1,0,-8),pos2+XY(Dir2,0,-8),pos2+XY(Dir2,0,-9.5)]);
}
}
}

module bodyDelete(pos1,pos2,pos3,tt){
Dir1=pos2-pos1;
Dir2=pos3-pos2;
train=5;
translate([0,0,pos1[2]]){
translate([0,0,(train+1.5)/2]){linear_extrude(height = train,center=true){
polygon(points=[pos1+XY(Dir1,0,width/2-1.5),pos1+XY(Dir1,0,9.5),pos2+XY(Dir2,0,9.5),pos2+XY(Dir2,0,width/2-1.5)]);
polygon(points=[pos1+XY(Dir1,0,-9.5),pos1+XY(Dir1,0,-width/2+1.5),pos2+XY(Dir2,0,-width/2+1.5),pos2+XY(Dir2,0,-9.5)]);
}}

translate([0,0,-(train+1.5)/2]){linear_extrude(height = train,center=true){
polygon(points=[pos1+XY(Dir1,0,width/2-1.5),pos1+XY(Dir1,0,9.5),pos2+XY(Dir2,0,9.5),pos2+XY(Dir2,0,width/2-1.5)]);
polygon(points=[pos1+XY(Dir1,0,-9.5),pos1+XY(Dir1,0,-width/2+1.5),pos2+XY(Dir2,0,-width/2+1.5),pos2+XY(Dir2,0,-9.5)]);
}}

}
}

module out (pos1,pos2){
//start out
Dir1=pos2-pos1;
//hiraban
translate([pos2[0],pos2[1],pos2[2]]){
linear_extrude(height = 1.5,center=true){
polygon(points=[XY(Dir1,0,-3),XY(Dir1,7.5,-5),XY(Dir1,7.5,-1),XY(Dir1,1,-1),XY(Dir1,1,1),XY(Dir1,7.5,1),XY(Dir1,7.5,5),XY(Dir1,0,3)]);
}
linear_extrude(height = wall,center=true){
polygon(points=[XY(Dir1,0,3),XY(Dir1,-1.5,3),XY(Dir1,-1.5,8),XY(Dir1,0,8),XY(Dir1,0,4.5),XY(Dir1,9,6.5),XY(Dir1,9,1),XY(Dir1,7.5,1),XY(Dir1,7.5,5)]);
polygon(points=[XY(Dir1,0,-3),XY(Dir1,-1.5,-3),XY(Dir1,-1.5,-8),XY(Dir1,0,-8),XY(Dir1,0,-4.5),XY(Dir1,9,-6.5),XY(Dir1,9,-1),XY(Dir1,7.5,-1),XY(Dir1,7.5,-5)]);
}}
}

module in (pos1,pos2,pos3,pos4){
//start in
Dir1=pos2-pos1;
pos3=[pos1[0]+XY(Dir1,9,0)[0],pos1[1]+XY(Dir1,9,0)[1],pos1[2]];
pos4=[pos1[0]+XY(Dir1,9+pitch,0)[0],pos1[1]+XY(Dir1,9+pitch,0)[1],pos1[2]];
Dir2=pos4-pos3;

linear_extrude(height = wall,center=true){
polygon(points=[pos3+XY(Dir2,-9,-8),pos3+XY(Dir2,0,-4.5),pos3+XY(Dir2,0,-9.5),pos3+XY(Dir2,-12,-9.5),pos3+XY(Dir2,-12,9.5),pos3+XY(Dir2,0,9.5),pos3+XY(Dir2,0,4.5),pos3+XY(Dir2,-9,8)]);
polygon(points=[pos3+XY(Dir2,0,width/2-1.5),pos3+XY(Dir2,0,width/2),pos1+XY(Dir1,0,width/2),pos1+XY(Dir1,0,width/2-1.5)]);
polygon(points=[pos3+XY(Dir2,0,-width/2+1.5),pos3+XY(Dir2,0,-width/2),pos1+XY(Dir1,0,-width/2),pos1+XY(Dir1,0,-width/2+1.5)]);
}
linear_extrude(height = 1.5,center=true){
polygon(points=[pos1+XY(Dir1,0,11),pos3+XY(Dir2,0,11),pos3+XY(Dir2,0,width/2-1.5),pos1+XY(Dir1,0,width/2-1.5)]);
polygon(points=[pos1+XY(Dir1,0,-11),pos3+XY(Dir2,0,-11),pos3+XY(Dir2,0,-width/2+1.5),pos1+XY(Dir1,0,-width/2+1.5)]);
}
}
----------------------------------------------------

↓以下にすぐ出力出来る.stlファイルも置いておきます。
↓息子も大喜びで使ってくれています。


楽しく遊べますように

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



■ ■ ■ コメント ■ ■ ■

いいっすね!=13

名前 ↑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(記事数:64) (コメント数)