include ; use ; $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]);