lw=5.8; //реальная толщина фанерного листа width_line_cut=0.08;//луч чуть подедает материал hobbed_line=27; bolt_bearing_od=22; bolt_bearing_height=7; tape_bearing_od=19; tape_bearing_dih=12; height_main_pin=tape_bearing_od; left_tape_bearing_rib=hobbed_line-tape_bearing_od/2-lw-bolt_bearing_height; right_tape_bearing_rib=left_tape_bearing_rib; tape_cube_width=left_tape_bearing_rib+right_tape_bearing_rib+tape_bearing_od; tc_rib_under_bearing=10.5; tape_cube_height=tc_rib_under_bearing*2+tape_bearing_od; bolt_space=14; move_tc=10; bolt_cube_height=tape_cube_height+10*lw+move_tc; tape_cube_depth=4*lw+bolt_space; dm3=3-width_line_cut*2;//отерстие для болта М3 width_nut_m3=2.34;//толщина гайки distance_edges_nut_m3=5.4-width_line_cut*2; //расстояние между параллельными гранями гайки м3 оно разное у разных гаек od_nut_m3=6;//расстояние между вершинами гайками, или диаметр описанной окружности screw_end_m3=2; //выход винта за гайку d_screw_m3=2.88-width_line_cut*2;//диаметр резьбы М3 module nut_screw_hole_m3(ns_x1,ns_y1,depth=3){ union(){ translate([ns_x1-d_screw_m3/2,ns_y1]){ square ([d_screw_m3,depth+width_nut_m3+screw_end_m3]);} translate([ns_x1-distance_edges_nut_m3/2,ns_y1+depth]){ square ([distance_edges_nut_m3,width_nut_m3]);} } } //модуль вырезки окна под шипа module pin_win(px,py,cx,cy){ //параметры это фактически размер окна и координаты центра, в модуле учитывается линия реза translate([cx,cy]){ square([px-width_line_cut*2,py-width_line_cut*2], center=true); } } //модуль дорисовки вертикального шипа module add_pin(px,py,cx,ly,dir="U"){ //параметры это фактически размер окна и координаты куда пририсовывать по X центр шипа, по Y линия поверхности к которой пририсовывается шип, в модуле учитывается линия реза pwidth=px+width_line_cut*2; pheight=py-width_line_cut; if(dir=="U"){ translate([cx,ly]){ translate([-pwidth/2,0]){square([pwidth,pheight]);} } }else{ if(dir=="D"){ translate([cx,ly]){ translate([-pwidth/2,-pheight]){square([pwidth,pheight]);} } } } } //модуль дорисовки вертикального шипа module add_pin_ver(px,py,lx,cy,dir="R"){ //параметры это фактически размер окна и координаты куда пририсовывать по X линия шипа, по Y центр, в модуле учитывается линия реза pwidth=px+width_line_cut; pheight=py-width_line_cut*2; if(dir=="R"){ translate([lx,cy]){ translate([0,-pheight/2]){square([pwidth,pheight]);} } }else{ if(dir=="L"){ translate([lx-pwidth,cy]){ translate([0,-pheight/2]){square([pwidth,pheight]);} } } } } module tc_bearing_plate_1(){ difference(){ union(){ square([tape_cube_width,tape_cube_height],center=true); add_pin_ver(lw,height_main_pin,tape_cube_width/2,0,"R"); add_pin_ver(lw,height_main_pin,-tape_cube_width/2,0,"L"); add_pin(height_main_pin,lw,0,-tape_cube_height/2,"D"); add_pin(height_main_pin,lw,0,tape_cube_height/2,"U"); } union(){ circle(d=tape_bearing_od-2*width_line_cut,$fn=50); translate([0,lw+tape_cube_height/2]){rotate([0,0,180]){nut_screw_hole_m3(0,0,8);}} translate([0,-lw-tape_cube_height/2]){rotate([0,0,0]){nut_screw_hole_m3(0,0,8);}} translate([tape_cube_width/4+1,tape_cube_height/4+2])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),(tape_cube_height/4+2)])circle(d=dm3,$fn=50); } } } //tc_bearing_plate_2(); module tc_bearing_plate_2(){ difference(){ union(){ square([tape_cube_width,tape_cube_height],center=true); add_pin_ver(lw,height_main_pin,tape_cube_width/2,0,"R"); add_pin_ver(lw,height_main_pin,-tape_cube_width/2,0,"L"); add_pin(height_main_pin,lw,0,-tape_cube_height/2,"D"); add_pin(height_main_pin,lw,0,tape_cube_height/2,"U"); } union(){ circle(d=tape_bearing_dih,$fn=50); translate([0,lw+tape_cube_height/2]){rotate([0,0,180]){nut_screw_hole_m3(0,0,8);}} translate([0,-lw-tape_cube_height/2]){rotate([0,0,0]){nut_screw_hole_m3(0,0,8);}} translate([tape_cube_width/4+1,tape_cube_height/4+2])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),(tape_cube_height/4+2)])circle(d=dm3,$fn=50); } } } module tc_plate_side_2(){ difference(){ square([tape_cube_width,tape_cube_height],center=true); union(){ circle(d=tape_bearing_od-2*width_line_cut,$fn=50); translate([tape_cube_width/4+1,tape_cube_height/4+2])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),(tape_cube_height/4+2)])circle(d=dm3,$fn=50); } } } //tc_bearing_plate_2(); module tc_plate_side_1(){ difference(){ square([tape_cube_width,tape_cube_height],center=true); union(){ circle(d=tape_bearing_dih,$fn=50); translate([tape_cube_width/4+1,tape_cube_height/4+2])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([(tape_cube_width/4+1),-(tape_cube_height/4+2)])circle(d=dm3,$fn=50); translate([-(tape_cube_width/4+1),(tape_cube_height/4+2)])circle(d=dm3,$fn=50); } } } //tc_plate_side(); module tc_plate_top_inside(){ difference(){ square([tape_cube_width,tape_cube_depth],center=true); union(){ pin_win(height_main_pin,lw,0,(bolt_space+lw)/2); pin_win(height_main_pin,lw,0,-(bolt_space+lw)/2); } } } //tc_plate_top_inside(); module tc_plate_top_outside(){ difference(){ square([tape_cube_width,tape_cube_depth],center=true); union(){ circle(d=8-2*width_line_cut,$fn=50); translate([0,(bolt_space+lw)/2]){circle(d=dm3,$fn=50);} translate([0,-(bolt_space+lw)/2]){circle(d=dm3,$fn=50);} } } } //tc_plate_top_outside(); module bc_plate(){ difference(){ translate([0,move_tc/2]){square([tape_cube_depth,bolt_cube_height],center=true);} union(){ pin_win(lw+0.01,height_main_pin+move_tc,(bolt_space+lw)/2,0); pin_win(lw+0.01,height_main_pin+move_tc,-(bolt_space+lw)/2,0); translate([0,move_tc/2-8]){circle(d=12,$fn=50);} pin_win(height_main_pin,lw,0,bolt_cube_height/2+move_tc/2-1.5*lw); pin_win(height_main_pin,lw,0,-(bolt_cube_height/2-move_tc/2)+1.5*lw); } } } //bc_plate(); module bc_bearing(){ difference(){ translate([0,move_tc/2]){square([tape_cube_depth,bolt_cube_height],center=true);} union(){ translate([0,move_tc/2-8]){circle(d=bolt_bearing_od-2*width_line_cut,$fn=50);} translate([0,bolt_cube_height/2+move_tc/2-1.5*lw]){circle(d=dm3,$fn=50);} translate([0,-(bolt_cube_height/2-move_tc/2)+1.5*lw]){circle(d=dm3,$fn=50);} } } } //bc_bearing(); module bc_top(){ difference(){ union(){ square([tape_cube_depth,tape_cube_width],center=true); add_pin(height_main_pin,lw,0,-tape_cube_width/2,"D"); add_pin(height_main_pin,lw,0,tape_cube_width/2,"U"); } union(){ translate([0,lw+tape_cube_width/2]){rotate([0,0,180]){nut_screw_hole_m3(0,0,8);}} translate([0,-lw-tape_cube_width/2]){rotate([0,0,0]){nut_screw_hole_m3(0,0,8);}} } } } //bc_top(); module bc_top_nut(){ difference(){ union(){ square([tape_cube_depth,tape_cube_width],center=true); add_pin(height_main_pin,lw,0,-tape_cube_width/2,"D"); add_pin(height_main_pin,lw,0,tape_cube_width/2,"U"); } union(){ circle(d=14.5,$fa=60); translate([tape_cube_depth/4,tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([-tape_cube_depth/4,tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([tape_cube_depth/4,-tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([-tape_cube_depth/4,-tape_cube_width/4]){circle(d=dm3,$fn=50);} //square(13,true); translate([0,lw+tape_cube_width/2]){rotate([0,0,180]){nut_screw_hole_m3(0,0,6);}} translate([0,-lw-tape_cube_width/2]){rotate([0,0,0]){nut_screw_hole_m3(0,0,6);}} } } } //bc_top_nut(); module bc_top_plate(){ difference(){ square([tape_cube_depth,tape_cube_width],center=true); union(){ circle(d=8,$fn=50); translate([tape_cube_depth/4,tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([-tape_cube_depth/4,tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([tape_cube_depth/4,-tape_cube_width/4]){circle(d=dm3,$fn=50);} translate([-tape_cube_depth/4,-tape_cube_width/4]){circle(d=dm3,$fn=50);} } } } //bc_top_plate(); translate([tape_cube_width/2+lw+3,0]){tc_bearing_plate_1();} translate([-(tape_cube_width/2+lw+3),0]){tc_bearing_plate_2();} translate([tape_cube_width/2+lw+3,tape_cube_height+lw+6]){tc_plate_side_2();} translate([-(tape_cube_width/2+lw+3),tape_cube_height+lw+6]){tc_plate_side_1();} translate([tape_cube_width/2+3,-(tape_cube_height+lw+3)]){tc_plate_top_inside();} translate([-(tape_cube_width/2+3),-(tape_cube_height+lw+3)]){tc_plate_top_inside();} translate([tape_cube_width/2+3,-(tape_cube_height+lw+3+tape_cube_depth+6)]){tc_plate_top_outside();} translate([-(tape_cube_width/2+3),-(tape_cube_height+lw+3+tape_cube_depth+6)]){tc_plate_top_outside();} translate([tape_cube_width/2+lw+3+tape_cube_depth+6,bolt_cube_height/2]){bc_plate();} translate([-(tape_cube_width/2+lw+3+tape_cube_depth+6),bolt_cube_height/2]){bc_plate();} translate([tape_cube_width/2+lw+3+tape_cube_depth+6,-bolt_cube_height/2-6]){bc_bearing();} translate([-(tape_cube_width/2+lw+3+tape_cube_depth+6),-bolt_cube_height/2-6]){bc_bearing();} translate([25,100]){bc_top();} translate([-22,100]){bc_top_nut();} translate([0,140]){bc_top_plate();}