X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?p=bike-lights.git;a=blobdiff_plain;f=parts%2Fstatuslights.scad;fp=parts%2Fstatuslights.scad;h=e46673b258e7114dfef2dfcdaf2dc92b6d20830e;hp=0000000000000000000000000000000000000000;hb=74c8418108d14042c710aedcc0b9d0f0331c142f;hpb=6d9e2053eb39ebbe70df69c1faf3384ac2aa99fa diff --git a/parts/statuslights.scad b/parts/statuslights.scad new file mode 100644 index 0000000..e46673b --- /dev/null +++ b/parts/statuslights.scad @@ -0,0 +1,157 @@ +debug = 1; +tube_diam = 25; +tube_angle = 35; +view_angle = 15; + +wall = 2; +led_w = 3; +screw_hole = 3.5; +screw_head = 5; +screw_base = 3; +epsilon=0.01; + +module outer_shape() { + difference() { + hull() { + translate([-26, 0, 5]) + rotate([0, -70, 0]) + scale([2, 1, 1]) + cylinder(r=6, h=1); + + scale([1, 1, 1/2]) + sphere(r=tube_diam/2, center=true); + } + + translate([0, 0, -100+epsilon]) + cube(200, center=true); + + translate([-25, 0, 0]) + rotate([0, -35, 0]) + translate([-100, 0, 0]) + cube(200, center=true); + } +} + +module inner_shape() { + difference() { + hull() { + translate([-26-epsilon, 0, 5]) + rotate([0, -70, 0]) + scale([2.5, 1, 1]) + cylinder(r=4, h=1); + + scale([1, 1, 1/2]) + sphere(r=tube_diam/2 - 4, center=true); + } + + translate([0, 0, 2+-100+epsilon]) + cube(200, center=true); + + translate([-22, 0, 0]) + rotate([0, -35, 0]) + translate([-100, 0, 0]) + cube(200, center=true); + } +} + +module screw_hole(d1, d2, z_base) { + union() { + // body + translate([0, 0, -epsilon]) + cylinder(r=d1/2, h=z_base + 2*epsilon); + // head + translate([0, 0, z_base]) + cylinder(r=d2/2, h=20); + } +} + +module front_hole() { + difference() { + inner_shape(); + translate([-35, 0, 0]) + rotate([0, view_angle + tube_angle, 0]) + translate([100, 0, 0]) cube([200, 200, 200], center=true); + } +} + +module inner_hole() { + intersection() { + inner_shape(); + + translate([-32, 0, 0]) + rotate([0, view_angle + tube_angle, 0]) + translate([100, 0, 0]) cube([200, 200, 200], center=true); + + translate([-27, 0, 0]) + rotate([0, 20, 0]) + translate([100, 0, 0]) cube([200, 200, 200], center=true); + + translate([-108, 0, 0]) cube([200, 200, 200], center=true); + } +} + +module cable_hole() { + translate([-10, 0, -epsilon]) + difference() { + cylinder(r=6.5, h=3); + translate([12-epsilon, 0, 0]) cube(20, center=true); + } +} + +module tube() { + // presmykacova trubka + color("grey") { + rotate([0, -tube_angle, 0]) + translate([0, 0, -50]) + cylinder(r=tube_diam/2, h=50); + } +} + +module led(h, w, h1, w1) { + union() { + translate([0, 0, h-w/2]) + sphere(r=w/2, $fn=64); + cylinder(r=w/2, h=h-w/2, $fn=64); + translate([0, 0, -h1]) + cylinder(r=w1/2, h=h1+epsilon, $fn=64); + } +} + +module illum_led() { + translate([-24, 0, 3]) + rotate([0, 180+tube_angle, 0]) + led(h=5,w=3.5,h1=2,w1=4); +}; + +module status_led() { + translate([-21, 0, 8.5]) + rotate([0, 270+view_angle+tube_angle, 0]) + led(h=5,w=3.5,h1=2,w1=4); +} + +module main() { + difference() { + outer_shape(); + screw_hole(d1=4, d2=8, z_base=4); + front_hole(); + inner_hole(); + cable_hole($fn=8); + status_led(); + illum_led(); + }; +}; + +if (debug == 1) { + rotate([0, -tube_angle, 0]) { + difference() { + main($fn=16); + translate([0, -100, 0]) cube([200, 200, 200], center=true); + }; + color("red") status_led(); + color("deepskyblue") illum_led(); + }; + color("gray") tube(); +} else { + main($fn=32); +} +