skills/lab-hardware-cad/references/microfluidics.md
Channel networks, soft-lithography molds, printed chips, gaskets, and manifolds.
This is the error that wastes the most time in microfluidic CAD. Three different objects get called "the chip":
| Object | Channels are | Made by |
|---|---|---|
| Mold / master | Raised ridges (positive relief) | Photolithography on a wafer, SLA print, or micromilling |
| Cast chip | Recessed grooves (negative of the mold) | PDMS cast against the mold, then bonded to a substrate |
| Directly-fabricated chip | Recessed grooves or enclosed lumens | Printed, milled, or laser-cut directly |
A model that is correct as a chip is exactly wrong as a mold. Put the polarity in the module
docstring and in a named parameter, and verify it numerically, not by eye: inverted polarity
is invisible in the bounding box, the volume, and the validity check — and at typical channel
scale (a 0.3 mm ridge on a 40+ mm part) it is invisible in an outline render too, because raised
and recessed features draw the same edges. Declare it as geometry checks instead
(references/build123d-patterns.md): a material region where the ridge must stand above the
casting surface, and a clear region over the rest of that layer — a groove fails the first,
an inverted full-area layer fails the second. For a one-off question,
check.py probe <step> --box ... --expect material answers it without editing the model. State
the measured relief height in the report. Use the snapshot for layout and connectivity, which
it does show well.
polarity = "mold" # "mold" = raised ridges; "chip" = recessed grooves
If casting PDMS, the mold also needs a surrounding wall or a casting frame to contain the uncured polymer, and enough flat land around the features for the cast part to release.
Channels are usually rectangular because that is what planar fabrication produces. Two failure modes bound the aspect ratio, and both are geometric:
Treat both as rules of thumb, not guarantees: the real limits depend on PDMS mixing ratio, cure schedule, and applied pressure. For anything load-bearing or high-pressure, prototype.
Also keep channel-to-channel spacing at least the channel height, so the wall between two channels does not deflect or leak, and leave a flat bonding land — typically 1 mm or more of uninterrupted flat surface around the network perimeter — for plasma or adhesive bonding.
Achievable feature size drives the entire design, and the range across processes is three orders of magnitude. Confirm against your specific tool before committing.
| Process | Practical minimum channel | Notes |
|---|---|---|
| SU-8 photolithography | ~1-10 µm wide, 1-200+ µm tall | The reference process for soft lithography. Feature height is set by spin speed and resist grade. |
| Two-photon / µSLA | ~10-50 µm | Small build volume, slow, expensive. |
| Desktop SLA / DLP | ~200-500 µm | Uncured resin is very hard to clear from smaller lumens. Enclosed channels below ~0.5 mm frequently print blocked. |
| Micromilling | ~100 µm | Set by end-mill diameter; depth limited by tool aspect ratio. Leaves tool marks that scatter light. |
| FDM | Not suitable for sealed channels | Layer porosity leaks. Use only for holders and manifolds. |
| Laser-cut film / gasket | ~200 µm | Excellent for stacked-layer devices and gaskets. |
Design enclosed printed channels for drainage. Every lumen needs a path for uncured resin to escape, and orientation on the build plate determines whether it drains. If the user is printing, say which way up.
The port is where most chips leak. Options, roughly in order of how common they are in a research lab:
Whichever you choose, the sealing surface must be flat and normal to the port axis. A port face left at a printed layer angle will not seal.
Dead volume dominates the response time of any perfusion or gradient device, and it is trivially computable, so compute it rather than estimating:
V = pi * r^2 * L # round tubing / bore
V = w * h * L # rectangular channel
Report the volume of every connecting bore alongside the channel network volume. A 20 mm long 1 mm bore holds ~15.7 µL, which is often larger than the entire channel network it feeds.
Microfluidic flow is almost always laminar, but state it rather than assuming:
Re = rho * v * D_h / mu
D_h = 2 * w * h / (w + h) # hydraulic diameter, rectangular channel
For water in a 100 µm channel at 1 mm/s, Re is of order 0.1 — deeply laminar, so mixing is diffusive only. If the design depends on mixing, it needs a mixer geometry (serpentine, herringbone, or split-and-recombine); relying on turbulence will not work at these scales.
Pressure drop for a rectangular channel scales steeply with the smaller dimension. Halving channel height raises pressure drop by roughly an order of magnitude. Check that the intended pump or syringe can actually deliver it before finalising the cross-section.
references/fabrication-limits.md.python scripts/gen.py chip_model.py --outdir out/
python scripts/check.py facts out/chip.step
python scripts/snapshot.py out/chip.step --out out/chip.png
facts gives the volume; compare it against your hand-computed channel volume as an independent
check that the network is actually open and connected. A network modelled as a solid rather than a
cavity shows up immediately as a volume far larger than expected.
Then read the snapshot and confirm, explicitly: