3d/display_halterung.scad

288 lines
7.9 KiB
OpenSCAD
Raw Normal View History

2022-10-02 20:06:53 +02:00
include <BOSL/constants.scad>;
use <BOSL/metric_screws.scad>;
$fn=100;
pipe_diameter = 45.0;
width = 15;
thickness = 3.2;
length = 100;
pipenose_width = 10.0;
pipenose_len = 8.0;
device_position = 60;
device_width = 36;
device_screw_distance = 29;
display_screw_diameter = 4.3;
device_height = 9;
device_depth = 3*thickness+display_screw_diameter;
halterung_width = 47.1-4.3;
halterung_screw_diameter = 5;
halterung_screw_height_position = 14.5;
control_pipe_diameter = 18;
control_pipe_length = 24;
gap = 0.8;
mgap = 0.3;
screw_diameter = 6;
inner_diameter = pipe_diameter + 2*gap;
outer_diameter = inner_diameter + 2*thickness;
zwinge_unten_length = screw_diameter;
zwinge_oben_length = width;
module schelle() {
difference() {
union() {
// "Ring" (gefüllt)
cylinder( h=width, d=outer_diameter, center=true);
// Klemme unten
*translate( [0, -inner_diameter/2-zwinge_unten_length/2, 0])
//cube( [2*thickness+gap, zwinge_unten_length, width], center=true);
rotate([90,0,90])
linear_extrude( 2*thickness+gap, center=true)
offset(5)
square( [zwinge_unten_length, width-10], center=true);
// Klemme oben
translate( [0, inner_diameter/2+zwinge_oben_length/2-5, 0])
//cube( [4*thickness+gap, zwinge_oben_length, width], center=true);
rotate([90,0,90])
linear_extrude( 4*thickness+gap, center=true)
offset(5)
square( [zwinge_oben_length, width-10], center=true);
// Aussparung Nase
translate( [0, -thickness/2-inner_diameter/2, 0])
linear_extrude( width, center=true)
offset( thickness/2) {
x = pipenose_len+thickness;
polygon( [
[-8-thickness/2, 2],
[-5-thickness/2, 0],
[ -thickness/2, -x],
[ -thickness/2, -x-zwinge_unten_length],
[ thickness/2, -x-zwinge_unten_length],
[ thickness/2, -x],
[ 5+thickness/2, 0],
[ 8+thickness/2, 2],
]);
}
}
// Ring übrig lassen
cylinder( h=width+0.1, d=inner_diameter, center=true);
// gap zwischen der Klemmverschraubung
x = outer_diameter+2*zwinge_unten_length+0.8;
translate( [0, -x/2])
cube( [gap, x, width+.1], center=true);
// gap oben
y = outer_diameter+2*zwinge_oben_length+0.8;
translate( [0, y/2])
cube( [gap+2*thickness, y, width+.1], center=true);
// Aussparung Nase
translate( [0, -inner_diameter/2, 0])
linear_extrude( width+0.1, center=true)
polygon( [
[-8, 2],
[-5, -1],
[-2, -pipenose_len],
[ 0, -pipenose_len-mgap],
[ 2, -pipenose_len],
[ 5, -1],
[ 8, 2],
]);
// Schraubloch freihalten
for( i = [1,0])
mirror( [i,0,0])
translate( [thickness, -outer_diameter/2-pipenose_len-thickness - 0.75*screw_diameter, -width/2-0.1])
cube( [thickness, 1.5*screw_diameter, width+0.2]);
// Schraubloch unten
translate( [0, -outer_diameter/2-zwinge_unten_length/2-pipenose_len, 0])
rotate( [0, 90, 0])
cylinder( d=screw_diameter, h=10*thickness+gap+0.2, center=true);
// Schraubloch oben
translate( [0, inner_diameter/2+zwinge_oben_length-2*thickness, 0])
rotate( [0, 90, 0])
cylinder( d=screw_diameter, h=4*thickness+2*gap+0.2, center=true);
}
}
*intersection() {
schelle();
*translate( [outer_diameter/4+0.1, 0, -0.1])
cube( [outer_diameter/2 + 0.2, outer_diameter+2*zwinge_unten_length+2*zwinge_oben_length, width+0.2], center=true);
}
/*rotate([-5,0,0])*/ mirror([0,0,1])
translate( [device_width+outer_diameter/2, -0.75*length/*outer_diameter/2+2*zwinge_oben_length*/, -width/2])
difference() {
union() {
// Mittelholmen
rotate( [90,0,90])
linear_extrude( 2*thickness, center=true) {
os = 3;
w = width-os;
l = length-os;
n = os;
offset(os)
polygon( [
//[-n, w],
[-n+3, w],
[-n, w-3],
[-n, n],
[ l-3, (n+w)/2],
[ l-1, w],
]);
}
os = 10;
// Auflageplatte
*translate( [0, os, 0])
linear_extrude(thickness)
offset(-os) offset( 2*os)
polygon( [
[0, 0],
[device_width/2, length-device_position-os],
[0, length-device_position/2],
[halterung_width/4-os, length-2*os],
[-halterung_width/4+os, length-2*os],
[0, length-device_position/2],
[-device_width/2, length-device_position-os],
]);
// neue Stützen
translate( [0, length-device_position+thickness/2, -device_height-thickness]) {
rotate( [10, 0, 0]) {
difference() {
union() {
rotate( [90, 0, 0]) {
linear_extrude( device_depth+2*display_screw_diameter, center=true) {
t = thickness;
h = device_height + width*0.9;
w = device_width/2+os;
polygon( [
[ t, h],
[ w, t],
[ w, 0],
[-w, 0],
[-w, t],
[-t, h]
]);
}
}
translate( [-(device_width-os+control_pipe_length)/2, 0/*-2*display_screw_diameter*/, device_height+2])
rotate( [0, -90, 0])
cylinder( d=control_pipe_diameter, h=control_pipe_length+device_width/2+os, center=true);
}
for(i=[0,1])
mirror([i,0,0]) {
translate( [thickness, -display_screw_diameter, thickness])
cube([device_width/2+os-thickness, 2*display_screw_diameter, device_height+width], center=false);
// Schraublöcher für Display
translate( [device_width/2,0,0])
rotate( [0, 180, 0])
cylinder( d=display_screw_diameter, h=width, center=true);
}
}
}
}
// Stützen zwischen Mittelholmen und Auflageplatte
*for( i = [-display_screw_diameter, display_screw_diameter])
translate( [0, length - device_position + thickness/2+i, 0])
rotate( [90, 0, 0])
linear_extrude( thickness) {
t = thickness;
h = (device_position/115)*(width-thickness)+thickness;
w = device_width/2+0.68*os;
polygon( [
[ t, h],
[ w, t-0.1],
[-w, t-0.1],
[-t, h]
]);
}
// Schraubplatte
translate( [0, length, width]) {
os = 5;
w = halterung_width+thickness+screw_diameter/2;
v = halterung_width-thickness-screw_diameter/2;
h = halterung_screw_height_position-screw_diameter/2-os+thickness;
g = h - halterung_screw_diameter;
n = os;
translate( [0, -2*thickness, -2*thickness])
linear_extrude( 2*thickness)
offset(-thickness)
polygon( [
[ 2*thickness, -v/2],
[ 2*thickness, -v/2-thickness],
[-2*thickness, -v/2-thickness],
[-2*thickness, -v/2],
[-0.5*v, -thickness],
[-0.5*v-thickness, -thickness],
[-0.5*v-thickness, thickness],
[ 0.5*v+thickness, thickness],
[ 0.5*v+thickness, -thickness],
[ 0.5*v, -thickness]
]);
intersection() {
c = w+2*os+0.2;
translate( [-c/2+os, 0, -c+os])
rotate( [90, 0, 0])
linear_extrude( c)
offset( os)
square( [c-2*os, c-2*os]);
rotate( [180, 80, -90])
translate( [0,0,-2*thickness])
linear_extrude( 2*thickness) {
difference() {
offset( -os)
offset( 2*os)
polygon( [
[n , w/4], // unten rechts
[g , w/2],
[h , w/2], // oben rechts
[h , v/2],
[h/2, v/2],
[h/2, -v/2],
[h , -v/2],
[h , -w/2],
[g , -w/2],
[n , -w/4]
]);
translate( [h-thickness, halterung_width/2])
circle( d=halterung_screw_diameter);
translate( [h-thickness, -halterung_width/2])
circle( d=halterung_screw_diameter);
}
}
}
}
}
translate( [0, length+0.25, pipe_diameter/2+width-4])
rotate( [90, 0, 0])
cylinder( r1=pipe_diameter/2, r2=pipe_diameter/2-4, h=4);
// Schraubloch vorne
translate( [-width/2, 0, width/2])
rotate( [0, 90, 0])
cylinder( d=screw_diameter, h=width);
// Schraublöcher für Display
*for( i=[1,-1])
translate( [i*device_screws/2, length-device_position, width/2])
rotate( [0, 180, 0])
cylinder( d=display_screw_diameter, h=width);
}
*translate([0, -2.5, 0])
linear_extrude(1)
square([5,5]);