summaryrefslogtreecommitdiff
path: root/lasttretrad.scad
blob: 58e802e49206983793a608ac852d3602f3741be3 (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
use <wheel.scad>;
use <suspension_fork.scad>;

// total outer dimension of the lasttretrad
ltr_length = 3000;
ltr_width  = 1000;
ltr_height = 160;

bed_height = 18;

module frame() {
    board_width=25;
    board_height=120;
    bessel=sqrt(3/2) -1;
    
    // translate([-l/2, -w/2, 0])
    // cube([l, w, h]);
    translate([0, 0, -board_height - bed_height]) {
	// front/back boards
	for (pos = [-0.9, -0.4, 0, 0.4, 0.9])
	translate([pos * (ltr_length - board_width)/2 - board_width + board_width/2, -ltr_width/2, 0])
	cube([board_width, ltr_width, board_height]);

	// left/right boards
	
	//   Positioned at the bessel points (yields minimal mean bend
	//   assuming equal load on the cargo bed); see
	//   https://de.wikipedia.org/wiki/Bessel-Punkt
	for (pos = [-1,1])
	translate([-ltr_length/2, pos * (1 - 2*bessel) * (ltr_width - board_width)/2 - board_width/2, 0])
	cube([ltr_length, board_width, board_height]);
    }
}

// use a large plywood board
module cargo_bed() {
    translate([0, 0, -bed_height/2])
    cube([ltr_length, ltr_width, bed_height], center=true);
}


// specify (f)ront/(c)enter/(b)ack as -1/0/1 and (l)eft/(r)ight as -1/1
module wheel_position(fcb, lr) {
    translate([1250 * fcb, 370 * lr, 0])
    children();
}

// specify (f)ront/(b)ack and (l)eft/(r)ight as -1/1
module steered_wheel(fb=-1, lr=-1, rot=0, suspension_depth=0) {
    rotate([ 0, 0, fb*rot]) suspension_fork(suspension_depth);

    translate([0, 0, wheel_offset(suspension_depth)])
    rotate([90, 0, fb*rot]) wheel();
}

// specify (l)eft/(r)ight as -1/1
module powered_wheel(lr=-1, suspension_depth=0) {
    translate([0, 0, wheel_offset(suspension_depth)])
    rotate([90])
    wheel();
}

module lasttretrad(rot=0, suspension_depth=0) {
    color("SaddleBrown") frame();
    color("Cornsilk") cargo_bed();
    
    for (lr = [-1,1])
    for (fb = [-1,1])
    wheel_position(fb, lr)
    steered_wheel(fb, lr, rot=rot, suspension_depth=suspension_depth);
    
    for (lr = [-1,1])
    wheel_position(0, lr)
    powered_wheel(lr, suspension_depth=suspension_depth);
}

lasttretrad(30, 50);
contact: Jan Huwald // Impressum