3Dプリンターで作ったDIYレールで、プラレールを高い位置まで導く試み(失敗)
カテゴリー:#DIYプラレール(記事数:26)

2018.04.09

3Dプリンターで作ったDIYレールで、プラレールを高い位置まで導く試み(失敗)



 これまでにレールの軌跡を指定するとそのルートに従いプラレールのカスタムレールを出力するOpenSCADスクリプトを作ってきました。2D平面のレールは自在に出力可能になり、レール幅など少しカスタムすることで半径5cmの急カーブを曲がれるレールが作れることが分かりました。↓

 次にこのレールを用いて、らせん(スパイラル)状に高度をあげて、プラレールを高い位置まで省スペースでもっていけるレールを作ろうと思います。作ったモデルは↓(※下記は分割の細かさを最終モデルから少し落としています。うちのパソコン非力なんで編集時は落としている(^^;))


OpenSCADのソースコードは↓です。

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

pitch=1/72;
wall_body=12; // normal=8
innerwall_body=3; //normal=1/5
wall=6;
width=41;

//main /////////////////////////////////////////////
for (t=[0:pitch:1-pitch]){
body(t2xyz(t),t2xyz(t+pitch),t2xyz(t+pitch*2),t);
}
in2(t2xyz(1),t2xyz(1+pitch),t2xyz(1+10.3/360),t2xyz(1+10.3/360+pitch));
out2(t2xyz(0+pitch),t2xyz(0),t2xyz(0-10.3/360),t2xyz(0-10.3/360-pitch));
poll(t2xyz(0),t2xyz(0+pitch));
poll(t2xyz(0.25),t2xyz(0.25+pitch));
poll(t2xyz(0.5),t2xyz(0.5+pitch));
poll(t2xyz(0.75),t2xyz(0.75+pitch));

Cyl2();
////////////////////////////////////////////////////
function t2xyz(temp)=[50*sin(temp*(360-10.3)),50*cos(temp*(360-10.3)),temp*60];

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)))];

//poll
module poll(pos1,pos2){
Dir=pos2-pos1;
posO=pos1+XY(Dir,0,width/2+1.5);
translate([posO[0],posO[1],0]){
Cyl();
}
posI=pos1+XY(Dir,0,-width/2-1.5);
translate([posI[0],posI[1],0]){
Cyl();
}
}

//cylinder
module Cyl(){
difference(){
cylinder(r=3,h=60);
{
cylinder(r=2,h=5);
translate([0,0,5]){cylinder(r1=2,r2=0,h=5);}
}
}
translate([0,0,60]){cylinder(r=1.5,h=5);}
}

module Cyl2(){
cylinder(r=3,h=5);
cylinder(r=10,h=2);
translate([0,0,5]){cylinder(r=1.5,h=5);}
}


