Design / Simple chips / Droplet generator maker

Droplet Generator Maker

droplet_generator

T-junction · flow focusing planar, constant depth runs in your browser SCAD · STL · JSON

Design the junction where two liquids meet to make droplets, then download a file you can 3D print. It shows how narrow the opening is on your printer. It runs on your own machine and sends nothing anywhere.

This tool does not predict droplet size. Nothing made with it has been printed or tested.

Technical details

A planar droplet junction in a rectangular block: either a T-junction, or a flow-focusing cross with a narrow orifice. Every channel is the same depth, every expansion and constriction at the junction and the orifice is abrupt, and the junction itself is an explicit box that each arm abuts. Enter the geometry on your printer's pixel grid and read the nozzle width, the flow ratio, the capillary number, the Reynolds number and each arm's hydraulic resistance and pressure drop as you type. Everything runs client-side; nothing is uploaded.

This tool does not predict droplet size, frequency or monodispersity. It reports geometry, a flow ratio and a capillary number as bare numbers, with no threshold drawn and no dripping/jetting verdict. What those numbers mean for your fluids is yours to decide.
Wetting will decide whether this works, and the geometry cannot fix it. The OpenMFDA PEGDA resin is hydrophilic, which favours oil-in-water. Water-in-oil generation — the common case for ddPCR and single-cell work — needs hydrophobic walls, and in an untreated printed part it is expected to fail by the dispersed phase wetting the wall. No setting on this page changes that.
Ports here are plain geometric primitives, not h.r.3.3 library interfaces. An open end is a rectangular hole in a block face and a roof port is a square or round shaft through the roof. Neither carries the pin, obstruction or pitch conventions the h.r.3.3 PDK cells use. Chips generated by this page do not natively mate with Foundry component library parts.

Jump to the results

1 · Printer

Asked first, because every dimension below is entered in this printer's pixels and layers. A pixel is the smallest step the printer can draw in X or Y: on the BYU printer, one pixel of its projected image (DLP); on the Phrozen Sonic Mighty 12K, one pixel of the LCD screen that masks its UV light. A layer is one Z step of the stage.

There is no Phrozen 12K preset on this page, unlike the other two design tools. That machine's pixels are non-square — 19 µm in X, 24 µm in Y, so a 38 µm nozzle (the middle of the reference catalog) is 2.0 px across and 1.58 px down. The reference product line sits at or below that printer's addressable feature size on both axes, so offering the preset here would invite a nozzle the grid cannot express. Enter 19 or 24 under Custom if you want to see the arithmetic anyway.

µm

µm

2 · Junction

The part is planar: every channel is the same depth, and the whole layout lives in the XY plane, like the reference parts. The junction is its own explicit box — every arm stops at its boundary and abuts it, so nothing overlaps anything and the void volume stays an exact sum.

≡ µm

3 · Geometry

≡ µm

≡ µm

This is the narrowest feature the dispersed phase passes through. A T-junction has no orifice.

≡ µm

≡ µm

≡ µm

Every arm and the orifice must fit inside this box.

≡ µm

≡ µm

Both continuous arms are identical and enter symmetrically from +y and −y.

≡ µm

≡ µm

≡ µm

The expansion out of the orifice is abrupt — there is no diffuser.

≡ µm

≡ µm

≡ µm

4 · Surrounding solid

Wall thickness is applied on every side that does not have an arm daylighting through it. With roof ports every side is capped. The block's outer size is derived from the layout, so it can never disagree with its own contents.

≡ µm

≡ µm

≡ µm

5 · Ports

How fluid gets in and out. Roof ports, the default, cap every face and cut a shaft, round or square, up through the roof over each arm — one per arm, so three for a T-junction and four for a cross. Each port sits at the very end of its arm, so no arm runs on past it into a dead end that liquid cannot flush out of. Where an arm is wider than its port, a tapered end closes the arm's side walls in to the port at 60°, so no square corner is left beside it for liquid to sit in. Tubing can go into a socket cut down into the chip, into a raised socket standing on the top face, or over a slip-on post. Open ends instead leave every arm running clean out of the block face it points at.

A round port's diameter is a whole number of pixels. The printer can only draw whole pixels, so it prints a round port as a stair-stepped circle, not a smooth one.

