diff options
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 313 |
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 | |||
5 | Bottom Part: | ||
6 | : [![Bottom Part](pictures/bottom.png "Bottom part")](pictures/side.png) | ||
7 | |||
8 | Side Part: | ||
9 | : [![Side](pictures/side.png "Side part"){#fig:side}](pictures/side.png) | ||
10 | |||
11 | ::: | ||
12 | |||
13 | 3D printable parametric cubbies to store your 3D things. There are two distinct | ||
14 | shapes — a `bottom` and a `side` — that are generated to the dimensions of your | ||
15 | things, 3D printed, then assembled into modular storage units. The parts are | ||
16 | optimized for printing by using [sparse | ||
17 | structures](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 | |||
44 | All models should be generated by specifying, at minimum, the parameters | ||
45 | `cubby_width`, `cubby_depth`, and `cubby_height` in `cubbies.scad` (ways to do | ||
46 | this 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 | ||
49 | can 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 | |||
67 | For a single cubby, you will need to print the side piece twice, and the bottom | ||
68 | piece once. To add additional cubbies, print one bottom and one side. The bottom | ||
69 | and side pieces can be flipped upside down so that the bottom piece's tabs fit | ||
70 | into the extra unused holes of the side piece. You can also use this to control | ||
71 | whether the screw tabs end up on the inside or outside of the cubby. | ||
72 | |||
73 | You can print tolerance test fit pieces (which are the minimum material | ||
74 | necessary to confirm that the pieces will fit with your printer and slicer | ||
75 | settings). These test pieces were generated using `dovetail_test_fits.sh`, which | ||
76 | you 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` | ||
78 | by 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 | ||
80 | pieces). | ||
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 | ||
207 | first bottom piece, then a single side piece for each additional bottom piece. | ||
208 | |||
209 | Usage: | ||
210 | ./cubbies.sh cubby-depth cubby-height cubby-width1 [cubby-width2 ... cubby-widthN] | ||
211 | |||
212 | Examples: | ||
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 | |||
242 | Usage: ./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 | |||
264 | Usage 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 | ||
289 | Usage: | ||
290 | ./test_fits.sh | ||
291 | ./test_fits.sh [depth] [tolerance1 tolerance2 .. toleranceN] | ||
292 | |||
293 | By default five test fit pieces are generated with a length of 120mm at the | ||
294 | tolerances 0.1mm, 0.2mm, 0.3mm, 0.4mm, and 0.5mm. | ||
295 | |||
296 | Over ride the defaults by supplying paramaters; the first parameter the depth and the rest are | ||
297 | taken as tolerances. | ||
298 | ``` | ||
299 | |||
300 | ## GPLv3 License ## | ||
301 | |||
302 | Copyright (C) Steven Vasilogianis | ||
303 | |||
304 | This program is free software: you can redistribute it and/or modify it under | ||
305 | the terms of the GNU General Public License as published by the Free Software | ||
306 | Foundation, either version 3 of the License, or (at your option) any later | ||
307 | version. | ||
308 | |||
309 | [^1]: OpenSCAD already allows you to generate models with varying paramaters | ||
310 | through, e.g., `OpenSCAD -D "param1=100" -D "param2=10" scadfile.scad -o | ||
311 | output.stl`. Now you're going to want to change the output.stl filename to avoid | ||
312 | overwriting a previously generated model; generally, the information going into | ||
313 | your variables is useful to have in the output filename. | ||