mead-horn: note dependency on dotscad master
authorClinton Ebadi <clinton@unknownlamer.org>
Thu, 9 Dec 2021 02:22:08 +0000 (21:22 -0500)
committerClinton Ebadi <clinton@unknownlamer.org>
Thu, 9 Dec 2021 02:22:08 +0000 (21:22 -0500)
cleaver/1492890647.svg [new file with mode: 0644]
cleaver/README [new file with mode: 0644]
cleaver/cleaver.scad [new file with mode: 0644]
etc/button-cell-holder.scad
etc/hook.scad [new file with mode: 0644]
etc/laserjet6-rear-tray-clip.scad
etc/shelving-foot.scad
mead-horn/README [new file with mode: 0644]
mead-horn/mead-horn.json [new file with mode: 0644]
mead-horn/mead-horn.scad [new file with mode: 0644]
pacman-ghost/pacman-ghost.scad

diff --git a/cleaver/1492890647.svg b/cleaver/1492890647.svg
new file mode 100644 (file)
index 0000000..067463c
--- /dev/null
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="35.121284mm"
+   width="65.58564mm"
+   viewBox="0 0 232.39006 124.44549"
+   id="svg3226"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="cleaver.svg">
+  <title
+     id="title3252">Cleaver</title>
+  <defs
+     id="defs3232" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1366"
+     inkscape:window-height="712"
+     id="namedview3230"
+     showgrid="false"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="0.49406706"
+     inkscape:cx="-240.01238"
+     inkscape:cy="-71.123713"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg3226" />
+  <metadata
+     id="metadata3228">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title>Cleaver</dc:title>
+        <dc:date>2017-03-25</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Algot Runeman</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Algot Runeman</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>runeman.org</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:identifier>cleaver.svg</dc:identifier>
+        <cc:license
+           rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="g3203"
+     transform="matrix(0.42056397,0.24281273,-0.24281273,0.42056397,402.31684,-0.91434781)"
+     inkscape:export-xdpi="116.18397"
+     inkscape:export-ydpi="116.18397">
+    <path
+       id="path3188"
+       d="m -640,372.36133 c -17.08893,36.24441 -18.75546,87.9112 -20,140 l 280,0 0,-100 160,0 20,0 20,-20 -20,-20 -20,0 -160,0 -260,0 z m 13.88086,9.875 a 10.004855,10.004855 0 0 1 10.00391,10.00586 10.004855,10.004855 0 0 1 -10.00391,10.0039 10.004855,10.004855 0 0 1 -10.00586,-10.0039 10.004855,10.004855 0 0 1 10.00586,-10.00586 z"
+       style="fill:#cccccc;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       inkscape:connector-curvature="0" />
+    <path
+       sodipodi:nodetypes="ccccc"
+       inkscape:connector-curvature="0"
+       id="path3190"
+       d="m -660,486.3622 c 90.62306,13.55138 183.97959,13.43541 280,0 l 0,26 c -93.33333,13.43541 -186.66667,13.55138 -280,0 z"
+       style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="ccsssc"
+       inkscape:connector-curvature="0"
+       id="path3192"
+       d="m -380,372.3622 0,40 c 0,0 124.56723,22.96101 180,0 8.71042,-3.60797 20,-10.57191 20,-20 0,-9.42809 -11.28958,-16.39203 -20,-20 -55.43277,-22.96101 -180,0 -180,0 z"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <circle
+       r="4.8780489"
+       cy="392.36221"
+       cx="-350.34396"
+       id="path3194"
+       style="opacity:0.75;fill:#ffff00;fill-opacity:1;stroke:#b3b3b3;stroke-width:0.24390243;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    <circle
+       style="opacity:0.75;fill:#ffff00;fill-opacity:1;stroke:#b3b3b3;stroke-width:0.24390243;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="circle3196"
+       cx="-280.34396"
+       cy="392.36221"
+       r="4.8780489" />
+    <circle
+       r="4.8780489"
+       cy="392.36221"
+       cx="-206.34396"
+       id="circle3198"
+       style="opacity:0.75;fill:#ffff00;fill-opacity:1;stroke:#b3b3b3;stroke-width:0.24390243;stroke-linecap:round;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/cleaver/README b/cleaver/README
new file mode 100644 (file)
index 0000000..51a805c
--- /dev/null
@@ -0,0 +1 @@
+Original cleaver SVG is from https://openclipart.org/detail/278407/meat-cleaver (public domain)
\ No newline at end of file
diff --git a/cleaver/cleaver.scad b/cleaver/cleaver.scad
new file mode 100644 (file)
index 0000000..3775208
--- /dev/null
@@ -0,0 +1 @@
+rotate ([0, 0, 120]) linear_extrude (2.5) import ("1492890647.svg");
index 3597aec..636d1dd 100644 (file)
@@ -9,7 +9,7 @@
 // Defaults have no tolerance, should be printed using flexible
 // filament for a snug fit
 
 // Defaults have no tolerance, should be printed using flexible
 // filament for a snug fit
 
