Adam K Dean

Notes on software, systems, engineering, and things

2.3 The fan

The third research topic is the fan. It depends on everything before it, so the brief gave ChatGPT the plan, the gas media from 2.1 and the particle filters' pressure budget from 2.2, on GPT-6 at the Pro setting. It worked for about 39 minutes. Part way through, the page lost its connection and I started a second chat, but the first one finished, so I stopped the second.

The short version: a quiet PC fan can't do this. Pushing 36 m³/h through the whole stack takes about 59 Pa, and 60 m³/h takes about 113 Pa. A Noctua NF-A12x25 makes 23 Pa with no airflow at all. The prototype gets two Arctic S12038-4K server fans in series, which cost £25 for three, and a bigger carbon bed. Whether that can be quiet enough at night is now the hardest open question in the project.

The carbon beds

2.2 gave the particle filters' share of the resistance. The carbon beds' share comes from the Ergun equation, the standard model for air through a packed bed:

ΔpL=150 μ (1−ε)2ε3d2 v+1.75 ρ (1−ε)ε3d v2\frac{\Delta p}{L} = \frac{150\,\mu\,(1-\varepsilon)^2}{\varepsilon^3 d^2}\,v + \frac{1.75\,\rho\,(1-\varepsilon)}{\varepsilon^3 d}\,v^2

where LL is the bed depth, vv the air speed at the bed face, dd the granule size, ε\varepsilon the share of the bed that's gaps between granules (0.40 here), and μ\mu and ρ\rho the air's viscosity and density. The first term grows with the speed and the second with its square. At these low speeds both matter. The 150 and 1.75 are Ergun's original constants from 1952. A 1979 revisit proposed 180 and 1.8, and up to 4.0 for rough particles. Those raise the figures below by about 10 to 70%, and carbon pellets aren't smooth, so these are on the low side.

Per bed, at 25 mm and 50 mm deep:

Granule size 0.10 m/s 0.20 m/s 0.35 m/s
4 mm pellets 4 and 7 Pa 10 and 19 Pa 24 and 47 Pa
3 mm pellets 6 and 12 Pa 15 and 30 Pa 35 and 70 Pa
2.5 mm, like 4×8 mesh granules 8 and 16 Pa 20 and 40 Pa 46 and 91 Pa
1.8 mm, like 6×12 mesh granules 15 and 29 Pa 35 and 69 Pa 75 and 150 Pa

So coarse pellets, if the media I want come that way. Purafil's Purakol, the reference plain carbon, comes as 4 mm pellets. The packing matters as much as the granule size, though: the same beds with 0.35 gaps instead of 0.40 have about 70% more drop, and with 0.45 about 40% less.

The bigger lever is the bed's face. ChatGPT recommends 380 × 240 mm, about the same face as the particle filters, with 40 mm of media in each stage. The air then crosses the beds at 0.11 m/s normally and 0.18 m/s on boost, and both beds together cost about 16 Pa at 36 m³/h and 33 Pa at 60 m³/h with 3.5 mm media. The contact time goes up too:

Bed, per stage Media Contact time at 36 m³/h At 60 m³/h
220 × 220 × 30 mm, the example in 2.1 1.45 L 0.145 s 0.087 s
380 × 240 × 40 mm 3.65 L 0.365 s 0.219 s

That's 7.3 litres of media for the two beds, or roughly 3.3 to 4 kg of carbon. The wall fixing and the cartridge supports have to carry that, not thin printed panels.

The whole system

Stage Clean, 36 m³/h Clean, 60 m³/h Loaded, 36 m³/h Loaded, 60 m³/h
Hair mesh 2 Pa 3 Pa 4 Pa 7 Pa
ePM1 filter 8 Pa 13 Pa 16 Pa 27 Pa
E11 or E12 filter 25 Pa 42 Pa 50 Pa 83 Pa
Both carbon beds 16 Pa 33 Pa 16 Pa 33 Pa
Screens holding the media 3 Pa 8 Pa 3 Pa 8 Pa
Grilles, turns and plenums 5 Pa 14 Pa 5 Pa 14 Pa
Total 59 Pa 114 Pa 94 Pa 172 Pa

