Japanese Coin Caddy
A desk block with six round wells for Japanese coins, one per denomination from 1 to 500 yen, each sized to its coin so the stack stays neat. A finger slot runs down the outside of every well so the coins can be lifted out, and the denomination is engraved on the face under each slot. The front row holds 1, 5 and 10 yen, the back row 50, 100 and 500 yen; the default holds 20 coins per well and measures 95 x 84 x 41 mm. Prints flat on its base with no supports. Adjustable parameters: coins per well, well play, wall thickness and slot width.
# Japanese Coin Caddy - six labelled wells for 1 to 500 yen coins, with finger slots
#
# A desk block with one round well per denomination, each sized to its coin so the
# stack stays neat, and a finger slot down the outside of every well to lift coins out.
# The denomination is engraved on the front or back face under each slot. Front row: 1, 5, 10 yen;
# back row: 50, 100, 500 yen. Prints flat on its base with no supports (the slots are
# open to the top, the wells are blind).
#
# Coin diameters (mm): 1 yen 20.0, 5 yen 22.0, 10 yen 23.5, 50 yen 21.0, 100 yen 22.6,
# 500 yen 26.5; the thickest coin is 1.8 mm.
@param 10..40 step:1 desc:"Coins per well"
$coins = 20
@param 0.6..1.5 step:0.1 desc:"Play added to each well (mm, on the diameter)"
$play = 1.0
@param 2..4 step:0.5 desc:"Wall between wells and floor thickness (mm)"
$wall = 3
@param 10..16 step:1 desc:"Finger slot width (mm)"
$slot_w = 13
$dia = [20.0, 22.0, 23.5, 21.0, 22.6, 26.5]
$lbl = ["1", "5", "10", "50", "100", "500"]
$depth = $coins * 1.8 + 2
$h = $depth + $wall
$pitch = 26.5 + $play + $wall # column pitch from the widest coin
$row_d = 26.5 + $play + $wall + 10 # row pitch: room for the label between the rows
$len = 3 * $pitch + $wall
$wid = 2 * $row_d + $wall
$cx = [$wall + $pitch * (($i % 3) + 0.5) for $i in range(6)]
$cy = [$wall + 6 + ($row_d - 6) / 2 + floor($i / 3) * $row_d for $i in range(6)]
$block = box $len $wid $h center:(false, false, false) | edges =Z | fillet 4 | edges >Z | chamfer 1
$wells = union [cylinder (($dia[$i] + $play) / 2) ($depth + 1) at:($cx[$i], $cy[$i]) center:(true, true, false)
| translate 0 0 $wall for $i in range(6)]
# finger slots: front row opens through the front face, back row through the back face
$slots = union [box $slot_w ($row_d / 2 + 12) ($depth - 3) at:($cx[$i], $cy[$i] + (if $i < 3 then -1 else 1) * ($row_d / 4 + 6)) center:(true, true, false)
| translate 0 0 ($wall + 3) for $i in range(6)]
# labels: engraved on the front face under each front slot, and on the back face under each back slot
$front_marks = union [text $lbl[$i] 4 at:($cx[$i], 3) | extrude 1.5 | rotate 90 0 0 | translate 0 0.6 0 for $i in range(3)]
$back_marks = union [text $lbl[$i] 4 at:($cx[$i], 3) angle:180 | extrude 1.5 | rotate 90 0 0 | translate 0 ($wid + 0.9) 0 for $i in range(3, 6)]
$marks = $front_marks + $back_marks
$caddy = $block - $wells - $slots - $marks
assert $caddy.solids == 1
assert $caddy.bbox.x ~ $len
assert $caddy.bbox.y ~ $wid
assert $caddy.bbox.z ~ $h
assert $pitch - (26.5 + $play) >= 2.5 # wall between neighbouring wells
assert $caddy.volume < $block.volume - 6 * 3.14 * 100 * $depth # all six wells are cut
assert $caddy.faces > $block.faces + 6 * 3 + 6 * 3 + 40 # wells, slots and the engraved labels are all there
print "caddy" $caddy.bbox
print "well depth (mm)" $depth
$caddy