-module holder (battery_d = 20, battery_h = 3.2, case_wall = 1.7, slot_undersize = 0.4, wire_d = 1.2, cover_pct = 0.4) {
+module holder (battery_d = 20, battery_h = 3.2, case_wall = 1.7, slot_undersize = 0.4, wire_d = 1.5, cover_pct = 0.4) {
      battery_h = battery_h - slot_undersize;
 
      case_d = battery_d + case_wall*2;
      battery_h = battery_h - slot_undersize;
 
      case_d = battery_d + case_wall*2;
diff --git a/etc/hook.scad b/etc/hook.scad
new file mode 100644 (file)
index 0000000..e508e3d
--- /dev/null
@@ -0,0 +1,39 @@
+// Super simple hook
+// Intended for hanging a power strip from the top of a metal pegboard
+
+// vertical and horizontal pieces
+
+// actual measurements of board + power strip
+/* v0_len = 47.5 - 10; */
+/* v1_len = 47.5; */
+/* v2_len = 42.5; */
+
+/* h0_len = 26.75; */
+/* h1_len = 35.25; */
+/* h2_len = 35.25; */
+
+v0_len = 47.5 - 10;
+v1_len = 47.5;
+v2_len = 42.5;
+
+h0_len = 26.75;
+h1_len = 10;
+h2_len = 35.25;
+
+thickness = 0.45 * 6; // four perimeters on prusa mini with 0.4mm nozzle
+width     = 15;       // my power strip has a 20mm wide area where the hook could go
+fillet    = 0;        // doesn't quite work, affects internal dimensions
+
+$fa = 1;
+$fs = 0.5;
+linear_extrude (width) {
+     offset (r = -fillet) offset (r = +fillet) union () {
+         square ([thickness, v0_len]); //v0
+         translate ([0, v0_len]) square ([h0_len + thickness * 2, thickness]); //h0
+         translate ([h0_len + thickness, v0_len - v1_len]) square ([thickness, v1_len]); // v1
+         translate ([h0_len + thickness, v0_len - v1_len - thickness]) square ([h2_len + thickness * 2, thickness]); //h2
+         translate ([h0_len + h2_len + thickness * 2, v0_len - v1_len]) square ([thickness, v2_len]); //v2
+         translate ([h0_len + h2_len + thickness * 2 - h1_len, v0_len - v1_len + v2_len]) square ([h1_len + thickness, thickness]); //h1
+     }
+}
+
index 315cdb8..f34e3b6 100644 (file)
@@ -6,14 +6,15 @@
 // length = 73
 // max depth = 25
 
 // length = 73
 // max depth = 25
 
+// fixme: needs to be 72 I think
 clip_gap    = 73.5;
 clip_gap    = 73.5;
-clip_wall   = 3;
+clip_wall   = 4; // was 3, beefed up a bit after first pair broke
 clip_depth  = 20;
 clip_width  = 5;
 
 hook        = true;
 hook_depth  = 6;
 clip_depth  = 20;
 clip_width  = 5;
 
 hook        = true;
 hook_depth  = 6;
-hook_wall   = clip_wall;
+hook_wall   = 3; // limited by size of rear output tray slots
 
 $fs = 0.1;
 $fa = 0.1;
 
 $fs = 0.1;
 $fa = 0.1;
index 00c4484..3c433fa 100644 (file)
@@ -23,6 +23,8 @@ base_depth = 4;
 slot_depth = 20;
 // Offset for leg slot into the base
 slot_offset = -1;
 slot_depth = 20;
 // Offset for leg slot into the base
 slot_offset = -1;
+// Enable/disable base
+base_enabled = true;
 
 $fs = 0.1;
 
 
 $fs = 0.1;
 
@@ -30,7 +32,11 @@ foot ();
 
 module base () {
     side = slot_length + slot_thickness/2;
 
 module base () {
     side = slot_length + slot_thickness/2;
-    offset (r = wall_thickness) polygon ([ [0, 0], [ side , 0], [0, side] ]);
+    if (base_enabled) {
+        offset (r = wall_thickness) polygon ([ [0, 0], [ side , 0], [0, side] ]);
+    } else {
+        walls ();
+    }
 }
 
 module walls () {
 }
 
 module walls () {
@@ -39,7 +45,7 @@ module walls () {
               square ([slot_thickness, slot_length + slot_thickness/2]);
               square ([slot_length + slot_thickness/2, slot_thickness]);
          }
               square ([slot_thickness, slot_length + slot_thickness/2]);
               square ([slot_length + slot_thickness/2, slot_thickness]);
          }
-         base ();
+         if (base_enabled) { base (); }
      }
 }
 
      }
 }
 