"Loaded" doubles the particle filters' resistance and leaves the carbon alone. It's a design case, not a prediction of how long the filters last. The airflow measuring inlet in 2.4 adds another 10 to 20 Pa at 36 m³/h on top.

As curves, with x=Q/36x = Q / 36 and QQ in m³/h:

Δpclean≈46x+13x2 PaΔploaded≈81x+13x2 Pa\Delta p_{\text{clean}} \approx 46x + 13x^2 \text{ Pa} \qquad \Delta p_{\text{loaded}} \approx 81x + 13x^2 \text{ Pa}

The fibrous filters give the straight part and the openings give the squared part. For design, ChatGPT suggests allowing a wider band: 45 to 80 Pa normally and 85 to 145 Pa on boost when clean. Grilles are an easy way to lose it. At 60 m³/h, a grille with 0.02 m² of open area passes air at 0.83 m/s. Cut the open area to 0.005 m² with chunky printed bars and the speed goes to 3.3 m/s, with 16 times the pressure loss.

Why a PC fan won't do

A fan's maximum static pressure is what it makes with the airflow blocked. Its maximum airflow is with nothing in the way. They're opposite ends of its curve, and the useful point is in between. Even assuming a fan could hold its maximum pressure at any airflow, which none can, setting that pressure equal to the clean system curve gives the most air it could possibly push:

Fan Maximum pressure Best case through this stack
Noctua NF-A14 PWM 20 Pa under 15 m³/h
Noctua NF-A12x25 PWM 23 Pa under 16 m³/h
Arctic P12 Max 43 Pa under 28 m³/h
be quiet! Silent Wings Pro 4 120 mm 52 Pa under 33 m³/h
Noctua NF-A14 industrialPPC-3000 65 Pa under 39 m³/h
Arctic P12 Pro 68 Pa under 41 m³/h

None of them reaches 60 m³/h, and the last two only scrape 36 m³/h in theory. The P12 Pro shows the trap: 68 Pa looks like enough for a 59 Pa system, but its own curve gives only about 49 Pa at 36 m³/h.

What can

Fan Maximum pressure Maximum airflow Speed Current Price
Arctic S12038-4K, 120 × 38 mm 112 Pa 180 m³/h 4,000 rpm 0.6 A max £24.98 for three
Arctic S12038-8K, 120 × 38 mm 363 Pa 370 m³/h 8,000 rpm 3.2 A max £29.99 for three
Delta BFB1012EH blower about 920 Pa 77 m³/h 5,800 rpm 2.4 A max not found in UK stock

The Delta blower can make the pressure, but it would need about 5,100 rpm for clean boost, and its data sheet gives 62 dB(A). A small fast blower isn't automatically quieter than an axial fan.

Two fans in series move the same air and add their pressures. Reading the Arctic curves against the system curve, with 10% knocked off the pair for losses between them:

Arrangement 36 m³/h, clean 60 m³/h, clean 36 m³/h, loaded 60 m³/h, loaded
Two S12038-4K in series 2,100 rpm each 3,100 rpm each 2,500 rpm each Can't, about 52 m³/h at most
One S12038-8K 2,600 rpm 3,800 rpm 3,100 rpm 4,400 rpm

The pair of 4K fans covers everything except full boost with loaded filters, which is a reasonable place to start. The 8K covers it all, but needs a 5 A supply.

Noise

There's no decibel figure that guarantees I won't hear it through a shut door. Door gaps, the cat flap, the walls and how quiet the house is all count. ChatGPT proposes 20 to 25 dB(A) at 1 m for running all night, and 30 to 35 dB(A) for a short boost. That's stricter than the 30 dB that the WHO's guidelines and the UK's BS 8233 give for a bedroom at night, which is fine for a target measured 1 m from the unit. The real test is standing where people sleep, with the WC door shut.

Hardware Busters measured one S12038-4K at 1 m in a quiet chamber, in free air:

Speed Noise, one fan Two fans
1,279 rpm 22.0 dB(A) about 25 dB(A)
1,670 rpm 26.4 dB(A) about 29 dB(A)
2,046 rpm 32.2 dB(A) about 35 dB(A)
2,394 rpm 36.7 dB(A) about 40 dB(A)
3,057 rpm 41.6 dB(A) about 45 dB(A)
3,938 rpm 48.8 dB(A) about 52 dB(A)

