Updates
BIN
gaming_rig/articulation.png
Normal file
|
After Width: | Height: | Size: 41 KiB |
23
gaming_rig/articulation.scad
Normal file
@@ -0,0 +1,23 @@
|
||||
$fn=60;
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
|
||||
base_width=30;
|
||||
base_height=10;
|
||||
base_length=100;
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
cuboid([base_width,base_length,base_height], rounding=1);
|
||||
top_half() xcyl(d=base_length, l=base_width, rounding=1);
|
||||
}
|
||||
top_half(z=base_height/2) xcyl(d=base_length*3/4, l=base_width, rounding=-1);
|
||||
top_half(z=base_height/2) xcyl(d=base_length, l=base_width/3, rounding=-1);
|
||||
translate([0,base_length/3,0]) zcyl(d=5, l=base_height, rounding=-1);
|
||||
translate([0,-base_length/3,0]) zcyl(d=5, l=base_height, rounding=-2);
|
||||
}
|
||||
difference() {
|
||||
top_half(z=base_height/3) xcyl(d=base_length/2, l=base_width, rounding=1);
|
||||
top_half(z=base_height/2) xcyl(d=base_length/2, l=base_width/3, rounding=-1);
|
||||
translate([0,0,base_height]) xcyl(d=5, l=base_width, rounding=-1);
|
||||
}
|
||||
BIN
gaming_rig/articulation.stl
Normal file
BIN
server_rack/images/base_plate.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
BIN
server_rack/images/triple_ssd_mount.png
Normal file
|
After Width: | Height: | Size: 31 KiB |
59
server_rack/scad/base_plate.scad
Normal file
@@ -0,0 +1,59 @@
|
||||
$fn=60;
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
include <boltsos_0.4.1/BOLTS.scad>
|
||||
include <nutsnbolts/cyl_head_bolt.scad>;
|
||||
|
||||
base_l=190;
|
||||
base_e=3;
|
||||
b_height=5;
|
||||
|
||||
module pilar() {
|
||||
difference() {
|
||||
zcyl(l=p_height, d=8, rounding1=-2);
|
||||
zcyl(l=p_height, d=3, rounding=-1);
|
||||
}
|
||||
}
|
||||
// holes_positions
|
||||
* color("red") {
|
||||
translate([-60,0,b_height-.5]) ycyl(l=200, d=1);
|
||||
translate([60,0,b_height-.5]) ycyl(l=200, d=1);
|
||||
}
|
||||
|
||||
// sample side attach
|
||||
* difference() {
|
||||
translate([0, 0, 0]) zcyl(l=5, d=18, rounding2=1);
|
||||
nutcatch_parallel("M4", clh=0.1);
|
||||
translate([0,0,10]) hole_through(name="M4", l=10+5, cld=0.1, h=0, hcld=0.4);
|
||||
}
|
||||
|
||||
// base plate
|
||||
difference() {
|
||||
union() {
|
||||
rect_tube(b_height+1, base_l, wall=base_e, rounding=base_e, irounding=base_e/2, center=true) {
|
||||
attach(BOT) rect_tube(base_e, base_l, wall=base_e*4, rounding=base_e, irounding=base_e/2, center=true);
|
||||
}
|
||||
translate([60,-base_l/2,b_height-.5]) ycyl(l=5.5, d=18, rounding1=1);
|
||||
translate([-60,-base_l/2,b_height-.5]) ycyl(l=5.5, d=18, rounding1=1);
|
||||
translate([60,base_l/2,b_height-.5]) ycyl(l=5.5, d=18, rounding2=1);
|
||||
translate([-60,base_l/2,b_height-.5]) ycyl(l=5.5, d=18, rounding2=1);
|
||||
}
|
||||
union() {
|
||||
translate([60,-base_l/2,b_height-.5]) rotate([90,90,0]) {
|
||||
nutcatch_parallel("M4", clh=0.1);
|
||||
translate([0,0,10]) hole_through(name="M4", l=10+5, cld=0.1, h=0, hcld=0.4);
|
||||
}
|
||||
translate([-60,-base_l/2,b_height-.5]) rotate([90,90,0]) {
|
||||
nutcatch_parallel("M4", clh=0.1);
|
||||
translate([0,0,10]) hole_through(name="M4", l=10+5, cld=0.1, h=0, hcld=0.4);
|
||||
}
|
||||
translate([60,base_l/2,b_height-.5]) rotate([-90,90,0]) {
|
||||
nutcatch_parallel("M4", clh=0.1);
|
||||
translate([0,0,10]) hole_through(name="M4", l=10+5, cld=0.1, h=0, hcld=0.4);
|
||||
}
|
||||
translate([-60,base_l/2,b_height-.5]) rotate([-90,90,0]) {
|
||||
nutcatch_parallel("M5", clh=0.1);
|
||||
translate([0,0,10]) hole_through(name="M5", l=10+5, cld=0.1, h=0, hcld=0.4);
|
||||
}
|
||||
}
|
||||
}
|
||||
30
server_rack/scad/temp.scad
Normal file
@@ -0,0 +1,30 @@
|
||||
$fn=60;
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
include <nutsnbolts/cyl_head_bolt.scad>
|
||||
|
||||
* import("../stl/dual_2.5_ssd_shelf.stl");
|
||||
|
||||
module wall() {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0,0,19]) cuboid([3,85,38], rounding=3, edges=[TOP+FRONT,TOP+BACK]);
|
||||
translate([-1.5,0,2.5]) ycyl(l=85, d=3);
|
||||
translate([-1.5,0,15.5]) ycyl(l=85, d=3);
|
||||
translate([-1.5,0,28.5]) ycyl(l=85, d=3);
|
||||
}
|
||||
translate([0,-38.5,7]) xcyl(l=3, d=3.5);
|
||||
translate([0,-38.5,20]) xcyl(l=3, d=3.5);
|
||||
translate([0,-38.5,33]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,7]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,20]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,33]) xcyl(l=3, d=3.5);
|
||||
}
|
||||
}
|
||||
|
||||
color("red") {
|
||||
rect_tube(h=3, size=[76,85], wall=7);
|
||||
* cuboid([76,85,3]);
|
||||
translate([36.5,0,0]) wall();
|
||||
translate([-36.5,0,0]) mirror([1,0,0]) wall();
|
||||
}
|
||||
37
server_rack/scad/triple_ssd_mount.scad
Normal file
@@ -0,0 +1,37 @@
|
||||
$fn=60;
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
|
||||
module wall() {
|
||||
difference() {
|
||||
union() {
|
||||
translate([0,0,19]) cuboid([3,85,38], rounding=3, edges=[TOP+FRONT,TOP+BACK]);
|
||||
translate([-1.5,0,2]) ycyl(l=85, d=3);
|
||||
translate([-1.5,0,15]) ycyl(l=85, d=3);
|
||||
translate([-1.5,0,28]) ycyl(l=85, d=3);
|
||||
}
|
||||
translate([0,-38.5,7]) xcyl(l=3, d=3.5);
|
||||
translate([0,-38.5,20]) xcyl(l=3, d=3.5);
|
||||
translate([0,-38.5,33]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,7]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,20]) xcyl(l=3, d=3.5);
|
||||
translate([0,38.5,33]) xcyl(l=3, d=3.5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
rect_tube(h=3, size=[85,85], wall=10, center=true, anchor=TOP)
|
||||
translate([36.5,0,0]) wall();
|
||||
translate([-36.5,0,0]) mirror([1,0,0]) wall();
|
||||
rotate([0,0,41]) cuboid([170,10,3], rounding=5, edges=[FWD+RIGHT,FWD+LEFT,BACK+RIGHT,BACK+LEFT]);
|
||||
rotate([0,0,-41]) cuboid([170,10,3], rounding=5, edges=[FWD+RIGHT,FWD+LEFT,BACK+RIGHT,BACK+LEFT]);
|
||||
tube(od=135, id=125, l=3);
|
||||
}
|
||||
* cuboid([66,75,8]);
|
||||
translate([60,52.5,0]) zcyl(l=10, d=4.5);
|
||||
translate([60,-52.5,0]) zcyl(l=10, d=4.5);
|
||||
translate([-60,52.5,0]) zcyl(l=10, d=4.5);
|
||||
translate([-60,-52.5,0]) zcyl(l=10, d=4.5);
|
||||
}
|
||||
BIN
server_rack/stl/base_plate.stl
Normal file
BIN
server_rack/stl/mini_itx_mount.stl
Normal file
BIN
server_rack/stl/triple_ssd_mount.stl
Normal file
BIN
tir_sportif/support_cible_électronique/rail.pdf
Normal file
BIN
tir_sportif/support_cible_électronique/rail_poster.pdf
Normal file
BIN
tir_sportif/tripod/images/plate_xs.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
20
tir_sportif/tripod/scad/plate_xs.scad
Normal file
@@ -0,0 +1,20 @@
|
||||
$fn=60;
|
||||
|
||||
include <BOSL2/std.scad>
|
||||
include <boltsos_0.4.1/BOLTS.scad>
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
zcyl(d=40, h=10, anchor=RIGHT);
|
||||
cuboid([80,60,10], rounding=3, edges=[FWD+RIGHT,BACK+RIGHT], anchor=LEFT)
|
||||
attach(LEFT) prismoid([60,10], [38.5,10], h=25.7, anchor=BOT);
|
||||
translate([-30,-20,0]) cuboid([30,25,10], rounding=2, edges=[FWD+RIGHT,BACK+RIGHT,FWD+LEFT,BACK+LEFT], spin=60);
|
||||
}
|
||||
translate([-20,0,0]) zcyl(d=26, h=10, rounding=-.5);
|
||||
translate([-30,-20,0]) cuboid([30,2,10], rounding=-.5, spin=60);
|
||||
translate([40,0,5]) cuboid([75,55,2], rounding=3, edges=[FWD+RIGHT,BACK+RIGHT,FWD+LEFT,BACK+LEFT]);
|
||||
translate([-30,-25,0]) rotate([0,0,60]) {
|
||||
ycyl(d=6, h=31)
|
||||
attach(BACK) zcyl(d=8, h=3, spin=90, anchor=TOP);
|
||||
}
|
||||
}
|
||||
193
tir_sportif/tripod/scad/tube_clamp.scad
Normal file
@@ -0,0 +1,193 @@
|
||||
id = 16.3; // inner diameter of ring
|
||||
od = id+5; // outer diameter of ring
|
||||
height = 5; // height of ring
|
||||
gap = 100; // ring opening in degrees
|
||||
ends=1; // 0 no ends, 1 round ends, 2 clamp ends
|
||||
hd=1; // mount hole diameter
|
||||
cd=7; // countersink diameter
|
||||
cdepth=3; // coutersink depth
|
||||
blobsize=1; // size of rounded ends, if ends==1
|
||||
sw=5; // mounting block width
|
||||
sdepth=14; // support depth
|
||||
nholes=1; // number of support holes.
|
||||
block_holes=[1,2,3,4,5]; // block some holes e.g. [2,3]
|
||||
sh=10; // mounting block height. NB total height is nholes x height.
|
||||
support_loc=0; // 0 = mounting block is centered, >0 centred on hole number
|
||||
support_rot=90; // support angle / clamp angle.
|
||||
flat_bottom=false; //remove all points below the bottom of the ring for ease of printing
|
||||
clamp_width=5; // width of clamp ends
|
||||
clamp_depth=10; // depth of clamp ends
|
||||
clamp_height=10; // height of clamp ends
|
||||
clamp_hole=3; // diameter of clap screw hole
|
||||
clamp_holew=1; // clamp hole width
|
||||
|
||||
// internal constants
|
||||
$fn=100;
|
||||
g=1/(nholes+1);
|
||||
fracs=[for (i=[g:g:(1-g)]) each i];
|
||||
sh2=sh+cd;
|
||||
|
||||
module main() {
|
||||
difference() {
|
||||
union(){
|
||||
// the clip
|
||||
clip();
|
||||
// mounting block
|
||||
if (nholes>0) {
|
||||
rotate([support_rot,0,0]) {
|
||||
if (support_loc==0) { //center
|
||||
translate([0,0,-(sh/2)*(nholes-1)]){
|
||||
support_block();
|
||||
}
|
||||
} else {
|
||||
translate([0,0,-sh*(support_loc-1)]){
|
||||
support_block();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(nholes>0){
|
||||
// holes go through clip and mounting block
|
||||
rotate([support_rot,0,0]) {
|
||||
if (support_loc==0) { //center
|
||||
translate([0,0,-(sh/2)*(nholes-1)]){
|
||||
holes();
|
||||
}
|
||||
} else {
|
||||
translate([0,0,-sh*(support_loc-1)]){
|
||||
holes();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//flat bottom
|
||||
if (flat_bottom) {
|
||||
translate([0,0,-(od+sh)-height/2]) {
|
||||
cube(2*(od+sh),center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
} //main
|
||||
|
||||
|
||||
module end_blobs(h,d,angle,od,center=false) {
|
||||
translate([od,0,0]){
|
||||
cylinder(h=h,d=d,center=center);
|
||||
}
|
||||
rotate([0,0,angle]) {
|
||||
translate([od,0,0]){
|
||||
cylinder(h=h,d=d,center=center);
|
||||
}
|
||||
}
|
||||
} //end_blobs
|
||||
|
||||
module end_clamps(){
|
||||
translate([id/2+clamp_depth/2+(od-id)/4,-clamp_width/2,0]){
|
||||
difference(){
|
||||
cube([clamp_depth,clamp_width,clamp_height],center=true);
|
||||
translate([-clamp_holew/2,0,0]) {
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=clamp_hole,h=clamp_width+2,center=true);
|
||||
}
|
||||
}
|
||||
translate([clamp_holew/2,0,0]) {
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=clamp_hole,h=clamp_width+2,center=true);
|
||||
}
|
||||
}
|
||||
cube([clamp_holew,clamp_width+2,clamp_hole],center=true);
|
||||
}
|
||||
}
|
||||
|
||||
rotate([0,0,gap]) {
|
||||
translate([id/2+clamp_depth/2+(od-id)/4,clamp_width/2,0]){
|
||||
difference(){
|
||||
cube([clamp_depth,clamp_width,clamp_height],center=true);
|
||||
translate([-clamp_holew/2,0,0]) {
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=clamp_hole,h=clamp_width+2,center=true);
|
||||
}
|
||||
}
|
||||
translate([clamp_holew/2,0,0]) {
|
||||
rotate([90,0,0]){
|
||||
cylinder(d=clamp_hole,h=clamp_width+2,center=true);
|
||||
}
|
||||
}
|
||||
cube([clamp_holew,clamp_width+2,clamp_hole],center=true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module wedge(h,d,angle,center=false) {
|
||||
intersection(){
|
||||
cylinder(h=h,d=d,center=center);
|
||||
x = (sqrt(2*(d^2))/2)+1;
|
||||
y = 0;
|
||||
xr = x*cos(angle)-y*sin(angle);
|
||||
yr = x*sin(angle)+y*cos(angle);
|
||||
|
||||
linear_extrude(h*2,center=center){
|
||||
if (angle<=90){
|
||||
polygon([[x,0],[xr,yr],[0,0]]);
|
||||
} else if (angle<=180) {
|
||||
polygon([[x,0],[0,x],[xr,yr],[0,0]]);
|
||||
} else if (angle<=270) {
|
||||
polygon([[x,0],[0,x],[-x,0],[xr,yr],[0,0]]);
|
||||
} else {
|
||||
polygon([[x,0],[0,x],[-x,0],[0,-x],[xr,yr],[0,0]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} //wedge
|
||||
|
||||
module support_block() {
|
||||
for (k = [g:g:(1-g)]) {
|
||||
offset=sh*((k-g)/g);
|
||||
translate([-(sdepth/2)-id/2,0,offset]){
|
||||
cube([sdepth,sw,sh],center=true);
|
||||
}
|
||||
}
|
||||
} //support_block
|
||||
|
||||
module clip(){
|
||||
rotate([0,0,-gap/2]){
|
||||
difference() {
|
||||
cylinder(h=height,d=od,center=true);
|
||||
cylinder(h=height*2,d=id,center=true);
|
||||
wedge(h=height*2,d=od+1,center=true,angle=gap);
|
||||
}
|
||||
if (ends==1) {
|
||||
end_blobs(h=height,d=((od-id)/2)+blobsize,angle=gap,od=(id+(od-id)/2)/2,center=true);
|
||||
}
|
||||
if (ends==2) {
|
||||
end_clamps();
|
||||
}
|
||||
}
|
||||
|
||||
} //clip
|
||||
|
||||
module holes(){
|
||||
|
||||
for (f = [1:nholes]) {
|
||||
k=fracs[f-1];
|
||||
if (len(search(f,block_holes))==0) {
|
||||
offset=sh*((k-g)/g);
|
||||
translate([-(sdepth/2)-id/2,0,offset]){
|
||||
// mount holes
|
||||
rotate([0,90,0]){
|
||||
cylinder(h=2*sdepth,d=hd,center=true);
|
||||
}
|
||||
// countersink
|
||||
translate([sdepth/2-cdepth,0,0]){
|
||||
rotate([0,90,0]){
|
||||
cylinder(h=2*sdepth,d=cd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
||||
BIN
tir_sportif/tripod/stl/04_M3_knurled_knob_12x25.stl
Normal file
BIN
tir_sportif/tripod/stl/plate_xs.stl
Normal file
BIN
tools/palet_bag/stl/side_modeler_top2.stl
Normal file
BIN
tubes/foot_cap.png
Normal file
|
After Width: | Height: | Size: 58 KiB |
81
tubes/foot_cap_generator_v102.scad
Normal file
@@ -0,0 +1,81 @@
|
||||
include <BOSL/constants.scad>
|
||||
use <BOSL/shapes.scad>
|
||||
use <BOSL/masks.scad>
|
||||
use <BOSL/transforms.scad>
|
||||
|
||||
// Höhe Rohr
|
||||
h = 35; // [10:60]
|
||||
|
||||
// Innendurchmesser Rohr
|
||||
rd = 25.4;
|
||||
|
||||
// Neigungswinkel zu Senkrechten
|
||||
angel= 20; // [0:90]
|
||||
|
||||
// Wandstärke
|
||||
wall = 4; // [1:5]
|
||||
|
||||
// Form Grundplatte
|
||||
form = "r"; // [r:rund, q=:Quadrat]
|
||||
|
||||
// Höhe Grundplatte
|
||||
hg = 5; // [1:10]
|
||||
|
||||
// Durchmesser Grundplatte
|
||||
d = 60; // [10:100]
|
||||
|
||||
// Kehle Zwischen Rohr und Grundplatte
|
||||
kehle = 8; //[1:20]
|
||||
|
||||
// Riffel an der Unterseite
|
||||
radius = 2; //[0:5]
|
||||
|
||||
/* [Hidden] */
|
||||
$fa = 1;
|
||||
$fs = 0.4;
|
||||
|
||||
// Rundung
|
||||
fillet = 2; // [0:5]
|
||||
|
||||
|
||||
difference() {
|
||||
union() {
|
||||
rotate([0, -angel, 0]) {
|
||||
// Rohr gefast
|
||||
difference() {
|
||||
tube(h=2*h, id=rd, wall=wall, center=true);
|
||||
translate([0, 0, h])
|
||||
fillet_cylinder_mask(r=rd/2 + wall, fillet=fillet);
|
||||
}
|
||||
// Füllung für Rohr
|
||||
cylinder(h=tan(angel)*rd + sin(angel)*hg + hg , d=rd, center=true);
|
||||
}
|
||||
|
||||
// Grundplatte
|
||||
if(form == "r") {
|
||||
cyl(l=hg, d=d, fillet=fillet);
|
||||
} else {
|
||||
cuboid([d, d, hg], fillet=fillet);
|
||||
}
|
||||
}
|
||||
// unteren Überstand entfernen
|
||||
translate([0, 0, -(hg + h/2)])
|
||||
cylinder(d=d + tan(angel)*h , h=h+hg, center=true);
|
||||
}
|
||||
// kehle zwischen Rohr und Grundplatte
|
||||
skew_xy(xa=-angel, ya=0)
|
||||
scale([1/cos(angel), 1, 1])
|
||||
translate([0, 0, hg/2])
|
||||
rotate([180, 0, 0])
|
||||
fillet_hole_mask(d=rd + 2*wall, fillet=kehle, overage=0);
|
||||
|
||||
// Riffel an der Unterseite
|
||||
difference() {
|
||||
for (i=[1:d/radius/4]){
|
||||
translate([4*i*radius - d/2 - radius, d/2, -hg/2])
|
||||
rotate([90,0,0])
|
||||
cylinder(h=d, r=radius);
|
||||
}
|
||||
translate([0, 0, -hg/2 - radius])
|
||||
tube(h=2*radius, id2=d, id1=d-4*fillet, od=2*d);
|
||||
}
|
||||
BIN
tubes/tube_clip.png
Normal file
|
After Width: | Height: | Size: 21 KiB |
44
tubes/tube_clip.scad
Normal file
@@ -0,0 +1,44 @@
|
||||
// Provided under a Creative Commons Share Alike License
|
||||
// CC-BY-SA
|
||||
// Created by MacLemon
|
||||
|
||||
// This Clip is used for mounting an LED strip to a pipe. Either place it between LEDs, or print from translucent material. I recommend using PET-G.
|
||||
|
||||
//$fn=30; // Usually fine for rendering previews.
|
||||
//$fn=60; // Used for final rending to .stl. (Yes, this IS slow.)
|
||||
$fn= $preview ? 15 : 30; // uses 30 fragments for preview, 64 for rendering.
|
||||
|
||||
pipe_diameter = 23.3; //mm Diameter of the pipe the clip shall hold on to.
|
||||
outer_diameter = 29; //mm Outer diamter of the clip. (How beefy the clip is.
|
||||
clip_width = 7; //mm Thickness of the clip. Shall fit in between LEDs.
|
||||
strip_width = 12.3; //mm How wide the LED strip to be mounted is.
|
||||
strip_height = 3.8; //mm Thickness, or how tall is the LED strip including an optional Epoxy cover.
|
||||
|
||||
rounding = 1; //mm
|
||||
clip_thickness = outer_diameter - pipe_diameter; // mm
|
||||
|
||||
minkowski(){
|
||||
difference(){
|
||||
hull(){ // ring + LED strip holder block
|
||||
cylinder (r = outer_diameter / 2 - rounding / 2, h = clip_width - rounding, center = true); // Clip Ring
|
||||
translate ([(pipe_diameter + strip_height) / 2, 0, 0])
|
||||
cube ([ strip_height + clip_thickness - rounding, strip_width + clip_thickness, clip_width - rounding], center = true); // LED Block
|
||||
translate ([(-pipe_diameter - strip_height) / 2, 0, 0])
|
||||
cube ([ strip_height + clip_thickness - rounding, strip_width + clip_thickness, clip_width - rounding], center = true); // grip Block
|
||||
}
|
||||
|
||||
// Remove LED strip cutout
|
||||
translate ([(pipe_diameter / 2 + strip_height + rounding)/2, 0, 0])
|
||||
cube ([(pipe_diameter / 2 + strip_height + rounding), strip_width + rounding , clip_width * 2], center = true);
|
||||
|
||||
// Remove clip on section
|
||||
translate ([-sqrt(2 * pow(outer_diameter, 2))/2, 0, 0])
|
||||
rotate ([0, 0 ,135]) {
|
||||
cube ([outer_diameter, outer_diameter, clip_width * 2 ], center = true);
|
||||
}
|
||||
|
||||
// Remove pipe
|
||||
#cylinder (r = pipe_diameter / 2 + rounding, h = clip_width * 12, center = true);
|
||||
}
|
||||
sphere (r = rounding);
|
||||
}
|
||||
BIN
tubes/tube_endcap.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
64
tubes/tube_endcap.scad
Normal file
@@ -0,0 +1,64 @@
|
||||
// OpenSCAD simple script for a customizable round tube endcap
|
||||
// By Magonegro JUNE-2016
|
||||
// Use your own parameters to customize your endcap.
|
||||
// Open this in OpenSCAD, then press F6 wait for it to render the CAP and export to stl.
|
||||
// At print time remember that Buildplate only support ir required tor the upper CAP external overhanging diameter.
|
||||
InnerMAXDiameter = 20; // Max inner diameter for the rings
|
||||
InnerMINDiameter = 18; // Keep same as MAX for cylindrical shape
|
||||
Rings=6; // Number of rings.
|
||||
RingHeight=3; // Max insertion height = Rings*RighHeight
|
||||
RingsRatio=1; // Each ring's diameter will be this ratio the vaule of its precedent.
|
||||
// Enter 1 for uniform rings or 0.97 (for 6 rings) for a conical shape.
|
||||
// Beware the inner hole, it should be smaller than the last ring.
|
||||
CAPOuterDiameter=24; // This should equal tube external diameter
|
||||
CAPHeight=10; // Height of the CAP, included Fillet
|
||||
Facets=100; // Resolution parameter, minimum value 3 for a triangular CAP, Defaults to 100 for smooth round CAP. Values lower than 30 could render artifacts
|
||||
InnerHoleDiameter=InnerMINDiameter/1.5; // Average value
|
||||
InnerHoleHeight=Rings*RingHeight; // Defaults till the cap
|
||||
Fillet=6; // Fillet radius for the CAP, should be less or equal than CAPHeight. Zero for no fillet. Should be also less o equal than CAPOuterDiameter/2.
|
||||
|
||||
module MakeCap()
|
||||
{
|
||||
difference()
|
||||
{
|
||||
union()
|
||||
{
|
||||
// Rings
|
||||
for(i=[0:Rings-1])
|
||||
{
|
||||
Ratio=1-((1-RingsRatio)*(Rings-i));
|
||||
translate([0,0,i*RingHeight])
|
||||
cylinder(h = RingHeight,
|
||||
r1 = Ratio*InnerMINDiameter/2,
|
||||
r2 = Ratio*InnerMAXDiameter/2,
|
||||
center = false,$fn=Facets);
|
||||
}
|
||||
// Cap
|
||||
translate([0,0,RingHeight*Rings])
|
||||
cylinder(h = CAPHeight-Fillet,
|
||||
r = CAPOuterDiameter/2,
|
||||
center = false,$fn=Facets);
|
||||
translate([0,0,RingHeight*Rings+CAPHeight-Fillet])
|
||||
cylinder(h = Fillet,
|
||||
r = CAPOuterDiameter/2-Fillet,
|
||||
center = false,$fn=Facets);
|
||||
rotate([0,0,360/2*Facets])
|
||||
translate([0, 0, RingHeight*Rings+CAPHeight-Fillet])
|
||||
rotate_extrude(convexity = 10,$fn = Facets)
|
||||
translate([CAPOuterDiameter/2-Fillet, 0, 0])
|
||||
intersection()
|
||||
{
|
||||
circle(r = Fillet, $fn = Facets);
|
||||
square(Fillet);
|
||||
}
|
||||
}
|
||||
// Hole
|
||||
cylinder(h = InnerHoleHeight,
|
||||
r = InnerHoleDiameter/2,
|
||||
center = false,$fn=Facets);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// Main
|
||||
MakeCap();
|
||||