// body
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)]);
if (round(tt*360/10)==round(tt*360)/10){
polygon(points=[pos1+XY(Dir1,0,8),pos1+XY(Dir1,0,-8),pos2+XY(Dir2,0,-8),pos2+XY(Dir2,0,8)]);
}
// polygon(points=[pos1+XY(Dir1,0,width/2),pos1+XY(Dir1,0,-width/2),pos2+XY(Dir2,0,-width/2),pos2+XY(Dir2,0,width/2)]);
}
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 out2 (pos1,pos2,pos3,pos4){
//start out
Dir=pos3-pos1;
Dir1=pos2-pos1;
Dir2=pos4-pos3;
//hiraban
translate([pos2[0],pos2[1],pos2[2]]){
linear_extrude(height = 1.5,center=true){
polygon(points=[XY(Dir1,0,-3),XY(Dir,7.5,0)+XY(Dir2,0,-5),XY(Dir,7.5,0)+XY(Dir2,0,-1),XY(Dir,1,0)+XY(Dir1,0,-1),XY(Dir,1,0)+XY(Dir1,0,1),XY(Dir,7.5,0)+XY(Dir2,0,1),XY(Dir,7.5,0)+XY(Dir2,0,5),XY(Dir1,0,3)]);
}
linear_extrude(height = wall,center=true){
polygon(points=[XY(Dir1,0,3),XY(Dir,-1.5,0)+XY(Dir1,0,3),XY(Dir,-1.5,0)+XY(Dir1,0,8),XY(Dir1,0,8),XY(Dir1,0,4.5),XY(Dir,9,0)+XY(Dir2,0,6.5),XY(Dir,9,0)+XY(Dir2,0,1),XY(Dir,7.5,0)+XY(Dir2,0,1),XY(Dir,7.5,0)+XY(Dir2,0,5)]);
polygon(points=[XY(Dir1,0,-3),XY(Dir,-1.5,0)+XY(Dir1,0,-3),XY(Dir,-1.5,0)+XY(Dir1,0,-8),XY(Dir1,0,-8),XY(Dir1,0,-4.5),XY(Dir,9,0)+XY(Dir2,0,-6.5),XY(Dir,9,0)+XY(Dir2,0,-1),XY(Dir,7.5,0)+XY(Dir2,0,-1),XY(Dir,7.5,0)+XY(Dir2,0,-5)]);
}}
}

module in2 (pos1,pos2,pos3,pos4){
//start in
Dir=pos3-pos1;
Dir1=pos2-pos1;
Dir2=pos4-pos3;

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

-----------------------------------------------


 前回のスクリプトから、立体出力するためにt2xy()という関数をt2xyz()に拡張してます。また、これまでレールの端の凹凸連結部はどんな曲線のレールであっても、直線で出力していたのですが、直線だとスパイラルに上っていくレールどうしの連結に問題が出るので、連結部自体も曲線に従って出力出来るように改造しています。(直線でも出力可能。曲線にすると、どんなレールどうしでも連結可能という汎用性が失われてしまうので悩ましいのですが)

 さらにスパイラル360度一周するレールを8本の支柱で支えています。支柱は縦方向に連結可能にして、上端に凸構造の差込部、下端に凹構造の差込部(サポート材が出来ないように中の空洞を円錐構造に加工してあります)。

↓3Dプリンターで出力したところ。フィラメントの使用量は130g、材料費として250円ぐらいかな。しかし、ほとんどサポート材なのでもったいないです。う~ん。


↓サポート材を外したところ。大量のゴミ(サポート材)が勿体ないです。溶かしてフィラメントを自分で作る装置が欲しいね。



 このモデルの改善点としては、使用フィラメント量を減らすためレール中央部分を空洞にして10度に1度だけ左右を連結しているのですが、これだと弱すぎました。サポート材を外している時に1か所パキっと綺麗に取れてしまった。まびいて、30度に3度だけつなぐよう太くするのが良いかと。また出力時のトラブルで支柱が少し歪んでいるところも、デザインを改善するか、または、出力速度を遅くする(今回は出力速度を60mm/s)のがよさそうです。その他は最初の出力にしては特に不具合も無く良い感じだったのですが・・・・

↓プラレール乗せたところ

 大失敗、プラレールの車両がデカすぎて、支柱の間を通れませんw。車輪部分はレール幅を広げるなどして通れるようになりまししたが、車輪より車体の方が断然大きいのをすっかり考えていませんでした。

 今回の失敗はかなりイタイです。というのも。今回出力したこのスパイラルオブジェクトは支柱部分も併せてちょうど直径15cm。うちの3Dプリンターで出力出来る限界サイズだからです。(半径5cmが曲がれるようにこだわったのはこれが理由です)。

 どうやらスパイラル1周分を分割出力する必要がありそうです。う~ん。120度ずつ出力かな。分割したパーツの連結も考え、上部のパーツを保持する支柱も設計しないといけないのでかなり面倒です。う~ん。面倒になってこのプロジェクトは一時塩漬けにしそうな予感。ちょっと未定です。ただ、OpenSCADでのモデリングは紙とペンで考えることも多いし、電車での移動時とかの暇つぶしに良いので進めるかもしれません。

