Open-source, 3D-printable membrane-filtration manifold for E. coli quantification in drinking water
The manifold consists of three printed parts — base, funnel and filter support — plus a 100 mL syringe and a 0.45 µm membrane filter. It is validated against a Millipore EZ-Fit stainless-steel manifold as the reference instrument for household drinking-water testing.
Materials cost approximately $0.80 per set, printed in ABS.
Background
Membrane filtration for E. coli is the measurement WHO and UNICEF use in household drinking-water quality surveys. The constraint on wider testing is access to the instrument that performs the measurement, not the measurement method itself.
Surveying water quality at many sites requires many instruments rather than a single higher-performing one. The steel Millipore EZ-Fit manifold — the reference instrument this device is validated against — costs approximately $2,460 per unit, is manufactured centrally, and is a closed design: it can be purchased but not produced locally.
UNICEF's second-generation lightweight affordable manifold (2GLAM) reduces the per-unit price to approximately $1.50 but remains centrally produced from a proprietary design, so availability stays tied to the same supply chain. 3DPLAM's distinguishing feature is not primarily cost — at approximately $0.80 per set it is lower, but only modestly so — but that the design is open and locally 3D-printable: anyone with an FDM printer can produce, repair and modify it without depending on a supply chain.
Device
The manifold is three printed parts — a base, a funnel and a filter support — each printed separately without support structures. They lock together without adhesive except at the syringe joint. A 100 mL PVC syringe and a 0.45 µm membrane filter complete the assembly.
| Part | File | Envelope | Volume |
|---|---|---|---|
| Base | stl/base.stl | 77.0 × 77.0 × 38.7 mm | 39.7 cm³ solid |
| Funnel | stl/funnel.stl | 71.8 × 71.8 × 55.5 mm | 16.0 cm³ solid |
| Filter support | stl/filter-support-strand-mesh.stl | 37.3 × 37.3 × 2.9 mm | 1.4 cm³ solid |
Dimensions and files for the default configuration — strand-mesh filter
support, clamped-membrane funnel. See hardware/README.md
for the concurrent alternatives: filter-support-hex-hole.stl
(more forgiving to print) and funnel-tape-fit.stl (for a
tape-sealed base joint).
Print settings
Below 6 wall loops the printed wall is porous: the syringe draws air through the material instead of water through the membrane, and filtration fails. The table below lists every setting that must be changed from a slicer's stock defaults.
| Setting | Value | Changed from stock? |
|---|---|---|
| Layer height | 0.16 mm | no |
| Sparse infill | 15% grid | no |
| Wall loops | 6 | yes (stock 2) |
| Top shell layers | 6 | yes (stock 5) |
| Bottom shell layers | 6 | yes (stock 3) |
| Nozzle | 0.4 mm | no |
Everything else can stay at your slicer's defaults for the material. Full rationale, both Bambu Studio process profiles, and printer notes: hardware/print-profiles/README.md.
Any slicer
The requirement is geometric, not vendor-specific: at least 6 perimeter loops, and top and bottom shells of at least 6 solid layers each.
| Bambu Studio | PrusaSlicer / OrcaSlicer | Cura |
|---|---|---|
| Wall loops = 6 | Perimeters = 6 | Wall Line Count = 6 |
| Top shell layers = 6 | Top solid layers = 6 | Top Layers = 6 |
| Bottom shell layers = 6 | Bottom solid layers = 6 | Bottom Layers = 6 |
Materials
| Material | Enclosure needed | Notes |
|---|---|---|
| ABS | Yes | Recommended — best heat and mechanical performance |
| ASA | Yes | Equivalent to ABS, less widely available |
| PETG | No | Viable below ~80 °C |
| rPET | No | Sustainable route — needs the compensated hardware/rpet/ geometry |
| PLA | No | Not recommended — 60 °C glass transition, absorbs water |
Full heat, UV, outdoor-weathering and sterilisation results per material are in Validation and docs/printing.md.
Profiles
Bambu Studio process profiles for the printers used to validate this design, importable directly:
Print timelapse
The clip below shows the base printing on the profile above, without support structures.
Operating procedure
The following is the complete E. coli membrane-filtration protocol, transcribed verbatim from the author's laboratory documentation.
- Disinfect hands using 70% ethanol.
- Sterilize the upper surface of the filter support and the inner surface of the funnel using a 70% isopropyl alcohol wipe.
- Disinfect the forceps using pure ethanol and a flame.
- Place the filter membrane, gridded side up, on the filter support using the forceps.
- Lock the funnel onto the base.
- Shake the sample thoroughly and fill the funnel up to the 100 mL mark.
- Extract 1 mL of the sample from the funnel with a sterile 1 mL syringe and inoculate the culture plate.
- Operate the 100 mL syringe to pull the entire water sample through the filter membrane.
- Remove the funnel.
- Disinfect the forceps again (repeat step 3).
- Transfer the filter membrane, gridded side up, onto the same culture plate.
- Dry the funnel, filter support and any remaining wet surfaces with a paper towel.
Consumables
| Item | Spec / supplier |
|---|---|
| Membrane filter | 0.45 µm nitrocellulose mixed-ester (MCE), ADVANTEC |
| Culture plate | Compact Dry™ ECO, Shimadzu Diagnostics |
| Sample-pull syringe | 100 mL PVC |
| Forceps | for membrane handling |
| Disinfecting wipes | 70% isopropyl alcohol, 60 × 30 mm |
| Disinfectant | 70% ethanol (hands, forceps) |
The inoculated plate incubates for 24 h at 37 °C, after which colonies are counted; how those counts become a WHO risk classification is covered in Validation. Full protocol notes, including two samples that needed non-standard handling, are in docs/operation.md; manifold assembly is covered in docs/assembly.md.
Validation
The design was validated at 8 sample sites using 3 manifolds — an ABS 3DPLAM, an rPET 3DPLAM, and a steel Millipore EZ-Fit as the reference instrument — with 3 replicates per manifold per site.
| Sample sites | 8 |
|---|---|
| Manifolds | 3 |
| Replicates per manifold per site | 3 |
| Filtrations | 72 |
| Comparisons vs. reference | 16 |
These are two distinct counts governed by two different rules, and the two are not interchangeable. Four raw mismatches sit at a WHO band boundary, where a small measurement difference changes the classified band without indicating a real disagreement about water quality; the 5% rule resolves three of the four:
| Sample | Manifold | Geometric mean | Band | Reference | Band | Outcome |
|---|---|---|---|---|---|---|
| 4 | ABS | 9.97 | intermediate | 11.05 | high | Accepted — within 5% of the 10 boundary |
| 5 | rPET | 62.07 | high | 103.16 | very high | Accepted — reference is within 5% of the 100 boundary |
| 5 | ABS | 50.78 | high | 103.16 | very high | Accepted — same boundary |
| 7 | rPET | 3.66 | intermediate | 90.41 | high | Mismatch — neither value is within 5% of the 10 boundary |
The sole comparison that fails even with the tolerance applied is sample 7, rPET — the same sample that is a spiked positive control, not a field sample. Both headline counts can be reproduced directly from the shipped data:
python3 -c "
import csv
rows = [r for r in csv.DictReader(open('data/ecoli-summary.csv')) if r['is_reference'] == 'no']
print('accepted', sum(1 for r in rows if r['acceptable_within_5pct'] == 'yes'), 'of', len(rows))
print('raw match', sum(1 for r in rows if r['matches_reference'] == 'yes'), 'of', len(rows))
" Material and fatigue results
| Material | 2 h at 80 °C / 48 h UV / 14 days outdoors |
|---|---|
| ABS | No critical damage under heat, UV or outdoor exposure — recommended |
| ASA | No critical damage under heat, UV or outdoor exposure |
| PETG | Critical dimensional damage at 80 °C; fine under UV and outdoors |
| rPET | Critical dimensional damage at 80 °C; fine under UV and outdoors |
| PLA | Critical damage at 80 °C — parts no longer fit together |
Across all five materials, the printed funnel survived 25 cycles of alcohol-wipe decontamination with no damage or leakage, and the 100 mL PVC syringe survived all 72 filtrations of this validation without structural damage or leakage. Separately, watertightness prototyping found a taped rPET–Millipore-funnel joint leaking at roughly 5 minutes, which is what motivated the clamped-membrane seal used in the published base; an ABS base with an ABS funnel (also taped) showed no leakage over 2.5 hours. Full breakdown: docs/validation.md.
Recycled PET filament
rPET, recycled from used drinking-water bottles, is one of five materials the manifold was tested in. The funnel and filter support can be printed in it directly.
- 1 Bottle
A clean, used PET drinking-water bottle.
- 2 Filament
Cut into a single continuous strand and re-formed at filament gauge on a Petamentor2 rebuild, ~185 °C, spool turning ~1 rpm.
- 3 Part
Printed from the shrinkage-compensated hardware/rpet/ geometry — not the standard STLs.
Credit
The filament-making machine used is a rebuild of Petamentor2, an open-source PET-bottle-to-filament machine designed by Ondřej Šraitr: petamentor2.com. The author of this project built a Petamentor2 himself — he did not design the machine. Its design files are Šraitr's work and are deliberately not redistributed in this repository; build your own from the upstream project.
Shrinkage-compensated geometry
rPET shrinks differently during cooling than ABS or PLA, so
hardware/rpet/ is dimensionally compensated for that
shrinkage — printing the standard STLs in rPET will not fit. There is
no separate rPET base: the base needs no compensation, so the same
hardware/stl/base.stl is correct in every material,
including rPET. rPET's print settings also differ enough from the ABS
gas-tight profile that they don't carry over directly — see
docs/rpet.md for the
settings source and the full bottle-to-filament procedure.
Limitations
3DPLAM is an open, locally 3D-printable alternative route to the same measurement the Millipore EZ-Fit performs. It has been validated against that instrument as a reference, not shown to be identical to it.
- Particle-laden samples Samples 5 and 7 both needed non-standard handling — sample 5 stalled partway through filtration (~80 mL of the 100 mL sample actually pulled through), and sample 7 is a spiked positive control, not a field sample — and both are implicated in the classification disagreements described in Validation.
- Non-identical manifold construction The ABS manifold used a fully 3D-printed funnel; the rPET manifold used a commercial Millipore funnel on a printed base. If a printed funnel traps bacteria more readily than a steel one, that would be expected to show up as the all-printed manifold reading systematically low, and it does: the ABS manifold returned the lowest count of the three manifolds at 6 of the 8 sites (sites 1-6). At site 7, the rPET manifold — with its commercial funnel — read lowest instead, and that is also the sole classification mismatch. At site 8, all three manifolds tied at the detection floor.
- Single operator and single testing season All 72 filtrations were run by one person across one testing period. Neither operator variability nor seasonal variation in source water is captured.
- Non-randomised filtration order The Millipore reference was filtered last at each site, so any sedimentation of the sample while the printed manifolds were run earlier could inflate its counts relative to them.