summaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md313
1 files changed, 313 insertions, 0 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..10a8611
--- /dev/null
+++ b/README.md
@@ -0,0 +1,313 @@
1# 3D Printable Parametric Cubbies #
2
3::: { .parts }
4
5Bottom Part:
6: [![Bottom Part](pictures/bottom.png "Bottom part")](pictures/side.png)
7
8Side Part:
9: [![Side](pictures/side.png "Side part"){#fig:side}](pictures/side.png)
10
11:::
12
133D printable parametric cubbies to store your 3D things. There are two distinct
14shapes — a `bottom` and a `side` — that are generated to the dimensions of your
15things, 3D printed, then assembled into modular storage units. The parts are
16optimized for printing by using [sparse
17structures](https://github.com/revarbat/BOSL2/wiki/walls.scad#module-sparse_strut)
18(to save material) that lay flat on the print bed (for ease of printing).
19
20## Pictures ##
21
22::: { .figs }
23
24![[Bottom part (printed)](pictures/bottom-printed-full.jpg "Bottom part, printed (full resolution)")](pictures/bottom-printed-thumbnail.jpg)
25
26![[Side part (printed)](pictures/side-printed-full.jpg "Side part, printed (full resolution)")](pictures/side-printed-thumbnail.jpg "Side part, printed")
27
28![[The Smurftruder with a fresh print](pictures/smurfstrusion-full.jpg "Smurfstrusion (full resolution)")](pictures/smurfstrusion-thumbnail.jpg)
29
30![[Mounted Cubbies (empty)](pictures/cubbies-mounted-empty-full.jpg "Mounted Cubbies (full resolution)")](pictures/cubbies-mounted-empty-thumbnail.jpg)
31
32![[Mounted Cubbies (empty, viewed from an angle)](pictures/cubbies-mounted-empty-angle-view-full.jpg "Empty cubbies, mounted (full resolution)")](pictures/cubbies-mounted-empty-angle-view-thumbnail.jpg)
33
34![[Mounted Cubbies (filled)](pictures/cubbies-full-full.jpg "Mounted cubbies, filled (full resolution)")](pictures/cubbies-full-thumbnail.jpg)
35
36![[Cubby Development](pictures/cubby-development-full.jpg "Cubby Development (full resolution)")](pictures/cubby-development-thumbnail.jpg)
37
38:::
39
40## Instructions ##
41
42### 🚫 Do NOT Scale in a Slicer 🚫 ###
43
44All models should be generated by specifying, at minimum, the parameters
45`cubby_width`, `cubby_depth`, and `cubby_height` in `cubbies.scad` (ways to do
46this are described below.) The dovetail joints are generated to a constant size
47(controlled through the parameters `tab_width`, `tab_padding`, and
48`tab_tolerance`) and should not be expected to fit after being scaled. Cubbies
49can be generated in in one of the following ways:
50
51 * Using the Thingiverse Customizer
52
53 * Using [OpenScad](https://openscad.org "Homepage for OpenSCAD \"The
54 Programmers Solid 3D Cad Modeller\"") -- either by using its builtin
55 customizer (choose `Window -> Customizer` from the menu bar if it is not
56 visible), or by modifying the variables at the top of the `cubbies.scad`
57 file. As mentioned above, the minimum paramaters to generate a custom sized
58 cubby are `cubby_width`, `cubby_depth`, and `cubby_height`. (Even those
59 arguments can be omitted, and your cubby will be whatever abritrary size I
60 decided as defaults (`40`,`120`,`90`).)
61
62 * There are two scripts for generating cubbies from the commandline:
63 `cubbies.sh` (run [`./cubbies.sh -h` for details](#cubbies.sh) can generate
64 entire sets of cubbies, and `shopenscad.sh` (run `./shopenscad.sh -h` for
65 details[^1]) generates individual parts.
66
67For a single cubby, you will need to print the side piece twice, and the bottom
68piece once. To add additional cubbies, print one bottom and one side. The bottom
69and side pieces can be flipped upside down so that the bottom piece's tabs fit
70into the extra unused holes of the side piece. You can also use this to control
71whether the screw tabs end up on the inside or outside of the cubby.
72
73You can print tolerance test fit pieces (which are the minimum material
74necessary to confirm that the pieces will fit with your printer and slicer
75settings). These test pieces were generated using `dovetail_test_fits.sh`, which
76you can use to generate your own at different tolerances (run
77`dovetail_test_fits.sh -h` for details). You can also generate them in `OpenSCAD`
78by specifying either `male_tabs` or `female_tabs` for the `part` paramaters (the
79`cubby_depth` paramater is respected as the length of those dovetail test
80pieces).
81
82## Parameters ##
83
84`part` Controls which part will be generated, and can be any of:
85
86: `bottom` — a bottom part whose dimensions will be `cubby_width` x `cubby_depth`.
87
88: `side` — a side part whose dimensions will be `cubby_depth` x `cubby_height`.
89
90: `female_tabs` — generates a shape consisting of the minimum amount of material
91 needed to test the dovetail joint fit. `cubby_depth` is respected as the
92 length that the tab holes (mortises) should run. (I have found that although
93 my printer could print a single tab accurately, spanning the entire length of
94 `cubby_depth` gave me the most accurate test.
95
96: `male_tabs` — as `female_tabs` above, except with male tabs (tenons)
97
98: `view_fit` — used as a debugging aid during development -- displays two sets
99 of tops and bottoms posiitioned to inspect tab fit.
100
101: `both` — a `bottom` and a `side` laid next each other. (These may look like
102 two seperate models, but is only one model, and obnixious to work with in a
103 slicer. Generating them seperately will allow you to manipulate them
104 individually).
105
106### Cubby Dimensions ###
107
108`cubby_width`
109: How wide the cubby should be, used as one dimension of the `bottom` and `male_tabs` `part`.
110
111`cubby_depth`
112: How deep the cubby should be, used as one dimension of the `side` and `female_tabs` `part`.
113
114`cubby_height`
115: How deep the cubby should be, used as one dimension of the `side`.
116
117`thickness`
118: How thick the `bottom`, `side`, or test fit pieces (`male_tabs`,
119 `female_tabs`) should be. When either part is eventually laid flat on the
120 print bed, this effectively becomes the `z` axis height. (The `tab_depth` is
121 dictated by this `thickness` dimension.)
122
123`strut_thickness`
124: The thickness of the strut members in the sparse structures. Applies to both
125 `bottom` and `side`.
126
127`max_bridge`
128: Maximum bridging distance between cross-braces of sparse struts. Applies to
129 `bottom`, and `side`.
130
131### Tab/Dovetail Dimensions ###
132
133`tab_width`
134: The width of each tab.
135
136`tab_padding`
137: The distance of the first tab from the edge, as well as between each tab.
138
139`tab_tolerance`
140: How much bigger the hole (or mortise) should be than the tab (tenon)
141
142![[Dovetail Test Fit](pictures/dovetail_test_fit.jpg-full "Dovetail Test Fit (full resolution)")](pictures/dovetail_test_fit-thumbnail.jpg)
143
144## Source Repository ##
145
146 The source repository is a Git repository that is hosted both on a read-only
147 HTTPS URL and on a read-write SSH url.
148
149 You can push to the read-write URL simply without creating any user account.
150 You only need to generate a SSH public key on your own system.
151
152### Read-Only Clone ###
153
154 The read-only clone command is:
155
156 git clone --recurse-submodules https://git.cryptonomic.net/cubbies.git
157
158### Read-Write Clone ###
159
160 To clone from the read-write URL, you first need to have your own ssh identity.
161 Then you can run `git clone`.
162
163 # Generate an SSH key if needed
164 command -v ssh-keygen || { echo Please Install OpenSSH; exit; }
165 [ -d ~/.ssh ] || mkdir ~/.ssh
166 [ -e ~/.ssh/id_ed25519.pub ] || ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N
167
168 # Add the public key for cryptonomic.net
169 echo cryptonomic.net ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPK7K8KsygvXtjw0yH4h43bwBGKq9oWBdCa1eY5rzT5D >> ~/.ssh/known_hosts
170
171 # Perform the clone
172 git clone --recurse-submodules ssh://d@cryptonomic.net:public_git/cubbies.git
173
174 You can push your changes back simply:
175
176 git add .
177 git commit -a -m 'commit message'
178 git push
179
180## Cubbies on the Web ##
181
182 * thingiverse
183 * thangs
184 * cults3d
185
186## Dependencies/Credits ##
187
188 * [OpenSCAD](https://openscad.org "OpenSCAD")
189 * [Belfry OpenSCAD Library](https://github.com/revarbat/BOSL "Belfry OpenSCAD Library")
190
191## Contributions ##
192
193![Megachurch Pastor](pictures/kenneth-copeland.jpg) ![Donation Basket](pictures/basket.jpg)
194
195
196- PayPal: <https://paypal.me/svasilogianis>
197- Venmo: <https://venmo.com/u/Steven-Vasilogianis>
198- CashApp: <https://cash.app/$svasi>
199
200## Shell Scripts ##
201
202### cubbies.sh ###
203
204```
205$ ./cubbies.sh -h
206./cubbies.sh: generate sets of cubbies. You will need print the side piece twice for your
207first bottom piece, then a single side piece for each additional bottom piece.
208
209Usage:
210./cubbies.sh cubby-depth cubby-height cubby-width1 [cubby-width2 ... cubby-widthN]
211
212Examples:
213
214 ./cubbies.sh 150 90 20
215
216 Generates two total pieces: a side piece (150mm depth, 90mm height) and a
217 bottom piece (150mm depth and 20mm width). You will need to print the side
218 piece twice and bottom piece once.
219
220 ./cubbies.sh 180 120 20 30 35
221
222 Generates four total pieces, which can be assembled to form a row of
223 cubbies: one side piece (180mm depth, 120mm height) and three bottom pieces,
224 with widths of 20mm, 30mm, and 35mm (and each sharing the same depth of
225 180mm). The side piece will need to be printed 4 times, and each bottom
226 piece printed once.
227
228 thickness=3 strut_thickness=4 ./cubbies.sh 200 140 20
229
230 You can override any of the other variables from your scad file by passing
231 them into ./cubbies.sh in this manner.
232```
233
234### shopenscad.sh ###
235
236```
237$ ./shopenscad.sh -h
238./shopenscad.sh: parse and execute OpenSCAD files, allowing default variables from input scad
239 to be overridden with values supplied from the shell. (The parsing of scad
240 files is done from the shell mostly with sed, and is very primitive)
241
242Usage: ./shopenscad.sh [-h] [-n] [-p] [-i] [-o OUTPUT-FILENAME] INPUT.scad
243
244 -h, --help display this help
245 -p, --print-vars print variables parsed from INPUT.scad
246 -i, --interactive show output command and query for execution
247 -n, --no-act show output command, do not execute
248 -s, --shell-skel output a skeleton shell script for generating models
249 -o, --output-filename Specify an output filename. The following variables are
250 available to you:
251
252 $VALUES - all values from INPUT.scad. This is the
253 default (-o '${VALUES}.stl'):
254 cube-15-10-5.stl
255
256 $ALL - all variable names and values from INPUT.scad
257 (-o '${ALL}.stl'):
258 shape=cube,width=15,height=10,depth=5.stl
259
260 Additionally, all variables parsed from INPUT.scad
261 are available in the associatve array , e.g.:
262 -o '${SCAD[part]}.stl'
263
264Usage examples:
265
266 1) Run openscad with default values from input scad file:
267
268 $ ./shopenscad.sh input.scad
269
270 2) You can override variables in the input file with variables passed in
271 through the shell; this will override "part" and "cubby_width"
272 paramaters from input scad file. (Note that if the part is a string,
273 you need to include quotes.):
274
275 $ cubby_width=200 part='"bottom"' ./shopenscad.sh input.scad
276
277
278 3) Generate multiple models:
279
280 $ for w in 250 300 350 400; do
281 cubby_width="" part="bottom" ./shopenscad.sh cubbies.scad
282 done
283```
284
285### test_fits.sh ###
286
287```
288$ ./test_fits.sh -h
289Usage:
290./test_fits.sh
291./test_fits.sh [depth] [tolerance1 tolerance2 .. toleranceN]
292
293By default five test fit pieces are generated with a length of 120mm at the
294tolerances 0.1mm, 0.2mm, 0.3mm, 0.4mm, and 0.5mm.
295
296Over ride the defaults by supplying paramaters; the first parameter the depth and the rest are
297taken as tolerances.
298```
299
300## GPLv3 License ##
301
302Copyright (C) Steven Vasilogianis
303
304This program is free software: you can redistribute it and/or modify it under
305the terms of the GNU General Public License as published by the Free Software
306Foundation, either version 3 of the License, or (at your option) any later
307version.
308
309[^1]: OpenSCAD already allows you to generate models with varying paramaters
310through, e.g., `OpenSCAD -D "param1=100" -D "param2=10" scadfile.scad -o
311output.stl`. Now you're going to want to change the output.stl filename to avoid
312overwriting a previously generated model; generally, the information going into
313your variables is useful to have in the output filename.