This commit is contained in:
2025-10-07 16:06:36 +02:00
parent cbdf4370c9
commit 742a752cb0
25 changed files with 551 additions and 0 deletions

BIN
tubes/foot_cap.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

44
tubes/tube_clip.scad Normal file
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

64
tubes/tube_endcap.scad Normal file
View 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();