≡ µm

No wider than the narrowest arm it sits over.

Channel end:

No tube port has been printed or tested. Whether tubing grips and seals depends on the printer and the resin, and nobody has measured it. You may need to make the socket a little wider or narrower. The wall around each socket is only as thick as the chip's side wall, 228.0 µm with the current settings, and pushing a tube in may crack a wall that thin.

No raised socket has been printed or tested. Whether tubing grips and seals depends on the printer and the resin, and nobody has measured it. The boss is a tall, thin feature: levering the tubing sideways can snap it off.

A raised socket is a round boss standing on the top face over the port, with a socket down its middle sized to the tubing's outside diameter. The socket's floor is the chip's top face: the tubing stops on the shoulder there, and the round port, sized above, carries on below it into the channel. The chip keeps its whole roof, and the grip comes from the boss's height. The starting tubing, 1/16 in, is a starting point, not a tested choice.

A tube port is a socket cut down from the top face, sized to the tubing's outside diameter. The round port, sized above, carries on from the socket's floor down into the arm, narrower, so the tube sits against the step between them.

µm

≡ µm

The starting depth, 100 layers, is a starting point, not a tested figure. The roof must be at least one layer deeper than the socket.

≡ µm

The starting depth, 150 layers, is a starting point, not a tested value.

≡ µm

The starting wall, 40 px, is a starting point, not a tested value. It must be at least the chip's side wall.

No slip-on post has been printed or tested. How well a post grips depends on the tubing: its material, its wall and how far it stretches. The post is a tall, thin feature: levering the tubing sideways can snap it off. It is a smooth post, not a barb: a retaining ridge would print as an overhang on the way up.

A slip-on post stands on the top face over the port, a little wider than the tubing's inside so soft tubing grips it, with a short cone at the tip to start the tubing on. Its bore carries the liquid from the port up through the post, as wide as the post's wall allows.

µm inside µm outside

The starting tubing, 1/32 × 3/32 in, is a starting point, not a tested choice. Measure your own: nominal sizes vary.

%

The starting 15% is a starting point, not a tested value: how far tubing can stretch and still grip depends on the tubing.

≡ µm

The starting height, 200 layers, is a starting point, not a tested value.

≡ µm

The starting wall, 30 px, is a starting point, not a tested value. It must be at least the chip's side wall; the bore is as wide as it allows.

6 · Fluids and flow

Both phases are entered as flow rates, because that is what a pump controls. The fluid properties below are yours to supply — nothing on this page hardcodes a validated interfacial tension or viscosity for your system.

µL/min

µL/min

For a cross this is the TOTAL across both continuous arms; each arm carries half.

mPa·s

Water at 20 °C = 1.002 mPa·s. A fluorinated oil is nearer 3–5. Editable.

N/m

Slider is log₁₀. 0.005 N/m is offered as an ORDER-OF-MAGNITUDE starting point only — it is not a validated interfacial tension for your fluid pair, surfactant or temperature. Enter your own.

kg/m³

Water at 20 °C = 998.2. Editable because Reynolds number is meaningless with the wrong density, and a fluorinated oil is nearer 1600.

Back to the settings

Nozzle width

—

Catalog sizes on this grid

Plan — looking down

Nozzle cross-section — looking along the flow

Side view — the connectors standing on the chip

Geometry

Volumes

Flow rates and dimensionless numbers

Hydraulic resistance, per arm

How accurate these are. Each arm’s resistance comes from a standard one-term formula for a rectangular channel. While an arm’s depth is at most half its width (or its width at most half its depth), it is within 0.2% of the exact solution. It drifts as the cross-section approaches square: for a square arm the resistance and pressure drop shown are 14% too high. Checked against the exact series solution in Bruus, Theoretical Microfluidics, Oxford University Press, 2008.