 少し今後どうするか考えます。↓デカい(直径25cmまで出力OK)3Dプリンターが組み立て式だけど35000円(Aliexpressの値段、下記はAmazon)で買えるので、3Dプリンターをアップデートして解決するのも手かなw。置き場所に困りそうだけど。

Category:#DIYプラレール



■ ■ ■ コメント ■ ■ ■

いいっすね!=9

名前 ↑B

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

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

本カテゴリーで直近コメントが書かれた記事
04/29 10:41:DIYカスタムプラレール売りに出しました!484306分前
03/23 01:08:お花見仕様のピンク水玉カスタム幾何学プラレール。by多色3Dプリンター。ちゃんと走るよ動画373日前
03/04 20:54:ピンクの水玉プラレールを大量製造中391日前
02/17 12:54:Bambulab A1 miniの多色出力でピンクの水玉のプラレール!408日前


→カテゴリー:#DIYプラレール(記事数:26)
本カテゴリーの最近の記事(コメント数)
2024.04.28DIYカスタムプラレール売りに出しました!11コメ
2024.03.22お花見仕様のピンク水玉カスタム幾何学プラレール。by多色3Dプリンター。ちゃんと走るよ動画38コメ
2024.03.02ピンクの水玉プラレールを大量製造中5コメ
2024.02.16Bambulab A1 miniの多色出力でピンクの水玉のプラレール!26コメ
2022.02.18俺のゴーストがこれを3Dプリンターとプラレールで再現しろと言っている8コメ
2021.04.05DIY幾何学プラレール第3弾【出力データあり】。これも美しいなぁ♪2コメ
2021.01.11DIY幾何学プラレール第2弾(メルカリに出品中)91コメ
2020.12.24幾何学DIYプラレール2020年12月最新版【3Dプリンタ用データ(stl)有り】21コメ
2020.03.05DIY幾何学プラレール3Dプリント用データ(.stl)公開(ver.2020.02.29)。完璧じゃないけど56コメ
2019.12.19DIY幾何学プラレールの外周部脱線多発ゾーンの要因分析71コメ

譛€霑代�蟶ク騾」縺輔s
10蟷エ驕ク謇�笘�48縲€莠ャ繝昴Φ3B(諢丞慍縺ァ繧ゅお繝�ず)笘�40縲€縺吶″繧�″笘�77縲€笘�笘�45縲€縺オ縺�>縺。繧�s笘�2縲€F笘�52縲€縺ェ縺ェ縺励&縺�笘�72縲€orz笘�38縲€繧峨�笘�32縲€繝昴さ笘�346縲€縺ィ縺上a縺�笘�82縲€マ�(縺ッ縺倥a縺ヲ縺ョ縺吶∪縺サ) TW笘�52縲€縺�↓繧�(em縺ァ繝阪け繧オ繧ケ5竊抵ソス)笘�38縲€マ�笘�105縲€縺オ縺�■繧�>繧�(蟷エ蠎ヲ譛ォ縺セ縺」縺溘j) TW笘�95縲€蜷榊商螻矩未隘ソ莠コ TW笘�25縲€繝医け繝。繝シ笘�17縲€umomo笘�2縲€蛹ソ蜷搾シ�笘�28縲€JP笘�26縲€縺オ縺�■繧�>繧薙&繧薙�縺√s(繧�k繧翫f繝ゥ繝ェ繝シ)笘�101縲€逋ス笘�53縲€迚ケ蜻ス縺輔s笘�79縲€縺輔※縺輔※笘�30縲€knob笘�2縲€縺�<(貊�幻闍ヲ闌カ荵�@縺カ繧�)笘�70縲€774(竊仙濠隗偵�縺イ縺ィ)笘�83縲€Dcd笘�83縲€隰�笘�80縲€驟斐b縺舌i笘�41縲€