Two equal fans are 3 dB louder than one. So the pair would be about 35 dB(A) at the 2,100 rpm that normal flow needs, and about 45 dB(A) on boost, before the case does anything, and working against the filters may add to it. To get the pair down to 25 dB(A) they'd have to run at about 1,300 rpm, which won't push this stack. That's a 10 dB gap at normal flow, so this is the part of the project most likely to fail.

The usual rule of thumb for noise against speed is

ΔL≈50log⁡10N2N1\Delta L \approx 50 \log_{10} \frac{N_2}{N_1}

which gives about 15 dB less at half speed. The measurements fit it reasonably: from full speed to 2,394 rpm the rule predicts 10.8 dB less, and Hardware Busters measured 12.1 dB less.

The pitch matters as well as the level. The blade-pass tone is

f=ZN60f = \frac{Z N}{60}

for ZZ blades at NN rpm, so a five-bladed fan at 2,100 rpm hums at 175 Hz, and at 3,100 rpm at 258 Hz. A tone carries through a door better than a hiss.

What the case can do about it:

Control

The ESP32's LEDC peripheral can make the 25 kHz PWM the fans expect. ChatGPT suggested driving the fan's PWM wire through a small MOSFET as an open-drain switch. Noctua's PWM white paper advises against exactly that: the fan sources so little current that the waveform can deform. It recommends a push-pull output, like a microcontroller's own pin. The fan's input is pulled up inside the fan to 3.3 or 5 V, at up to 5 mA, so a small push-pull buffer between the ESP32 and the fan is the safe choice. That goes on the bench list.

A PWM fan with no signal runs flat out. And Arctic lists the S12038s from 600 rpm (800 for the 8K) with no 0 rpm mode, unlike its P12 fans, so I'll assume they don't stop at 0% PWM until I've tested it. So the 12 V to the fans goes through a switch the ESP32 controls, and the PWM is set up before the fans get power. That also gives a real off.

The tach wire gets a 4.7 to 10 kΩ pull-up to 3.3 V, never 12 V. With two pulses a revolution,

rpm=30×ftach\text{rpm} = 30 \times f_{\text{tach}}

where ftachf_{\text{tach}} is the pulse rate in Hz. Each fan gets its own input. The firmware ramps the fans up over a second or two, treats about two seconds without tach pulses as a stall, retries a few times, then raises a fault. And rpm isn't airflow: a clogged filter cuts the flow without any change the tach would notice. That's what the pressure sensors are for.

Power

Fans Current Supply
Two S12038-4K 1.2 A max 12 V, 3 A
One S12038-8K 3.2 A max 12 V, 5 A

Plus 3 to 5 W for the ESP32 and the sensors, through a 5 V buck converter rated for at least 1 A. The mains side stays outside the case, in a certified UK plug-in adapter.

The layout

The fan goes last, pulling air through everything. That keeps hair, dust and carbon fines off it. It also puts the dirty side of the case below room pressure, so any leak there pulls unfiltered air straight into the clean path, and every cartridge needs a real seal. The air should keep roughly the same face area through all the stages, rather than squeezing down for the carbon. Carbon in an upright cartridge settles and opens a gap at the top, so the beds need splitting into sections or something to keep them packed. The outlet points up or along the wall, away from the trays and from the inlet, and wide rather than fast.

What changes in the design

What I checked

I had Claude check sixteen of the claims against the data sheets, reviews and shop pages. I reran ChatGPT's arithmetic myself: the Ergun table, the bed pressures, the contact times, the system curve, the airflow ceilings and the blade-pass tones all came out the same.

These held up: every Noctua, Arctic P12 and be quiet! specification, the S12038-4K and 8K pressure, airflow and current figures, the Scan prices, the Delta blower's data, Noctua's spacer result, the tach and PWM signal details, and Purakol's 4 mm pellets and bulk density.

These needed correcting, and the post above uses the corrected versions:

The rest, including the casing losses, the 10% series allowance, the operating points read from the fan curves, and the plenum dimensions, are ChatGPT's engineering estimates, and weren't checked claim by claim.

Still open

Sources

Papers and guidance:

Fans:

Shops (prices on 13 October 2026):