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

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:3Dプリンター「3Dグレコ」でイロイロDIY

 Keyword:Amazon/122



■ ■ ■ コメント ■ ■ ■

いいっすね!=39
001 [04/09 17:11]55mmF3.5:柱を中央部分のみにしたらいけるんじゃないですか?ど真ん中に太めの柱建ててそこから横方向に梁を出してレールを支える感じ。 (8)
002 [04/09 18:18]ふぇちゅいん(管理人) TW★66:>>001 そりゃ、ありかもしれんな!!!! (8)
003 [04/09 21:23]j:せっかく3D CADなので、大きめの車両をモデル化して、出力前に走らせたら干渉するかどうか見てみてはどうでしょうか。 (6)
004 [04/09 22:41]匿名さん@Dion:片手で支持するとなると、それなりに太い梁でないとプラレールの通過するショックでポキッといきそう。 (3)
005 [04/10 10:16]>横方向に梁を出して:上下反転してだせば、サポート材もなくていけるかもね (4)

名前 ↑B

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

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


デルタ型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) (コメント数)