init
This commit is contained in:
commit
5c5975cdce
3
.gitattributes
vendored
Normal file
3
.gitattributes
vendored
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.blend1 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.stl filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
*.gcode
|
BIN
coffee-bean-dozing-cup.blend
(Stored with Git LFS)
Normal file
BIN
coffee-bean-dozing-cup.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
coffee-bean-dozing-cup.stl
(Stored with Git LFS)
Normal file
BIN
coffee-bean-dozing-cup.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
contact-lens-case-holder.blend
(Stored with Git LFS)
Normal file
BIN
contact-lens-case-holder.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
contact-lens-case-holder.blend1
(Stored with Git LFS)
Normal file
BIN
contact-lens-case-holder.blend1
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
contact-lens-case-holder.stl
(Stored with Git LFS)
Normal file
BIN
contact-lens-case-holder.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
display-camera-pi-mount-experiment.stl
(Stored with Git LFS)
Normal file
BIN
display-camera-pi-mount-experiment.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
102
display-camera-pi.scad
Normal file
102
display-camera-pi.scad
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
$triangle_width = 65;
|
||||||
|
$triangle_height = 40;
|
||||||
|
$triangle_thickness = 5.87;
|
||||||
|
$triangle_screw_hole_diameter = 4.7;
|
||||||
|
|
||||||
|
$triangle_x_hole_gap = 40;
|
||||||
|
$triangle_y_hole_gap = 20;
|
||||||
|
$triangle_x_offset = 19;
|
||||||
|
$triangle_y_offset = 5;
|
||||||
|
|
||||||
|
$fn=200;
|
||||||
|
|
||||||
|
screen_mount();
|
||||||
|
|
||||||
|
module attachment_point() {
|
||||||
|
difference() {
|
||||||
|
linear_extrude($triangle_thickness)
|
||||||
|
polygon([[0, 0], [$triangle_width, $triangle_height], [$triangle_width, 0]]);
|
||||||
|
translate([$triangle_x_offset, $triangle_y_offset, 0])
|
||||||
|
union() {
|
||||||
|
hole_puncher();
|
||||||
|
translate([$triangle_x_hole_gap, 0, 0]) hole_puncher();
|
||||||
|
translate([$triangle_x_hole_gap, $triangle_y_hole_gap, 0]) hole_puncher();
|
||||||
|
};
|
||||||
|
translate([$rounded_nose, 4.234, -0.2])
|
||||||
|
rotate([0, 0, 120])
|
||||||
|
nose_rounding();
|
||||||
|
translate([0, $triangle_height - $triangle_y_offset * 1.5, -0.1])
|
||||||
|
cube([100, 100, $triangle_thickness * 3]);
|
||||||
|
translate([45, 12, -0.1])
|
||||||
|
cylinder(h=100, r=10);
|
||||||
|
translate([28, 8, -0.1])
|
||||||
|
cylinder(h=100, r=4);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
$screen_enter_diameter = 10;
|
||||||
|
$screen_lock_diameter = 6.25;
|
||||||
|
$screen_enter_gap = 30 + $screen_lock_diameter;
|
||||||
|
$screen_enter_y_offset = 14;
|
||||||
|
$screen_mount_width = 50;
|
||||||
|
$screen_mount_height = 60;
|
||||||
|
$screen_mount_thickness = 5;
|
||||||
|
$screen_side_cutout_size = 36;
|
||||||
|
|
||||||
|
module screen_mount() {
|
||||||
|
difference() {
|
||||||
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness]);
|
||||||
|
translate([$screen_mount_width / 2, $screen_enter_y_offset, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter);
|
||||||
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_enter_diameter);
|
||||||
|
for (i = [0:1:7]) {
|
||||||
|
mount_hole_puncher(i * -1);
|
||||||
|
};
|
||||||
|
translate([$screen_mount_width, $screen_mount_height / 2, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size);
|
||||||
|
translate([0, $screen_mount_height / 2, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_side_cutout_size);
|
||||||
|
/*
|
||||||
|
translate([25, 0, -0.1])
|
||||||
|
rotate([0, 0, -30])
|
||||||
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
||||||
|
translate([-10, -20, -0.1])
|
||||||
|
rotate([0, 0, 30])
|
||||||
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
||||||
|
|
||||||
|
translate([0, $screen_mount_height, 0])
|
||||||
|
mirror([0, 1, 0])
|
||||||
|
union() {
|
||||||
|
translate([25, 0, -0.1])
|
||||||
|
rotate([0, 0, -30])
|
||||||
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
||||||
|
translate([-10, -20, -0.1])
|
||||||
|
rotate([0, 0, 30])
|
||||||
|
cube([$screen_mount_width, $screen_mount_height, $screen_mount_thickness * 2]);
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
module mount_hole_puncher($gap) {
|
||||||
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $gap, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter);
|
||||||
|
translate([$screen_mount_width / 2, $screen_enter_y_offset + $screen_enter_gap + $gap, -0.1])
|
||||||
|
cylinder(h=$screen_mount_thickness * 2, d=$screen_lock_diameter);
|
||||||
|
};
|
||||||
|
|
||||||
|
module hole_puncher() {
|
||||||
|
translate([0, 0, $triangle_thickness * -1])
|
||||||
|
cylinder(h=$triangle_thickness * 3, d=$triangle_screw_hole_diameter);
|
||||||
|
};
|
||||||
|
|
||||||
|
$rounded_nose = 25;
|
||||||
|
module nose_rounding() {
|
||||||
|
difference() {
|
||||||
|
color("red") cube([$rounded_nose, $rounded_nose, $triangle_thickness * 2]);
|
||||||
|
translate([-3, 0, $triangle_thickness / -2])
|
||||||
|
color("blue")
|
||||||
|
cylinder(h=$triangle_thickness * 3, d=$rounded_nose);
|
||||||
|
};
|
||||||
|
};
|
BIN
display-camera-pi.stl
(Stored with Git LFS)
Normal file
BIN
display-camera-pi.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
17
grommet.scad
Normal file
17
grommet.scad
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// All units in mm
|
||||||
|
$hole_diameter = 79.67;
|
||||||
|
$overhang_width = 5.0;
|
||||||
|
$inner_thickness = 3.0;
|
||||||
|
$inner_height = 20.0;
|
||||||
|
$outer_height = 5.0;
|
||||||
|
// Smoothness
|
||||||
|
$fn=400;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
union() {
|
||||||
|
cylinder(h=$outer_height, d=$hole_diameter + $overhang_width * 2);
|
||||||
|
cylinder(h=$inner_height + $outer_height, d=$hole_diameter);
|
||||||
|
};
|
||||||
|
translate([0, 0, $inner_height * -1])
|
||||||
|
cylinder(h=$inner_height * 3, d=$hole_diameter - $inner_thickness * 2);
|
||||||
|
};
|
BIN
grommet.stl
(Stored with Git LFS)
Normal file
BIN
grommet.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
27
parametric-stand.scad
Normal file
27
parametric-stand.scad
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
$width = 220;
|
||||||
|
$height = 100;
|
||||||
|
|
||||||
|
difference() {
|
||||||
|
linear_extrude(5)
|
||||||
|
square([$width, $height]);
|
||||||
|
for (i=[0:1:5]) {
|
||||||
|
$even_row = i%2;
|
||||||
|
translate([0, 10 + i * 16, -5]) row_cylinders(diameter=14, gap=6, x_offset=$even_row*4);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
module row_cylinders(diameter=20, gap=10, x_offset=0, length=220) {
|
||||||
|
// One spacing will be split between the start and the end.
|
||||||
|
$count = floor((length - 2 * x_offset) / (diameter + gap));
|
||||||
|
// It's not always possible to perfectly fit all the columns, sometimes
|
||||||
|
// you end up with extra space. In that case, the space will be split
|
||||||
|
// into the start and the end.
|
||||||
|
$leftover = (length - 2 * x_offset) % (diameter + gap);
|
||||||
|
|
||||||
|
for (dx=[(diameter + gap + $leftover) / 2 + x_offset
|
||||||
|
: diameter + gap
|
||||||
|
: length - ((gap + $leftover) / 2 + x_offset)
|
||||||
|
]) {
|
||||||
|
translate([dx, 0, 0]) cylinder(h=20, d=diameter);
|
||||||
|
}
|
||||||
|
}
|
38
recipe-holder.scad
Normal file
38
recipe-holder.scad
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
// Base is the bottom part where the recipe will go into
|
||||||
|
$base_width = 150;
|
||||||
|
$base_depth = 14;
|
||||||
|
$base_height = 14;
|
||||||
|
|
||||||
|
// The size of the gap the recipe needs to fit into
|
||||||
|
$recipe_gap_lip = 8;
|
||||||
|
$recipe_gap = 5;
|
||||||
|
$recipe_angle = 30; // degrees
|
||||||
|
|
||||||
|
// The support part in the back to hold the recipe
|
||||||
|
$frame_width = 20;
|
||||||
|
$frame_depth = $base_depth / 2 - $recipe_gap / 2;
|
||||||
|
$frame_height = 180;
|
||||||
|
|
||||||
|
$support_width = $frame_width;
|
||||||
|
$support_depth = $frame_height * cos(90 - $recipe_angle);
|
||||||
|
$support_height = 5;
|
||||||
|
|
||||||
|
translate([$base_width / 2 - $support_width / 2, -1 * $support_depth, 0])
|
||||||
|
support();
|
||||||
|
rotate([$recipe_angle, 0, 0])
|
||||||
|
holder();
|
||||||
|
|
||||||
|
|
||||||
|
module support() {
|
||||||
|
cube([$support_width, $support_depth, $support_height]);
|
||||||
|
};
|
||||||
|
|
||||||
|
module holder() {
|
||||||
|
translate([$base_width / 2 - $frame_width / 2, 0, 0])
|
||||||
|
cube([$frame_width, $frame_depth, $frame_height]);
|
||||||
|
difference() {
|
||||||
|
cube([$base_width, $base_depth, $base_height]);
|
||||||
|
translate([-1 * $base_width, $base_depth / 2 - $recipe_gap / 2, $base_height - $recipe_gap_lip])
|
||||||
|
cube([$base_width * 3, $recipe_gap, $base_height * 2]);
|
||||||
|
};
|
||||||
|
};
|
BIN
recipe-holder.stl
(Stored with Git LFS)
Normal file
BIN
recipe-holder.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand-short.blend
(Stored with Git LFS)
Normal file
BIN
stand-short.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand-short.stl
(Stored with Git LFS)
Normal file
BIN
stand-short.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand-very-short.blend
(Stored with Git LFS)
Normal file
BIN
stand-very-short.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand-very-short.stl
(Stored with Git LFS)
Normal file
BIN
stand-very-short.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand.blend
(Stored with Git LFS)
Normal file
BIN
stand.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
stand.blend1
(Stored with Git LFS)
Normal file
BIN
stand.blend1
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
wide-recipe-holder.blend
(Stored with Git LFS)
Normal file
BIN
wide-recipe-holder.blend
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
wide-recipe-holder.blend1
(Stored with Git LFS)
Normal file
BIN
wide-recipe-holder.blend1
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
wide-recipe-holder.stl
(Stored with Git LFS)
Normal file
BIN
wide-recipe-holder.stl
(Stored with Git LFS)
Normal file
Binary file not shown.
Loading…
Reference in a new issue