Checks

    Download

    • SCAD droplet.scad
    • STL droplet.stl
    • JSON droplet.json

    STL is binary, millimetre units, Z up, origin at the block's minimum corner.

    The downloads are off until the maker has started: it makes the files here, in your browser. If this line stays, the maker has not started (JavaScript may be off or blocked, or its script failed) and no file can be made.

    What this builds

    A planar droplet junction in a rectangular block. Every channel is the same depth and the whole layout lives in the XY plane, which is how the reference parts are made and what keeps a single-exposure print honest.

    T-junction    continuous along +x · dispersed enters in y at the junction · outlet along +x    3 openings

    flow focusing  dispersed along +x · continuous from ±y · orifice · abrupt expansion into the outlet    4 openings

    The junction is its own explicit box. Every arm runs up to that box's boundary and stops there; nothing passes through anything else. That is not a stylistic choice — it is what makes the void volume an exact sum of arms + junction + orifice + outlet + ports, with no inclusion–exclusion term anywhere. Arms that ran through each other would double-count their intersection and every volume on this page would be quietly wrong.

    Expansions and constrictions are abrupt. There are no tapers at the junction or the orifice, and no diffusers anywhere. In the chamber tool a taper is there to help air out on fill; here the sharp edge at the orifice is functional, because it is the geometric feature that sets where the thread breaks. Rounding it would be a different device. The only tapers this tool makes are the optional tapered ends at the ports, far from the junction, where they only take away the corners beside each port.

    The nozzle and the pixel grid

    The reference product line's parametric axis is the nozzle, and its catalog spans roughly 10 to 140 µm. On a pixel-addressed printer a nozzle is not a continuous number: it is a whole number of pixels, and the narrower it gets the more a single pixel is worth.

    one pixel of cure error on an n-pixel nozzle = ± 100 / n % on the nozzle width

    At 7.6 µm/px a 10-pixel nozzle is 76 µm and one pixel is 10% of it. A 2-pixel nozzle is 15.2 µm and one pixel is 50% of it. That is arithmetic, not a prediction: it says how much of the nozzle width one pixel of over- or under-cure would move, and nothing about whether that pixel of error actually occurs. Nobody has measured the cure error on this printer for this tool, so the page reports the sensitivity and stops there.

    The catalog table beside the form does the same arithmetic for four sizes from the reference line at whatever pitch you have entered: the exact quotient, the nearest whole pixel, what that pixel count actually measures, and the per-pixel sensitivity. No row is labelled pass or fail. Whether a 1.3-pixel nozzle is a design you want is a judgement about your printer and your process, and this tool does not have the evidence to make it for you.

    This is also why there is no Phrozen 12K preset on this page, though the other two design tools offer one. That machine has non-square pixels, 19 µm in X and 24 µm in Y, and the middle of the reference catalog — 38 µm — is 2.0 px across and 1.58 px down on it. The catalog sits at or below the printer's addressable feature size on both axes, and the anisotropy means a nozzle that is nearly two pixels wide is barely one and a half pixels deep. Offering the preset would invite a nozzle the grid cannot express. The pitch field still accepts 19 or 24 if you want to look at the numbers.

    What the dimensionless numbers and resistances are, and what they are not

    Two dimensionless numbers are reported, both as bare numbers with no threshold drawn:

    flow ratio = Q_dispersed / Q_continuous

    capillary number Ca = µ_c · v_c / σ    v_c = Q_c / A

    v_c is the mean continuous-phase velocity taken over the orifice cross-section for a cross, and over the main channel cross-section for a T-junction. Both µ_c and σ are entered by you. The tool offers 0.005 N/m as an order-of-magnitude starting point for σ because that is the right decade for a surfactant-stabilised oil/water interface — it is not a validated interfacial tension for your fluid pair, surfactant, or temperature, and the page never treats it as one.

    This tool does not predict droplet size, frequency or monodispersity, and does not classify the regime. There is no diameter, no production rate, no CV, and no dripping/jetting verdict anywhere on the page or in the JSON. Those depend on the fluid pair, the surfactant, the wall chemistry and the exact geometry of a printed part that nobody has printed. Reporting Ca and the flow ratio and leaving the interpretation to you is the honest limit of what this geometry tool knows.

    Reynolds number is reported for the orifice on the total throughput (Q_d + Q_c), using the continuous-phase density and viscosity you entered. Channel resistance per arm uses the same rectangular-duct Hagen–Poiseuille approximation as the other two design tools, from the h.r.3.3 PDK's own component documentation (pdk/docs/Rectangular Channel.docx, citing Bruus):

    R_hyd = 12 · η · l / ( w · h³ · (1 − 0.63 · h / w) )

    It is a laminar estimate, channel resistance only. The junction box itself contributes nothing to the total, exactly as the chambers do not in the chamber tool: its cross-section is much larger than the arms'. Where an arm's end is tapered, its taper is counted slice by slice with the same formula. With roof ports, each port's hole through the roof is counted too, as a duct of the port's shape: a round port as a round tube of the same area, R = 8 · η · L / (π · r⁴), and a square port by the exact series for a square duct, R = 12 · η · L / (0.4217 · a⁴). That part is approximate: the holes are short, and entrance effects are not modelled. Where the ports carry slip-on posts, each post's bore is counted as a round tube as well. Entrance losses, the abrupt expansion out of the orifice, the presence of a second phase, and any interfacial contribution are all ignored. A two-phase device is not a single-phase duct, and these resistances describe the empty part.

    Wetting decides this, and the geometry cannot

    The OpenMFDA PEGDA resin is hydrophilic. A hydrophilic wall favours oil-in-water: the aqueous continuous phase wets the wall and the oil thread breaks cleanly.

    Water-in-oil is the common case — it is what ddPCR and droplet single-cell workflows run — and it needs hydrophobic walls. In an untreated printed part it is expected to fail: the aqueous dispersed phase wets the wall instead of pinching off, and the junction floods rather than producing droplets. No setting on this page fixes that. It is a surface-chemistry problem, not a geometry problem, and it needs a wall treatment this tool has nothing to say about.

    Ports are not library interfaces

    The two port styles on this page are geometric primitives and nothing more. An open end is a rectangular hole where an arm meets a block face; a roof port is a square or round shaft from the channel ceiling to the top face. They carry no pin declaration, no obstruction layer, no pitch convention and no mating geometry.

    The h.r.3.3 component library works differently: its cells declare interfaces explicitly, with lef_port() pins, obstruction boxes and a fixed routing pitch, so that a placer and router can connect them. A block from this page has none of that. It will not natively mate with Foundry component library parts, and it is not intended to be dropped into a placed-and-routed design. It is a standalone chip.

    What is checked, and what is not

    The blocking checks are geometric self-consistency only — whether the solid you described can exist as a printable body with one connected fluid network and the right number of openings. The single process rule that is checked, h < w, is checked because it is written down in the PDK component document for the rectangular channel; it is reported per arm and for the orifice, because a droplet generator routinely has one channel far narrower than the rest and a single verdict for the whole part would hide exactly the feature you care about.

    On the BYU grid, the block is also compared with the image BYU publishes for the OS1, 2560 × 1600 pixels (19.5 × 12.2 mm, BYU’s rounded figure; the OS1’s Specs page, read 2026-09-30), either way round. The comparison is in pixels: on this grid a pixel of the block is a pixel of the image, so 2560 pixels fit and 2561 do not, whatever a pixel’s exact size. A block bigger than that both ways is flagged and never refused: the files stay on. Each figure is BYU’s published figure for the OS1: see Hardware and process. On any other grid no build area is compared.

    Everything else is listed in the Checks panel as not checked. That includes whether a nozzle this narrow prints at all, whether uncured resin will clear from an orifice of this width and length, what the surface roughness at the orifice does to pinch-off, and the droplet size, frequency and monodispersity this tool refuses to predict. The OpenMFDA design kit's documentation gives no limit for any of them, so inventing a threshold here would be worse than saying so.

    Nothing produced by this page has been printed or fluidically tested. It is geometry and arithmetic.

    Grid discipline

    Every dimension is stored as a whole number of pixels or layers, because that is what the printer can actually address. The µm boxes are a convenience: type 40 µm at a 7.6 µm pitch and the tool takes 5 px (38.0 µm) and tells you it did. Nothing off-grid is ever accepted silently.

    Arms are centred on the junction box on whole pixels. When an arm's width and the junction's differ in parity, true centring would put the arm's edges on a half pixel; the tool moves the arm to the nearest whole pixel instead and reports the offset it used. The same applies to a roof port centred across its arm.