Open hardware · MIT

The devices your hub actually commands.

Zana — Swahili for tools — is an open-hardware line for the physical world: reference designs for the machines a home or business runs on. The first is an autonomous robot mower with an inductive charging dock. FreeCAD bodies, KiCad boards, and a wireless-power model whose every published number is re-derived by CI.

4chassis iterations
5KiCad boards
91.5%link efficiency
MITlicence
Axonometric render of the mower's chassis shell — a rounded body with two wheel arches cut into its sides — generated from the tracked mowbot3-Body.stl mesh.
W 364.7 mm D 360.0 mm H 128.0 mm
ProjectZana / mower
StagePrototype — reference designs
FormatsFCStd · STEP · 3MF · KiCad
Unitsmm
FirmwareNone in this repo
Bill of materialsNot yet written
Assembly guideNot yet written
LicenceMIT
Inventory

Exactly what's here, and what state it's in.

This is recovered prototyping work, not a kit. Some of it opens in FreeCAD and prints today; one part of it runs and is covered by tests; one part is source nobody has ever compiled. Every row says which — because the fastest way to waste someone's weekend is to let them find out after they've cleared the bench.

AreaContentsState
Chassis & body FreeCAD bodies across four iterations (mower/mowbot*.FCStd), wheels, casting moulds, motor supports Design files
Drivetrain Shafts, couplers including an aluminium variant, GT2 pulley, castor fitting Design files
Electronics KiCad projects — TRANSMITTER (thru-hole and SMD), MAINBOARD, EMF_SENSOR, RAIN, plus a shared symbol library Design files
Wireless power An inductance and efficiency model for the charging link, in Python — the one executable engineering study here Runs · tested
Simulator C++ (raylib + Bullet, native and WASM) and PyBullet sources for driving over grass Source only
Fabrication rigs The coil winder, PCB mill and UV exposure box built to make the electronics Design files
Firmware Not here
The mower

Four iterations of a robot that has to survive a lawn.

Every part below is rendered from the mesh tracked in this repo — the same .stl you would slice — and the dimensions are its real bounding box, measured at render time by site/gen_renders.py. Nothing here is an illustration of a thing that doesn't exist.

Render of the iteration-4 chassis body: a large, gently curved shell plate.

Chassis body

Iteration 4 — the shell the drivetrain and boards mount into.

380 × 380 × 41 mm6 156 facets
Render of the base plate: a flat square deck with mounting bores.

Base plate

The deck that the motors, castor and coil receiver bolt onto.

380 × 380 × 10 mm5 444 facets
Render of a drive wheel: a thick disc with a central bore.

Drive wheel

Printed hub and tread, cast from the two-part mould below.

190 × 40 × 189.9 mm3 494 facets
Render of the motor support bracket: a block with a large central bore, a counterbore and two fixing holes.

Motor support

Bracket for the main drive gearmotor, bored for the shaft and its fixings.

60 × 42 × 40 mm5 464 facets
Render of the castor fitting: a round plate that carries the front swivel wheel.

Castor fitting

The front swivel mount — the mower's third point of contact.

90 × 90 × 15 mm2 044 facets
Render of the shaft coupler: a small cube-proportioned block with a bore.

Shaft coupler

Motor-to-shaft coupling. Printed, with an aluminium variant for the load path.

30 × 30 × 30 mm884 facets
Render of the two-part wheel mould.

Wheel mould

Two-part mould for casting the tyre — the tooling ships with the part.

230 × 50 × 230 mm4 400 facets
Render of the iteration-3 chassis shell, showing the two wheel arches.

Chassis, iteration 3

The previous shell. Kept deliberately — on a hardware project the design history is the documentation.

364.7 × 360 × 128 mm31 126 facets
Wireless power

A charging link solved on paper first.

The mower charges by induction, so there is no connector to corrode in wet grass. mower/coil-study/ models the link from first principles — elliptic integrals for Maxwell mutual inductance, AC resistance with skin and proximity effects, and the k·Q efficiency solve — for a 200 mm coil at 40 kHz across a 40 mm air gap.

