diff --git a/achse.scad b/achse.scad new file mode 100644 index 0000000..73c4aa1 --- /dev/null +++ b/achse.scad @@ -0,0 +1,39 @@ +use + +// 3D-gedruckte Achse +module achse(laser_h, + brett_bohrung, + brett_dicke, + stepper_befestigung_screw_d, + stepper_befestigung_l, + stepper_befestigung_screw_abstand, + gear_abstand_unten, + bretter_abstand) { + difference() { + translate([ 0, 0, -3 * laser_h ]) { + RodStart(diameter = brett_bohrung, + height = bretter_abstand + brett_dicke + 3 * laser_h, + thread_len = 21, thread_diam = 10, thread_pitch = 0); + linear_extrude(height = laser_h) { + difference() { + circle(d = stepper_befestigung_l); + translate([ + stepper_befestigung_l / 2 - stepper_befestigung_screw_abstand, 0 + ]) circle(d = stepper_befestigung_screw_d); + translate([ + -stepper_befestigung_l / 2 + stepper_befestigung_screw_abstand, 0 + ]) circle(d = stepper_befestigung_screw_d); + translate([ + 0, stepper_befestigung_l / 2 - stepper_befestigung_screw_abstand + ]) circle(d = stepper_befestigung_screw_d); + translate([ + 0, -stepper_befestigung_l / 2 + stepper_befestigung_screw_abstand + ]) circle(d = stepper_befestigung_screw_d); + } + } + } + translate([ 0, 14.7, gear_abstand_unten - 1 ]) cylinder(h = 3.5, r = 11); + translate([ 0, -14.7, gear_abstand_unten - 1 ]) cylinder(h = 3.5, r = 11); + translate([ 0, 0, -3 * laser_h ]) cylinder(h = 20, d = brett_bohrung - 4); + } +} \ No newline at end of file diff --git a/kugellager.scad b/kugellager.scad index 38758c1..509c6d4 100644 --- a/kugellager.scad +++ b/kugellager.scad @@ -1,79 +1,121 @@ -$fn = 200; +use -module torus(r1=1, r2=2, angle=360, $fn=$fn){ - rotate_extrude(convexity=10, $fn=$fn) - translate([r2, 0, 0]) - circle(r=r1, $fn=$fn); +/* +Schraube MetricCountersunkBolt() +Schraubenloch CountersunkClearanceHole() +Gewindebolzen RodStart() RodEnd() +Mutter MetricNut() +*/ + +$fn = 300; + +module MetricNutShape(diameter, thickness = 0, tolerance = 0.4) { + thickness = (thickness == 0) ? NutThickness(diameter) : thickness; + cylinder(h = thickness, r = HexAcrossCorners(diameter) / 2 - 0.5 * tolerance, + $fn = 6); } -module rounded_cube(size, r=0, $fn=$fn){ - translate([r, r, r]) minkowski(){ - cube([size[0]-r*2, size[1]-r*2, size[2]-r*2]); - sphere(r, $fn=$fn); - } +module rounded_cube(size, r = 0, $fn = $fn) { + translate([ r, r, r ]) minkowski() { + cube([ size[0] - r * 2, size[1] - r * 2, size[2] - r * 2 ]); + sphere(r, $fn = $fn); + } } -module rounded_cube_2d(size, r=0, $fn=$fn){ - translate([r, r, 0]) minkowski(){ - cube([size[0]-r*2, size[1]-r*2, size[2]/2]); - cylinder(d=r*2, h=size[2]/2, $fn=$fn); - } +module rounded_cube_2d(size, r = 0, $fn = $fn) { + translate([ r, r, 0 ]) minkowski() { + cube([ size[0] - r * 2, size[1] - r * 2, size[2] / 2 ]); + cylinder(d = r * 2, h = size[2] / 2, $fn = $fn); + } } +module kugellager_mit_nuts(sphere_number = 330, h = 10 + 0.5) { + wall_d = 1.5; + sphere_d = 3; + sphere_spiel = 0.2; + sphere_ueberstand = 0.5; + screws_d = 3; + screws_inner_number = 2; + screws_outer_number = 3; + gesamt_h = h - sphere_ueberstand; + angle = 90; -wall_d = 1.5; -befestigung_d = 2*wall_d; -sphere_d = 3; -sphere_spiel = 0.2; -sphere_ueberstand = 0.5; -spehre_number = 40; -screw_hole_d = 2.6; + torus_r = (sphere_d / 2) / sin(360 / sphere_number); + torus_inner_r = (sphere_d + sphere_spiel) / 2; + gesamt_r = torus_r + torus_inner_r + wall_d; + gesamt_inner_r = torus_r - torus_inner_r - wall_d; + befestigung_d = screws_d + 4 * wall_d; + assert(torus_inner_r < torus_r); + assert(torus_inner_r ^ 2 - (torus_inner_r - sphere_ueberstand) ^ + 2 < (sphere_d / 2) ^ 2, + "Kugeln fallen raus! Überstand oder Spiel reduzieren!"); -torus_r = (sphere_d / 2) / sin(360 / spehre_number); -torus_inner_r = (sphere_d + sphere_spiel) / 2; -gesamt_h = sphere_d + wall_d - sphere_ueberstand; -gesamt_r = torus_r + torus_inner_r + wall_d; -gesamt_inner_r = torus_r - torus_inner_r - wall_d; - -// Asserts -assert(torus_inner_r < torus_r); -assert(torus_inner_r^2 - (torus_inner_r - sphere_ueberstand)^2 < (sphere_d / 2)^2, "Kugeln fallen raus! Überstand oder Spiel reduzieren!"); - -// Screw holes - module screw_hole() { - rotate(a = [0, 90, 0]) - cylinder(d=screw_hole_d, h=befestigung_d); + difference() { + rotate_extrude(convexity = 10, angle = angle, $fn = $fn) { + difference() { + square([ gesamt_r, gesamt_h ]); + square([ gesamt_inner_r, gesamt_h ]); + translate([ + torus_r, gesamt_h - torus_inner_r + sphere_ueberstand + sphere_spiel, + 0 + ]) circle(r = torus_inner_r, $fn = $fn); + } + translate([ gesamt_inner_r - befestigung_d, 0, 0 ]) + square([ 2 * (befestigung_d + torus_inner_r + wall_d), wall_d ]); } + for (r = [ + gesamt_r + befestigung_d / 2, gesamt_inner_r - befestigung_d / 2 + ]) { + screws_number = (r == gesamt_r + befestigung_d / 2) ? screws_outer_number + : screws_inner_number; + for (i = [1:screws_number]) { + phi = angle / screws_number * (i - 1 / 2); + translate([ r * cos(phi), r * sin(phi), wall_d / 2 ]) + MetricNutShape(diameter = screws_d); + translate([ r * cos(phi), r * sin(phi), 0 ]) + cylinder(h = wall_d, r = (screws_d + 0.4) / 2); + } + } + } +} -difference() { +module kugellager(sphere_number = 330, h = 10 + 0.5, nut_d = 10, wall_d = 1.5) { + sphere_d = 3; + sphere_spiel = 0.2; + sphere_ueberstand = 0.5; + screws_d = 3; + screws_inner_number = 2; + screws_outer_number = 3; + gesamt_h = h - sphere_ueberstand; + angle = 360; + + torus_r = (sphere_d / 2) / sin(360 / sphere_number); + torus_inner_r = (sphere_d + sphere_spiel) / 2; + gesamt_r = torus_r + torus_inner_r + wall_d; + gesamt_inner_r = torus_r - torus_inner_r - wall_d; + befestigung_d = screws_d + 4 * wall_d; + + assert(torus_inner_r < torus_r); + assert(torus_inner_r ^ 2 - (torus_inner_r - sphere_ueberstand) ^ + 2 < (sphere_d / 2) ^ 2, + "Kugeln fallen raus! Überstand oder Spiel reduzieren!"); + + rotate_extrude(convexity = 10, angle = angle, $fn = $fn) { difference() { - union () { - //Cylinder - difference () { - cylinder(r=gesamt_r, h=gesamt_h); - cylinder(r=gesamt_inner_r, h=gesamt_h); - } - - - //Befestigung - translate([-befestigung_d, -(gesamt_r + gesamt_h + wall_d),0]) { - rounded_cube_2d ([befestigung_d, (gesamt_r + gesamt_h + wall_d) * 2, gesamt_h], r=0.25); - } - } - translate([0,0,torus_inner_r + wall_d]) { - torus(r1=torus_inner_r, r2=torus_r); - } + square([ gesamt_r, gesamt_h ]); + square([ gesamt_inner_r, gesamt_h ]); + translate([ + torus_r, gesamt_h - torus_inner_r + sphere_ueberstand + sphere_spiel, 0 + ]) circle(r = torus_inner_r, $fn = $fn); } - - - // Only one half halfes - translate([0,-gesamt_r,0]) - cube([gesamt_r, gesamt_r*2, gesamt_h]); - - // Screw holes - translate([-befestigung_d,-(gesamt_r + gesamt_h / 2 + wall_d / 2),gesamt_h / 2]) screw_hole(); - translate([-befestigung_d,(gesamt_r + gesamt_h / 2 + wall_d / 2),gesamt_h / 2]) screw_hole(); - translate([-befestigung_d,0,gesamt_h / 2]) screw_hole(); - + } + difference() { + union() { + cylinder(r = gesamt_r, h = wall_d); + cylinder(d = 2.5 * nut_d, h = 2 * wall_d); + } + MetricNutShape(diameter = nut_d, thickness = wall_d); + translate([ 0, 0, wall_d ]) cylinder(d = nut_d + 2, h = wall_d); + } } \ No newline at end of file diff --git a/mini-telescope.scad b/mini-telescope.scad index 9aadc51..3143f97 100644 --- a/mini-telescope.scad +++ b/mini-telescope.scad @@ -1,106 +1,83 @@ +use use +use +use +use -$fn = 50; -gear_modul = 1; -gear_tooth_number_small = 10; -gear_tooth_number_large = 150; -gear_large_full_diameter = 190; +/* +Schraube MetricCountersunkBolt() +Schraubenloch CountersunkClearanceHole() +Gewindebolzen RodStart() RodEnd() +Mutter MetricNut() +*/ -module brett () { - difference () { - cylinder(d=197, h=12); - cylinder(d=15.5, h=12); - } +$fn = 200; +gear_modul = 0.5; +laser_h = 3; +brett_dicke = 13; +brett_bohrung = 15.5; +bretter_abstand = 8; +gear_abstand_unten = 2; + +// Verwendetes Reely-Plastik-Doppelzahnrad +module double_gear(tooth_number, flipped = false) { + if (!flipped) { + spur_gear(modul = gear_modul, tooth_number = tooth_number, width = 1.5, + bore = 3); + translate([ 0, 0, 1.5 ]) + spur_gear(modul = gear_modul, tooth_number = 12, width = 4, bore = 3); + } else { + spur_gear(modul = gear_modul, tooth_number = 12, width = 4, bore = 3); + translate([ 0, 0, 4 ]) spur_gear( + modul = gear_modul, tooth_number = tooth_number, width = 1.5, bore = 3); + } } -module stepper_zahnrad () { - difference () { - union () { - translate([0,0,10]) spur_gear(modul=gear_modul, tooth_number=gear_tooth_number_small, width=3, bore=0); - cylinder(h=10+3, d=6.5+2); - } - stepper_welle(); - } -} - -module stepper_welle () { - difference() { - cylinder(d=6.5,h=71.5); - translate([6,0,0]) cube([6.5,6.5,71.5 *2], center = true); - } -} - -module stepper () { - union () { - translate([-56.5 / 2, -56.5 / 2, 0]) union () { - difference () { - //Grundkörper - cube([56.5,56.5,50.5]); - - //Einrundungen - cylinder(h=45,r=9.5); - translate([56.5, 0,0]) cylinder(45,9.5,9.5); - translate([0, 56.5,0]) cylinder(45,9.5,9.5); - translate([56.5, 56.5,0]) cylinder(45,9.5,9.5); - - //Schrauben - translate([4,4,45]) cylinder(h=6,d=5.5); - translate([56.5-4,4,45]) cylinder(h=6,d=5.5); - translate([4,56.5-4,45]) cylinder(h=6,d=5.5); - translate([56.5-4,56.5-4,45]) cylinder(h=6,d=5.5); - } - - // Welle - translate([56.5 / 2, 56.5 / 2, 0]) union () { - stepper_welle(); - translate([0,0,50.5]) cylinder(h=1.5, d=38); - } - } - translate([0,0,71.5-(10+3)]) stepper_zahnrad(); - } -} - -module stepper_small () { - union () { - - //Grundkörper - translate([-42.2 / 2, -42.2 / 2, 0]) union () { - cube([42.2,42.2,32]); - translate([42.2 / 2, 42.2 / 2, 32]) cylinder(h=1.5, d=22); - } - - //Welle & Zahnrad - translate([0,0,32+1.5]) { - union () { - translate([0,0,18-3]) spur_gear(modul=gear_modul, tooth_number=10, width=3, bore=0); - cylinder(h=18, d=5); - } - } - - //Befestigung - translate ([-80/2, -20/2, 32-5]) difference () { - cube([80, 20, 5]); - union () { - translate([4, 20/2, 0]) cylinder(h=5, d=4) ; - translate([80-4, 20/2, 0]) cylinder(h=5, d=4) ; - } - } - } -} - -module large_gear () { - difference () { - cylinder(h = 3, d=gear_large_full_diameter); - spur_gear(modul=gear_modul, tooth_number=gear_tooth_number_large, width=3, bore=0); - cylinder(h = 3, d=(gear_large_full_diameter - 60)); - } +// Holzbrett +module brett() { + brett_durchmesser = 197; + linear_extrude(brett_dicke) difference() { + circle(d = brett_durchmesser); + circle(d = brett_bohrung); + } } // Stepper -*color("red") translate([0,70,0]) stepper_small(); +stepper_grundkoerper_h = 32; +stepper_befestigung_l = 78; +stepper_befestigung_screw_d = 4; +stepper_befestigung_screw_abstand = 4; -//Brett unten -*color("grey") translate([0,0,-12]) brett (); +translate([ + 0, 0, -(stepper_grundkoerper_h + 3 * laser_h) +]) stepper_small(grundkoerper_h = stepper_grundkoerper_h, + befestigung_l = stepper_befestigung_l, + befestigung_screw_d = stepper_befestigung_screw_d, + befestigung_screw_abstand = stepper_befestigung_screw_abstand); -// Top Gear -*color("yellow") translate([0,0,32+1.5+18-3]) large_gear (); \ No newline at end of file +// Anordnung der Zahnräder (mit Augenmaß) +color("red") translate([ 0, 14.7, gear_abstand_unten ]) + double_gear(tooth_number = 40); +color("green") translate([ 0, 30.2, gear_abstand_unten ]) + double_gear(tooth_number = 50, flipped = true); +translate([ 0, 48.3, gear_abstand_unten ]) double_gear(tooth_number = 60); + +color("blue") translate([ 0, 0, bretter_abstand - laser_h ]) + zahnkranz(tooth_number = 206, laser_h = laser_h); + +*color("grey") translate([ 0, 0, bretter_abstand ]) brett(); + +color("blue") + achse(laser_h = laser_h, + brett_bohrung = brett_bohrung, + brett_dicke = brett_dicke, + stepper_befestigung_screw_d = stepper_befestigung_screw_d, + stepper_befestigung_l = stepper_befestigung_l, + stepper_befestigung_screw_abstand = stepper_befestigung_screw_abstand, + gear_abstand_unten = gear_abstand_unten, + bretter_abstand = bretter_abstand); + +color("red") kugellager_mit_nuts(sphere_number = 290, h = bretter_abstand); + +translate([ 0, 0, bretter_abstand + brett_dicke + 0.5 + 8 ]) mirror([ 0, 0, 1 ]) + kugellager(sphere_number = 100, h = 8, nut_d = 10, wall_d = 3); \ No newline at end of file diff --git a/stepper.scad b/stepper.scad new file mode 100644 index 0000000..1d3518b --- /dev/null +++ b/stepper.scad @@ -0,0 +1,102 @@ +use + +// 0.5er - Zahnrad, das an der Stepperwelle befestigt wird +module stepper_zahnrad(tooth_number = 20, gear_modul = 0.5) { + difference() { + union() { + translate([ 0, 0, 10 ]) spur_gear( + modul = gear_modul, tooth_number = tooth_number, width = 3, bore = 0); + cylinder(h = 10 + 3, d = 6.5 + 2); + } + difference() { + cylinder(d = 6.5, h = 71.5); + translate([ 6, 0, 0 ]) cube([ 6.5, 6.5, 71.5 * 2 ], center = true); + } + } +} + +// Großer Steppermotor - Modell PSM42BYGHW603 +module stepper() { + union() { + translate([ -56.5 / 2, -56.5 / 2, 0 ]) union() { + difference() { // Grundkörper + cube([ 56.5, 56.5, 50.5 ]); + + // Einrundungen + cylinder(h = 45, r = 9.5); + translate([ 56.5, 0, 0 ]) cylinder(45, 9.5, 9.5); + translate([ 0, 56.5, 0 ]) cylinder(45, 9.5, 9.5); + translate([ 56.5, 56.5, 0 ]) cylinder(45, 9.5, 9.5); + + // Schrauben + translate([ 4, 4, 45 ]) cylinder(h = 6, d = 5.5); + translate([ 56.5 - 4, 4, 45 ]) cylinder(h = 6, d = 5.5); + translate([ 4, 56.5 - 4, 45 ]) cylinder(h = 6, d = 5.5); + translate([ 56.5 - 4, 56.5 - 4, 45 ]) cylinder(h = 6, d = 5.5); + } + + // Welle + translate([ 56.5 / 2, 56.5 / 2, 0 ]) union() { + difference() { + cylinder(d = 6.5, h = 71.5); + translate([ 6, 0, 0 ]) cube([ 6.5, 6.5, 71.5 * 2 ], center = true); + } + translate([ 0, 0, 50.5 ]) cylinder(h = 1.5, d = 38); + } + } + translate([ 0, 0, 71.5 - (10 + 3) ]) stepper_zahnrad(); + } +} + +// Kleiner Steppermotor - Modell KP4M2-217 +module stepper_small(grundkoerper_h, + befestigung_l, + befestigung_screw_d, + befestigung_screw_abstand, + gear_modul = 0.5) { + grundkoerper_kante = 42.3; + grundkoerper_cyl_d = 22; + grundkoerper_cyl_h = 2; + befestigung_h = 5; + befestigung_b = 20; + + welle_h = 18; + welle_d = 5; + zahnrad_h = 13; + + union() { + // Grundkörper + union() { + translate([ 0, 0, grundkoerper_h / 2 ]) + cube([ grundkoerper_kante, grundkoerper_kante, grundkoerper_h ], + center = true); + translate([ 0, 0, grundkoerper_h ]) + cylinder(h = grundkoerper_cyl_h, d = grundkoerper_cyl_d); + } + + // Welle & Zahnrad + translate([ 0, 0, grundkoerper_h + grundkoerper_cyl_h ]) { + union() { + translate([ 0, 0, welle_h - zahnrad_h ]) spur_gear( + modul = gear_modul, tooth_number = 20, width = 13, bore = 0); + cylinder(h = welle_h, d = welle_d); + } + } + + // Befestigung + translate([ + -befestigung_l / 2, -befestigung_b / 2, grundkoerper_h - befestigung_h + ]) { + linear_extrude(height = befestigung_h) { + difference() { + square([ befestigung_l, befestigung_b ]); + translate([ befestigung_screw_abstand, befestigung_b / 2 ]) + circle(d = befestigung_screw_d); + translate( + [ befestigung_l - befestigung_screw_abstand, befestigung_b / 2 ]) + circle(d = befestigung_screw_d); + } + } + } + } +} \ No newline at end of file diff --git a/zahnkranz.scad b/zahnkranz.scad new file mode 100644 index 0000000..7d39a2d --- /dev/null +++ b/zahnkranz.scad @@ -0,0 +1,26 @@ +use + +// Am oberen Brett befestigter Zahnkranz (TODO: 206 oder 201 Zähne?) +module zahnkranz(tooth_number, laser_h, gear_modul = 0.5) { + screw_d = 3; + rim_width = 8; + screw_a = gear_modul * (tooth_number + 77 / 30) / 2 + rim_width / 2; + + difference() { + ring_gear(modul = gear_modul, tooth_number = tooth_number, width = laser_h, + rim_width = rim_width); + translate([ screw_a, 0, 0 ]) cylinder(d = screw_d, h = laser_h); + translate([ -screw_a, 0, 0 ]) cylinder(d = screw_d, h = laser_h); + translate([ 0, screw_a, 0 ]) cylinder(d = screw_d, h = laser_h); + translate([ 0, -screw_a, 0 ]) cylinder(d = screw_d, h = laser_h); + + translate([ 1 / sqrt(2) * screw_a, 1 / sqrt(2) * screw_a, 0 ]) + cylinder(d = screw_d, h = laser_h); + translate([ 1 / sqrt(2) * screw_a, -1 / sqrt(2) * screw_a, 0 ]) + cylinder(d = screw_d, h = laser_h); + translate([ -1 / sqrt(2) * screw_a, 1 / sqrt(2) * screw_a, 0 ]) + cylinder(d = screw_d, h = laser_h); + translate([ -1 / sqrt(2) * screw_a, -1 / sqrt(2) * screw_a, 0 ]) + cylinder(d = screw_d, h = laser_h); + } +} \ No newline at end of file