半径5cmの急カーブを楽々曲がれる改造プラレールのレールをOpenSCADと3DプリンターでDIY
カテゴリー:#DIYプラレール(記事数:22)

↑B


2018.04.05

半径5cmの急カーブを楽々曲がれる改造プラレールのレールをOpenSCADと3DプリンターでDIY


改造レールですが、もちろん既存のプラレールのレールと連結出来る互換性は維持しています。

Youtuber修行のため動画も作りました↓

前回の検討↓で、内側のレールが無ければ半径5cmのレールも曲がれそうまで分かりましたが、さらに検討を続けました。
結論として
  • (1)レール内側の壁の高さを8mm→3mmに減らし車輪がひっかかるのを防ぐ
  • (2)レール外側の壁の高さを8mm→12mmに増やし脱輪防止
  • (3)他のレールと連結する部分の壁は8mm→6mmに減らす
  • (4)レール幅を38mm→42mmに広げる
ことで、半径5cmの急カーブも曲がれるようになりました。
また
  • (5)他のレールと連結する凸部分がハメにくいと思っていたら、本物のプラレールにあるフレキシブルさを高めるための溝を入れ忘れていたので、追加。
現在のレール作製のためのOpenSCADスクリプトは下記になります。内部変数の最適化が進んでおり大きく変更になっています。t2xy(進行方向のベクトル(x,y),進行方向への増分(mm)、垂直方向への増分(mm))という入力値です。また、OpenSCADに絶対値を求める「sign」という関数が実装されていることに気が付いたので、そちらの関数の利用に変更など色々。


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

pitch=1/72;
wall_body=12; // normal=8
innerwall_body=3; //normal=8
wall=6; //normal=8
width=42; //normal=38

//main /////////////////////////////////////////////
for (t=[0:pitch:1-pitch]){
body(t2xy(t),t2xy(t+pitch),t2xy(t+pitch*2));
}
in(t2xy(1),t2xy(1+pitch));
out(t2xy(0),t2xy(0+pitch));

////////////////////////////////////////////////////
function t2xy(temp)=[50*sin(temp*300),50*cos(temp*300)];

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

// body
module body(pos1,pos2,pos3){
Dir1=pos2-pos1;
Dir2=pos3-pos2;
linear_extrude(height = 1.5,center=true){
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 out (pos1,pos2){
//start out
Dir=pos2-pos1;
//hiraban
translate([pos1[0],pos1[1],0]){
linear_extrude(height = 1.5,center=true){
polygon(points=[XY(Dir,0,-3),XY(Dir,-7.5,-5),XY(Dir,-7.5,-1),XY(Dir,-3,-1),XY(Dir,-3,1),XY(Dir,-7.5,1),XY(Dir,-7.5,5),XY(Dir,0,3)]);
}
linear_extrude(height = wall,center=true){
polygon(points=[XY(Dir,0,3),XY(Dir,1.5,3),XY(Dir,1.5,8),XY(Dir,0,8),XY(Dir,0,4.5),XY(Dir,-9,6.5),XY(Dir,-9,1),XY(Dir,-7.5,1),XY(Dir,-7.5,5)]);
polygon(points=[XY(Dir,0,-3),XY(Dir,1.5,-3),XY(Dir,1.5,-8),XY(Dir,0,-8),XY(Dir,0,-4.5),XY(Dir,-9,-6.5),XY(Dir,-9,-1),XY(Dir,-7.5,-1),XY(Dir,-7.5,-5)]);
}}
}

module in (pos1,pos2){
//start in
Dir=pos2-pos1;

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



Category:#DIYプラレール



■ ■ ■ コメント ■ ■ ■

いいっすね!=29
001 [04.05 12:38]ななしさそ★44:これを発展させてスパイラルにして無限プラレールをレール作る所からやれば、つべでもbuzzるかもw (14)

名前 ↑B

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

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

本カテゴリーで直近コメントが書かれた記事


→カテゴリー:#DIYプラレール(記事数:22)
本カテゴリーの最近の記事(コメント数)