Option 1

Minimum turns

Simple
85.7% @ 40 mm
Configuration
Single layer, 8 T
Outer diameter
223.8 mm
Inductance
30.78 µH
Wire length
5.33 m
Resonant cap
514.4 nF
Option 2 · chosen

Balanced

Recommended
91.5% @ 40 mm
Configuration
2 layers × 8 T
Outer diameter
223.8 mm
Inductance
118.46 µH
Wire length
10.65 m
Resonant cap
133.6 nF
Option 3

Maximum efficiency

Complex
96.4% @ 40 mm
Configuration
2 layers × 29 T
Outer diameter
295.2 mm
Inductance
1 288.56 µH
Wire length
45.12 m
Resonant cap
12.3 nF

Option 2 wins because it is the same 223.8 mm across as the simple coil and only 1.5 mm thick, but buys 5.9 points of efficiency for one extra winding operation. And these numbers are not decoration: tests/test_coil_physics.py parses the comparison table out of DESIGN_SUMMARY.md and re-derives every cell from physics.py, then checks the model's own invariants — reciprocity, monotonicity, efficiency bounds. The write-up and the model cannot drift apart without CI going red.

Electronics

Five boards, and the machines that made them.

The copper beside this text is not an illustration — it is the RAIN board's own plot, re-cut from mower/PCB/RAIN/output.svg. An interdigitated comb electrode: rain bridges the fingers, conductivity rises, the mower goes home.

  • TRANSMITTER — the dock side of the inductive link, in thru-hole and SMD revisions.
  • MAINBOARD — the mower's own board.
  • EMF_SENSOR — boundary-wire pickup, with a panelised DIP version for milling.
  • RAIN — the electrode shown here.
  • IMRANS_LIBRARY — the shared symbol library the projects draw from.

These boards were not ordered from a fab. The repo also carries the coil winder, the PCB mill and the UV exposure box that were built to produce them — which is the part of a hardware project nobody photographs and everybody needs.

RAIN sensor — copper layer, actual plot
Build it

Open the sources. Not a download-and-go kit.

  1. Mechanical — FreeCADOpen the .FCStd files in mower/. Those are the editable sources; the .3mf and .stl exports beside them are for slicing, and .step for any other CAD package.
  2. Electronics — KiCadOpen the projects under mower/PCB/. EMF_SENSOR_DIP ships a panelised board and a script for milling it yourself.
  3. Print and castSlice the .3mf/.stl meshes. The wheel is cast in its own printed mould rather than printed solid.
  4. Expect to fill gapsThere is no firmware, no bill of materials and no assembly guide in this repo. What is here is the geometry, the boards, and the reasoning behind the charging link.
Run the checks
# most of this repo is CAD and PCB binaries no CI can
# meaningfully verify — what IS checkable is checked
$ pip install -r requirements-dev.txt
$ python3 -m pytest -q

test_coil_physics.py

Re-derives every number in the coil write-up from the model, and checks reciprocity, monotonicity and efficiency bounds.

test_repo_integrity.py

Every path named in a README exists; no tracked file is an empty husk; every shell script parses; every Python file compiles.

test_site.py

This page resolves every local reference, fetches nothing off-box, and cannot claim the simulator works.

Each gate asserts its own coverage count, so it cannot pass by checking nothing.

Ecosystem

The body. Aql is the brain.

Zana devices are meant to drop straight into Aql, the open-source command center — but the designs are open and vendor-neutral, so they work with any compatible control plane. You are not buying into anyone's cloud by printing a wheel.

Standalone by design

Zana is part of Vulos, and never requires Vulos infrastructure to run. The designs are files in a git repository under an MIT licence: clone them, edit them, fabricate them, sell what you make. There is no account, no activation and nothing to phone home to — a bracket cannot be deprecated.

vulos.org