diff --git a/mead-horn/README b/mead-horn/README
new file mode 100644 (file)
index 0000000..03f9fd2
--- /dev/null
@@ -0,0 +1,37 @@
+** Dependencies
+
+Requires https://justinsdk.github.io/dotSCAD/ installed in your
+library folder (~/.local/share/OpenSCAD/libraries/dotscad)
+
+** Customizing
+
+The built-in customizer in openscad can be used to easily tweak
+settings. A few presets that I used are included.
+
+** Print orientation
+
+Use Cura or Slic3r "align to face" feature to lay the mouth of the
+horn on the print bed.
+
+** Print Settings
+
+Intended to be printed hollow:
+
+ - 0 bottom layers
+ - 0 top layers
+ - 0% infill
+ - 0.2mm or lower layer height
+
+Did not have great luck with vase mode @ 0.2mm layer height (overhang
+near end of horn was too great and there were gaps), but might be
+worth a shot at 0.1mm.
+
+*** PETG
+
+Using a prusa mini with a 0.4mm nozzle @ 0.2mm layer height, I needed
+six perimeters to make the horn watertight. Also needed to make the
+final 10-15mm of the horn solid.
+
+** Guidance on making model watertight
+
+ - https://blog.prusaprinters.org/watertight-3d-printing-pt1-vases-cups-and-other-open-models_48949/
\ No newline at end of file
diff --git a/mead-horn/mead-horn.json b/mead-horn/mead-horn.json
new file mode 100644 (file)
index 0000000..7c8b868
--- /dev/null
@@ -0,0 +1,29 @@
+{
+    "parameterSets": {
+        "flatter mouth": {
+            "bottom_radius": "4",
+            "horn_aspect": "[1, 0.92]",
+            "horn_length": "135",
+            "horn_rise": "25",
+            "horn_twist": "0",
+            "top_radius": "30"
+        },
+        "twisty": {
+            "bottom_radius": "4",
+            "horn_aspect": "[1, 0.92]",
+            "horn_length": "135",
+            "horn_rise": "30",
+            "horn_twist": "120",
+            "top_radius": "35"
+        },
+        "round horn": {
+            "bottom_radius": "4",
+            "horn_aspect": "[1, 1]",
+            "horn_length": "135",
+            "horn_rise": "25",
+            "horn_twist": "0",
+            "top_radius": "30"
+        }
+    },
+    "fileFormatVersion": "1"
+}
diff --git a/mead-horn/mead-horn.scad b/mead-horn/mead-horn.scad
new file mode 100644 (file)
index 0000000..b3aeaa4
--- /dev/null
@@ -0,0 +1,48 @@
+// Simple 3D Printable Drinking Horn
+// Copyright (c) 2021 Clinton Ebadi <clinton@unknownlamer.org>
+
+
+// Released under the https://wiki.creativecommons.org/wiki/CC0
+// To the extent possible under law, Clinton Ebadi has waived all
+// copyright and related or neighboring rights to Simple 3D Printable Drinking Horn.
+
+// Single person mead horn, for winter solstice 2021 since sharing
+// mead from the real horn is probably still unsafe.
+
+use <dotscad/shape_circle.scad>;
+use <dotscad/helix_extrude.scad>;
+
+bottom_radius =   4;
+top_radius    =  33;
+horn_length   = 135;
+horn_rise     =  40;
+horn_twist    =   0;
+horn_aspect   = [ 1.0, 0.92 ]; // [0:0.01:100]
+
+module helix_horn () {
+     helix_levels = 1/6;
+
+     arc_measure  = (360 * helix_levels) * (3.13 / 180);
+     arc_length   = horn_length;
+     helix_radius = (arc_length / arc_measure);
+
+     // Round off end
+     // todo: dotscad rounded cone instead?
+     translate ([helix_radius, 0, 0]) scale ([horn_aspect[0], 1/2, horn_aspect[1]]) intersection () {
+         sphere (r = bottom_radius);
+         rotate ([90, 0, 0]) cylinder (h = bottom_radius, r = bottom_radius, center=false);
+     }
+
+     shape_pts = [ for (pts = shape_circle (radius = bottom_radius)) [ pts[0] * horn_aspect[0], pts[1] * horn_aspect[1] ] ];
+
+     helix_extrude(shape_pts,
+                  radius = helix_radius,
+                  scale = top_radius/bottom_radius,
+                  levels = helix_levels,
+                  level_dist = horn_rise / helix_levels,
+                  vt_dir = "SPI_UP",
+                  twist = horn_twist / helix_levels
+         );
+}
+
+helix_horn ($fs = 0.1, $fa = 1);
index 8ad72e0..e314b97 100644 (file)
@@ -33,6 +33,9 @@ $fa=4; // [20:Low Res, 10:Normal Res, 4:Hi Res]
 base_diameter = 30;
 base_height   = 16.2;
 bulb_diameter = 9;
 base_diameter = 30;
 base_height   = 16.2;
 bulb_diameter = 9;
+// Built in sacrificial support layer
+tea_light_support = true;
+tea_light_support_thickness = 0.3;
 
 /* [Hidden] */
 $fs=0.1;
 
 /* [Hidden] */
 $fs=0.1;
@@ -83,9 +86,11 @@ module tea_light_base () {
          }
          // sacrificial support layer, subtracted since this will be
          // subtracted from the ghost body
          }
          // sacrificial support layer, subtracted since this will be
          // subtracted from the ghost body
-         translate ([0, 0, base_height+0.7]) #cylinder (d=base_diameter+2, h=0.3);
+         if (tea_light_support) {
+              translate ([0, 0, base_height+(1 - tea_light_support_thickness)])
+                   #cylinder (d=base_diameter+2, h=tea_light_support_thickness);
+         }
      }
      }
-
 }
 
 module pacguy () {
 }
 
 module pacguy () {