summaryrefslogtreecommitdiff
path: root/stagedelta.scad
blob: f723a2ce17cadab6d4cdaeab67897e746efb3776 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
beam_inter_distance=1500;
board_height=18;

beam_intra_distance=200;
beam_height=2500;
beam_radius=47.5/2;
beam_top_r1=35/2;
beam_top_r2=29/2; beam_top_h2=15; // TODO: measure h2/h3, values are guessed
beam_top_r3=26/2; beam_top_h3=20;
beam_top_h4=5;

module triangulate(d) {
  children();
  
  translate([d, 0, 0])
  rotate(120)
  children();
  
  rotate(60)
  translate([d, 0, 0])
  rotate(180)
  children();
}

module beam(include_struts=false) {
  triangulate(beam_intra_distance)
  union() {
    cylinder(r=beam_radius, h=beam_height);

    translate([0, 0, beam_height]) {
      cylinder(r1=beam_top_r1, r2=beam_top_r2, h=beam_top_h2);

      translate([0, 0, beam_top_h2])
      cylinder(r1=beam_top_r2, r2=beam_top_r2, h=beam_top_h3);

      translate([0, 0, beam_top_h2 + beam_top_h3])
      cylinder(r1=beam_top_r2, r2=beam_top_r3, h=beam_top_h4);
    }
	  
    if (include_struts)
    for (i = [0:(2 * beam_intra_distance):(beam_height - 2*beam_intra_distance)])
    translate([0, 0, i]) {
      rotate([45, 0, 90])
	cylinder(r=beam_radius/3, h=beam_intra_distance * sqrt(2));

      translate([0, 0, 2*beam_intra_distance])
      rotate([135, 0, 90])
      cylinder(r=beam_radius/3, h=beam_intra_distance * sqrt(2));
    }
  }
}

module board() {
  hull()
  for (i = [0,1])
    translate([i * (beam_inter_distance - 2 * beam_intra_distance), 0, 0])
    rotate(i*120)
    triangulate(beam_intra_distance)
    cylinder(r=2*beam_radius, h=board_height);
}

module board_bottom() {
  color("lime")
  render()
  difference() {
    board();
    translate([0, 0, -beam_height +board_height]) beam(false);
  }
}

module board_top() {
  color("green")
  render()
  difference() {
    board();
    translate([beam_inter_distance - 3 * beam_intra_distance, 0, -beam_height]) beam(false);
  }
}

module printer() {
  triangulate(beam_inter_distance) {
    beam(include_struts=true);

    translate([0, 0, beam_height - board_height])
    board_bottom();

    translate([2 * beam_intra_distance, 0, beam_height])
    board_top();
  }
}

printer();
contact: Jan Huwald // Impressum