◧ print-bench

ovodyo — kinetic dice-ball clock

A clean-room, print-bench-native re-creation of Mectolab's "ovodyo" kinetic dice-ball clock, built as the v0 base every issue in the #599 improvement backlog modifies. The reference study and the improvement brainstorm were produced in-session (design study + ovodyo-improvement-brainstorm.md).

Overview

Hero — the whole clock

Hero Detail 1 / 4

Hero — the whole clock

A desk clock that tells the time on two slowly tumbling faceted balls: the left ball shows the hour, the right ball the minutes in five-minute steps, each number sitting on one of twelve pentagon plaques. A helical slot cut through each shell frames the gears inside, so the mechanism is the ornament. This is a clean-room re-creation, in print-bench, of the "ovodyo" clock by Mectolab — built as a v0 base the improvement backlog (#599) refines.

v0 — a working substrate, not the finished clock. The geometry renders, gates and slices, and the signature look is here: chunky faceted dice-balls (chamfered dodecahedra — twelve flush pentagon faces plus triangular corner facets), bold numerals cut clean through each shell to a red interior (stencilised so no counter drops out), and the reference's exposed gearing in the base — a geared stepper and reduction gear-train at each pod, a bevel take-off up each stalk, and a central electronics bay. The base drivetrain and the red interior are shown as preview-only coloured parts (a single-material print is one colour; the two colours are the intent). The balls now screw together on a captive threaded seam (#602) and the base carries a red structural core — a ballast keel with sealed shot pockets (#603). Several things are still deliberately simplified and tracked as issues: the base gears represent the drive but aren't a real meshing involute differential; there is no reusable space-frame library (#604); the slot isn't yet a tunable brand module (#601); the CoG/tip-over check now runs from ci.cog as an advisory WARN (it does not fail the gate). The first gate emit on tip d8d9cf5 measured STABLE (38.28 mm clearance under solid-mesh PLA 1.24, which over-masses the balls vs 15–20 % infill) — that is one measured tip, not a promise the clock stays STABLE after a later change. ≈55 g of shot remains a starting fill; if a run says TIP-RISK, follow the care playbook in NOTES.md rather than treating STABLE as a claim. There's no committed two-tone reveal render yet (#600). See NOTES.md.

What you get

The printable parts (the assembled render is a preview only — a single STL of the whole clock would print as one fused lump):

  • hours-top + hours-bottom — the two halves of the ~78 mm hours ball. It is split pole-up through the triangle band, so no number face is cut by the seam: the top carries 2, 7, 5, 9, 11, 3 and the bottom 6, 1, 8, 4, 12, 10 (the split follows the tumble stop table, not an even/odd rule — see NOTES.md). Print one of each for a complete hours ball.
  • minutes-top + minutes-bottom — likewise for the minutes ball: top 10, 35, 25, 45, 55, 15, bottom 30, 05, 40, 20, 00, 50 (00–55 in 5s).
  • base-segment — the constant-section centre truss segment (~127 mm).
  • base-end — one of the two tapering end wings that come to a needle point (a Ø5.6 mm round nose) and carry a bored stalk boss over the motor pod, with two small recessed foot pads under the wide end for stick-on bumpers (print two; three segments total make the ~383 mm base).
  • base-core — the red structural core: a slim ballast keel that slides into the centre segment and drops onto the deck struts (its underside is the lattice's negative, so it seats one way only) under the PCB, with two sealed pockets you fill with ~55 g of Ø2 mm steel shot through the plugged ports on its end face. Print it in red — it is a working part.
  • base-plug — the tapered plug that closes each ballast port (print two).

The printable deliverable is the multi-object plate, build/ovodyo-plate.3mf (built by ./scripts/plate.sh ovodyo from ci.plate): the eight production parts as eight separate objects a slicer imports as parts — duplicate base-end and base-plug in the slicer to print two of each.

  • mock-drive — a single representative reduction gear, kept as a gated printability sample of the (otherwise preview-only) drivetrain. It is not a placed assembly part and is not included on the production plate.

The base drivetrain (gear-trains, steppers, bevels, PCB) and the balls' red interior are preview-only — colours are ignored on STL export, so they are not printable parts. See them assembled in the hero image and the base-mech gallery preview. Select a part with -D 'part="hours-top"' (or base-mech / pod-drive to preview the mechanism); the default render is the assembled clock.

  • Material: PLA (white shell + red interior/mechanism is the intent; v0 is single-material).
  • Layer height: 0.2 mm.
  • Infill: 15–20 %.
  • Supports: none. The truss and mock drive print support-free, and the ball halves print pole-down (see Orientation), which makes the cavity an open bowl and keeps every facet and the seam ring's 45° thread flanks support-free. The halves' printcheck caveats are by-design underside texture on the chamfer facets ringing the pole — they sit ~52° off-axis when pole-down and print with slight droop, no support — so keep auto-supports off, or the slicer fills the open bowl and welds the stalk boss.
  • Orientation: ball halves pole-down — the flat pole pentagon is the first layer and the seam ring is the top of the print (as the parts render); truss segments bottom-chord-down (as modeled); mock drive flat; the seam coupon as rendered; core keel flat-bottom-down; plug head-down.
  • Seam (slicer): the stock Aligned seam stacks a visible z-ridge down the ≥6 mm mating annulus. Paint the seam onto the helical-slot interruption, or set Back or Random, so the closed join reads as one fine line.
  • Vitamins for the base: Ø2 mm steel shot for the core's ballast pockets (≈ 55 g is a starting fill you may need to adjust — ci.cog runs the advisory CoG/tip-over check; TIP-RISK is a WARN, not a gate failure). The first emit on tip d8d9cf5 measured STABLE (38.28 mm clearance); this page still does not claim the clock is STABLE for every future change. If a later sticky or cog-check.sh line says TIP-RISK, the usable next steps are in NOTES.md TIP-RISK care (read that CoG table, add ~5 g split across both pockets if they are not already packed, re-read the WARN — do not change the truss). Fill and plug before the core goes in, plus four Ø5 mm × 1.5 mm hemispherical stick-on silicone bumpers for the foot recesses.

Parameters

The handful most worth tuning (all at the top of ovodyo.scad, grouped in Customizer sections; override with -D 'name=value'):

ParameterDefaultWhat it does
ball_d78 mmball outer diameter (across the pentagon faces)
wall2.2 mmshell wall thickness at the pentagon faces
glyph_h14 mmnumeral height (bold, near the pentagon inradius)
numerals_throughtruecut numbers clean through to the red interior; false = debossed recess
bridge_w1.2 mmstencil bridge width — the ties that keep 0/4/6/8/9 counters attached
slot_width10 mmhelical mechanism-window width
slot_turns0.5how far the slot wraps
seam_tol0.25 mmradial clearance of the captive threaded seam — the one fit to tune; print the seam coupon first and step it by 0.05 (bigger = looser)
seg_len127 mmone base-segment length (×3 = 383 mm)
core_fit0.3 mmradial clearance of the core's strut sockets — tune on your printer so the keel drops onto the deck without rattling
core_len120 mmlength of the red core keel inside the centre segment
tip_d5.6 mmround nose at each wing tip (2 × strut_d)
foot_recess_d4.9 mmfoot-pad recess, sized to a Ø5 mm stick-on bumper

The ball's faceting is facet in ovodyo.scad (default 1.05): 1.0 gives the biggest triangular corner facets (≈ an icosidodecahedron), ≥1.12 a plain dodecahedron with clean corners.

Assembly & use

Print a top and a bottom half per ball (they carry different numbers) and screw them together around the equator: the bottom half carries a short threaded ring standing up from its flat seam face, the top half the matching thread inside its rim. Line the facets up, drop the top half on — it only enters at that one clocking — and turn it exactly one full turn until the flat faces meet; the facets line up again as they close and the seam reads as one fine line. No glue, no dowels, and it unscrews the same way to reach the mechanism. Print the seam coupon first (ovodyo-coupon.scad: a male ring and a female puck side by side) and tune seam_tol in 0.05 mm steps until the puck runs on by hand with light drag and seats without rattle — then render the halves with that value. A brass rod (≈4.5 mm) is the support stalk: it seats into the bored boss on each end segment and reaches the ball centre. The three truss segments join end to end (printed bolt/flange joints are #603).

The red core goes in before the clock stands up, and the order matters: 1. fill each ballast pocket with Ø2 mm steel shot → 2. wedge a base-plug into each port → 3. slide the keel into the centre segment until it drops onto the deck struts (it seats one way only). Fill and plug before you slide — a seated keel has no port access. Press a Ø5 mm silicone bumper into each of the four foot recesses.

The real clock is driven by a geared stepper through a bevel differential and homed with a hall sensor — the drivetrain here is a preview representation and the electronics are out of scope for this geometry v0; the printed drive interface (a hub in the ball, an index that lands a face upright, a real meshing differential) is the mechanical work tracked in #600/#604. See NOTES.md and the backlog.

Workbench

View in 3D

Inspect the real geometry — drag to rotate, scroll to zoom. The model is rendered from this design's own source at its default settings, right in your browser; nothing is uploaded.

Make it fit

This design has 45 tunable parameters. Change them and render your own STL — OpenSCAD runs in your browser, so nothing is uploaded and nothing is installed.

An STL you configure here is ungated. The files this project ships have each passed a printability check and a PrusaSlicer test-slice; your variant has not. Treat it as a starting point, and print the fit coupon first if the design has one.