/projects/laboratory_trolley/
// The bar used to build the base
//
// It's build by cutting out a shape on both ends
// of bar of dimension: length x 44 x 44
module base_bar(length) {
translate([-length/2.0, -22, -22])
difference() {
cube(size = [length, 44, 44]);
base_bar_cut(44);
translate([length,0,44])
rotate([0,180,0])
base_bar_cut(44);
}
}
// The shape to be cut out from the base bar
module base_bar_cut(width) {
translate([-0.1, -0.1, width/2.0])
cube(size=[width+0.1, width+0.2, width/2.0+0.1]);
translate([-0.1, -0.1, -0.1])
cube(size=[width/2.0+0.1, width/2.0+0.2, width+0.2]);
}
// The base
//
// It's build by 4 bars
// delta: give a positive value to disassemble the base
module base(length, width, delta) {
translate([length/2.0, 22, 22]){
base_bar(length);
translate([0, width-44, 0])
rotate([180, 0, 0])
base_bar(length);
translate([-(length/2.0)+22, (width/2.0)-22, 0])
rotate([0 , 0, -90]) {
translate([0,-delta,0])
base_bar(width);
translate([0, length-44+delta, 0])
rotate([180, 0, 0])
base_bar(width);
}}
}
// Side bars
module sides() {
translate([22, 22, 0])
vertical_bar(600);
translate([300-22, 22, 0])
rotate([0, 0, 90])
vertical_bar(600);
translate([300-22, 500-22, 0])
rotate([0, 0, 180])
vertical_bar(600);
translate([22, 500-22, 0])
rotate([0, 0, 270])
vertical_bar(600);
}
module vertical_bar(height) {
translate([-22, -22, 0])
difference() {
cube(size=[44, 44, height]);
translate([22, -0.1, -0.1])
cube(size=[22.1, 44.2, 44.1]);
translate([-0.1, 22, -0.1])
cube(size=[44.2, 22.1, 44.1]);
translate([22, -0.1, height-18])
cube(size=[22.1, 44.2, 18.1]);
translate([-0.1, 22, height-18])
cube(size=[44.2, 22.1, 18.1]);
}
}
// Top
module top(delta) {
translate([150,22,0])
top_bar(300-44);
translate([150,500-22,0])
rotate([0,0,180])
top_bar(300-44);
translate([22-delta,250,0])
rotate([0,0,270])
top_bar(500-44);
translate([300-22+delta,250,0])
rotate([0,0,90])
top_bar(500-44);
}
module top_bar(length) {
translate([-length/2.0, -22, 0])
difference() {
cube(size=[length, 44, 18]);
translate([0,0,-0.1])
linear_extrude(height=18.2) {
polygon(points=[[-0.1,22-0.1], [22+0.1,44.1], [-0.1,44.1]], paths=[[0,1,2]]);
polygon(points=[[length+0.1,22-0.1], [length-22+0.1,44.1], [length+0.1,44.1]], paths=[[0,1,2]]);
}
}
}
module wheel() {
polygon(points = [ [0,0], [20,0], [23,15], [20,19], [14,19],[10,15], [0,0] ]);
translate([0,0,10])
polygon(points = [ [0,0], [20,0], [23,15], [20,19], [14,19],[10,15], [0,0] ]);
translate([16,15,5])
cylinder(10, 10, 10, true);
}
wheel();