Flip, rotate, and stack a column of discs to reveal the halftone image around the cylinder you build.
Bonus: If this project looks like too much printing for you, note the design I used around the cylinder means that you can print discs 0 through 7 instead of all 16 and still have a fully-functional puzzle (half-height, but with half the printing time! See the shorter-stack photo.).
Goals of this project:
Contain enough intrigue that I can print my next one with a sweet, sweet Dremel 3D45
Emulate the satisfying experience of stacking and playing with poker chips
Include pixelated art (I eventually allowed myself to use halftoning with dots to add interest, better utilize the abilities of a 3D printer, and make the puzzle slightly more challenging)
Limit the difficulty to a reasonable amount (I wanted my children to enjoy it, and I wanted coworkers to be able to have a reasonable shot at finishing it without killing their productivity.) This goal, along with the satisfying feel of locking together, was met by enforcing rotation permutations to 9 via raised bumps and correlating embossed areas for them to settle.
Include a an embossed-in solution marking in such a way it could not be inferred (or even accidentally remembered from a previous build) by the solver (I used random series of round and square markings that were printed on the top and bottom and at random hour-on-a-clock locations that are are used in the solution manual as disc identifiers and flip and rotation alignment information)
Eliminate the hints that 3D printing typically brings to puzzles: Often the top is distinguishable from bottom, rotation can be inferred by direction of lines or even how much detail an edge holds. (I overcame this by having my script randomly flipping and rotating the pieces it built)
Keep everything parameterized so I can build customized pieces upon request, with coder-style effort (lack of, or at least minimal)
Allow no-support printing
Also be useful as something besides a puzzle. This one attempts to be meta puzzle art but for sure at least succeeds as doubling as a desk pen holder
In order to most-efficiently meet all my goals, with me being a software engineer by trade, I wrote a dirty Java app to read in an image, spit out arrays of parameters (disc rotation, pixel colors, solution markers, etc), and I fed those parameters into a 450-line OpenSCAD script that built and aligned the actual pieces.
Bottom disc listed first, top disc listed last. Match the series of circles and squares with the key to find which disc, and rotate that disc so that series matches the on-a-clock position noted.
0. ▢▢◯◯◯◯ up (or ◯◯◯◯▢▢ down), markings series rotated to 3 o'clock position
1. ▢▢◯▢▢▢ up (or ▢▢▢◯▢▢ down), markings series rotated to 12 o'clock position
2. ▢◯▢▢▢▢ up (or ▢▢▢▢◯▢ down), markings series rotated to 9 o'clock position
3. ◯▢◯▢▢▢ up (or ▢▢▢◯▢◯ down), markings series rotated to 10 o'clock position
4. ▢◯▢▢▢◯ up (or ◯▢▢▢◯▢ down), markings series rotated to 5 o'clock position
5. ▢◯◯▢▢▢ up (or ▢▢▢◯◯▢ down), markings series rotated to 4 o'clock position
6. ◯▢◯▢▢◯ up (or ◯▢▢◯▢◯ down), markings series rotated to 11 o'clock position
7. ▢▢◯▢◯◯ up (or ◯◯▢◯▢▢ down), markings series rotated to 3 o'clock position
8. ◯▢◯▢◯▢ up (or ▢◯▢◯▢◯ down), markings series rotated to 3 o'clock position
9. ▢▢▢▢▢◯ up (or ◯▢▢▢▢▢ down), markings series rotated to 12 o'clock position
10. ▢▢◯◯◯▢ up (or ▢◯◯◯▢▢ down), markings series rotated to 12 o'clock position
11. ◯◯◯◯◯▢ up (or ▢◯◯◯◯◯ down), markings series rotated to 12 o'clock position
12. ▢◯◯▢▢◯ up (or ◯▢▢◯◯▢ down), markings series rotated to 8 o'clock position
13. ◯▢◯◯◯▢ up (or ▢◯◯◯▢◯ down), markings series rotated to 7 o'clock position
14. ◯◯◯◯▢◯ up (or ◯▢◯◯◯◯ down), markings series rotated to 8 o'clock position
15. ◯◯▢▢▢▢ up (or ▢▢▢▢◯◯ down), markings series rotated to 3 o'clock position