<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Adam K Dean</title>
<link>https://adamkdean.com/</link>
<atom:link href="https://adamkdean.com/feed.xml" rel="self" type="application/rss+xml"/>
<description>Notes on software, systems, engineering, and things</description>
<language>en-gb</language>
<item>
<title>AI workstation: 11.6 On the shelf</title>
<link>https://adamkdean.com/ai-workstation/11.6-on-the-shelf/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.6-on-the-shelf/</guid>
<pubDate>Fri, 16 Oct 2026 13:06:00 +0000</pubDate>
<description>&lt;h1&gt;11.6 On the shelf&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/assembly/08-done.png&quot; alt=&quot;The finished mount, rendered: the clamp on the shelf&#39;s end, the arm and the screen&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;A build guide drawn from the model&lt;/h2&gt;
&lt;p&gt;For the rest of the build, Claude rendered eight pictures from the FreeCAD model: stop screw, spine nuts, arm, swivel nuts, plate, friction and lock, screen, cables. The parts for each step are in orange, and blue arrows show the way they go.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/assembly/03-arm.png&quot; alt=&quot;Step 3 of the guide: the arm, in orange, and its two M6 × 20 bolts go onto the clamp&#39;s spine&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The first draft was a long page with checklists. I said that style was perfect, but I didn&#39;t want much verbosity, just the graphics and a few annotations.&lt;/p&gt;
&lt;p&gt;On the guide page, numbered callouts sit over each picture, and the script places them, not me. It projects each model point with the same camera rotation as the render, and the cropped picture spans the projected extent of the shapes, so a point maps straight into it. If I re-render, the callouts move with the parts.&lt;/p&gt;
&lt;p&gt;There&#39;s one trap. A point on a face hidden from the camera, such as the screen&#39;s bottom face seen from above, lands off the visible edge.&lt;/p&gt;
&lt;h2&gt;Fitted&lt;/h2&gt;
&lt;p&gt;I fitted the arm, the plate and the screen from the guide, and the screen holds well. Like the main monitor, it can wobble. The A1 prints on the same desk, so it gets a wobble test next.&lt;/p&gt;
&lt;p&gt;Everything printed for the mount, including the failures:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Print&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;Filament&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Test blocks and knob&lt;/td&gt;
&lt;td&gt;31 min&lt;/td&gt;
&lt;td&gt;9.47 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print 1 (with the failed clamp)&lt;/td&gt;
&lt;td&gt;4 h 17 min estimated&lt;/td&gt;
&lt;td&gt;153.1 g estimated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print 2, the clamp alone&lt;/td&gt;
&lt;td&gt;2 h 23 min&lt;/td&gt;
&lt;td&gt;74.9 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That&#39;s about 237 g of black PLA.&lt;/p&gt;
&lt;p&gt;Claude modelled and checked everything in FreeCAD through the MCP server. ChatGPT drew the reference images earlier in the project, and this time set up a second copy of the print project with the clamp&#39;s own settings, in case Bambu Studio dropped them. I printed through the Bambu app and did every fit by hand.&lt;/p&gt;
&lt;h2&gt;Next: the PC&lt;/h2&gt;
&lt;p&gt;The screen is done. The next focus is mounting the mini PC under the same shelf.&lt;/p&gt;
&lt;p&gt;I had grand ideas for this project: five stands, a design language, halftones and shadow gaps. What&#39;s on the desk is a clamp, a bar and a plate, and it&#39;s exactly what I wanted. Practicality usually wins.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 11.5 The knob that slipped</title>
<link>https://adamkdean.com/ai-workstation/11.5-the-knob-that-slipped/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.5-the-knob-that-slipped/</guid>
<pubDate>Fri, 16 Oct 2026 13:05:00 +0000</pubDate>
<description>&lt;h1&gt;11.5 The knob that slipped&lt;/h1&gt;
&lt;p&gt;With the clamp on the shelf, I turned the knob and the pad pushed up. Then, at a certain force, the nut inside the knob started to ride up the bolt instead of holding it. A screwdriver on the bolt&#39;s head still tightened it, but that defeats the point of a knob. I hoped for a fix in the knob, not another clamp.&lt;/p&gt;
&lt;p&gt;Claude drew the knob in section from the model, with the nut at the size I&#39;d measured.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/knob-now.png&quot; alt=&quot;Section as built, shelf at the top: the pad, the jaw with its nut, then the knob. In the knob, from the bottom: the bolt&#39;s head in its round pocket, the thin PLA floor, the nut in the hex pocket (orange), and the jam nut sitting on the knob&#39;s face&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The bolt&#39;s head turns freely in its round pocket.&lt;/li&gt;
&lt;li&gt;The nut in the hex pocket turns with the knob. When the bolt resists, the knob&#39;s turn screws that nut up the bolt, away from the head. That&#39;s the loosening direction for the grip between the head and the nut, so the harder you turn, the more it lets go.&lt;/li&gt;
&lt;li&gt;The jam nut never touched that nut. The pocket is 5.4 mm deep and the real nut is 4.93 mm. It sits 0.26 mm down the pocket&#39;s cone, so its top is 0.7 mm below the knob&#39;s face, and the jam nut tightened onto the PLA.&lt;/li&gt;
&lt;li&gt;With the standard 5.2 mm nut in the model, the gap was only about 0.2 mm, which hid the problem. My calliper value showed it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The test print (&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.3-test-prints-that-test-something/&quot;&gt;11.3&lt;/a&gt;) had checked the fit, not the turning force under load.&lt;/p&gt;
&lt;h2&gt;The fix&lt;/h2&gt;
&lt;p&gt;It needed no print. Lock a nut hard against the bolt&#39;s head with a spanner, steel on steel. Then turn the knob upside down, so that nut sits in the hex pocket and the head stays under the knob. A second nut, finger tight in the round pocket (now on top), only holds the knob on.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/knob-fix.png&quot; alt=&quot;The fix, same section: the knob is upside down, the nut locked on the bolt&#39;s head (orange) sits in the hex pocket, and the holding nut is finger tight in the round pocket on top&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The knob&#39;s turn still pushes that nut in its loosening direction. But a spanner-tight steel lock takes several N m to break, and a hand on a 32 mm knob gives about 1 N m. It worked perfectly.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/knob-fix-apart.png&quot; alt=&quot;The fix drawn apart, in the order it goes together&quot; /&gt;&lt;/p&gt;
&lt;p&gt;My first thought was that I&#39;d put it together wrong. I hadn&#39;t. The jam nut couldn&#39;t reach the nut however it went together.&lt;/p&gt;
&lt;p&gt;Two lessons. Any lock that carries a turning force goes steel to steel, never through PLA. And test a turning joint by turning it under load.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 11.4 The clamp that let go</title>
<link>https://adamkdean.com/ai-workstation/11.4-the-clamp-that-let-go/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.4-the-clamp-that-let-go/</guid>
<pubDate>Fri, 16 Oct 2026 13:04:00 +0000</pubDate>
<description>&lt;h1&gt;11.4 The clamp that let go&lt;/h1&gt;
&lt;p&gt;Print 1 put the clamp, arm, plate and pad on one plate, arranged in Bambu Studio. The estimate was 4 h 17 min and 153.1 g, with timelapse off.&lt;/p&gt;
&lt;p&gt;The arm, the plate and the pad printed well enough to fit, with a few marks and strings. The clamp printed its base and the C&#39;s outline, then came loose, and the rest of it went into the air as spaghetti.&lt;/p&gt;
&lt;p&gt;Bambu Studio&#39;s arrange had put the clamp 1 mm from the bed&#39;s front edge. The clamp is 40 mm tall and dense (5 walls, 30% infill), and it prints on the A1&#39;s moving bed. Its narrow jaws pull up at the ends as they cool. I confirmed it came off the bed early: a thin first layer with the bed&#39;s texture under it, not a split between layers.&lt;/p&gt;
&lt;p&gt;Print 2 was the clamp alone, in the middle of the bed, with a 5 mm brim, on a plate washed with dish soap and dried. It took 2 h 23 min and 74.9 g, and it printed whole.&lt;/p&gt;
&lt;p&gt;The lesson: keep tall, dense parts away from the bed&#39;s edges, or print them alone in the middle. Use a brim and a washed plate for anything tall.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 11.3 Test prints that test something</title>
<link>https://adamkdean.com/ai-workstation/11.3-test-prints-that-test-something/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.3-test-prints-that-test-something/</guid>
<pubDate>Fri, 16 Oct 2026 13:03:00 +0000</pubDate>
<description>&lt;h1&gt;11.3 Test prints that test something&lt;/h1&gt;
&lt;p&gt;Before the real print I wanted test prints. Claude&#39;s first draft sliced the clamp and the swivel, to test the shelf fit and the stops as well. That was 1 h 53 min and 45 g, and I said it was too much. The limit was under 20 minutes each.&lt;/p&gt;
&lt;p&gt;Then I asked the question that reset them: what are the tests for? We have the VESA mount points and we know the shelf thickness. I&#39;d test the thread of the bolts. Print a part with a thread and a hole, and see if the bolts tighten properly.&lt;/p&gt;
&lt;p&gt;So the tests confirm only what the CAD can&#39;t: how printed PLA takes the kit&#39;s nuts and bolts. There are three blocks, each cut from a real part with a box intersected with it, so each keeps the part&#39;s own holes, pockets and print direction:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The spine round a joint nut slot (M6 × 10).&lt;/li&gt;
&lt;li&gt;The post&#39;s seat round the held nut (M6 × 20 on a washer).&lt;/li&gt;
&lt;li&gt;The seat round the stop&#39;s M3 pilot (M3 × 6).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The real knob is a test as well. The three blocks slice to 18 min 37 s and the knob to 19 min 3 s. I printed them as one job: 31 min 1 s and 9.47 g.&lt;/p&gt;
&lt;h2&gt;Results&lt;/h2&gt;
&lt;p&gt;The spine block and the held-nut block worked, and so did the knob. The M3 × 6 was too tight in its 2.5 mm pilot, so the pilot went to 2.7 mm.&lt;/p&gt;
&lt;p&gt;I also measured the kit&#39;s M6 nut: 9.85 mm across the flats and 4.93 mm thick. The standard&#39;s maximum is 10 and 5.2. The jaw&#39;s nut slot had been cut at 5.2 with no clearance, so it got the tested 0.15 mm a side.&lt;/p&gt;
&lt;p&gt;One note on print times. The slicer&#39;s estimate counts the A1&#39;s timelapse move on every layer, about 4 s a layer, which the printer skips with timelapse off. Slicing a one-part plate &amp;quot;by object&amp;quot; leaves it out.&lt;/p&gt;
&lt;p&gt;The knob passed its test. It tested the fit, but not the turning force. That comes back in &lt;a href=&quot;https://adamkdean.com/ai-workstation/11.5-the-knob-that-slipped/&quot;&gt;11.5&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 11.2 Easier to print</title>
<link>https://adamkdean.com/ai-workstation/11.2-easier-to-print/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.2-easier-to-print/</guid>
<pubDate>Fri, 16 Oct 2026 13:02:00 +0000</pubDate>
<description>&lt;h1&gt;11.2 Easier to print&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/clamp.png&quot; alt=&quot;Mount v6.1: the clamp and arm on the shelf&#39;s end&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After v6 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/11-mount-v6/&quot;&gt;11&lt;/a&gt;) I asked for an easier shape to print, with less support and less material. More modularity was fine.&lt;/p&gt;
&lt;p&gt;The clamp and the arm are now two prints, joined by two M6 × 20 on washers into nuts in slots in the spine. Only the clamp carries the bolt&#39;s preload, so only the clamp prints heavy (5 walls, 30% gyroid). The arm prints at the defaults. The clamp is also a unit other arms can bolt to, which suits a wall mount later.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/joint-apart.png&quot; alt=&quot;The arm drawn away from the clamp: the joint&#39;s bolts and the teardrop nut slots&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The C is 40 mm deep instead of 60. Its front face sits 62 mm behind the shelf&#39;s front edge, 2 mm behind the tip of the leg&#39;s front flange. The whole C passes through the 80 mm gap between the flanges and slides straight on. v6 had to go on 3 mm behind its place.&lt;/li&gt;
&lt;li&gt;The arm is a 16 × 20 mm bar and a 20 × 20 mm post. It steps out at 45° to v5&#39;s 20 × 30 seat for the top 30 mm.&lt;/li&gt;
&lt;li&gt;The plate is an H round the VESA holes on v5&#39;s leg, so the screen&#39;s speakers stay open.&lt;/li&gt;
&lt;li&gt;No support anywhere. Every hole across the layers is a teardrop, and every pocket roof is at 45°. A check called &lt;code&gt;flat_roofs&lt;/code&gt; flags any face that would need support, and the slicer with tree support on agrees.&lt;/li&gt;
&lt;li&gt;The C&#39;s stress under 200 N of preload is 3.6 MPa. The limit I use for PLA under a steady load is 5 MPa. v6 was 2.4.&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;v6&lt;/th&gt;
&lt;th&gt;v6.1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Printed parts&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filament&lt;/td&gt;
&lt;td&gt;255.5 g&lt;/td&gt;
&lt;td&gt;158.9 g (38% less)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print time&lt;/td&gt;
&lt;td&gt;7 h 55 min&lt;/td&gt;
&lt;td&gt;5 h 19 min (33% less)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support, tree support on&lt;/td&gt;
&lt;td&gt;6 min 51 s in three parts&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Longest print&lt;/td&gt;
&lt;td&gt;The clamp, 5 h 57 min&lt;/td&gt;
&lt;td&gt;The clamp, 2 h 24 min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
</description>
</item>
<item>
<title>AI workstation: 11.1 The lever the check got wrong</title>
<link>https://adamkdean.com/ai-workstation/11.1-the-lever-the-check-got-wrong/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11.1-the-lever-the-check-got-wrong/</guid>
<pubDate>Fri, 16 Oct 2026 13:01:00 +0000</pubDate>
<description>&lt;h1&gt;11.1 The lever the check got wrong&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6/renders/clamp-below.png&quot; alt=&quot;From below: the knob, the bolt, and the tail inside the leg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is the best story in v6 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/11-mount-v6/&quot;&gt;11&lt;/a&gt;), and it&#39;s about a check that was wrong.&lt;/p&gt;
&lt;p&gt;The screen hangs out past the shelf&#39;s end, so it tries to turn the clamp about the shelf&#39;s top end edge. The first check counted the top jaw as holding that turn.&lt;/p&gt;
&lt;p&gt;It can&#39;t. Only the pad, pushed up by the bolt, holds it, and only through the bolt&#39;s preload. The check had the lever the wrong way round.&lt;/p&gt;
&lt;p&gt;Claude drew three options:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;Preload needed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Bolt where it was, 13 mm in&lt;/td&gt;
&lt;td&gt;100 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bolt just before the leg&lt;/td&gt;
&lt;td&gt;65 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bottom jaw runs on as a tail inside the leg&#39;s loop, to a nose past it&lt;/td&gt;
&lt;td&gt;Not relied on&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I chose the tail. If the bolt&#39;s grip falls, the C turns until the nose bears on the underside of the shelf, and the nose carries the screen.&lt;/p&gt;
&lt;h2&gt;Two more things the checks found&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A bigger pad doesn&#39;t help much.&lt;/strong&gt; A pad 24 to 28 mm wide spreads the load and protects the oak, but it adds little grip. Friction depends on the force, not the area. What counts is the distance in from the end.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The clamp couldn&#39;t go on.&lt;/strong&gt; Sliding along the shelf onto its end, the nose hit the tip of the leg&#39;s front flange by 2.8 mm. The check had only looked at the part in its final place. Now it moves the part along its path as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And one about access. With the bolt head up, the 44.6 mm bolt had to go in between jaws 31 mm apart. Head down, it goes in from below. Check that every fastener can actually go in.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 11 Mount v6: clamp it to the shelf</title>
<link>https://adamkdean.com/ai-workstation/11-mount-v6/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/11-mount-v6/</guid>
<pubDate>Fri, 16 Oct 2026 13:00:00 +0000</pubDate>
<description>&lt;h1&gt;11 Mount v6: clamp it to the shelf&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6.1/renders/left-end.png&quot; alt=&quot;Mount v6.1: the screen on the shelf&#39;s left end&quot; /&gt;&lt;/p&gt;
&lt;p&gt;v5 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/10-stand-v5/&quot;&gt;10&lt;/a&gt;) was a stand on the desk. I wanted nothing on the desk, so the screen moved to the oak shelf that sits under my main monitor. This is the version that got printed, and it&#39;s on the shelf now.&lt;/p&gt;
&lt;p&gt;The screen stays where v5 put it: portrait, beside the main monitor&#39;s left end. Its bottom edge is level with the main monitor&#39;s (176 mm), 10 mm from its left end along the curve, and turned 11° so its face carries on the curve. It still turns 45° either side of that.&lt;/p&gt;
&lt;p&gt;One printed clamp grips the end of the shelf, and an arm carries v5&#39;s swivel and VESA plate unchanged.&lt;/p&gt;
&lt;h2&gt;The brief&lt;/h2&gt;
&lt;p&gt;My answers to the questions it raised:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The left end of the shelf.&lt;/li&gt;
&lt;li&gt;The main monitor&#39;s face is 60 mm behind the shelf&#39;s front edge. I measured it. The model first took 70.&lt;/li&gt;
&lt;li&gt;Black PLA.&lt;/li&gt;
&lt;li&gt;Hardware only from my two screw kits. Nothing bought.&lt;/li&gt;
&lt;li&gt;The clamp may reach further in under the shelf.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The clamp is one part, a C over the shelf&#39;s end. An M6 × 40 round head, head down in a printed knob, pushes a loose pad up against the underside.&lt;/p&gt;
&lt;p&gt;The kits have no nyloc nuts and no hex heads, so the swivel locks with a jam nut. A plain nut is held in a pocket, and a second nut is jammed under it, reached through a window with a 10 mm spanner.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v6/renders/left-end.png&quot; alt=&quot;Mount v6, from the left end&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;v6 to v6.1&lt;/h2&gt;
&lt;p&gt;v6 came to four prints, about 7 h 55 min and 256 g. I sliced it and never printed it. The same day I asked for an easier shape to print, and v6.1 replaced it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;v6&lt;/th&gt;
&lt;th&gt;v6.1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Printed parts&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filament&lt;/td&gt;
&lt;td&gt;255.5 g&lt;/td&gt;
&lt;td&gt;158.9 g (38% less)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print time&lt;/td&gt;
&lt;td&gt;7 h 55 min&lt;/td&gt;
&lt;td&gt;5 h 19 min (33% less)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support, tree support on&lt;/td&gt;
&lt;td&gt;6 min 51 s in three parts&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Longest print&lt;/td&gt;
&lt;td&gt;The clamp, 5 h 57 min&lt;/td&gt;
&lt;td&gt;The clamp, 2 h 24 min&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Getting it from the slicer onto the shelf took two failures, one on the bed and one in the knob. Both are below.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.1-the-lever-the-check-got-wrong/&quot;&gt;11.1 The lever the check got wrong&lt;/a&gt;: the first check had the clamp&#39;s lever backwards, and the clamp couldn&#39;t go on.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.2-easier-to-print/&quot;&gt;11.2 Easier to print&lt;/a&gt;: v6.1, two prints, no support anywhere.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.3-test-prints-that-test-something/&quot;&gt;11.3 Test prints that test something&lt;/a&gt;: three blocks cut from the real parts.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.4-the-clamp-that-let-go/&quot;&gt;11.4 The clamp that let go&lt;/a&gt;: the first print, 1 mm from the bed&#39;s edge.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.5-the-knob-that-slipped/&quot;&gt;11.5 The knob that slipped&lt;/a&gt;: why the knob let go under load, and a fix with no print.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/11.6-on-the-shelf/&quot;&gt;11.6 On the shelf&lt;/a&gt;: the build guide, the totals, and what comes next.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 10.2 Measuring the real desk</title>
<link>https://adamkdean.com/ai-workstation/10.2-measuring-the-real-desk/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/10.2-measuring-the-real-desk/</guid>
<pubDate>Thu, 15 Oct 2026 08:00:00 +0000</pubDate>
<description>&lt;h1&gt;10.2 Measuring the real desk&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/desk/model/renders/left-end.png&quot; alt=&quot;The desk model: the shelf&#39;s left end, its leg and the main monitor&#39;s end&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Before anything clamps onto the desk, the desk had to become a model. It holds the desk top, the oak shelf, its two steel legs and the main monitor, so Claude can check fits against it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Measurement&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shelf&lt;/td&gt;
&lt;td&gt;Solid oak, 1200 × 200 × 19 mm&lt;/td&gt;
&lt;td&gt;Measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shelf height&lt;/td&gt;
&lt;td&gt;Top 116 mm above the desk, underside at 97&lt;/td&gt;
&lt;td&gt;Measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Legs&lt;/td&gt;
&lt;td&gt;Black steel strip bent into a loop across the shelf&#39;s depth, 35 mm in from each end&lt;/td&gt;
&lt;td&gt;Measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leg flanges&lt;/td&gt;
&lt;td&gt;The strip&#39;s ends turn in under the shelf, 80 mm apart at their tips&lt;/td&gt;
&lt;td&gt;A rule, in inches&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Main monitor&lt;/td&gt;
&lt;td&gt;LG 49WQ95C, 1215 mm wide, 3800R curve, 12.6 kg, on an arm&lt;/td&gt;
&lt;td&gt;Spec&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitor&#39;s bottom edge&lt;/td&gt;
&lt;td&gt;176 mm above the desk&lt;/td&gt;
&lt;td&gt;Measured&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitor&#39;s face&lt;/td&gt;
&lt;td&gt;About 60 mm behind the shelf&#39;s front edge&lt;/td&gt;
&lt;td&gt;Tape&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Screens are drawn in cornflower blue against black cases, so they stand out in every render.&lt;/p&gt;
&lt;p&gt;The wall behind the desk is plasterboard, with a vertical line I read as a stud. I&#39;ve kept that for a wall mount later.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 10.1 The swivel</title>
<link>https://adamkdean.com/ai-workstation/10.1-the-swivel/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/10.1-the-swivel/</guid>
<pubDate>Wed, 14 Oct 2026 17:01:00 +0000</pubDate>
<description>&lt;h1&gt;10.1 The swivel&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/swivel.png&quot; alt=&quot;The tab on the fin&#39;s seat, from behind&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After the first review of v5 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/10-stand-v5/&quot;&gt;10&lt;/a&gt;) I added a swivel the same day. The screen turns about 40° each way.&lt;/p&gt;
&lt;p&gt;A tab on the plate&#39;s leg sits on a seat on the fin and turns about a vertical axis on the screen&#39;s centre line. An M6 × 30 from above clamps it, and the bolt sets the friction.&lt;/p&gt;
&lt;p&gt;The stops are simple. The head of an M3 screw in the seat runs in an arc groove under the tab, and the groove&#39;s ends stop the screen at 45° each way. I&#39;d asked for 40°, so there&#39;s 5° to spare.&lt;/p&gt;
&lt;h2&gt;The checks&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Screen turned in 5° steps (1° near contact), against every fixed part&lt;/td&gt;
&lt;td&gt;Nothing touches from -45° to +45°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First contact&lt;/td&gt;
&lt;td&gt;The stop, as intended&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;70 N of bolt preload&lt;/td&gt;
&lt;td&gt;Holds 0.3 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push at the screen&#39;s edge that turns it&lt;/td&gt;
&lt;td&gt;2.7 N, below the push that tips the stand&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/turned-left.png&quot; alt=&quot;Turned left&quot; /&gt;
&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/turned-right.png&quot; alt=&quot;Turned right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The cables move as the screen turns. The mini HDMI plug moves 66 mm at 45°, so I need about 30 mm of slack inside the base.&lt;/p&gt;
&lt;p&gt;This swivel, its seat, its stop and the plate carried on unchanged into the shelf mount (&lt;a href=&quot;https://adamkdean.com/ai-workstation/11-mount-v6/&quot;&gt;11&lt;/a&gt;).&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 10 Stand v5: portrait, beside the main monitor</title>
<link>https://adamkdean.com/ai-workstation/10-stand-v5/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/10-stand-v5/</guid>
<pubDate>Wed, 14 Oct 2026 17:00:00 +0000</pubDate>
<description>&lt;h1&gt;10 Stand v5: portrait, beside the main monitor&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/front-right.png&quot; alt=&quot;Stand v5 from the front right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;After v4.1 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09.4-stand-v4.1/&quot;&gt;9.4&lt;/a&gt;) the idea changed. I wanted the screen in portrait, beside my main monitor, so its height matches the main monitor&#39;s. The main monitor is an LG 49WQ95C ultrawide in landscape.&lt;/p&gt;
&lt;p&gt;So v5 is a vertical unit on a desk stand, in the same Neo-Braun style as v4, with the PC in the base.&lt;/p&gt;
&lt;h2&gt;One wrong number&lt;/h2&gt;
&lt;p&gt;My brief said the screen&#39;s bottom edge should be level with the main monitor&#39;s, and I gave it as 75 mm above the desk. That was wrong. It&#39;s 175 mm. I corrected it the same day, but one wrong number in a brief moves the whole design.&lt;/p&gt;
&lt;p&gt;This time I didn&#39;t ask ChatGPT for a reference picture. Claude designed it straight in FreeCAD.&lt;/p&gt;
&lt;h2&gt;The base&lt;/h2&gt;
&lt;p&gt;The base is as wide as the screen, 222 mm, so from the front the base and the screen read as one column. It&#39;s 55 mm tall and 200 mm deep.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A floating front panel sits over a 1 mm shadow gap.&lt;/li&gt;
&lt;li&gt;A radial halftone over the PC&#39;s side vents is the intake: 135 holes.&lt;/li&gt;
&lt;li&gt;A second halftone in the top is the exhaust: 195 holes.&lt;/li&gt;
&lt;li&gt;The halftones are the only ornament.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The PC lies flat. Its front, with the power button, the USB-A ports and the jack, is at a window in the outer side. Its rear ports face a 50 mm plug bay.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/exploded-front-right.png&quot; alt=&quot;The parts in assembly order&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;The fin and the ballast&lt;/h2&gt;
&lt;p&gt;A 20 mm fin, printed flat, stands in a socket at the back. It leans forward about 18° to the screen.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/side.png&quot; alt=&quot;The fin&#39;s lean, from the side&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Ballast comes from the parts drawer again, as in v4.1. Three trays hold loose M6 nuts and bolts. About 1.45 kg of it clears 5 N on every edge at every swivel angle.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v5/renders/inside-above.png&quot; alt=&quot;Inside, with the ballast trays full&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Never printed&lt;/h2&gt;
&lt;p&gt;At the slice defaults v5 is 12 h 36 min and 490 g, plus the ballast. I never printed it. The next step went to the shelf instead (&lt;a href=&quot;https://adamkdean.com/ai-workstation/11-mount-v6/&quot;&gt;11&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;What did survive is the swivel. It carried on unchanged into the shelf mount, and it&#39;s what&#39;s on my desk now.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/10.1-the-swivel/&quot;&gt;10.1 The swivel&lt;/a&gt;: a friction bolt, an arc groove for the stops, and the checks.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/10.2-measuring-the-real-desk/&quot;&gt;10.2 Measuring the real desk&lt;/a&gt;: the desk, the oak shelf, its steel legs and the main monitor as a model.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 9.4 Stand v4.1</title>
<link>https://adamkdean.com/ai-workstation/09.4-stand-v4.1/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/09.4-stand-v4.1/</guid>
<pubDate>Tue, 13 Oct 2026 14:40:00 +0000</pubDate>
<description>&lt;h1&gt;9.4 Stand v4.1&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4.1/renders/front-right.png&quot; alt=&quot;Stand v4.1 from the front right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I looked at v4 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09.3-how-it-works/&quot;&gt;9.3&lt;/a&gt;) for a while and didn&#39;t like three things. The base reached a long way out in front of the screen, and it still tipped backwards at 4.2 N. The case round the screen looked almost exactly like the monitor&#39;s own frame, so it was a lot of printing for nothing. And the PC&#39;s power button was shut inside the base.&lt;/p&gt;
&lt;p&gt;v4.1 fixes those, and adds one thing I wanted from the start: the screen tilts.&lt;/p&gt;
&lt;h2&gt;The reference&lt;/h2&gt;
&lt;p&gt;Same method as v4. I had ChatGPT draw the side view I wanted: a short base, an arm that rises from the back and leans forward, and the screen held out over the base on the arm&#39;s tip. Then Claude built it in FreeCAD.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4.1/reference/reference-side.jpg&quot; alt=&quot;The side reference, drawn by ChatGPT: a low black base with a halftone side, an arm leaning forward from its back, the screen on its tip&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What changed&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;v4&lt;/th&gt;
&lt;th&gt;v4.1&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base&lt;/td&gt;
&lt;td&gt;250 × 200 mm&lt;/td&gt;
&lt;td&gt;180 × 154 mm, sized round the PC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen&lt;/td&gt;
&lt;td&gt;Held at the back of the base&lt;/td&gt;
&lt;td&gt;Over the middle of the base&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case round the screen&lt;/td&gt;
&lt;td&gt;Two printed halves&lt;/td&gt;
&lt;td&gt;None. A VESA plate on the monitor&#39;s back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;Front to the front, power button inside&lt;/td&gt;
&lt;td&gt;Turned 180°, power button at a back opening&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tilt&lt;/td&gt;
&lt;td&gt;Fixed at 10°&lt;/td&gt;
&lt;td&gt;8° nominal, from -2 to 18°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ballast&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Trays of M6 nuts and bolts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Printed parts&lt;/td&gt;
&lt;td&gt;Body, cap, floor, two case halves&lt;/td&gt;
&lt;td&gt;Body, cap, floor, plate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The PC, turned round&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4.1/renders/rear-left.png&quot; alt=&quot;Stand v4.1 from the rear left: the PC&#39;s front panel shows through an opening in the back wall&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Turning the Beelink round sorts out two problems at once. Its front, with the power button and two USB-A ports, now faces an 87 × 26 mm opening in the back wall, so I can turn it on and plug a stick in without opening anything. Its rear, with the HDMI and the DC power, now faces a 45 mm plug bay inside the front of the base. Those are the cables that never change, so they stay inside. They run along the PC&#39;s side, up the hollow arm, and out through a notch in the left side, under the hinge.&lt;/p&gt;
&lt;h2&gt;The tilt hinge&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4.1/renders/side-tilt-forward.png&quot; alt=&quot;The side at -2°&quot; /&gt;
&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4.1/renders/side-tilt-back.png&quot; alt=&quot;The side at 18°&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The arm ends in a round hub, 22 mm in radius. The VESA plate bolts to the monitor with four M4 × 10 countersunk screws, flush, which leaves 3.5 mm in the 3.6 mm inserts. It has a cheek on each side that sits over the hub. An M6 bolt through each cheek goes into a nut in a slot in the hub, so tightening the bolts clamps the cheeks on the arm. It&#39;s a friction hinge, and the bolts set how stiff it is.&lt;/p&gt;
&lt;p&gt;The axis sits about 23 mm behind the monitor&#39;s back, so the screen&#39;s weight always tries to tip it forwards: 0.17 to 0.33 N m across the range. With an assumed PLA-on-PLA friction of 0.3, about 170 N of clamp per bolt holds three times that. A hand-tight M6 gives far more than that, but PLA creeps, so the bolts get spring washers.&lt;/p&gt;
&lt;p&gt;The cheeks go on the plate, outside the arm, and that&#39;s a print decision. The body prints on its side, as v4 did. A slot in the arm for a tongue on the plate would mean a large bridge in the air. Cheeks on the plate print as plain walls straight up from a flat part.&lt;/p&gt;
&lt;h2&gt;Ballast from the parts drawer&lt;/h2&gt;
&lt;p&gt;I don&#39;t have steel plate, and I&#39;d rather use what I&#39;ve got: M6 bolts and nuts. The floor has a 10 mm rim round the PC&#39;s footprint, and the trays outside it hold 127 cm³. Loose nuts and bolts pack to about half the density of steel, so a guess of 3.9 g/cm³ gives about 0.5 kg.&lt;/p&gt;
&lt;h2&gt;Balance&lt;/h2&gt;
&lt;p&gt;The same check as every stand since &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt;, now on the feet, with the push at the screen&#39;s top edge, about 300 mm up:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tilt&lt;/th&gt;
&lt;th&gt;Ballast&lt;/th&gt;
&lt;th&gt;Mass&lt;/th&gt;
&lt;th&gt;Front&lt;/th&gt;
&lt;th&gt;Back&lt;/th&gt;
&lt;th&gt;Sides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;8°&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;1.65 kg&lt;/td&gt;
&lt;td&gt;4.4 N&lt;/td&gt;
&lt;td&gt;3.3 N&lt;/td&gt;
&lt;td&gt;4.6 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8°&lt;/td&gt;
&lt;td&gt;full&lt;/td&gt;
&lt;td&gt;2.14 kg&lt;/td&gt;
&lt;td&gt;5.3 N&lt;/td&gt;
&lt;td&gt;4.8 N&lt;/td&gt;
&lt;td&gt;5.9 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;-2°&lt;/td&gt;
&lt;td&gt;full&lt;/td&gt;
&lt;td&gt;2.14 kg&lt;/td&gt;
&lt;td&gt;5.1 N&lt;/td&gt;
&lt;td&gt;5.1 N&lt;/td&gt;
&lt;td&gt;6.1 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18°&lt;/td&gt;
&lt;td&gt;full&lt;/td&gt;
&lt;td&gt;2.14 kg&lt;/td&gt;
&lt;td&gt;5.6 N&lt;/td&gt;
&lt;td&gt;4.5 N&lt;/td&gt;
&lt;td&gt;5.9 N&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It&#39;s better than v4&#39;s 4.2 N and it passes the 10° tilt test everywhere, but the back is still under v3&#39;s 5.1 N. With the ballast in, the front and back are nearly even, so moving the screen won&#39;t lift both. Only more depth, more mass or a lower screen will. A base 15 mm deeper would give about 5.5 N at the back. And all of it still assumes a 0.8 kg monitor I haven&#39;t weighed.&lt;/p&gt;
&lt;h2&gt;What&#39;s still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The monitor&#39;s mini HDMI and USB-C power are on its left edge, 89 mm left of the arm. A straight plug sticks out of the side. A right-angle plug or a flat ribbon kit should fix that later.&lt;/li&gt;
&lt;li&gt;The monitor needs 5 V at 3 A on USB-C, and the PC has no USB-C. That means a second supply, unless it runs on the 0.9 A a USB-A port gives.&lt;/li&gt;
&lt;li&gt;The joints between the body, the cap and the floor aren&#39;t designed yet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Paused here&lt;/h2&gt;
&lt;p&gt;I&#39;m pausing this line here. v4.1 is a good, checked massing model, and I&#39;ll come back to it. First I want to try a different idea for the project (&lt;a href=&quot;https://adamkdean.com/ai-workstation/10-stand-v5/&quot;&gt;10&lt;/a&gt;).&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 9.3 How it works</title>
<link>https://adamkdean.com/ai-workstation/09.3-how-it-works/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/09.3-how-it-works/</guid>
<pubDate>Tue, 13 Oct 2026 14:13:00 +0000</pubDate>
<description>&lt;h1&gt;9.3 How it works&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/exploded-front-left.png&quot; alt=&quot;Stand v4 exploded: the left cap off, the floor and the PC down, the screen forward, the case halves out to the sides&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Five printed parts, the monitor, the PC and four screws.&lt;/p&gt;
&lt;h2&gt;The parts&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/print-beds.png&quot; alt=&quot;The five parts on A1 beds, each in its print orientation&quot; /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Print&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Body&lt;/td&gt;
&lt;td&gt;250 × 200 × 194 mm&lt;/td&gt;
&lt;td&gt;On its right side, 246 mm tall&lt;/td&gt;
&lt;td&gt;The base and the neck in one shell with 3 mm walls. Holds the PC and the screen.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Left cap&lt;/td&gt;
&lt;td&gt;200 × 194 × 3 mm&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;Closes the body&#39;s open left side, behind a 0.6 mm reveal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Floor&lt;/td&gt;
&lt;td&gt;243 × 193 × 3 mm&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;Closes the bottom. The PC stands on it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case, left and right&lt;/td&gt;
&lt;td&gt;182 × 230 × 15 mm each&lt;/td&gt;
&lt;td&gt;Back down&lt;/td&gt;
&lt;td&gt;Wraps the monitor: back, edges and a 5 mm lip over the front&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The body is the hard one. Printed on its right side, its L-shaped profile lies on the bed and it stands 246 mm tall, 10 mm short of the A1&#39;s limit. Every wall is then vertical, the halftone is on the bed, and the neck&#39;s bending runs along the layers. The left side has to be open, because it would be a 200 × 194 mm roof at the top of the print, with nothing under it. The bottom is open so the PC can go in. Both close with flat parts.&lt;/p&gt;
&lt;h2&gt;The screen&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/section.png&quot; alt=&quot;Section through the PC and the right-hand VESA screws, seen from the right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The section is cut 37.5 mm right of the centre, through the PC and the right-hand pair of VESA inserts. Grey is the cut.&lt;/p&gt;
&lt;p&gt;The monitor sits in the two case halves. Each half slides on from its side, and they meet on the centre line. In the middle of the case&#39;s back there&#39;s a 101 × 99 mm window. A 2.8 mm boss on the neck&#39;s front face passes through it and bears straight on the monitor&#39;s back, round the VESA inserts. So the screen&#39;s weight goes from the monitor into the neck without passing through the case.&lt;/p&gt;
&lt;p&gt;Four M4 × 10 with washers go in from inside the neck: through the neck&#39;s 3 mm wall, through the boss and into the inserts. That clamps 6.6 mm (wall, boss and a 0.8 mm washer) and leaves 3.4 mm of thread in each insert. I measured the inserts&#39; usable depth at 3.6 mm with the &lt;a href=&quot;https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/&quot;&gt;test frame&lt;/a&gt;, so an M4 × 10 just fits. The neck&#39;s face also presses on the case round the window, which is what holds the two halves together.&lt;/p&gt;
&lt;p&gt;The case&#39;s back face and the neck&#39;s front face are the same plane, and the boss face and the monitor&#39;s back are another. The checks treat both as contacts, not overlaps.&lt;/p&gt;
&lt;h2&gt;The PC&lt;/h2&gt;
&lt;p&gt;The Beelink sits in the base on the floor, front to the front, rear ports to the back. Measured from the model:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Clearance&lt;/th&gt;
&lt;th&gt;mm&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Behind the rear ports, for plugs and the cables&#39; turn up into the neck&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Above the PC, under the base&#39;s top&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right-hand vents to the right wall and the halftone&lt;/td&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Front to the base&#39;s front wall&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Air comes in through the base and leaves through the halftone on the right (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09.2-the-style/&quot;&gt;9.2&lt;/a&gt;). The intake vents in the floor and the feet that lift it off the desk aren&#39;t designed yet.&lt;/p&gt;
&lt;h2&gt;Balance&lt;/h2&gt;
&lt;p&gt;The same rule as every stand since &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt;: push the top edge of the screen and work out what force tips it over each edge.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Mass&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Printed parts (body 491 g, floor 148 g, cap 54 g, case 2 × 117 g)&lt;/td&gt;
&lt;td&gt;0.93 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monitor (not weighed yet, as before)&lt;/td&gt;
&lt;td&gt;0.8 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC&lt;/td&gt;
&lt;td&gt;0.28 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total&lt;/td&gt;
&lt;td&gt;2.01 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The PLA masses assume the 3 mm walls print 85% solid. Thin walls print nearly solid, as v3&#39;s shell showed.&lt;/p&gt;
&lt;p&gt;The centre of gravity is 135 mm behind the front edge and 127 mm up. The screen&#39;s top edge is 307 mm above the desk. For the back edge, 65 mm behind the centre of gravity:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;b&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;a&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;c&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;k&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;msub&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;u&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;2.01&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;9.81&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;0.0648&lt;/mn&gt;&lt;/mrow&gt;&lt;mn&gt;0.307&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;4.2&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;N&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip} = &#92;frac{M g &#92;, (y_&#92;mathrm{back} - y_&#92;mathrm{CG})}{z_&#92;mathrm{push}} = &#92;frac{2.01 &#92;times 9.81 &#92;times 0.0648}{0.307} = 4.2&#92; &#92;mathrm{N}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.3991em;vertical-align:-0.9721em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.427em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.044em;&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.044em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;back&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.9721em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.0074em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3214em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;0.307&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;2.01&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;9.81&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.0648&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;4.2&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord mathrm&quot;&gt;N&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Edge&lt;/th&gt;
&lt;th&gt;Centre of gravity to edge&lt;/th&gt;
&lt;th&gt;Push to tip&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Front&lt;/td&gt;
&lt;td&gt;135 mm&lt;/td&gt;
&lt;td&gt;8.7 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Back&lt;/td&gt;
&lt;td&gt;65 mm&lt;/td&gt;
&lt;td&gt;4.2 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Left&lt;/td&gt;
&lt;td&gt;129 mm&lt;/td&gt;
&lt;td&gt;8.3 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Right&lt;/td&gt;
&lt;td&gt;117 mm&lt;/td&gt;
&lt;td&gt;7.5 N&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;It passes the 10° tilt test: that needs 22 mm to every edge and the smallest is 65. But the back is weak. Pushing the screen backwards, which is what you do when you tap it or adjust it, tips it at 4.2 N. v3&#39;s weakest edge was 5.1 N. The neck and the screen both sit at the back of the base, so the centre of gravity does too. I&#39;ll fix this in the next design iteration. The obvious options are steel in the front of the floor, or moving the screen forward.&lt;/p&gt;
&lt;h2&gt;What the checks cover&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;check.py&lt;/code&gt; runs on the model and writes its results to a JSON file. All of these pass:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every printed part is one valid solid.&lt;/li&gt;
&lt;li&gt;No two parts overlap, and nothing overlaps the monitor or the PC.&lt;/li&gt;
&lt;li&gt;The boss touches the monitor&#39;s back, and the case touches the neck&#39;s face.&lt;/li&gt;
&lt;li&gt;Every part fits the A1&#39;s 256 mm cube in its print orientation.&lt;/li&gt;
&lt;li&gt;The screw leaves no more thread in the inserts than they have.&lt;/li&gt;
&lt;li&gt;The 10° tilt test.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Not designed yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The joints between the body, the cap and the floor, and their screws.&lt;/li&gt;
&lt;li&gt;Feet, and the intake vents in the floor.&lt;/li&gt;
&lt;li&gt;The lip on the case prints as a 5 mm overhang at the top of the part. It needs a 45° chamfer underneath.&lt;/li&gt;
&lt;li&gt;The cable route from the monitor&#39;s left edge into the neck.&lt;/li&gt;
&lt;li&gt;A way to press the PC&#39;s power button, or a BIOS setting to start it when the power comes on.&lt;/li&gt;
&lt;li&gt;Balance, as above.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of it is printed. Next is the design iteration that fixes the back edge, then a slice of the body to see what 246 mm of thin wall costs in time and filament.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 9.2 The style</title>
<link>https://adamkdean.com/ai-workstation/09.2-the-style/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/09.2-the-style/</guid>
<pubDate>Tue, 13 Oct 2026 14:12:00 +0000</pubDate>
<description>&lt;h1&gt;9.2 The style&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/front.png&quot; alt=&quot;Stand v4 from the front&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This is the design language from &lt;a href=&quot;https://adamkdean.com/ai-workstation/09.1-the-design-language/&quot;&gt;9.1&lt;/a&gt; applied to the workstation, rule by rule, and where v4 bends it.&lt;/p&gt;
&lt;h2&gt;Black, not white&lt;/h2&gt;
&lt;p&gt;The language says matte white. v4 is matte black, and I think it&#39;s the right call here. The monitor&#39;s glass and its bezel are black, so a white case would put a bright frame round a dark rectangle and make the screen the loudest thing on the desk. In black, the case and the screen become one dark surface. The rule that matters still holds: one colour, one material, one finish, tone on tone. The colour just changed.&lt;/p&gt;
&lt;p&gt;The cost is that the halftone gets quieter. On white, dark holes jump out. On black, you mostly see them where something lit is behind them.&lt;/p&gt;
&lt;h2&gt;One volume&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/side.png&quot; alt=&quot;Stand v4 from the right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The body is one L-shaped shell: a low base, 250 × 200 × 56 mm, and a neck that rises from its back to 194 mm. The neck&#39;s front face leans back 10°, the same as the screen, and runs into the base&#39;s top through an 18 mm inside round. From the side it reads as one bent piece, which is what makes it look like a lamp rather than a box with a post on it.&lt;/p&gt;
&lt;p&gt;The screen sits in its own case, which is the second volume. I tried to make it read as one with the body by keeping the gap between them small: the case&#39;s bottom edge is 23 mm above the base&#39;s top, and the case touches the neck&#39;s face directly.&lt;/p&gt;
&lt;h2&gt;Soft edges&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Edge&lt;/th&gt;
&lt;th&gt;Round&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Base&#39;s front top edge&lt;/td&gt;
&lt;td&gt;6 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inside, base to neck&lt;/td&gt;
&lt;td&gt;18 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Neck&#39;s top, front and back&lt;/td&gt;
&lt;td&gt;10 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Every edge round the two side faces&lt;/td&gt;
&lt;td&gt;4 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Case corners, in the screen&#39;s plane&lt;/td&gt;
&lt;td&gt;5 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The side faces&#39; 4 mm is far smaller than the 10% the rules ask for, which would be 20 mm on the 200 mm depth. With a 3 mm wall and a square inside corner, a round of radius &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;r&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0278em;&quot;&gt;r&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; leaves &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;r&lt;/mi&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;msqrt&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;r - (r - 3)&#92;sqrt{2}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6667em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0278em;&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0278em;&quot;&gt;r&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1.1572em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mord sqrt&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.9072em;&quot;&gt;&lt;span class=&quot;svg-align&quot; style=&quot;top:-3em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot; style=&quot;padding-left:0.833em;&quot;&gt;&lt;span class=&quot;mord&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-2.8672em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;hide-tail&quot; style=&quot;min-width:0.853em;height:1.08em;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;400em&quot; height=&quot;1.08em&quot; viewBox=&quot;0 0 400000 1080&quot; preserveAspectRatio=&quot;xMinYMin slice&quot;&gt;&lt;path d=&quot;M95,702
c-2.7,0,-7.17,-2.7,-13.5,-8c-5.8,-5.3,-9.5,-10,-9.5,-14
c0,-2,0.3,-3.3,1,-4c1.3,-2.7,23.83,-20.7,67.5,-54
c44.2,-33.3,65.8,-50.3,66.5,-51c1.3,-1.3,3,-2,5,-2c4.7,0,8.7,3.3,12,10
s173,378,173,378c0.7,0,35.3,-71,104,-213c68.7,-142,137.5,-285,206.5,-429
c69,-144,104.5,-217.7,106.5,-221
l0 -0
c5.3,-9.3,12,-14,20,-14
H400000v40H845.2724
s-225.272,467,-225.272,467s-235,486,-235,486c-2.7,4.7,-9,7,-19,7
c-6,0,-10,-1,-12,-3s-194,-422,-194,-422s-65,47,-65,47z
M834 80h400000v40h-400000z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.1328em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; mm of wall at the corner: 2.6 mm at 4 mm, under 1 mm from about 8 mm, and nothing at 20. It&#39;s the first place where print rules beat style rules.&lt;/p&gt;
&lt;h2&gt;Floating front&lt;/h2&gt;
&lt;p&gt;The case has the floating frame from the rules: a 3 mm front frame at full size, a 1 mm shadow gap set in 2 mm behind it, then the rear shell set in 1 mm. From the front you see a thin black frame, 5 mm of it overlapping the monitor&#39;s own bezel, and a dark line round its edge.&lt;/p&gt;
&lt;h2&gt;Ornament is function&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/halftone-side.png&quot; alt=&quot;The halftone on the base&#39;s right side, with the PC&#39;s blue case behind it&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The only pattern is on the base&#39;s right side, centred on the PC&#39;s right-hand vents. It&#39;s the same layout as the air filter&#39;s, scaled down: a 6 mm pitch, 134 holes from 4.5 mm at the centre to 1.5 mm at the edge, with a 3 mm plain border. That&#39;s 855 mm² open, against about 600 mm² of slots on one side of the PC (2 rows of 17, about 1.8 × 9.8 mm each, from the listing photos). So the pattern isn&#39;t the bottleneck for the PC&#39;s air.&lt;/p&gt;
&lt;p&gt;The body prints on its right side, so this face is on the bed and every hole prints vertical and round.&lt;/p&gt;
&lt;h2&gt;Hidden function&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/rear-left.png&quot; alt=&quot;Stand v4 from the rear left&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cables leave through an opening at the bottom of the back wall, under the neck.&lt;/li&gt;
&lt;li&gt;The four screws that hold the screen are inside the neck. Nothing on the outside shows how it goes together.&lt;/li&gt;
&lt;li&gt;The monitor&#39;s ports and controls are on its short edges, so the case has a slot in each short side. That keeps them on a side, which the rules allow.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Where it falls short&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The base is 68% of the case&#39;s width, not the reference&#39;s 85%, because of the bed (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09-stand-v4/&quot;&gt;9&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;The case is in two halves, so there&#39;s a seam at the centre of the top and bottom of the frame and across the back.&lt;/li&gt;
&lt;li&gt;The left side of the body is a separate cap behind a 0.6 mm reveal. It&#39;s honest about being a panel, but it&#39;s a line the reference doesn&#39;t have.&lt;/li&gt;
&lt;li&gt;The cables from the monitor&#39;s left edge come out of the case&#39;s side and have to reach the neck somehow. Right now that&#39;s a visible loop, which breaks rule 7.&lt;/li&gt;
&lt;li&gt;The PC&#39;s power button is inside the base. There&#39;s no button on the outside yet.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 9.1 The design language</title>
<link>https://adamkdean.com/ai-workstation/09.1-the-design-language/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/09.1-the-design-language/</guid>
<pubDate>Tue, 13 Oct 2026 14:11:00 +0000</pubDate>
<description>&lt;h1&gt;9.1 The design language&lt;/h1&gt;
&lt;div class=&quot;gallery&quot;&gt;
&lt;figure&gt;
&lt;img src=&quot;https://adamkdean.com/cat-wc-air-filter/img/concept-chatgpt.jpg&quot; alt=&quot;A white wall-mounted air filter with a perforated front, in soft studio light&quot; width=&quot;700&quot; height=&quot;700&quot; /&gt;
&lt;figcaption&gt;ChatGPT&#39;s render of my air filter idea.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://adamkdean.com/cat-wc-air-filter/img/concept-freecad.png&quot; alt=&quot;The same air filter modelled in FreeCAD: a white slab with a radial halftone of round holes&quot; width=&quot;700&quot; height=&quot;700&quot; /&gt;
&lt;figcaption&gt;Claude&#39;s FreeCAD model of it.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;I call it Neo-Braun. I named it on 13 October, after the concept for my &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01-the-project/&quot;&gt;cat W/C air filter&lt;/a&gt;: a white wall slab whose only decoration is a pattern of holes. It&#39;s minimalist industrial design in the Braun and Dieter Rams line (&amp;quot;less, but better&amp;quot;), the way current consumer electronics do it: Muji and Naoto Fukasawa&#39;s &amp;quot;Super Normal&amp;quot;, Xiaomi&#39;s Mi Home range, the Apple HomePod, IKEA&#39;s FÖRNUFTIG air purifier.&lt;/p&gt;
&lt;p&gt;It&#39;s only for physical products and their CAD models. Screens, web pages and dashboards don&#39;t follow it.&lt;/p&gt;
&lt;h2&gt;The rules&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;One volume.&lt;/strong&gt; A monolith or a slab with a rectilinear plan. No joins, screws or controls on show.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Soft edges.&lt;/strong&gt; The plan corners have a radius of about 10% of the shorter side, and the front edge a small round, about 5 mm. Rounds, never chamfers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Floating front.&lt;/strong&gt; The front panel overhangs the body by 1 to 3 mm a side, over a shadow gap of about 1 mm, so it reads as floating.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One colour, one material, one finish.&lt;/strong&gt; Matte, tone on tone, so the object fades into the wall behind it. One small status light at most.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ornament is function.&lt;/strong&gt; The perforation is the only decoration, and it has a job: air, sound, light or heat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Radial halftone.&lt;/strong&gt; One pitch. The hole size makes the tone, not the spacing. The biggest holes sit at the focal point, over the part that works (the fan, the driver, the sensor), and shrink to small dots towards the edges. A plain border stays clear of holes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hidden function.&lt;/strong&gt; Outlets go in a side, cables leave at the back, fixings hide behind. Controls go on a side or in an app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Calm.&lt;/strong&gt; No text or logo on the front, no labels, nothing that asks for attention.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;And what it rules out: an even grid of holes over the whole face, hex grilles, slots on the front, gloss, chrome, two-tone bodies, RGB light, chamfers, visible screws and any decoration that doesn&#39;t do a job.&lt;/p&gt;
&lt;h2&gt;The halftone&lt;/h2&gt;
&lt;p&gt;The perforation is the one place the style allows itself something to look at, so it&#39;s worth getting right. The holes sit on concentric rings at one pitch. Each hole&#39;s diameter is largest at the focal point, holds there for a short way, then falls on a cosine to the smallest size and stays there. Because the spacing never changes, the eye reads the size change as a gradient, like a halftone print.&lt;/p&gt;
&lt;p&gt;On the air filter&#39;s 440 × 290 mm front that&#39;s 763 holes on a 12 mm pitch, from 9 mm at the centre to 1.6 mm at the edge. The open area is 10.4% of the face overall, 44% at the centre and 1.4% at the edge. So the pattern also puts the open area where the fan needs it.&lt;/p&gt;
&lt;h2&gt;Written down for the agents&lt;/h2&gt;
&lt;p&gt;A style in my head doesn&#39;t help an agent session that starts from nothing. So it&#39;s written up as a short set of rules the agents load before they design, model, render or write an image prompt for a product. With the rules come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the hole layout as a small script, so every pattern is computed, not drawn;&lt;/li&gt;
&lt;li&gt;how to model it in FreeCAD: perforate a thin 2 to 3 mm skin over a pocket with something dark behind, because deep holes seen at an angle show only their walls and read as bumps;&lt;/li&gt;
&lt;li&gt;how to print it: the perforated face flat on the bed, so every hole is vertical and round, and a test coupon of the smallest hole first;&lt;/li&gt;
&lt;li&gt;one render setup: orthographic, turned 30° right of the front, tilted 6° down, on white;&lt;/li&gt;
&lt;li&gt;prompts for concept images, changed one thing at a time;&lt;/li&gt;
&lt;li&gt;a checklist to review a design against.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The point is consistency. Two sessions on two projects should produce things that look like they came from the same studio. &lt;a href=&quot;https://adamkdean.com/ai-workstation/09.2-the-style/&quot;&gt;9.2&lt;/a&gt; is the first time I&#39;ve applied it to something that isn&#39;t an air filter.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 9 Stand v4: the lamp</title>
<link>https://adamkdean.com/ai-workstation/09-stand-v4/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/09-stand-v4/</guid>
<pubDate>Tue, 13 Oct 2026 14:10:00 +0000</pubDate>
<description>&lt;h1&gt;9 Stand v4: the lamp&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/renders/front-right.png&quot; alt=&quot;Stand v4 from the front right&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Stand v3 passed every check I gave it (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.7-where-it-stands/&quot;&gt;8.7&lt;/a&gt;). It&#39;s stiff, it&#39;s self-restoring and every part prints. But it still looks like what it is: a bracket on the back of a monitor, a dark hub and a fin. I wanted an object, not a mount. So v4 starts from the look and works back to the structure, where every earlier version did it the other way round.&lt;/p&gt;
&lt;h2&gt;Looking back first&lt;/h2&gt;
&lt;p&gt;Before drawing anything new I had every design so far rendered the same way: one capture each, orthographic, shaded with edges, on white, from the angle that shows it best. That&#39;s 20 designs in three days: the monitor and the PC models, the two fit gauges, six v1 concepts, v2, five v3 mounts and the four v3 devices.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/review/contact-sheet.jpg&quot; alt=&quot;Every design before v4, one capture each&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Seen side by side, the pattern is obvious. Each version fixed the structure of the last one: B2&#39;s long lever, v2&#39;s missing joints, v3&#39;s shared dock. None of them is one product. The PC is always a box hung on the screen or tucked behind it, and the stand is always a separate thing that holds the screen up.&lt;/p&gt;
&lt;h2&gt;The brief&lt;/h2&gt;
&lt;p&gt;Two ideas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A case that goes round the screen as well, so the screen and the stand read as one object.&lt;/li&gt;
&lt;li&gt;The PC sits under the screen, in the base. The base is the stand, like a lamp: a heavy foot with the thing you look at above it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I rendered the reference in ChatGPT, then asked for the same thing in black, which is what I&#39;m building. That&#39;s turned out to be a great way to work: ChatGPT renders the idea, Claude realises it in FreeCAD, and I repeat until the two agree.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;In black&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/reference/reference-white.jpg&quot; alt=&quot;A white desk display: a low base with a perforated side, a neck rising from its back, the screen in a white frame&quot; /&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v4/reference/reference-black.jpg&quot; alt=&quot;The same display in matte black&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The approach&lt;/h2&gt;
&lt;p&gt;The pipeline hasn&#39;t changed: FreeCAD driven by Claude Code, a build script and a check script per design, renders from the model, and everything must print on the A1. What&#39;s changed is the order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Look.&lt;/strong&gt; Start from the reference and a written design language, so the model has rules to follow and not just a picture (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09.1-the-design-language/&quot;&gt;9.1&lt;/a&gt;, &lt;a href=&quot;https://adamkdean.com/ai-workstation/09.2-the-style/&quot;&gt;9.2&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Print.&lt;/strong&gt; Bend the look until every part fits a 256 mm bed in a sensible print orientation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stand.&lt;/strong&gt; Check fit, clearances and balance with the same checks as v3 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/09.3-how-it-works/&quot;&gt;9.3&lt;/a&gt;).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The bed bends the look straight away. The case round the screen is 365 mm wide, more than the bed&#39;s 362 mm diagonal, so it has to split. I split it on the centre line into two halves. A one-piece base can be about 250 mm wide at most, which is 68% of the case&#39;s width. In the reference the base looks nearer 85%. I kept 250 mm in one piece: a slightly chunkier base, no seam across it.&lt;/p&gt;
&lt;h2&gt;Where it is&lt;/h2&gt;
&lt;p&gt;A massing model: the shapes, walls, the VESA joint, the PC&#39;s place and the halftone are all modelled, and every check passes. The joints between the body&#39;s parts, the feet and the cable route from the screen aren&#39;t designed yet. The weak point is balance: a push of 4.2 N at the top of the screen tips it over backwards, less than v3&#39;s 5.1 N. I&#39;ll deal with that in the &lt;a href=&quot;https://adamkdean.com/ai-workstation/09.4-stand-v4.1/&quot;&gt;next design iteration&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2.5 Sourcing</title>
<link>https://adamkdean.com/cat-wc-air-filter/02.5-sourcing/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02.5-sourcing/</guid>
<pubDate>Tue, 13 Oct 2026 11:25:00 +0000</pubDate>
<description>&lt;h1&gt;2.5 Sourcing&lt;/h1&gt;
&lt;p&gt;The last research topic is where to buy it all in the UK, as one person buying small amounts. I sent this brief before the fan research had finished, to save time, so ChatGPT priced a fan that &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.3-the-fan/&quot;&gt;2.3&lt;/a&gt; has since ruled out. I&#39;ve swapped in the right one below. It ran on GPT-6 at the Pro setting and worked for about 44 minutes.&lt;/p&gt;
&lt;p&gt;The short version: the electronics and the particle filters are easy, mostly in stock and a few clicks away. The carbon is the hard part. Nobody I could find sells a few litres of a documented gas-phase carbon to a private buyer through a checkout, and the ammonia medium is harder still. Those need emails to UK suppliers. Measuring the room&#39;s ammonia needs a lab, and Gradko&#39;s diffusion tubes can see down to a couple of ppb. The parts with prices come to about £285, and the prototype to about £440 to £640 once the quoted items are in.&lt;/p&gt;
&lt;h2&gt;The shopping list&lt;/h2&gt;
&lt;p&gt;Prices are from 13 October 2026, including VAT unless it says otherwise.&lt;/p&gt;
&lt;h3&gt;Media&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AC Infinity carbon refill, 8 lb (3.6 kg)&lt;/td&gt;
&lt;td&gt;The Hydro Bros&lt;/td&gt;
&lt;td&gt;£36.99, sold out on the day&lt;/td&gt;
&lt;td&gt;Virgin carbon made for air filters. No data sheet or SDS found, so a fallback, not a Purakol equivalent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plain gas-phase carbon like Purakol, 2 to 5 L&lt;/td&gt;
&lt;td&gt;Purafil, Airclean, Eurocarb&lt;/td&gt;
&lt;td&gt;Quote&lt;/td&gt;
&lt;td&gt;A sealed, labelled repack with its data sheet and SDS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ammonia medium, 2 to 5 L&lt;/td&gt;
&lt;td&gt;Camfil UK, Purafil, Eurocarb, Carbon Activated, Puragen&lt;/td&gt;
&lt;td&gt;Quote, allow £40 to £100&lt;/td&gt;
&lt;td&gt;Carbon impregnated for bases, or Puracarb AM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Filters, mesh and seals&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;FÖRNUFTIG particle filter, two&lt;/td&gt;
&lt;td&gt;IKEA&lt;/td&gt;
&lt;td&gt;£5 each&lt;/td&gt;
&lt;td&gt;One spare. Stock depends on the postcode&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pleated ePM1 50 to 60% panel, about 0.1 m²&lt;/td&gt;
&lt;td&gt;Camfil UK, or ADD Filtration or Airclean made to size&lt;/td&gt;
&lt;td&gt;Quote, allow £25 to £50&lt;/td&gt;
&lt;td&gt;With its ISO 16890 report and a low-flow pressure curve&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F7 mini-pleat panel, 290 × 290 × 45 mm&lt;/td&gt;
&lt;td&gt;ADD Filtration&lt;/td&gt;
&lt;td&gt;£12&lt;/td&gt;
&lt;td&gt;For bench tests only. F7 isn&#39;t proof of ePM1 50 to 60%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30 mesh stainless sheet, 600 × 1,200 mm&lt;/td&gt;
&lt;td&gt;Inoxia&lt;/td&gt;
&lt;td&gt;£35.13, VAT not stated&lt;/td&gt;
&lt;td&gt;0.567 mm openings. The hair screen and the granule screens. Holds pellets, not dust&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Closed-cell gasket strip, 10 × 3 mm, 10 m&lt;/td&gt;
&lt;td&gt;Polymax&lt;/td&gt;
&lt;td&gt;£7.80&lt;/td&gt;
&lt;td&gt;The adhesive isn&#39;t fully water-resistant&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Sensors and electronics&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SPS30&lt;/td&gt;
&lt;td&gt;DigiKey UK&lt;/td&gt;
&lt;td&gt;£35.54&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SGP40 breakout (DFRobot SEN0394)&lt;/td&gt;
&lt;td&gt;The Pi Hut&lt;/td&gt;
&lt;td&gt;£13.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHT45 breakout (Adafruit 5665)&lt;/td&gt;
&lt;td&gt;DigiKey UK&lt;/td&gt;
&lt;td&gt;£11.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SDP810-125PA&lt;/td&gt;
&lt;td&gt;DigiKey UK&lt;/td&gt;
&lt;td&gt;£27.89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SDP811-500PA&lt;/td&gt;
&lt;td&gt;DigiKey UK&lt;/td&gt;
&lt;td&gt;£30.10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ESP32 board (FireBeetle 2 ESP32-E)&lt;/td&gt;
&lt;td&gt;The Pi Hut&lt;/td&gt;
&lt;td&gt;£9.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20 kg load cell, one per tray&lt;/td&gt;
&lt;td&gt;The Pi Hut&lt;/td&gt;
&lt;td&gt;£3.80 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HX711 board, one per tray&lt;/td&gt;
&lt;td&gt;DigiKey UK&lt;/td&gt;
&lt;td&gt;£10.39 each&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5 V buck converter (Adafruit MPM3610)&lt;/td&gt;
&lt;td&gt;The Pi Hut&lt;/td&gt;
&lt;td&gt;£6.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cables, connectors, pressure tubing&lt;/td&gt;
&lt;td&gt;Various&lt;/td&gt;
&lt;td&gt;Allow £20 to £30&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The SDP810 and SDP811 are the same package with different I²C addresses, so both can share the bus. The SPS30 needs its 5-pin JST-ZH cable. Adafruit doesn&#39;t say its load cell is a single-point type, which a one-cell platform needs, though its drawing looks like one, and the drawing gives a 1 to 10 kg range against the listing&#39;s 20 kg. That&#39;s one to check before I design the tray platforms. And The Pi Hut sells the same HX711 board for £4.80 when it&#39;s in stock, which would save about £11.&lt;/p&gt;
&lt;h3&gt;Fans and power&lt;/h3&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Where&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arctic S12038-4K, three-pack&lt;/td&gt;
&lt;td&gt;Scan&lt;/td&gt;
&lt;td&gt;£24.98&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mean Well GST36B12-P1J, 12 V, 3 A&lt;/td&gt;
&lt;td&gt;RS&lt;/td&gt;
&lt;td&gt;about £28&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figure-of-eight UK mains lead&lt;/td&gt;
&lt;td&gt;Various&lt;/td&gt;
&lt;td&gt;A few pounds&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;2.3 asks for 12 V at 3 A for two S12038-4K fans and the electronics. ChatGPT suggested Mean Well&#39;s GST25B12, but at 2.08 A it&#39;s too small. The GST36B12 is the same desktop supply at 3 A and 36 W. Its RS price came from a search listing, so I&#39;ll check it before buying. Farnell sells these too, but its terms are for business customers only.&lt;/p&gt;
&lt;h2&gt;The carbon problem&lt;/h2&gt;
&lt;p&gt;The chemistry is settled. Buying a few litres of it isn&#39;t.&lt;/p&gt;
&lt;p&gt;Purafil&#39;s Purakol, the reference plain carbon, is 4 mm pellets at 0.45 to 0.55 kg per litre, so 2 to 5 litres is 0.9 to 2.75 kg. I found its data sheet but no UK small pack. Puracarb AM, the reference ammonia medium, turns out not to be carbon with an acid coating at all: it&#39;s 3.2 mm pellets of activated carbon, activated alumina and binders, at about 0.72 kg per litre, with an ammonia capacity of at least 5.8% of its weight. That&#39;s about 42 g of ammonia per litre. It&#39;s a capacity, not a lifetime: it doesn&#39;t say when ammonia starts getting through at the low levels in a WC.&lt;/p&gt;
&lt;p&gt;Media should be compared by the litre, not the kilogram, because the bed is a fixed volume:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;£ per litre&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mtext&gt;£ per kg&lt;/mtext&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;text{£ per litre} = &#92;text{£ per kg} &#92;times &#92;rho
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;£ per litre&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;£ per kg&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;rho&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is the bulk density in kg per litre.&lt;/p&gt;
&lt;p&gt;The plan is one enquiry, sent to Eurocarb in Bristol (which lists RGK, a respirator grade for ammonia), Carbon Activated Corporation&#39;s UK office, Puragen, Airclean, Camfil UK and Purafil. It asks for a paid, sealed and labelled repack of 1, 2 or 5 litres, and:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The exact grade, its maker and batch, the current data sheet and UK SDS.&lt;/li&gt;
&lt;li&gt;Pellet size, bulk density, fines limits, and the pressure drop for a shallow bed.&lt;/li&gt;
&lt;li&gt;For the ammonia medium, what it&#39;s impregnated with and how much.&lt;/li&gt;
&lt;li&gt;Breakthrough curves, ideally at below 1 ppm to a few ppm of ammonia, with the test humidity, temperature, bed depth and air speed.&lt;/li&gt;
&lt;li&gt;Whether they&#39;ll sell to a private buyer at all, and the delivered price.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The enquiry also gives them my conditions: from 2.3, a 380 × 240 mm bed face, 40 mm per stage, air at 0.11 m/s normally and 0.18 m/s on boost, and a contact time of 0.37 s and 0.22 s per stage.&lt;/p&gt;
&lt;p&gt;Two things that look like shortcuts aren&#39;t. A lab supplier&#39;s &amp;quot;acid-washed activated carbon&amp;quot; has been washed with acid to clean it, which isn&#39;t the same as being impregnated with it, so it says nothing about ammonia capacity. And aquarium ammonia removers work in water, not air.&lt;/p&gt;
&lt;h2&gt;Safety and disposal&lt;/h2&gt;
&lt;p&gt;The SDS for the exact grade comes before anything else, since acid-impregnated carbons differ. I&#39;ll fill the cartridges with the fan off, over a tray, away from the cats, and close them before they go into the WC. Impregnated media don&#39;t get washed or regenerated at home.&lt;/p&gt;
&lt;p&gt;Spent media are less clear. Whether they go in the household bin or need the council&#39;s hazardous waste route depends on the formulation, so the council gets the SDS and a description and decides. GOV.UK sends householders in England and Wales to their council for this. Until then, spent media stay bagged and labelled, and never go down a drain, into compost or back in the litter.&lt;/p&gt;
&lt;p&gt;The weight matters too. Five litres each of Purakol and Puracarb AM would weigh 5.85 to 6.35 kg before the filters and the case, which settles 2.3&#39;s point that the wall mount carries the media, not printed tabs.&lt;/p&gt;
&lt;h2&gt;Measuring the ammonia&lt;/h2&gt;
&lt;p&gt;2.4 left the room&#39;s ammonia level as the big unknown, anywhere from below 0.1 ppm to a few ppm. The options:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;What it can see&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Gradko diffusion tubes, analysed by their lab&lt;/td&gt;
&lt;td&gt;2 to 4 weeks&#39; average. Detection limit 1.6 µg/m³ over two weeks, about 2.3 ppb&lt;/td&gt;
&lt;td&gt;Quote, allow £100 to £200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SKC UMEx 300 badge, lab analysed&lt;/td&gt;
&lt;td&gt;25 ppb over 24 hours. Validated from 0.1 ppm. Sampling rate stated for 22 to 40 °C, and a WC may be cooler&lt;/td&gt;
&lt;td&gt;Quote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gastec 3DL colour tube&lt;/td&gt;
&lt;td&gt;0.1 ppm averaged over 10 hours, upwards. Amines interfere&lt;/td&gt;
&lt;td&gt;Quote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dräger 0.25/a tubes with a hand pump&lt;/td&gt;
&lt;td&gt;0.25 to 3 ppm, a spot reading&lt;/td&gt;
&lt;td&gt;Quote&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Radiello cartridges&lt;/td&gt;
&lt;td&gt;Depends on the lab&lt;/td&gt;
&lt;td&gt;£294 for 20 at SLS, being discontinued, before the samplers and the analysis&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The conversion from µg/m³ to ppb at 25 °C is&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;ppb&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;msup&gt;&lt;mtext&gt;g/m&lt;/mtext&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;24.45&lt;/mn&gt;&lt;/mrow&gt;&lt;mn&gt;17.03&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;text{ppb} = &#92;frac{&#92;mu&#92;text{g/m}^3 &#92;times 24.45}{17.03}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;ppb&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.317em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.631em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;17.03&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;μ&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;g/m&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.954em;&quot;&gt;&lt;span style=&quot;top:-3.2029em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;24.45&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where 24.45 litres is the volume of a mole of gas and 17.03 g is a mole of ammonia. So Gradko&#39;s 1.6 µg/m³ is about 2.3 ppb.&lt;/p&gt;
&lt;p&gt;Gradko is the first enquiry: a two-week round, with two exposed tubes and a blank. It gives an average, not the peak after a cat&#39;s visit, but that&#39;s the question 2.4 left: is the room at tens of ppb, hundreds, or ppm? I&#39;ll also ask whether a room at a few ppm would overload a two-week tube.&lt;/p&gt;
&lt;h2&gt;The budget&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Allowance&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Parts with prices above&lt;/td&gt;
&lt;td&gt;£285&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;12 V supply&lt;/td&gt;
&lt;td&gt;£20 to £30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ePM1 panel&lt;/td&gt;
&lt;td&gt;£25 to £50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;First fill of ammonia medium&lt;/td&gt;
&lt;td&gt;£40 to £100&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Printed case, cartridges and fixings&lt;/td&gt;
&lt;td&gt;£30 to £50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cables, mains lead, tubing&lt;/td&gt;
&lt;td&gt;£20 to £30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delivery from several suppliers&lt;/td&gt;
&lt;td&gt;£20 to £35&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A different fan, if the S12038s are too loud&lt;/td&gt;
&lt;td&gt;£0 to £60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prototype&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;£440 to £640&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Airflow test rig and spare parts&lt;/td&gt;
&lt;td&gt;£75 to £150&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ammonia baseline&lt;/td&gt;
&lt;td&gt;£100 to £200&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prototype and first tests&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;£615 to £990&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;ChatGPT&#39;s own list came to £295 for the priced parts, with the P12 Pro fan and two load cells per tray. My brief asked for &amp;quot;two load cells with HX711 boards per tray&amp;quot;, which it took literally. 2.4 settled on one per tray, and 2.3 replaced the fan, which together take it to £285.&lt;/p&gt;
&lt;h2&gt;What&#39;s next&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Send the media enquiry to the six suppliers.&lt;/li&gt;
&lt;li&gt;Ask Camfil UK for an EcoPleat G panel near 390 × 250 mm, with its low-flow pressure data.&lt;/li&gt;
&lt;li&gt;Ask Gradko for a two-week ammonia round.&lt;/li&gt;
&lt;li&gt;Buy the room pod now (SPS30, SGP40, SHT45, ESP32 and buck converter, about £76), so the baseline can start while the quotes come in.&lt;/li&gt;
&lt;li&gt;Buy the fans and two IKEA filters for the test mule.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That&#39;s the research done. The next part is measuring the room and starting the baseline.&lt;/p&gt;
&lt;h2&gt;What I checked&lt;/h2&gt;
&lt;p&gt;I had Claude check eighteen claims against the shop pages and data sheets, on the day. I reran the budget myself, with the fan and the load cells corrected.&lt;/p&gt;
&lt;p&gt;These held up: the Airclean and Purafil densities, Puracarb AM&#39;s make-up and capacity, General Carbon&#39;s details, Camfil&#39;s panel sizes, the ADD, Polymax, DigiKey, Pi Hut and Scan prices, and the Gradko, SKC, Gastec and Dräger figures.&lt;/p&gt;
&lt;p&gt;These needed correcting, and the post above uses the corrected versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT said the SDP811 is a board-mount part and the SDP810 has a cable connector. They&#39;re the same package, and only the I²C address differs.&lt;/li&gt;
&lt;li&gt;It cited a Camfil sheet for 13% phosphoric acid in 4 mm pellets. The current sheet says none of that, so I&#39;ve left it out.&lt;/li&gt;
&lt;li&gt;The Radiello price is from SLS, not Sigma-Aldrich, and SLS is discontinuing the pack.&lt;/li&gt;
&lt;li&gt;The Farnell price for the 2 A supply couldn&#39;t be checked, and the 3 A supply&#39;s RS price is from a search listing.&lt;/li&gt;
&lt;li&gt;The Hydro Bros carbon had sold out by the time it was checked.&lt;/li&gt;
&lt;li&gt;Inoxia doesn&#39;t say whether its price includes VAT.&lt;/li&gt;
&lt;li&gt;SKC states the badge&#39;s sampling rate is unaffected between 22 and 40 °C. It doesn&#39;t call that a validation range.&lt;/li&gt;
&lt;li&gt;Eurocarb&#39;s ammonia grade is a respirator grade.&lt;/li&gt;
&lt;li&gt;Adafruit doesn&#39;t say its load cell is a single-point type.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The allowances in the budget are ChatGPT&#39;s estimates, not prices, and weren&#39;t checked.&lt;/p&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Media:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Purafil, &lt;a href=&quot;https://www.purafil.com/wp-content/uploads/2023/01/Purakol-Product-Bulletin-2.pdf&quot;&gt;Purakol bulletin&lt;/a&gt; and &lt;a href=&quot;https://www.purafil.com/wp-content/uploads/2023/01/PurafilLit_PurafilPuracarbAMMedia-2.pdf&quot;&gt;Puracarb AM bulletin&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Airclean, &lt;a href=&quot;https://www.airclean.co.uk/activated-carbon/&quot;&gt;activated carbon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Eurocarb, &lt;a href=&quot;https://www.eurocarb.com/impregnated-grades/&quot;&gt;impregnated grades&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Carbon Activated Corporation, &lt;a href=&quot;https://activatedcarbon.com/activated-carbon&quot;&gt;activated carbon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Puragen, &lt;a href=&quot;https://puragen.com/uk/&quot;&gt;UK&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;General Carbon, &lt;a href=&quot;https://generalcarbon.com/activated-carbon/gc-ipa/&quot;&gt;GC IPA&lt;/a&gt; and &lt;a href=&quot;https://generalcarbon.com/wp-content/uploads/2017/04/SDS-IPA.pdf&quot;&gt;its SDS&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Hydro Bros, &lt;a href=&quot;https://www.thehydrobros.com/products/activated-carbon-refill-8lb-bag&quot;&gt;AC Infinity carbon refill&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Filters, mesh and seals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IKEA, &lt;a href=&quot;https://www.ikea.com/gb/en/p/foernuftig-filter-for-particle-removal-10461944/&quot;&gt;FÖRNUFTIG particle filter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Camfil, &lt;a href=&quot;https://www.camfil.com/dam/files/10235/1699491/Data-Sheet---International--en----EcoPleat-G.pdf&quot;&gt;EcoPleat G data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ADD Filtration, &lt;a href=&quot;https://www.addfiltration.co.uk/mini-pleat-panel-filters/card-case-2-45mm-deep-mini-pleat-panel-filters/f7-grade-card-case-2-45mm-deep-mini-pleat-panel-filters&quot;&gt;F7 mini-pleat panels&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Inoxia, &lt;a href=&quot;https://www.inoxia.co.uk/products/mesh/sheets/30-mesh&quot;&gt;30 mesh sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Polymax, &lt;a href=&quot;https://www.polymax.co.uk/catalog/product/view/id/70371/s/foam-strip-10mm-x-3mm-x-10m/category/196/&quot;&gt;10 × 3 mm foam strip&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sensors and electronics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DigiKey UK, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SPS30/9598990&quot;&gt;SPS30&lt;/a&gt;, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/adafruit-industries-llc/5665/17831054&quot;&gt;SHT45 breakout&lt;/a&gt;, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SDP810-125PA/6605488&quot;&gt;SDP810-125PA&lt;/a&gt;, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SDP811-500Pa/22169051&quot;&gt;SDP811-500Pa&lt;/a&gt; and &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sparkfun-electronics/13879/6202732&quot;&gt;HX711 board&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Pi Hut, &lt;a href=&quot;https://thepihut.com/products/gravity-sgp40-air-quality-sensor&quot;&gt;SGP40 breakout&lt;/a&gt;, &lt;a href=&quot;https://thepihut.com/products/firebeetle-esp32-e-iot-microcontroller-supports-wi-fi-bluetooth&quot;&gt;FireBeetle 2 ESP32-E&lt;/a&gt;, &lt;a href=&quot;https://thepihut.com/products/adafruit-strain-gauge-load-cell-4-wires-20kg&quot;&gt;load cell&lt;/a&gt;, &lt;a href=&quot;https://thepihut.com/products/sparkfun-load-cell-amplifier-hx711&quot;&gt;HX711 board&lt;/a&gt; and &lt;a href=&quot;https://thepihut.com/products/adafruit-mpm3610-5v-buck-converter-breakout-21v-in-5v-out-at-1-2a&quot;&gt;MPM3610 buck converter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Adafruit, &lt;a href=&quot;https://www.adafruit.com/product/4543&quot;&gt;load cell 4543&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Sensirion, &lt;a href=&quot;https://sensirion.com/media/documents/90500156/6167E43B/Sensirion_Differential_Pressure_Datasheet_SDP8xx_Digital.pdf&quot;&gt;SDP8xx data sheet&lt;/a&gt; and &lt;a href=&quot;https://sensirion.com/resource/datasheet/sps30&quot;&gt;SPS30 data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fans and power:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arctic, &lt;a href=&quot;https://www.arctic.de/en/S12038-4K/ACFAN00296A&quot;&gt;S12038-4K&lt;/a&gt;, three-pack at Scan.&lt;/li&gt;
&lt;li&gt;Mean Well GST36B12-P1J, &lt;a href=&quot;https://www.trcelectronics.com/products/mean-well-gst36b12-p1j&quot;&gt;specifications&lt;/a&gt; and &lt;a href=&quot;https://uk.rs-online.com/web/p/ac-dc-adapters/1176146&quot;&gt;RS listing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Farnell UK, &lt;a href=&quot;https://uk.farnell.com/terms-of-purchase&quot;&gt;terms of purchase&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ammonia measurement and disposal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Gradko, &lt;a href=&quot;https://www.gradko.com/environmental/ammonia/&quot;&gt;ammonia diffusion tubes&lt;/a&gt; and &lt;a href=&quot;https://www.gradko.com/wp-content/uploads/2023/11/ammonia-technical-data-sheet.pdf&quot;&gt;technical data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;SKC, &lt;a href=&quot;https://www.skcltd.com/products2/passive-samplers/umex-300-ammonia.html&quot;&gt;UMEx 300&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Gastec, &lt;a href=&quot;https://www.gastec.co.jp/files/user/asset/pdf/en/detector_tube/3DL.pdf&quot;&gt;3DL instructions&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Dräger, &lt;a href=&quot;https://www.draeger-mo.com/en/artnr/8101711/drager-tube-ammonia-0.25-a&quot;&gt;ammonia 0.25/a tube&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;SLS, &lt;a href=&quot;https://www.scientificlabs.com/en/product/RAD168&quot;&gt;Radiello RAD168&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;GOV.UK, &lt;a href=&quot;https://www.gov.uk/hazardous-waste-disposal&quot;&gt;hazardous waste disposal&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2.4 The sensors</title>
<link>https://adamkdean.com/cat-wc-air-filter/02.4-the-sensors/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02.4-the-sensors/</guid>
<pubDate>Tue, 13 Oct 2026 11:03:00 +0000</pubDate>
<description>&lt;h1&gt;2.4 The sensors&lt;/h1&gt;
&lt;p&gt;The fourth research topic is the sensors: which readings are worth having, and what each one can and can&#39;t tell me. It doesn&#39;t depend on the fan, so it ran alongside &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.2-the-particle-filter/&quot;&gt;2.2&lt;/a&gt;. ChatGPT got a brief with the &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/&quot;&gt;plan&lt;/a&gt; and the findings from &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/&quot;&gt;2.1&lt;/a&gt;, on GPT-6 at the Pro setting, and worked for about 37 minutes.&lt;/p&gt;
&lt;p&gt;The short version: build a small room-monitoring pod first, before the filter exists, with a particle sensor, a VOC sensor, and temperature and humidity. Measure the filter&#39;s airflow with a calibrated inlet and a differential pressure sensor, not from the fan speed. Detect tray use with a load cell under each tray. And don&#39;t buy an ammonia sensor yet: the affordable ones can&#39;t see the levels a room like this is likely to have.&lt;/p&gt;
&lt;h2&gt;Three questions, not one number&lt;/h2&gt;
&lt;p&gt;&amp;quot;Does it work&amp;quot; splits three ways, and each needs different evidence:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Does the room get better?&lt;/strong&gt; Smaller particle peaks, faster recovery after a tray is used, and lower sniff scores. The room pod and an event log answer this.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What does each stage remove in one pass?&lt;/strong&gt; That needs a reading just before and just after the stage, at a known airflow, with a sensor sensitive enough to see the difference.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Does a stage need changing?&lt;/strong&gt; Rising resistance, falling airflow, or the gas breaking through. These are different failures.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So there won&#39;t be a single &amp;quot;filter health&amp;quot; percentage on the dashboard.&lt;/p&gt;
&lt;h2&gt;The set&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Interface&lt;/th&gt;
&lt;th&gt;Tells me&lt;/th&gt;
&lt;th&gt;Doesn&#39;t tell me&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SPS30 particle sensor&lt;/td&gt;
&lt;td&gt;about £36&lt;/td&gt;
&lt;td&gt;I²C or UART, 5 V&lt;/td&gt;
&lt;td&gt;When dust goes up, rough PM levels, and how fast the room recovers&lt;/td&gt;
&lt;td&gt;The mass of all the litter dust, or the smell&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SGP40 VOC sensor, on a breakout&lt;/td&gt;
&lt;td&gt;£13.40&lt;/td&gt;
&lt;td&gt;I²C&lt;/td&gt;
&lt;td&gt;A broad gas signal to drive the fan&#39;s automatic mode&lt;/td&gt;
&lt;td&gt;How much ammonia or MMB there is, or what the carbon removes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SHT45 temperature and humidity&lt;/td&gt;
&lt;td&gt;about £12&lt;/td&gt;
&lt;td&gt;I²C&lt;/td&gt;
&lt;td&gt;The room&#39;s conditions, and compensation for the SGP40&lt;/td&gt;
&lt;td&gt;Anything about the filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SDP810-125PA across a calibrated inlet&lt;/td&gt;
&lt;td&gt;about £28&lt;/td&gt;
&lt;td&gt;I²C&lt;/td&gt;
&lt;td&gt;The real airflow through the filter&lt;/td&gt;
&lt;td&gt;Airflow without calibrating the inlet first&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SDP811-500PA across the particle stage&lt;/td&gt;
&lt;td&gt;about £30&lt;/td&gt;
&lt;td&gt;I²C&lt;/td&gt;
&lt;td&gt;The particle filter&#39;s resistance at a known airflow&lt;/td&gt;
&lt;td&gt;Whether the carbon is used up&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load cell and HX711 under each tray&lt;/td&gt;
&lt;td&gt;£15 to £35 a tray&lt;/td&gt;
&lt;td&gt;GPIO&lt;/td&gt;
&lt;td&gt;When a cat arrives and leaves, and which tray&lt;/td&gt;
&lt;td&gt;Whether it was a wee or a poo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The fan&#39;s tach output&lt;/td&gt;
&lt;td&gt;included&lt;/td&gt;
&lt;td&gt;GPIO&lt;/td&gt;
&lt;td&gt;Whether the fan is running or stalled&lt;/td&gt;
&lt;td&gt;The airflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The pod&#39;s three sensors come to about £61. The whole set, with both pressure sensors and two trays, is about £150 to £195, before the ESP32, the power supply and the plumbing. Sensirion&#39;s SEN55 (about £31) combines particles, VOC, temperature and humidity in one module, and would make a simpler pod. Separate parts let me put the gas and humidity sensors where I want them.&lt;/p&gt;
&lt;h2&gt;Particle sensors&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sensor&lt;/th&gt;
&lt;th&gt;Channels&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SPS30&lt;/td&gt;
&lt;td&gt;PM1, PM2.5, PM4, PM10, counts&lt;/td&gt;
&lt;td&gt;41 × 41 × 12 mm&lt;/td&gt;
&lt;td&gt;±5 µg/m³ + 5% for PM2.5 below 100 µg/m³. Life over 10 years. My choice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sensirion SEN55&lt;/td&gt;
&lt;td&gt;As SPS30, plus VOC, NOx, T, RH&lt;/td&gt;
&lt;td&gt;52 × 43 × 22 mm&lt;/td&gt;
&lt;td&gt;Good value all in one, less flexible to place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plantower PMS7003&lt;/td&gt;
&lt;td&gt;PM1, PM2.5, PM10, counts&lt;/td&gt;
&lt;td&gt;48 × 37 × 12 mm&lt;/td&gt;
&lt;td&gt;About £22. The budget option. About 3 years&#39; life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Panasonic SN-GCJA5&lt;/td&gt;
&lt;td&gt;PM1, PM2.5, PM10&lt;/td&gt;
&lt;td&gt;37 × 37 × 12 mm&lt;/td&gt;
&lt;td&gt;No longer made. Avoid&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;None of them is a reference instrument. The PM4 and PM10 numbers are worked out from the fine particles they actually see, and none of them sees the big debris from digging. They&#39;re good for timing events and comparing one event with another.&lt;/p&gt;
&lt;h2&gt;Gas sensors can&#39;t name the smell&lt;/h2&gt;
&lt;p&gt;The cheap gas sensors are metal-oxide parts that respond to a broad mix of gases. None of their makers shows them measuring MMB, indole or skatole. The SGP41&#39;s second channel is for NOx, not ammonia. Bosch shows the BME688 classifying hydrogen sulphide, which is interesting, but hydrogen sulphide isn&#39;t MMB. And a &amp;quot;TVOC in ppb&amp;quot; figure from a part like the ENS160 is an estimate, not a measurement of these compounds.&lt;/p&gt;
&lt;p&gt;That&#39;s fine for the fan. &amp;quot;Something changed, clean harder&amp;quot; doesn&#39;t need &amp;quot;there&#39;s 83 ppb of this compound&amp;quot;. The automatic mode, as a starting point:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The main trigger is a cat leaving a tray, from the load cell. That starts a 10 to 15 minute boost.&lt;/li&gt;
&lt;li&gt;A VOC Index above about 150, or a rise of 30 to 50 points over the level just before, held for 15 to 30 seconds, extends the boost. Sensirion&#39;s own example switches an air purifier on above 150.&lt;/li&gt;
&lt;li&gt;The fan ramps rather than jumps, waits a few quiet minutes before dropping back, and never switches fully off.&lt;/li&gt;
&lt;li&gt;A manual boost button, and a local fallback mode if the Wi-Fi drops.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The thresholds will come from the baseline data, not from these guesses.&lt;/p&gt;
&lt;h2&gt;Ammonia: not yet&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Sensor&lt;/th&gt;
&lt;th&gt;Range&lt;/th&gt;
&lt;th&gt;The problem&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Alphasense NH3-B1, electrochemical&lt;/td&gt;
&lt;td&gt;0 to 100 ppm&lt;/td&gt;
&lt;td&gt;Zero can be off by about 10 ppm. Needs a bias circuit. Hydrogen sulphide drives its reading strongly negative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Membrapor NH3/CR-50, electrochemical&lt;/td&gt;
&lt;td&gt;0 to 50 ppm&lt;/td&gt;
&lt;td&gt;Resolution under 0.3 ppm. 20 ppm of hydrogen sulphide reads as about 7 ppm of ammonia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Winsen ZE03-NH3 module&lt;/td&gt;
&lt;td&gt;0 to 100 ppm&lt;/td&gt;
&lt;td&gt;1 ppm steps. No UK stockist found; about $80 to $120 abroad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Winsen MQ-137, metal oxide&lt;/td&gt;
&lt;td&gt;5 to 500 ppm&lt;/td&gt;
&lt;td&gt;Responds to amines too. Needs 48 hours to warm in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figaro TGS2444 and TGS826&lt;/td&gt;
&lt;td&gt;from 10 and 30 ppm&lt;/td&gt;
&lt;td&gt;Hard to get now&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The only room study ChatGPT found was a diet study from 1993: a 23 m³ breeding room housing ten cats in cages, measured with detector tubes two hours after the ventilator was shut. It read 13 to 28 ppm. That says nothing useful about two cats in a WC. My room could be anywhere from below 0.1 ppm to a few ppm, and I don&#39;t know which.&lt;/p&gt;
&lt;p&gt;Measuring what the ammonia stage removes is harder still. The removal is&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mfrac&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mtext&gt;out&lt;/mtext&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mtext&gt;in&lt;/mtext&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta = 1 - &#92;frac{C_{&#92;text{out}}}{C_{&#92;text{in}}}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.1963em;vertical-align:-0.836em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;in&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2806em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;out&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.836em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;If 100 ppb goes in and 50 ppb comes out, and each sensor is good to ±10 ppb, the 50% removal is only known to about ±11 percentage points. A sensor that reads in 1 ppm steps can&#39;t see that at all. At a steady few ppm, a carefully calibrated electrochemical sensor could work, but nothing cheap does it at the low end.&lt;/p&gt;
&lt;p&gt;So the first step is to find out what the room&#39;s ammonia level actually is, with a calibrated instrument or sampling tubes that cover the right range, and decide on a sensor after that. Hydrogen sulphide has a better sensor (Alphasense&#39;s H2S-B4 has about 1 ppb of noise with the right circuit), but hydrogen sulphide isn&#39;t MMB, so it stays out of the first build too.&lt;/p&gt;
&lt;h2&gt;Measuring the airflow&lt;/h2&gt;
&lt;p&gt;The fan speed doesn&#39;t give the airflow, because that depends on the resistance the fan is working against. The recommendation is a fixed inlet with a pressure sensor across it, calibrated once for the assembled unit:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;msqrt&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;Δ&lt;/mi&gt;&lt;mi&gt;P&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;/mfrac&gt;&lt;/msqrt&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q = K &#92;sqrt{&#92;frac{&#92;Delta P}{&#92;rho}}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:3.04em;vertical-align:-1.1662em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;mord sqrt&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.8738em;&quot;&gt;&lt;span class=&quot;svg-align&quot; style=&quot;top:-5em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:5em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot; style=&quot;padding-left:1em;&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;Δ&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;P&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8804em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.8338em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:5em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;hide-tail&quot; style=&quot;min-width:1.02em;height:3.08em;&quot;&gt;&lt;svg xmlns=&quot;http://www.w3.org/2000/svg&quot; width=&quot;400em&quot; height=&quot;3.08em&quot; viewBox=&quot;0 0 400000 3240&quot; preserveAspectRatio=&quot;xMinYMin slice&quot;&gt;&lt;path d=&quot;M473,2793
c339.3,-1799.3,509.3,-2700,510,-2702 l0 -0
c3.3,-7.3,9.3,-11,18,-11 H400000v40H1017.7
s-90.5,478,-276.2,1466c-185.7,988,-279.5,1483,-281.5,1485c-2,6,-10,9,-24,9
c-8,0,-12,-0.7,-12,-2c0,-1.3,-5.3,-32,-16,-92c-50.7,-293.3,-119.7,-693.3,-207,-1200
c0,-1.3,-5.3,8.7,-16,30c-10.7,21.3,-21.3,42.7,-32,64s-16,33,-16,33s-26,-26,-26,-26
s76,-153,76,-153s77,-151,77,-151c0.7,0.7,35.7,202,105,604c67.3,400.7,102,602.7,104,
606zM1001 80h400000v40H1017.7z&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.1662em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;K&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;K&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;K&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; comes from the calibration and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;rho&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is the air density. A design target of 10 to 20 Pa at 36 m³/h becomes 28 to 56 Pa at 60 m³/h, because the pressure goes with the square of the flow. That fits the SDP810&#39;s ±125 Pa. It also adds resistance, which goes into the fan&#39;s budget in &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.3-the-fan/&quot;&gt;2.3&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The calibration needs a reference: a flow hood, or a proper traverse across the outlet, at several flows. A single anemometer reading at the outlet won&#39;t do. Done carefully at home, ±10% is realistic, and ±5% with a good reference. And 36 and 60 m³/h are 600 and 1,000 L/min, so the small flow sensors made for 200 L/min won&#39;t take the whole stream.&lt;/p&gt;
&lt;h2&gt;Pressure across the stages&lt;/h2&gt;
&lt;p&gt;Every stage gets a flush pressure tap in the space on each side. The SDP811 sits across the particle stage permanently, and the taps around the carbon get checked now and then. A pressure reading only means something with its airflow next to it: a lower pressure could be a cleaner filter, less air, or a leak. And pressure can&#39;t tell me how much carbon is left. For the carbon, the evidence is the sniff scores and the recovery times getting worse, checked by swapping in a fresh cartridge of just that stage.&lt;/p&gt;
&lt;h2&gt;Placement&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The room pod goes on a side wall, 0.5 to 1 m above the floor, away from the trays, the door draught and the filter&#39;s outlet, and stays there once the filter is in.&lt;/li&gt;
&lt;li&gt;A particle sensor needs the same pressure at its inlet and its outlet, so it can&#39;t straddle a filter. Sensirion also says to shield the SPS30 from air moving faster than 1 m/s, so it can&#39;t sit in the duct either.&lt;/li&gt;
&lt;li&gt;The SGP40 and SHT45 stay away from the ESP32, the regulator and the warm outlet. The enclosure&#39;s own plastics and glues can show up in gas readings, so the pod gets a test run powered and empty.&lt;/li&gt;
&lt;li&gt;To compare two particle sensors before and after a stage, run them side by side in the room first, then fit them, then swap them over.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Tray events and the sniff test&lt;/h2&gt;
&lt;p&gt;A load cell under each tray gives arrival, departure and which tray, so it&#39;s the main event signal. A motion sensor only shows something moved in the room, and the gas signal confirms an event rather than defining it, since cleaning products and people using the WC trigger it too.&lt;/p&gt;
&lt;p&gt;Sensors don&#39;t measure what I smell, so I&#39;ll score that too, the same way every time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Same person, same spot in the doorway, same door position, after a few minutes in fresh air. One normal sniff.&lt;/li&gt;
&lt;li&gt;At 5 and 15 minutes after a cat leaves the tray, and at 1 and 30 minutes when I can.&lt;/li&gt;
&lt;li&gt;Score 0 to 5: none, barely there, clear but mild, obvious and unpleasant, strong, overwhelming. Plus a word for it: ammonia, sulphur, faecal or other.&lt;/li&gt;
&lt;li&gt;Not knowing which filter setup is in, where I can manage it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No leaving trays dirty to test it, and no leaning over a tray to sniff.&lt;/p&gt;
&lt;h2&gt;The baseline&lt;/h2&gt;
&lt;p&gt;The pod runs for a day or two to settle, then logs for one to two weeks before the filter exists:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Signal&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;th&gt;Keep&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;SPS30&lt;/td&gt;
&lt;td&gt;About every second&lt;/td&gt;
&lt;td&gt;All channels and its status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SGP40&lt;/td&gt;
&lt;td&gt;Once a second, as Sensirion&#39;s algorithm expects&lt;/td&gt;
&lt;td&gt;Raw signal and VOC Index&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHT45&lt;/td&gt;
&lt;td&gt;Every 1 to 5 seconds&lt;/td&gt;
&lt;td&gt;Temperature and humidity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Load cells&lt;/td&gt;
&lt;td&gt;About 10 times a second&lt;/td&gt;
&lt;td&gt;One-second summaries, and arrivals and departures&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Door switch&lt;/td&gt;
&lt;td&gt;On change&lt;/td&gt;
&lt;td&gt;Every change&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One row a second for 14 days is about 1.2 million rows, which is nothing for a database. Alongside it go notes: tray cleans, litter changes, the door, people using the WC, cleaning products.&lt;/p&gt;
&lt;p&gt;The comparison is the peak above baseline, the area under it, and the recovery time, for similar events. Later there&#39;ll be three runs to compare: no filter, the fan running through an empty case, and the full filter. The empty case separates cleaning from just stirring the air.&lt;/p&gt;
&lt;p&gt;For a feel of the numbers: 36 and 60 m³/h move the room&#39;s air 10 and 16.7 times an hour. In the ideal well-mixed room from 2.1, with a perfect filter and nothing still giving off smell, 90% is gone after&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mn&gt;90&lt;/mn&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;ln&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;/mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;t_{90} = &#92;frac{&#92;ln 10}{n}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7651em;vertical-align:-0.15em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;90&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.0574em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3714em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mop&quot;&gt;ln&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;hours, which is 14 minutes at 10 air changes an hour and 8 minutes at 16.7. The tray keeps giving off smell, so the real recovery will be slower.&lt;/p&gt;
&lt;h2&gt;What changes in the plan&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The room pod (SPS30, SGP40, SHT45 and an ESP32) gets built first and logs for one to two weeks before anything else.&lt;/li&gt;
&lt;li&gt;Load cells under the trays give the event log.&lt;/li&gt;
&lt;li&gt;The filter gets a calibrated inlet with an SDP810 for airflow, an SDP811 across the particle stage, and pressure taps on every stage.&lt;/li&gt;
&lt;li&gt;No ammonia sensor until I know the room&#39;s ammonia level.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What I checked&lt;/h2&gt;
&lt;p&gt;I had Claude check nineteen of the claims against the data sheets, papers and shop pages. I worked through the arithmetic myself.&lt;/p&gt;
&lt;p&gt;These held up: the particle sensors&#39; specifications, the SGP41 having no ammonia channel, the BME688&#39;s sulphur detection, the VOC Index behaviour, every ammonia, hydrogen sulphide and pressure sensor specification, the cat room study&#39;s figures, and the prices from The Pi Hut and DigiKey.&lt;/p&gt;
&lt;p&gt;These needed correcting, and the post above uses the corrected versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT gave £134.38 for the Winsen ZE03-NH3 at a UK distributor. No UK listing could be found at any price.&lt;/li&gt;
&lt;li&gt;The SPS30&#39;s price was cited to the SEN55&#39;s page, and both SDP sensors to a third part&#39;s page. The prices were about right.&lt;/li&gt;
&lt;li&gt;The SPS30&#39;s pressure rule is in Sensirion&#39;s assembly guide, not its data sheet, and the guide adds the 1 m/s limit.&lt;/li&gt;
&lt;li&gt;Sensirion&#39;s example threshold of 150 is for switching on an air purifier, not for ventilation.&lt;/li&gt;
&lt;li&gt;The cat room study was a diet study of eight of the ten cats, kept in cages, which ChatGPT didn&#39;t mention.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest, including the automatic mode thresholds, the airflow accuracy targets and the sniff test, are ChatGPT&#39;s engineering suggestions, and weren&#39;t checked claim by claim.&lt;/p&gt;
&lt;h2&gt;Still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The room&#39;s real ammonia level, and the cheapest way to measure it properly.&lt;/li&gt;
&lt;li&gt;Whether the SGP40 responds to these smells at all. The baseline will show.&lt;/li&gt;
&lt;li&gt;The load cell platforms under the trays.&lt;/li&gt;
&lt;li&gt;A flow reference for calibrating the inlet.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Paper:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Terada et al., &lt;a href=&quot;https://www.jstage.jst.go.jp/article/jvms1991/55/2/55_2_291/_pdf/-char/en&quot;&gt;Effect of lactosucrose on fecal flora and fecal putrefactive products of cats&lt;/a&gt;, Journal of Veterinary Medical Science, 1993.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sensor makers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sensirion, &lt;a href=&quot;https://sensirion.com/resource/datasheet/sps30&quot;&gt;SPS30 data sheet&lt;/a&gt;, &lt;a href=&quot;https://www.farnell.com/datasheets/2725182.pdf&quot;&gt;SPS30 assembly guidelines&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/resource/datasheet/sen5x&quot;&gt;SEN5x data sheet&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/resource/datasheet/sgp40&quot;&gt;SGP40 data sheet&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/products/catalog/SGP41&quot;&gt;SGP41&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/media/documents/02232963/6294E043/Info_Note_VOC_Index.pdf&quot;&gt;VOC Index info note&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/media/documents/C87B1A6C/616452A3/Sensirion_Gas_Sensors_Datasheet_GAS_SGP4x_Design-In_Guide_D1.pdf&quot;&gt;SGP4x design-in guide&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/products/catalog/SHT45&quot;&gt;SHT45&lt;/a&gt;, &lt;a href=&quot;https://sensirion.com/media/documents/90500156/6167E43B/Sensirion_Differential_Pressure_Datasheet_SDP8xx_Digital.pdf&quot;&gt;SDP8xx data sheet&lt;/a&gt; and &lt;a href=&quot;https://sensirion.com/products/product-insights/specialist-articles/efficient-gas-flow-measurements-in-bypass&quot;&gt;flow measurement in bypass&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Plantower, &lt;a href=&quot;https://www.aqmd.gov/docs/default-source/aq-spec/resources-page/plantower-pms5003-manual_v2-3.pdf&quot;&gt;PMS5003 manual&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Panasonic, &lt;a href=&quot;https://cdn.sparkfun.com/assets/e/b/d/4/5/SN-GCJA5_Product_Specification.pdf&quot;&gt;SN-GCJA5 specification&lt;/a&gt; and &lt;a href=&quot;https://mm.digikey.com/Volume0/opasdata/d220001/medias/docus/7157/PDN.PG13418.07.07.2025.pdf&quot;&gt;discontinuation notice&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Bosch, &lt;a href=&quot;https://www.bosch-sensortec.com/products/environmental-sensors/gas-sensors/bme688/&quot;&gt;BME688&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ScioSense, &lt;a href=&quot;https://www.sciosense.com/wp-content/uploads/2023/12/ENS160-Datasheet.pdf&quot;&gt;ENS160 data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Alphasense, &lt;a href=&quot;https://ametekcdn.azureedge.net/mediafiles/project/oneweb/oneweb/alphasense/products/datasheets/alphasense_nh3-b1_datasheet_en_3.pdf&quot;&gt;NH3-B1&lt;/a&gt; and &lt;a href=&quot;https://ametekcdn.azureedge.net/mediafiles/project/oneweb/oneweb/alphasense/products/datasheets/alphasense_h2s-b4_datasheet_0224-final_en_1.pdf&quot;&gt;H2S-B4&lt;/a&gt; data sheets.&lt;/li&gt;
&lt;li&gt;Membrapor, &lt;a href=&quot;https://diltronic.com/downloads/product-sheets/nh3-cr-50.pdf&quot;&gt;NH3/CR-50 data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Winsen, &lt;a href=&quot;https://www.winsen-sensor.com/d/files/ze03-electrochemical-module-manualv2_5.pdf&quot;&gt;ZE03 manual&lt;/a&gt; and &lt;a href=&quot;https://www.winsen-sensor.com/d/files/semiconductor/mq137.pdf&quot;&gt;MQ-137 data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Figaro, &lt;a href=&quot;https://www.figaro.co.jp/en/product/docs/tgs2444_product_infomation_rev02.pdf&quot;&gt;TGS2444&lt;/a&gt; and &lt;a href=&quot;https://www.figarosensor.com/product/docs/TGS%20826%20%2805_04%29.pdf&quot;&gt;TGS826&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Shops (prices on 13 October 2026):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DigiKey UK, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SPS30/9598990&quot;&gt;SPS30&lt;/a&gt;, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SEN55-SDN-T/16342756&quot;&gt;SEN55&lt;/a&gt;, &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SDP810-125PA/6605488&quot;&gt;SDP810-125PA&lt;/a&gt; and &lt;a href=&quot;https://www.digikey.co.uk/en/products/detail/sensirion-ag/SDP811-500PA/22169051&quot;&gt;SDP811-500PA&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Pi Hut, &lt;a href=&quot;https://thepihut.com/products/gravity-sgp40-air-quality-sensor&quot;&gt;SGP40 breakout&lt;/a&gt;, &lt;a href=&quot;https://thepihut.com/products/adafruit-sensirion-sht45-precision-temperature-humidity-sensor-stemma-qt-qwiic&quot;&gt;SHT45 breakout&lt;/a&gt; and &lt;a href=&quot;https://thepihut.com/products/pms7003-particulate-matter-sensor-with-adapter-board&quot;&gt;PMS7003&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2.3 The fan</title>
<link>https://adamkdean.com/cat-wc-air-filter/02.3-the-fan/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02.3-the-fan/</guid>
<pubDate>Tue, 13 Oct 2026 11:01:00 +0000</pubDate>
<description>&lt;h1&gt;2.3 The fan&lt;/h1&gt;
&lt;p&gt;The third research topic is the fan. It depends on everything before it, so the brief gave ChatGPT the &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/&quot;&gt;plan&lt;/a&gt;, the gas media from &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/&quot;&gt;2.1&lt;/a&gt; and the particle filters&#39; pressure budget from &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.2-the-particle-filter/&quot;&gt;2.2&lt;/a&gt;, 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.&lt;/p&gt;
&lt;p&gt;The short version: a quiet PC fan can&#39;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.&lt;/p&gt;
&lt;h2&gt;The carbon beds&lt;/h2&gt;
&lt;p&gt;2.2 gave the particle filters&#39; share of the resistance. The carbon beds&#39; share comes from the Ergun equation, the standard model for air through a packed bed:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;Δ&lt;/mi&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;150&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;ε&lt;/mi&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;ε&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;msup&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;1.75&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;ε&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;ε&lt;/mi&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msup&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;frac{&#92;Delta p}{L} = &#92;frac{150&#92;,&#92;mu&#92;,(1-&#92;varepsilon)^2}{&#92;varepsilon^3 d^2}&#92;,v + &#92;frac{1.75&#92;,&#92;rho&#92;,(1-&#92;varepsilon)}{&#92;varepsilon^3 d}&#92;,v^2
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.0463em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;Δ&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;p&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.1771em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.4911em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ε&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.7401em;&quot;&gt;&lt;span style=&quot;top:-2.989em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.7401em;&quot;&gt;&lt;span style=&quot;top:-2.989em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;150&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;μ&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ε&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;span style=&quot;top:-3.063em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.113em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.427em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ε&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.7401em;&quot;&gt;&lt;span style=&quot;top:-2.989em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;1.75&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ε&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;span style=&quot;top:-3.113em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;L&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is the bed depth, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;v&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;v&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; the air speed at the bed face, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;d&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;d&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;d&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; the granule size, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ε&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;varepsilon&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ε&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; the share of the bed that&#39;s gaps between granules (0.40 here), and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;μ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;mu&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;μ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;ρ&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;rho&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;ρ&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; the air&#39;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&#39;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&#39;t smooth, so these are on the low side.&lt;/p&gt;
&lt;p&gt;Per bed, at 25 mm and 50 mm deep:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Granule size&lt;/th&gt;
&lt;th&gt;0.10 m/s&lt;/th&gt;
&lt;th&gt;0.20 m/s&lt;/th&gt;
&lt;th&gt;0.35 m/s&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4 mm pellets&lt;/td&gt;
&lt;td&gt;4 and 7 Pa&lt;/td&gt;
&lt;td&gt;10 and 19 Pa&lt;/td&gt;
&lt;td&gt;24 and 47 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3 mm pellets&lt;/td&gt;
&lt;td&gt;6 and 12 Pa&lt;/td&gt;
&lt;td&gt;15 and 30 Pa&lt;/td&gt;
&lt;td&gt;35 and 70 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2.5 mm, like 4×8 mesh granules&lt;/td&gt;
&lt;td&gt;8 and 16 Pa&lt;/td&gt;
&lt;td&gt;20 and 40 Pa&lt;/td&gt;
&lt;td&gt;46 and 91 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1.8 mm, like 6×12 mesh granules&lt;/td&gt;
&lt;td&gt;15 and 29 Pa&lt;/td&gt;
&lt;td&gt;35 and 69 Pa&lt;/td&gt;
&lt;td&gt;75 and 150 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;So coarse pellets, if the media I want come that way. Purafil&#39;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.&lt;/p&gt;
&lt;p&gt;The bigger lever is the bed&#39;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:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Bed, per stage&lt;/th&gt;
&lt;th&gt;Media&lt;/th&gt;
&lt;th&gt;Contact time at 36 m³/h&lt;/th&gt;
&lt;th&gt;At 60 m³/h&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;220 × 220 × 30 mm, the example in 2.1&lt;/td&gt;
&lt;td&gt;1.45 L&lt;/td&gt;
&lt;td&gt;0.145 s&lt;/td&gt;
&lt;td&gt;0.087 s&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;380 × 240 × 40 mm&lt;/td&gt;
&lt;td&gt;3.65 L&lt;/td&gt;
&lt;td&gt;0.365 s&lt;/td&gt;
&lt;td&gt;0.219 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That&#39;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.&lt;/p&gt;
&lt;h2&gt;The whole system&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Clean, 36 m³/h&lt;/th&gt;
&lt;th&gt;Clean, 60 m³/h&lt;/th&gt;
&lt;th&gt;Loaded, 36 m³/h&lt;/th&gt;
&lt;th&gt;Loaded, 60 m³/h&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hair mesh&lt;/td&gt;
&lt;td&gt;2 Pa&lt;/td&gt;
&lt;td&gt;3 Pa&lt;/td&gt;
&lt;td&gt;4 Pa&lt;/td&gt;
&lt;td&gt;7 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ePM1 filter&lt;/td&gt;
&lt;td&gt;8 Pa&lt;/td&gt;
&lt;td&gt;13 Pa&lt;/td&gt;
&lt;td&gt;16 Pa&lt;/td&gt;
&lt;td&gt;27 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11 or E12 filter&lt;/td&gt;
&lt;td&gt;25 Pa&lt;/td&gt;
&lt;td&gt;42 Pa&lt;/td&gt;
&lt;td&gt;50 Pa&lt;/td&gt;
&lt;td&gt;83 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Both carbon beds&lt;/td&gt;
&lt;td&gt;16 Pa&lt;/td&gt;
&lt;td&gt;33 Pa&lt;/td&gt;
&lt;td&gt;16 Pa&lt;/td&gt;
&lt;td&gt;33 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screens holding the media&lt;/td&gt;
&lt;td&gt;3 Pa&lt;/td&gt;
&lt;td&gt;8 Pa&lt;/td&gt;
&lt;td&gt;3 Pa&lt;/td&gt;
&lt;td&gt;8 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Grilles, turns and plenums&lt;/td&gt;
&lt;td&gt;5 Pa&lt;/td&gt;
&lt;td&gt;14 Pa&lt;/td&gt;
&lt;td&gt;5 Pa&lt;/td&gt;
&lt;td&gt;14 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;59 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;114 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;94 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;172 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;quot;Loaded&amp;quot; doubles the particle filters&#39; resistance and leaves the carbon alone. It&#39;s a design case, not a prediction of how long the filters last. The airflow measuring inlet in &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.4-the-sensors/&quot;&gt;2.4&lt;/a&gt; adds another 10 to 20 Pa at 36 m³/h on top.&lt;/p&gt;
&lt;p&gt;As curves, with &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;/&lt;/mi&gt;&lt;mn&gt;36&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;x = Q / 36&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;/36&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; in m³/h:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;Δ&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mtext&gt;clean&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;46&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;13&lt;/mn&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mtext&gt; Pa&lt;/mtext&gt;&lt;mspace width=&quot;2em&quot;&gt;&lt;/mspace&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;Δ&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;p&lt;/mi&gt;&lt;mtext&gt;loaded&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;81&lt;/mn&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mo&gt;+&lt;/mo&gt;&lt;mn&gt;13&lt;/mn&gt;&lt;msup&gt;&lt;mi&gt;x&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msup&gt;&lt;mtext&gt; Pa&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;Delta p_{&#92;text{clean}} &#92;approx 46x + 13x^2 &#92;text{ Pa} &#92;qquad &#92;Delta p_{&#92;text{loaded}} &#92;approx 81x + 13x^2 &#92;text{ Pa}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;Δ&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;clean&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;≈&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;46&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1.0585em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;span style=&quot;top:-3.113em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt; Pa&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:2em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;Δ&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;p&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;loaded&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;≈&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;81&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;13&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;x&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;span style=&quot;top:-3.113em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt; Pa&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;Why a PC fan won&#39;t do&lt;/h2&gt;
&lt;p&gt;A fan&#39;s maximum static pressure is what it makes with the airflow blocked. Its maximum airflow is with nothing in the way. They&#39;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:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fan&lt;/th&gt;
&lt;th&gt;Maximum pressure&lt;/th&gt;
&lt;th&gt;Best case through this stack&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Noctua NF-A14 PWM&lt;/td&gt;
&lt;td&gt;20 Pa&lt;/td&gt;
&lt;td&gt;under 15 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noctua NF-A12x25 PWM&lt;/td&gt;
&lt;td&gt;23 Pa&lt;/td&gt;
&lt;td&gt;under 16 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arctic P12 Max&lt;/td&gt;
&lt;td&gt;43 Pa&lt;/td&gt;
&lt;td&gt;under 28 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;be quiet! Silent Wings Pro 4 120 mm&lt;/td&gt;
&lt;td&gt;52 Pa&lt;/td&gt;
&lt;td&gt;under 33 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noctua NF-A14 industrialPPC-3000&lt;/td&gt;
&lt;td&gt;65 Pa&lt;/td&gt;
&lt;td&gt;under 39 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arctic P12 Pro&lt;/td&gt;
&lt;td&gt;68 Pa&lt;/td&gt;
&lt;td&gt;under 41 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;What can&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fan&lt;/th&gt;
&lt;th&gt;Maximum pressure&lt;/th&gt;
&lt;th&gt;Maximum airflow&lt;/th&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Current&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Arctic S12038-4K, 120 × 38 mm&lt;/td&gt;
&lt;td&gt;112 Pa&lt;/td&gt;
&lt;td&gt;180 m³/h&lt;/td&gt;
&lt;td&gt;4,000 rpm&lt;/td&gt;
&lt;td&gt;0.6 A max&lt;/td&gt;
&lt;td&gt;£24.98 for three&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Arctic S12038-8K, 120 × 38 mm&lt;/td&gt;
&lt;td&gt;363 Pa&lt;/td&gt;
&lt;td&gt;370 m³/h&lt;/td&gt;
&lt;td&gt;8,000 rpm&lt;/td&gt;
&lt;td&gt;3.2 A max&lt;/td&gt;
&lt;td&gt;£29.99 for three&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delta BFB1012EH blower&lt;/td&gt;
&lt;td&gt;about 920 Pa&lt;/td&gt;
&lt;td&gt;77 m³/h&lt;/td&gt;
&lt;td&gt;5,800 rpm&lt;/td&gt;
&lt;td&gt;2.4 A max&lt;/td&gt;
&lt;td&gt;not found in UK stock&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;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&#39;t automatically quieter than an axial fan.&lt;/p&gt;
&lt;p&gt;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:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Arrangement&lt;/th&gt;
&lt;th&gt;36 m³/h, clean&lt;/th&gt;
&lt;th&gt;60 m³/h, clean&lt;/th&gt;
&lt;th&gt;36 m³/h, loaded&lt;/th&gt;
&lt;th&gt;60 m³/h, loaded&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Two S12038-4K in series&lt;/td&gt;
&lt;td&gt;2,100 rpm each&lt;/td&gt;
&lt;td&gt;3,100 rpm each&lt;/td&gt;
&lt;td&gt;2,500 rpm each&lt;/td&gt;
&lt;td&gt;Can&#39;t, about 52 m³/h at most&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One S12038-8K&lt;/td&gt;
&lt;td&gt;2,600 rpm&lt;/td&gt;
&lt;td&gt;3,800 rpm&lt;/td&gt;
&lt;td&gt;3,100 rpm&lt;/td&gt;
&lt;td&gt;4,400 rpm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;Noise&lt;/h2&gt;
&lt;p&gt;There&#39;s no decibel figure that guarantees I won&#39;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&#39;s stricter than the 30 dB that the WHO&#39;s guidelines and the UK&#39;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.&lt;/p&gt;
&lt;p&gt;Hardware Busters measured one S12038-4K at 1 m in a quiet chamber, in free air:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Speed&lt;/th&gt;
&lt;th&gt;Noise, one fan&lt;/th&gt;
&lt;th&gt;Two fans&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1,279 rpm&lt;/td&gt;
&lt;td&gt;22.0 dB(A)&lt;/td&gt;
&lt;td&gt;about 25 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1,670 rpm&lt;/td&gt;
&lt;td&gt;26.4 dB(A)&lt;/td&gt;
&lt;td&gt;about 29 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2,046 rpm&lt;/td&gt;
&lt;td&gt;32.2 dB(A)&lt;/td&gt;
&lt;td&gt;about 35 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2,394 rpm&lt;/td&gt;
&lt;td&gt;36.7 dB(A)&lt;/td&gt;
&lt;td&gt;about 40 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3,057 rpm&lt;/td&gt;
&lt;td&gt;41.6 dB(A)&lt;/td&gt;
&lt;td&gt;about 45 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3,938 rpm&lt;/td&gt;
&lt;td&gt;48.8 dB(A)&lt;/td&gt;
&lt;td&gt;about 52 dB(A)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;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&#39;d have to run at about 1,300 rpm, which won&#39;t push this stack. That&#39;s a 10 dB gap at normal flow, so this is the part of the project most likely to fail.&lt;/p&gt;
&lt;p&gt;The usual rule of thumb for noise against speed is&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;Δ&lt;/mi&gt;&lt;mi&gt;L&lt;/mi&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;50&lt;/mn&gt;&lt;msub&gt;&lt;mrow&gt;&lt;mi&gt;log&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;/mrow&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;/msub&gt;&lt;mfrac&gt;&lt;msub&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;msub&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;Delta L &#92;approx 50 &#92;log_{10} &#92;frac{N_2}{N_1}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;Δ&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;L&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;≈&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.1963em;vertical-align:-0.836em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;50&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mop&quot;&gt;&lt;span class=&quot;mop&quot;&gt;lo&lt;span style=&quot;margin-right:0.0139em;&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.207em;&quot;&gt;&lt;span style=&quot;top:-2.4559em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2441em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.109em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;N&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.109em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.836em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;p&gt;The pitch matters as well as the level. The blade-pass tone is&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;/mrow&gt;&lt;mn&gt;60&lt;/mn&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;f = &#92;frac{Z N}{60}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1076em;&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.0463em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;60&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;Z&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;N&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;for &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Z&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Z&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;Z&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; blades at &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;N&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;N&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;N&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 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.&lt;/p&gt;
&lt;p&gt;What the case can do about it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Keep the filter and any grille away from the fan&#39;s inlet. Noctua measured 1.2 to 3.5 dB(A) less with just a 5 mm spacer on its own fans.&lt;/li&gt;
&lt;li&gt;Starting gaps: 80 to 120 mm from the E12 filter to the first fan, about a fan&#39;s width between the two fans, and 60 to 120 mm from the last fan to any turn or grille.&lt;/li&gt;
&lt;li&gt;Rubber fan mounts, and a separate load path, so the fans don&#39;t drive the big printed panels.&lt;/li&gt;
&lt;li&gt;A lined outlet chamber with a gentle dog-leg, using faced, non-shedding lining 10 to 25 mm thick, since it&#39;s after the last filter.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Control&lt;/h2&gt;
&lt;p&gt;The ESP32&#39;s LEDC peripheral can make the 25 kHz PWM the fans expect. ChatGPT suggested driving the fan&#39;s PWM wire through a small MOSFET as an open-drain switch. Noctua&#39;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&#39;s own pin. The fan&#39;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.&lt;/p&gt;
&lt;p&gt;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&#39;ll assume they don&#39;t stop at 0% PWM until I&#39;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.&lt;/p&gt;
&lt;p&gt;The tach wire gets a 4.7 to 10 kΩ pull-up to 3.3 V, never 12 V. With two pulses a revolution,&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;rpm&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;30&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mtext&gt;tach&lt;/mtext&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;text{rpm} = 30 &#92;times f_{&#92;text{tach}}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;rpm&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;30&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1076em;&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;tach&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;where &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;f&lt;/mi&gt;&lt;mtext&gt;tach&lt;/mtext&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;f_{&#92;text{tach}}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8889em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1076em;&quot;&gt;f&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1076em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;tach&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; 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&#39;t airflow: a clogged filter cuts the flow without any change the tach would notice. That&#39;s what the pressure sensors are for.&lt;/p&gt;
&lt;h2&gt;Power&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Fans&lt;/th&gt;
&lt;th&gt;Current&lt;/th&gt;
&lt;th&gt;Supply&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Two S12038-4K&lt;/td&gt;
&lt;td&gt;1.2 A max&lt;/td&gt;
&lt;td&gt;12 V, 3 A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;One S12038-8K&lt;/td&gt;
&lt;td&gt;3.2 A max&lt;/td&gt;
&lt;td&gt;12 V, 5 A&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;The layout&lt;/h2&gt;
&lt;p&gt;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.&lt;/p&gt;
&lt;h2&gt;What changes in the design&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The carbon beds grow to 380 × 240 mm, 40 mm per stage, in coarse pellets, matching the filter faces.&lt;/li&gt;
&lt;li&gt;Several kilograms of media, so the wall mount and the cartridge supports take the weight.&lt;/li&gt;
&lt;li&gt;A switched 12 V rail for the fans, a push-pull buffer on the PWM line, and a 3 A supply to start with.&lt;/li&gt;
&lt;li&gt;Before any final case, a test mule: a sealed box with the real filters, the real media and two S12038-4K fans, measured at 36 and 60 m³/h, then listened to with the door shut.&lt;/li&gt;
&lt;li&gt;The fan is a placeholder until that test. If it&#39;s too loud, the next thing to look at is a larger, slower centrifugal fan, perhaps on voltage control.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What I checked&lt;/h2&gt;
&lt;p&gt;I had Claude check sixteen of the claims against the data sheets, reviews and shop pages. I reran ChatGPT&#39;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.&lt;/p&gt;
&lt;p&gt;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&#39;s data, Noctua&#39;s spacer result, the tach and PWM signal details, and Purakol&#39;s 4 mm pellets and bulk density.&lt;/p&gt;
&lt;p&gt;These needed correcting, and the post above uses the corrected versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT said Arctic&#39;s published curves show the S12038 fans running at 0% PWM. Arctic publishes no PWM curve for them. They&#39;re listed from 600 rpm with no 0 rpm mode, which is why I&#39;ll test it rather than assume either way.&lt;/li&gt;
&lt;li&gt;ChatGPT&#39;s noise figures for the S12038-4K were scaled from one maximum figure. Hardware Busters measured the whole curve, so the post uses that.&lt;/li&gt;
&lt;li&gt;ChatGPT recommended an open-drain transistor to drive the PWM line, citing Noctua. Noctua&#39;s white paper advises against open-collector designs and recommends push-pull.&lt;/li&gt;
&lt;li&gt;The 8K is on preorder as a single fan, but in stock as a three-pack.&lt;/li&gt;
&lt;li&gt;ChatGPT&#39;s Sanyo Denki figures couldn&#39;t be checked: its data sheet wouldn&#39;t open, and the headline numbers match a sibling model without PWM. I&#39;ve left that fan out.&lt;/li&gt;
&lt;li&gt;ChatGPT cited a 1979 paper for the Ergun equation, which proposes different constants from the ones it used. The post now says which is which.&lt;/li&gt;
&lt;li&gt;The 20 to 25 dB(A) target isn&#39;t from any guidance. The WHO and BS 8233 give 30 dB for a bedroom.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest, including the casing losses, the 10% series allowance, the operating points read from the fan curves, and the plenum dimensions, are ChatGPT&#39;s engineering estimates, and weren&#39;t checked claim by claim.&lt;/p&gt;
&lt;h2&gt;Still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Whether any fan that can push this stack can be quiet enough at night.&lt;/li&gt;
&lt;li&gt;The real pressure drop of the media as I pack it, which the test mule will measure.&lt;/li&gt;
&lt;li&gt;A larger centrifugal fan with a published curve, as the fallback.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Papers and guidance:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;S. Ergun, Fluid flow through packed columns, Chemical Engineering Progress 48, 89 to 94, 1952.&lt;/li&gt;
&lt;li&gt;I. F. Macdonald et al., &lt;a href=&quot;https://doi.org/10.1021/i160071a001&quot;&gt;Flow through porous media: the Ergun equation revisited&lt;/a&gt;, Industrial and Engineering Chemistry Fundamentals, 1979.&lt;/li&gt;
&lt;li&gt;WHO, &lt;a href=&quot;https://nonoise.org/library/whonoise/whonoise.htm&quot;&gt;Guidelines for community noise&lt;/a&gt;, 1999.&lt;/li&gt;
&lt;li&gt;Punker, &lt;a href=&quot;https://www.punker.com/en/fan-technology-guide/basics-of-acoustics/fan-acoustics/&quot;&gt;Fan acoustics&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fans:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Arctic, &lt;a href=&quot;https://www.arctic.de/en/S12038-4K/ACFAN00296A&quot;&gt;S12038-4K&lt;/a&gt;, &lt;a href=&quot;https://support.arctic.de/products/s12038-4k/techdocs/12038-4K%204000RPM%20P-Q%20Curve.pdf&quot;&gt;its P-Q curve&lt;/a&gt;, &lt;a href=&quot;https://support.arctic.de/en/s12038-4k&quot;&gt;its support page&lt;/a&gt;, &lt;a href=&quot;https://arctic.de/media/17/b5/84/1724335283/Spec-Sheet_S12038-8K_DE.pdf&quot;&gt;S12038-8K spec sheet&lt;/a&gt;, &lt;a href=&quot;https://www.arctic.de/en/P12-PWM-PST/ACFAN00120A&quot;&gt;P12 PWM PST&lt;/a&gt;, &lt;a href=&quot;https://www.arctic.de/en/P12-Max/ACFAN00280A&quot;&gt;P12 Max&lt;/a&gt; and &lt;a href=&quot;https://www.arctic.de/media/f4/9f/31/1750412251/Spec_Sheet_P12_Pro_EN.pdf&quot;&gt;P12 Pro spec sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Hardware Busters, &lt;a href=&quot;https://hwbusters.com/cooling/arctic-s12038-4k-120mm-4k-rpm-server-fan/&quot;&gt;Arctic S12038-4K review&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Noctua, &lt;a href=&quot;https://www.noctua.at/en/products/nf-a12x25-pwm/specifications&quot;&gt;NF-A12x25 PWM&lt;/a&gt;, &lt;a href=&quot;https://cdn.noctua.at/media/Noctua_PWM_specifications_white_paper.pdf&quot;&gt;PWM specifications white paper&lt;/a&gt; and &lt;a href=&quot;https://www.noctua.at/en/expertise/tech/na-is1-performance-guidelines&quot;&gt;NA-IS1 performance guidelines&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;be quiet!, &lt;a href=&quot;https://www.bequiet.com/en/casefans/3705&quot;&gt;Silent Wings Pro 4 120 mm&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Delta, &lt;a href=&quot;https://www.delta-fan.com/Download/Spec/BFB1012EH-C18J.pdf&quot;&gt;BFB1012EH-C18J specification&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Purafil, &lt;a href=&quot;https://www.purafil.com/wp-content/uploads/2023/01/Purakol-Product-Bulletin-2.pdf&quot;&gt;Purakol bulletin&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Shops (prices on 13 October 2026):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Scan, &lt;a href=&quot;https://www.scan.co.uk/products/120mm-arctic-s12038-8k-fan-black-airflow-pressure-optimised-5-blade-dual-ball-bearing-8000rpm-220cfm&quot;&gt;S12038-8K&lt;/a&gt; and &lt;a href=&quot;https://www.scan.co.uk/products/120mm-arctic-s12038-8k-3-pack-fans-black-airflow-pressure-optimised-5-blade-dual-ball-bearing-8000rp&quot;&gt;S12038-8K three-pack&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2.2 The particle filter</title>
<link>https://adamkdean.com/cat-wc-air-filter/02.2-the-particle-filter/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02.2-the-particle-filter/</guid>
<pubDate>Tue, 13 Oct 2026 10:02:00 +0000</pubDate>
<description>&lt;h1&gt;2.2 The particle filter&lt;/h1&gt;
&lt;p&gt;The second research topic is the particle filter: what dust a litter room puts in the air, which filter grade is worth having, and how much airflow it costs. I gave ChatGPT a brief with the &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/&quot;&gt;plan&lt;/a&gt; and the findings from &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/&quot;&gt;2.1&lt;/a&gt;, on GPT-6 at the Pro setting. It worked for about 27 minutes.&lt;/p&gt;
&lt;p&gt;The short version: H13 HEPA isn&#39;t worth chasing here. The stack becomes a washable hair mesh, a pleated ePM1 filter before the carbon, and the best filter, an E11 or E12, after the carbon, where it also catches dust the carbon sheds. Face area matters more than grade. IKEA&#39;s £5 FÖRNUFTIG filter, the thing that started this project, is the first one to test.&lt;/p&gt;
&lt;h2&gt;What a litter room puts in the air&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;The particles&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Litter dust, from coarse to fine&lt;/li&gt;
&lt;li&gt;Cat allergen on dust&lt;/li&gt;
&lt;li&gt;Hair&lt;/li&gt;
&lt;li&gt;Whatever the tray mix carries&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;There&#39;s no good size data for litter dust. It depends on the brand, how the granules are made, and how hard the cats dig. Some litter makers count everything below 250 µm as dust and aim to keep it under 1% by volume. That&#39;s far bigger than PM10, so &amp;quot;99% dust-free&amp;quot; on a bag says little about the fine particles that stay in the air.&lt;/p&gt;
&lt;p&gt;Cat allergen is better studied. A study of nine homes found about three quarters of the airborne Fel d 1 on particles of 5 µm and up. On average a quarter was on particles of 2.5 µm and below, but that ranged from 10 to 62% between homes. A hair screen on its own would miss a good share of it.&lt;/p&gt;
&lt;p&gt;Hair is a maintenance problem more than a filtration one: it mats over filter faces. And if the litter is a bentonite clay, its safety data sheet is the place to check for crystalline silica. Silica gel litter is a different thing, amorphous silica. A 2025 conference abstract, partly based on industry dust data, estimated that normal use of bentonite litter isn&#39;t a significant breathing risk, but said the estimate may be low for homes with several pets.&lt;/p&gt;
&lt;p&gt;So the particle stage has two jobs. It keeps hair and coarse dust off the carbon, and it catches fine particles somewhere in the air&#39;s path.&lt;/p&gt;
&lt;h2&gt;The grades&lt;/h2&gt;
&lt;p&gt;The EN 1822 classes are rated at the particle size that gets through most easily, so they&#39;re a worst case:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Class&lt;/th&gt;
&lt;th&gt;Minimum efficiency&lt;/th&gt;
&lt;th&gt;Gets through&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E10&lt;/td&gt;
&lt;td&gt;85%&lt;/td&gt;
&lt;td&gt;15%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11&lt;/td&gt;
&lt;td&gt;95%&lt;/td&gt;
&lt;td&gt;5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E12&lt;/td&gt;
&lt;td&gt;99.5%&lt;/td&gt;
&lt;td&gt;0.5%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H13&lt;/td&gt;
&lt;td&gt;99.95%&lt;/td&gt;
&lt;td&gt;0.05%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H14&lt;/td&gt;
&lt;td&gt;99.995%&lt;/td&gt;
&lt;td&gt;0.005%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;E is EPA and H is HEPA. The general ventilation grades are different tests again. An ISO 16890 ePM1 60% filter takes 60% of the PM1 fraction as a whole, not 60% at every size below 1 µm. The older EN 779 G4 is measured on a coarse test dust, so it doesn&#39;t mean 90% of PM2.5. And MERV is the American system, with its own size bands. None of them converts exactly into another.&lt;/p&gt;
&lt;h2&gt;Why not H13&lt;/h2&gt;
&lt;p&gt;The room gets clean air at the airflow times the filter&#39;s efficiency, as in 2.1:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mtext&gt;clean&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q_{&#92;text{clean}} = Q &#92;times &#92;eta
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;clean&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;At 36 m³/h:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;
&lt;th&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mtext&gt;clean&lt;/mtext&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q_{&#92;text{clean}}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;clean&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E11&lt;/td&gt;
&lt;td&gt;0.95&lt;/td&gt;
&lt;td&gt;34.2 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E12&lt;/td&gt;
&lt;td&gt;0.995&lt;/td&gt;
&lt;td&gt;35.8 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H13&lt;/td&gt;
&lt;td&gt;0.9995&lt;/td&gt;
&lt;td&gt;36.0 m³/h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;An E11 filter needs only 5% more airflow to clean the room as fast as an H13, and an E12 needs less than half a percent more. So for a room unit the grade above E12 barely matters, and the airflow does. A good H13 panel that doesn&#39;t cost any airflow would be fine. The grade doesn&#39;t set the resistance on its own: the construction does.&lt;/p&gt;
&lt;h2&gt;Face area and pleats&lt;/h2&gt;
&lt;p&gt;Air speed through a filter face is the airflow over the face area:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;v&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mrow&gt;&lt;mn&gt;3600&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;v = &#92;frac{Q}{3600 &#92;times A}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;v&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.1297em;vertical-align:-0.7693em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;3600&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.7693em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;with &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; in m³/h and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;A&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;A&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;A&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; in m². For a 200 × 200 mm face at 36 m³/h that&#39;s 0.25 m/s. For FÖRNUFTIG&#39;s 390 × 250 mm face it&#39;s 0.10 m/s.&lt;/p&gt;
&lt;p&gt;ChatGPT found published pressure drops for real filters and scaled them to a 0.1 m² face, assuming the drop rises in step with air speed, which is close enough for clean fibrous media:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;Published&lt;/th&gt;
&lt;th&gt;At 36 m³/h&lt;/th&gt;
&lt;th&gt;At 60 m³/h&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;G4 synthetic mat, 20 mm&lt;/td&gt;
&lt;td&gt;30 Pa at 1.0 m/s&lt;/td&gt;
&lt;td&gt;3 Pa&lt;/td&gt;
&lt;td&gt;5 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pleated ePM1 55%, 48 mm&lt;/td&gt;
&lt;td&gt;110 Pa at 2.3 m/s&lt;/td&gt;
&lt;td&gt;5 Pa&lt;/td&gt;
&lt;td&gt;8 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11 mini-pleat, 50 mm pleats&lt;/td&gt;
&lt;td&gt;90 Pa at 0.45 m/s&lt;/td&gt;
&lt;td&gt;20 Pa&lt;/td&gt;
&lt;td&gt;34 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11 mini-pleat, 125 mm pleats&lt;/td&gt;
&lt;td&gt;45 Pa at 0.45 m/s&lt;/td&gt;
&lt;td&gt;10 Pa&lt;/td&gt;
&lt;td&gt;17 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H13 mini-pleat, 66 mm&lt;/td&gt;
&lt;td&gt;115 Pa at 0.45 m/s&lt;/td&gt;
&lt;td&gt;25 Pa&lt;/td&gt;
&lt;td&gt;42 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Flat ePM1 65% sheet, 4.5 mm&lt;/td&gt;
&lt;td&gt;120 Pa at 0.17 m/s&lt;/td&gt;
&lt;td&gt;72 Pa&lt;/td&gt;
&lt;td&gt;120 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two lessons. A flat sheet of fine media is a trap: 120 Pa at a speed this unit will actually run at. And deeper pleats help a lot: the same E11 media in 125 mm pleats has half the drop of 50 mm pleats. Pleating multiplies the media area by about twice the pleat depth over the pitch, so 40 mm pleats at a 4 mm pitch give 20 times the face area.&lt;/p&gt;
&lt;p&gt;The target is about 0.1 m² per fine filter face. That&#39;s bigger than the 220 × 220 mm I&#39;d been picturing, and bigger than the A1&#39;s bed in one direction, but the bed limits the printed parts, not the filter. The frame can be joined around a larger panel.&lt;/p&gt;
&lt;h2&gt;The stack&lt;/h2&gt;
&lt;p&gt;Room air → hair mesh → pleated ePM1 → plain carbon → carbon for bases → E11 or E12 → fan → room.&lt;/p&gt;
&lt;p&gt;The best filter goes last because the carbon granules shed dust. Particles from the room meet both filters, and two in a row combine as&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta = 1 - (1 - &#92;eta_1)(1 - &#92;eta_2)
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;but dust made inside the carbon cartridge only meets the one after it. The ePM1 filter in front isn&#39;t a perfect barrier, but it keeps most of the dust off the carbon without paying for two EPA filters.&lt;/p&gt;
&lt;p&gt;The estimated pressure budget, clean:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;At 36 m³/h&lt;/th&gt;
&lt;th&gt;At 60 m³/h&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hair mesh, 0.3 to 0.8 mm openings&lt;/td&gt;
&lt;td&gt;1 to 3 Pa&lt;/td&gt;
&lt;td&gt;2 to 5 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pleated ePM1 50 to 60%, about 45 mm deep&lt;/td&gt;
&lt;td&gt;5 to 12 Pa&lt;/td&gt;
&lt;td&gt;8 to 20 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11 or E12, pleated&lt;/td&gt;
&lt;td&gt;20 to 30 Pa&lt;/td&gt;
&lt;td&gt;35 to 50 Pa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Particle stages&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;26 to 45 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;45 to 75 Pa&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;That leaves out the carbon beds, the grilles and the turns inside the case, which is the next topic. These are estimates from published data, not measurements, and a thin consumer filter won&#39;t necessarily match a 50 mm industrial one.&lt;/p&gt;
&lt;h2&gt;Sealing&lt;/h2&gt;
&lt;p&gt;If a share &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;b&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; of the air goes round the filter instead of through it:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mtext&gt;eff&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;b&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta_{&#92;text{eff}} = (1 - b) &#92;times &#92;eta
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;eff&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;b&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;With 1% bypass, an H13 filter&#39;s 99.95% becomes 98.95%. What gets through goes from 0.05% to 1.05%, 21 times as much. But the room still gets 99% of the clean air. A leak ruins a HEPA claim long before it ruins the room cleaning. The catch is that a gap has far less resistance than the media, so a small gap can carry far more than its share of the air.&lt;/p&gt;
&lt;p&gt;The housing gets a continuous seal, not a push fit: a flat seating land 8 to 12 mm wide, a 2 to 3 mm closed-cell gasket (EPDM, silicone or neoprene), and a clamping frame with stops so the screws can&#39;t crush the filter. The joins between printed parts need sealing too. I won&#39;t assume a 3D-printed wall is airtight.&lt;/p&gt;
&lt;h2&gt;Filters to design around&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Filter&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Grade&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;IKEA FÖRNUFTIG particle filter&lt;/td&gt;
&lt;td&gt;390 × 250 × 20 mm&lt;/td&gt;
&lt;td&gt;E12&lt;/td&gt;
&lt;td&gt;£5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IKEA STARKVIND particle filter&lt;/td&gt;
&lt;td&gt;370 × 290 × 40 mm&lt;/td&gt;
&lt;td&gt;E12&lt;/td&gt;
&lt;td&gt;£12&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IKEA UPPÅTVIND particle filter&lt;/td&gt;
&lt;td&gt;about 200 × 250 × 25 mm&lt;/td&gt;
&lt;td&gt;E12&lt;/td&gt;
&lt;td&gt;£3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ADD Filtration G4 pads, pack of ten&lt;/td&gt;
&lt;td&gt;290 × 290 × 20 mm&lt;/td&gt;
&lt;td&gt;G4&lt;/td&gt;
&lt;td&gt;£5.50 + VAT&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;IKEA&#39;s filter pages don&#39;t give a class. The grade comes from the purifier pages, which say EPA 12. FÖRNUFTIG&#39;s filter has a 0.0975 m² face for £5, so it&#39;s the obvious first test. IKEA doesn&#39;t publish its pressure drop, though, and a filter in my case doesn&#39;t inherit IKEA&#39;s testing. I&#39;ll measure it before I design the housing around it. For the ePM1 stage, a pleated panel from a filter supplier, with its test report and pressure curve, beats cutting media to size.&lt;/p&gt;
&lt;h2&gt;Charged media and humidity&lt;/h2&gt;
&lt;p&gt;Many synthetic filters use an electrostatic charge to catch fine particles with less resistance. The charge can fade, and the efficiency with it, without any change in pressure drop. A 2025 lab study loaded charged filter media with a salt aerosol at 80% humidity: efficiency fell by 43.2% while the pressure drop rose by just 1 Pa. That&#39;s one test, not a prediction for IKEA&#39;s filter, but it shows that the pressure sensor won&#39;t see this kind of failure. When I buy, I&#39;ll ask for the minimum efficiency with the charge removed (ePM1,min in ISO 16890), not just the headline figure.&lt;/p&gt;
&lt;h2&gt;When to change them&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Check&lt;/th&gt;
&lt;th&gt;Change when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Hair mesh&lt;/td&gt;
&lt;td&gt;Weekly at first&lt;/td&gt;
&lt;td&gt;Hair starts covering it. Wash and dry fully&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ePM1&lt;/td&gt;
&lt;td&gt;Monthly&lt;/td&gt;
&lt;td&gt;It eats too much of the pressure budget, or the airflow can&#39;t be held&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E11 or E12&lt;/td&gt;
&lt;td&gt;After the first carbon fill, then monthly&lt;/td&gt;
&lt;td&gt;Its pressure rises, or carbon dust loads it fast&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;As starting triggers: a stage reading 10 to 20 Pa above its clean value, or the unit losing about 20% of its airflow at the same setting. IKEA&#39;s six months is a backstop, not a lifespan. Fine filters can&#39;t be washed, only replaced. And a rising pressure shows loading, not a hole or a leak, so the seals get a look at every change.&lt;/p&gt;
&lt;h2&gt;What changes in the design&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Two particle filters, not one HEPA: ePM1 before the carbon, E11 or E12 after it.&lt;/li&gt;
&lt;li&gt;About 0.1 m² per filter face, so a wider case, printed in parts and joined.&lt;/li&gt;
&lt;li&gt;Pressure taps on both sides of every stage, built into the housing from the start.&lt;/li&gt;
&lt;li&gt;A bench test before the housing: one FÖRNUFTIG E12 and one pleated ePM1 panel, alone and together, at 36 and 60 m³/h.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What I checked&lt;/h2&gt;
&lt;p&gt;I had Claude check sixteen of the claims against the sources, reading the standards summaries, data sheets, papers and shop pages themselves. I worked through the arithmetic myself, including ChatGPT&#39;s scaling of the pressure drops to a 0.1 m² face.&lt;/p&gt;
&lt;p&gt;These held up: the EN 1822, EN 779 and MERV figures, the cat allergen particle sizes, every published pressure drop in the table, the IKEA filters&#39; sizes and prices, the six-month replacement advice, and the electret humidity result.&lt;/p&gt;
&lt;p&gt;These needed correcting, and the post above uses the corrected versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Ulpatek E11 filters&#39; 50 mm and 125 mm are pleat heights. The panels are 78 and 150 mm deep.&lt;/li&gt;
&lt;li&gt;The allergen study covered nine homes, and the small-particle share ranged from 10 to 62%. ChatGPT gave only the average.&lt;/li&gt;
&lt;li&gt;Microtrac&#39;s note doesn&#39;t define dust as anything below 250 µm. It says some makers aim for under 1% by volume below 250 µm.&lt;/li&gt;
&lt;li&gt;IKEA&#39;s filter pages don&#39;t give a class. The EPA 12 rating is on the purifier pages.&lt;/li&gt;
&lt;li&gt;ChatGPT cited a ToxStrategies source next to points about safety data sheets that it doesn&#39;t make. It&#39;s a 2025 conference abstract, and its actual conclusion is the low-risk estimate above.&lt;/li&gt;
&lt;li&gt;Camfil says not to reuse, wash or clean any of its panel filters, not only the fine ones.&lt;/li&gt;
&lt;li&gt;The H13 figure is from Camfil&#39;s New Zealand data sheet. Its international sheet now lists only an H14 version, at 140 Pa for 600 m³/h.&lt;/li&gt;
&lt;li&gt;ADD&#39;s prices are without VAT.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest, including the pressure budget for the hair mesh and the replacement triggers, comes from ChatGPT&#39;s answer as engineering estimates, and wasn&#39;t checked claim by claim.&lt;/p&gt;
&lt;h2&gt;Still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The real pressure drop of the FÖRNUFTIG E12 filter and an ePM1 panel.&lt;/li&gt;
&lt;li&gt;Which ePM1 panel to buy, and whether a supplier will give its pressure curve.&lt;/li&gt;
&lt;li&gt;Which litter the cats use, and what its data sheet says about silica.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Papers and standards:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C. M. Luczynska et al., &lt;a href=&quot;https://pubmed.ncbi.nlm.nih.gov/2301854/&quot;&gt;Airborne concentrations and particle size distribution of allergen derived from domestic cats&lt;/a&gt;, American Review of Respiratory Disease, 1990.&lt;/li&gt;
&lt;li&gt;Zhou et al., &lt;a href=&quot;https://doi.org/10.1177/1420326X251327996&quot;&gt;Investigation of the filtration performance of electret media for deliquescent and non-deliquescent aerosols under different relative humidity&lt;/a&gt;, Indoor and Built Environment, 2025.&lt;/li&gt;
&lt;li&gt;Bogar et al. (ToxStrategies), &lt;a href=&quot;https://toxstrategies.com/publications/airborne-silica-from-bentonite-clay-cat-litter-an-evaluation-of-potential-non-occupational-exposure-and-respiratory-health-risks/&quot;&gt;Airborne silica from bentonite clay cat litter&lt;/a&gt;, conference abstract, 2025.&lt;/li&gt;
&lt;li&gt;Microtrac, &lt;a href=&quot;https://www.microtrac.com/files/193371/particle-size-and-dust-content-in-cat-litter.pdf&quot;&gt;Particle size and dust content in cat litter&lt;/a&gt;, application note.&lt;/li&gt;
&lt;li&gt;MANN+HUMMEL, &lt;a href=&quot;https://airfiltration.mann-hummel.com/en-uk/insights/filter-classification/din-en-1822.html&quot;&gt;DIN EN 1822&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Camfil, &lt;a href=&quot;https://www.camfil.com/en-us/insights/standard-and-regulations/the-international-test-standard-iso-16890-for-air-filters-for-general-ventilation&quot;&gt;ISO 16890&lt;/a&gt;, and Freudenberg, &lt;a href=&quot;https://www.freudenberg-filter.com/markets/industrial/standards-and-certifications/classification-of-air-filters/iso-16890/&quot;&gt;ISO 16890&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Airclean, &lt;a href=&quot;https://www.airclean.co.uk/technical-bulletins/en779-2012-new-standard-air-filtration/&quot;&gt;EN 779:2012&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;US EPA, &lt;a href=&quot;https://www.epa.gov/indoor-air-quality-iaq/what-merv-rating&quot;&gt;What is a MERV rating?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Manufacturers and shops:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Freudenberg, &lt;a href=&quot;https://products.freudenberg-filter.com/en/detail/8633/filter-mats/p-15-series/&quot;&gt;P15 filter mats&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;VOLZ, &lt;a href=&quot;https://volzfilters.com/en/Products/Filter-media/Pocket-filter-media/PROsyntex-media/&quot;&gt;PROsyntex media&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Camfil, &lt;a href=&quot;https://www.camfil.com/dam/files/10235/1699491/Data-Sheet---International--en----EcoPleat-G.pdf&quot;&gt;EcoPleat G data sheet&lt;/a&gt;, &lt;a href=&quot;https://camfil.com/dam/files/6843/1628995/Data-Sheet---New-Zealand-(en-AU)---Megalam-MD13---Prosafe.pdf&quot;&gt;Megalam MD13 data sheet&lt;/a&gt; and &lt;a href=&quot;https://www.camfil.com/dam/files/14575/1231688/Handling-and-maintenance-Panel-filters-ENG.pdf&quot;&gt;panel filter handling&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ulpatek, &lt;a href=&quot;https://www.ulpatek.com/wp-content/uploads/2024/03/EPA-Ceiling-Filter-Aluminium-Frame.pdf&quot;&gt;EPA filter data sheet&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;IKEA, &lt;a href=&quot;https://www.ikea.com/gb/en/p/foernuftig-filter-for-particle-removal-10461944/&quot;&gt;FÖRNUFTIG filter&lt;/a&gt;, &lt;a href=&quot;https://www.ikea.com/gb/en/p/starkvind-filter-for-particle-removal-30461943/&quot;&gt;STARKVIND filter&lt;/a&gt;, &lt;a href=&quot;https://www.ikea.com/gb/en/p/uppatvind-filter-for-particle-removal-30552009/&quot;&gt;UPPÅTVIND filter&lt;/a&gt; and &lt;a href=&quot;https://www.ikea.com/gb/en/p/foernuftig-air-purifier-black-40488065/&quot;&gt;FÖRNUFTIG purifier&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;ADD Filtration, &lt;a href=&quot;https://www.addfiltration.co.uk/290x290mm-g4-grade-20mm-deep-blue-white-synthetic-filter-pads---pack-of-10&quot;&gt;G4 pads&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2.1 The smell and the filter media</title>
<link>https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/</guid>
<pubDate>Tue, 13 Oct 2026 08:50:00 +0000</pubDate>
<description>&lt;h1&gt;2.1 The smell and the filter media&lt;/h1&gt;
&lt;p&gt;The first research topic is what the smell is made of and what catches it. I gave ChatGPT Pro the &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/&quot;&gt;plan&lt;/a&gt; and asked it to start on filter media and processes for both the urine and the faeces smells. It worked for about 16 minutes and came back with a long answer and 20 sources. This is what it found, what I make of it, and which parts I checked.&lt;/p&gt;
&lt;p&gt;The short version: the filter needs two gas media, not one. Plain activated carbon takes the broad mix of smells, and a separate medium made for ammonia takes the ammonia. And my baffle idea doesn&#39;t work the way I thought it would.&lt;/p&gt;
&lt;h2&gt;I had the smell wrong&lt;/h2&gt;
&lt;p&gt;In &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01-the-project/&quot;&gt;post 1&lt;/a&gt; I said litter tray smell is mostly ammonia. That&#39;s only part of it.&lt;/p&gt;
&lt;aside&gt;
&lt;p&gt;The compounds&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ammonia, from urea&lt;/li&gt;
&lt;li&gt;MMB, from felinine&lt;/li&gt;
&lt;li&gt;Indole, skatole, p-cresol&lt;/li&gt;
&lt;li&gt;Organic acids&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;Urine gives two different smells. As it ages, bacteria break the urea down into ammonia, and that&#39;s the sharp smell. Cats also excrete felinine, an amino acid, and sulphur compounds form from it. The main one is 3-mercapto-3-methylbutan-1-ol, MMB for short. Intact males have far more of it in their urine than females or neutered males. Both of mine are spayed females, so I&#39;d expect less MMB here than in a house with a tom. Published figures still only give me a list of targets, not the load from my two cats.&lt;/p&gt;
&lt;p&gt;Faeces are a different mix again: indole, skatole, p-cresol and organic acids. In one study of cat urine and faeces, the phenolic and nitrogen compounds mattered most to how bad people said it smelled. So the faeces stage isn&#39;t just a hydrogen sulphide problem either.&lt;/p&gt;
&lt;p&gt;The point that changes the design is that the amount of a gas and the strength of its smell are different things. Some of these compounds smell strongly at trace levels. A filter can take out most of the gas by mass and leave the room smelling, and taking out a small amount of the right compound can make a big difference. When I test, I&#39;ll log urine and faeces as separate events, not roll them into one &amp;quot;air quality&amp;quot; number.&lt;/p&gt;
&lt;h2&gt;Two ways to catch a gas&lt;/h2&gt;
&lt;p&gt;There are two mechanisms. In physical adsorption, molecules stick to the inside surfaces of the medium. In chemisorption, a chemical in the medium reacts with the gas and holds on to it. Plain activated carbon mostly does the first. Impregnated media add a chemical for a target gas.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Medium&lt;/th&gt;
&lt;th&gt;What it catches&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Plain activated carbon, gas-phase grade&lt;/td&gt;
&lt;td&gt;A broad mix of organic smells, including mercaptans, the sulphur family MMB belongs to&lt;/td&gt;
&lt;td&gt;First choice for the general stage. Poor at ammonia&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carbon impregnated for bases (acid-treated)&lt;/td&gt;
&lt;td&gt;Ammonia and amines&lt;/td&gt;
&lt;td&gt;First choice for a separate ammonia stage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Carbon impregnated for acid gases&lt;/td&gt;
&lt;td&gt;Hydrogen sulphide and other acid gases&lt;/td&gt;
&lt;td&gt;A possible third stage. An H₂S rating says nothing about MMB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permanganate on activated alumina&lt;/td&gt;
&lt;td&gt;Oxidises some gases, including H₂S&lt;/td&gt;
&lt;td&gt;One to look at later, as a commercial medium only&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zeolite (clinoptilolite)&lt;/td&gt;
&lt;td&gt;Some grades adsorb ammonia&lt;/td&gt;
&lt;td&gt;Something to compare against, not the default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ion-exchange resin&lt;/td&gt;
&lt;td&gt;Ammonia, on acid sites. Comes in pleated filters&lt;/td&gt;
&lt;td&gt;Worth a look where resistance matters&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Why two stages&lt;/h3&gt;
&lt;p&gt;NASA tested phosphoric-acid-treated carbons, including Ammonasorb II and Chemsorb 1425, for spacecraft air. The acid treatment improved the ammonia capture but cut the carbon&#39;s capacity for other VOCs. One impregnated carbon can&#39;t do both jobs well, so the general carbon stays as its own stage. The EPA&#39;s technical summary says the same from the other side: plain activated carbon isn&#39;t especially effective against ammonia or hydrogen sulphide. Separate stages also mean I only replace the one that&#39;s run out.&lt;/p&gt;
&lt;p&gt;NASA also found that other VOCs in the air cut Ammonasorb II&#39;s ammonia capacity. That suggests putting the plain carbon first, so it takes the VOCs before they reach the ammonia medium. It&#39;s my reading of the result, not something NASA tested, so the order is one of the things the test cassette has to try.&lt;/p&gt;
&lt;p&gt;There&#39;s a naming trap here. Carbon impregnated for &lt;em&gt;bases&lt;/em&gt; catches ammonia. Carbon impregnated for &lt;em&gt;acids&lt;/em&gt; catches hydrogen sulphide. &amp;quot;Impregnated carbon&amp;quot; on its own doesn&#39;t say which, so I&#39;ll buy by the target gas.&lt;/p&gt;
&lt;h3&gt;Humidity&lt;/h3&gt;
&lt;p&gt;I&#39;d assumed damp air makes carbon work worse. For the acid-treated ammonia media it&#39;s the other way round. Research on phosphoric-acid sorbents found that adding moisture to the air raised their ammonia capture, and that drying the sorbent for longer when it was made cut it. Camfil gives 40 to 90% relative humidity as the operating range for its medium for bases. So the humidity in the baseline isn&#39;t just a number to log. It helps choose the medium.&lt;/p&gt;
&lt;h3&gt;Zeolite&lt;/h3&gt;
&lt;p&gt;The plan lumped zeolite in with the carbons. It&#39;s a mineral, not a carbon. Clinoptilolite does adsorb ammonia gas in published tests, but one study of one zeolite says little about a random bag of granules. I&#39;d want data for gaseous ammonia at room humidity before treating it as a substitute for a medium made for the job.&lt;/p&gt;
&lt;h2&gt;HEPA doesn&#39;t touch the smell&lt;/h2&gt;
&lt;p&gt;HEPA catches particles, not gas molecules. A better HEPA grade won&#39;t make up for weak gas media. The US EPA makes the same split, and its guide says a carbon filter works when there&#39;s a large amount of material in it, the thicker the better. A thin layer with carbon on the label won&#39;t do much. The particle filter goes in front of the gas media to keep litter dust off them, with something after them to catch any dust the media shed.&lt;/p&gt;
&lt;h2&gt;What changes in the design&lt;/h2&gt;
&lt;p&gt;The &amp;quot;carbon&amp;quot; layer in the plan becomes a gas media section with separate cartridges:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;One cartridge of plain carbon and one of the ammonia medium, each replaceable on its own.&lt;/li&gt;
&lt;li&gt;The order and the depth can change between tests.&lt;/li&gt;
&lt;li&gt;I weigh what goes into each one.&lt;/li&gt;
&lt;li&gt;There&#39;s space for a third medium later, without a new case.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the first thing to build is a test cassette I can swap media in and out of, before the final case.&lt;/p&gt;
&lt;p&gt;Honeycomb against granules is a packaging question as much as a chemistry one. What matters is how much sorbent each holds, the pressure loss and the removal, and granules give me more freedom while I&#39;m experimenting. FÖRNUFTIG&#39;s gas filter stays as something to compare against. IKEA describes it as activated carbon for household smells and reports a formaldehyde test, but gives nothing on ammonia or MMB.&lt;/p&gt;
&lt;h2&gt;Contact time, and the end of my baffles&lt;/h2&gt;
&lt;p&gt;The useful number is the empty-bed contact time: the volume of the packed bed over the airflow.&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;EBCT&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;msub&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mtext&gt;bed&lt;/mtext&gt;&lt;/msub&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;text{EBCT} = &#92;frac{V_&#92;text{bed}}{Q}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;EBCT&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.2408em;vertical-align:-0.8804em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;bed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8804em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The bed volume includes the gaps between the granules, so this isn&#39;t the actual time a molecule spends in the gaps. It&#39;s a way to compare beds.&lt;/p&gt;
&lt;p&gt;ChatGPT&#39;s example is a bed 220 × 220 × 60 mm:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mtext&gt;bed&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.22&lt;/mn&gt;&lt;mtext&gt; m&lt;/mtext&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;0.22&lt;/mn&gt;&lt;mtext&gt; m&lt;/mtext&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;0.06&lt;/mn&gt;&lt;mtext&gt; m&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.0029&lt;/mn&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msup&gt;&lt;mtext&gt;m&lt;/mtext&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;2.9&lt;/mn&gt;&lt;mtext&gt; L&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;V_&#92;text{bed} = 0.22&#92; &#92;text{m} &#92;times 0.22&#92; &#92;text{m} &#92;times 0.06&#92; &#92;text{m} = 0.0029&#92; &#92;text{m}^3 = 2.9&#92; &#92;text{L}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8333em;vertical-align:-0.15em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.2222em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;bed&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.22&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7278em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.22&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.06&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.0029&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;m&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8641em;&quot;&gt;&lt;span style=&quot;top:-3.113em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;2.9&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;At the plan&#39;s guess of 36 m³/h, which is 10 L/s:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mtext&gt;EBCT&lt;/mtext&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;2.9&lt;/mn&gt;&lt;mtext&gt; L&lt;/mtext&gt;&lt;/mrow&gt;&lt;mrow&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mtext&gt; L/s&lt;/mtext&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.29&lt;/mn&gt;&lt;mtext&gt; s&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;text{EBCT} = &#92;frac{2.9&#92; &#92;text{L}}{10&#92; &#92;text{L/s}} = 0.29&#92; &#92;text{s}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;EBCT&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.2963em;vertical-align:-0.936em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;10&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;L/s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;2.9&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;L&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.936em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.29&lt;/span&gt;&lt;span class=&quot;mspace&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Split between two media, each gets about 0.145 s, not 0.29 s each. Camfil quotes 0.1 to 0.2 s for its cylindrical molecular filters and 0.5 to 2.5 s for its deep-bed units, so a split bed would sit at the low end. That&#39;s a reference, not a design rule. The 220 × 220 × 60 mm bed is a space to experiment in, not a size I&#39;ve worked out.&lt;/p&gt;
&lt;p&gt;Now the baffles. In post 1 I wanted to fold the air&#39;s path so it spends longer in contact with the carbon. But contact time is bed volume over airflow. A longer empty path adds no media, so it adds no capacity. And packing the same carbon into a longer, narrower path keeps the contact time the same while the fan has to work harder. The baffles might still help spread the air evenly over the media and stop it going round them, but a well-sealed cartridge does more for that than a maze. The baffle experiment changes from &amp;quot;does folding help&amp;quot; to &amp;quot;does all the air go through the media&amp;quot;.&lt;/p&gt;
&lt;h2&gt;Moving air isn&#39;t cleaning it&lt;/h2&gt;
&lt;p&gt;For each gas, the clean air the unit delivers is the airflow times the share of that gas it removes in one pass, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mtext&gt;clean&lt;/mtext&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q_{&#92;text{clean}} = Q &#92;times &#92;eta
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord text mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;clean&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;There&#39;s no reason &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is the same for ammonia, MMB and p-cresol.&lt;/p&gt;
&lt;p&gt;In a well-mixed room with nothing still giving off smell, the concentration &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;C&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; falls from its start value &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;C_0&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8333em;vertical-align:-0.15em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; as:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;C&lt;/mi&gt;&lt;mn&gt;0&lt;/mn&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msup&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;/&lt;/mi&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;C(t) = C_0&#92;,e^{-Q &#92;eta t / V}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1.088em;vertical-align:-0.15em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0715em;&quot;&gt;C&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3011em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0715em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.938em;&quot;&gt;&lt;span style=&quot;top:-3.113em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mord mathnormal mtight&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mord mathnormal mtight&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;mord mathnormal mtight&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;mord mtight&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mord mathnormal mtight&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;With the plan&#39;s guesses, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;3.6&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;V = 3.6&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;3.6&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; m³ and &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;36&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q = 36&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;36&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; m³/h, after 15 minutes &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mi&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;/&lt;/mi&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;2.5&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Qt/V = 2.5&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Qt&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;2.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;. A perfect filter (&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta = 1&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;) leaves &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2.5&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.08&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;e^{-2.5} = 0.08&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;span style=&quot;top:-3.063em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mord mtight&quot;&gt;2.5&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.08&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, so 92% has gone. At &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;η&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.8&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;eta = 0.8&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;η&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; it leaves &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msup&gt;&lt;mi&gt;e&lt;/mi&gt;&lt;mrow&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/mrow&gt;&lt;/msup&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mn&gt;0.14&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;e^{-2} = 0.14&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;e&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;span style=&quot;top:-3.063em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mord mtight&quot;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.14&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, so about 86% has gone.&lt;/p&gt;
&lt;p&gt;Those are model numbers, not smell. The tray keeps giving off smell, and what you smell depends on which compounds are left, not on a percentage. The 15-minute target in the plan is something to test, not something 10 air changes an hour guarantees. And I&#39;ll choose the fan only once I&#39;ve got pressure-loss figures for the actual filter stack.&lt;/p&gt;
&lt;h2&gt;Out of version one&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ozone.&lt;/strong&gt; The EPA says ozone at levels that are safe to breathe does little to clean indoor air, and at levels high enough to work, it&#39;s harmful. The cats breathe that air.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UV photocatalytic oxidation, plasma and ionisers.&lt;/strong&gt; Each can make its own by-products. The EPA lists formaldehyde, acetaldehyde, nitrogen dioxide and carbon monoxide from photocatalytic units, ozone and formaldehyde from plasma, and ozone from ionisers. Any of them would need its own testing. They&#39;re not a shortcut round choosing the right media.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Liquid scrubbers, biological filters and regenerating media at home.&lt;/strong&gt; All more to maintain. Version one should show whether sealed, replaceable media solve the problem first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cleaning the room isn&#39;t keeping the smell in&lt;/h2&gt;
&lt;p&gt;A unit that takes air from the room and puts it back into the same room cleans that air, but it can&#39;t pull air in from outside the room. It doesn&#39;t stop air leaving under the door. Extracting to outdoors would, and it&#39;s a different design. So two targets in the plan become two separate tests: the room clears quickly, and no smell gets out through the door.&lt;/p&gt;
&lt;h2&gt;Testing without fooling myself&lt;/h2&gt;
&lt;p&gt;Two of my planned sensors can&#39;t tell me what I thought they could.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pressure across the filters&lt;/strong&gt; shows dust clogging, not gas media running out. Gas media can lose their capacity without any change in pressure. The pressure sensor tells me when to change the particle filter, not the carbon. Manufacturers check gas media by sampling the gas or analysing the media.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A VOC sensor&lt;/strong&gt; like Sensirion&#39;s reports a VOC Index relative to a baseline it learns over the past 24 hours, mapped to 100. Back to 100 means back to what the sensor has got used to, not back to clean. And two sensors, before and after the filter, each learn their own baseline, so dividing one by the other doesn&#39;t give a removal percentage.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The experiment, in order:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Baseline.&lt;/strong&gt; Log temperature, humidity, particles and VOC, with a note of when the trays are used and cleaned, and a sniff test at set times. Keep the litter and the cleaning the same throughout.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compare at the same airflow.&lt;/strong&gt; Plain carbon first, then carbon plus the ammonia medium. Same measured airflow, not the same fan PWM, because the cartridges differ in resistance.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Separate the events and the age.&lt;/strong&gt; Compare urine and faeces events separately, and repeat once the media have been in use for a while. A good first day says nothing about how long they last.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Measure ammonia where it settles a question.&lt;/strong&gt; A good ammonia sensor would show whether the ammonia stage works, not whether the whole smell has gone. The cats&#39; normal use is the test gas.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What I&#39;m asking suppliers for&lt;/h2&gt;
&lt;p&gt;The useful figure is breakthrough: when a medium that starts well begins letting too much through. I&#39;ll ask for breakthrough data with the test concentration, humidity, temperature, airflow or face velocity, bed depth, pressure loss and the point they call breakthrough, not a headline capacity percentage.&lt;/p&gt;
&lt;p&gt;The shortlist for data and samples:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Reference product&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Broad-spectrum carbon&lt;/td&gt;
&lt;td&gt;Purafil Purakol, a plain activated carbon&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ammonia&lt;/td&gt;
&lt;td&gt;Camfil&#39;s impregnated carbon for bases, or Purafil Puracarb AM&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Whether either company sells a sensible amount to one person is the next question, and that belongs to the sourcing topic.&lt;/p&gt;
&lt;h2&gt;What I checked&lt;/h2&gt;
&lt;p&gt;I had Claude check twelve of the claims against the sources ChatGPT cited, reading the papers and data sheets themselves. I worked through the arithmetic myself.&lt;/p&gt;
&lt;p&gt;These held up: NASA&#39;s trade-off between ammonia and VOC capacity, Camfil&#39;s separate media for bases and for acids and the 40 to 90% humidity range, the contact times, Sensirion&#39;s 24-hour baseline mapped to 100, the felinine and MMB chemistry, the faeces compounds, Purakol and Puracarb AM, the EPA on ozone and on putting sorbents after the particle filter, the FÖRNUFTIG filter&#39;s lack of ammonia data, and clinoptilolite adsorbing ammonia.&lt;/p&gt;
&lt;p&gt;These needed correcting, and the post above uses the corrected versions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT cited Camfil&#39;s blends as the alternative to two stages. They&#39;re carbon mixed with alumina, for ozone and corrosive gases, not ammonia.&lt;/li&gt;
&lt;li&gt;The moisture paper&#39;s &amp;quot;drying&amp;quot; was drying the sorbent while it was made, not dry air.&lt;/li&gt;
&lt;li&gt;ChatGPT gave one list of by-products for photocatalytic units, plasma and ionisers together. The EPA lists different ones for each.&lt;/li&gt;
&lt;li&gt;The EPA doesn&#39;t say &amp;quot;appreciable&amp;quot; sorbent. It says &amp;quot;sufficient&amp;quot;, and its guide says the thicker the better.&lt;/li&gt;
&lt;li&gt;The McGill article it cited for cat urine chemistry only covers urea turning into ammonia. It doesn&#39;t mention felinine or MMB, and it blames steroids for the smell of male urine, which the papers don&#39;t support. The felinine and MMB points come from a 2024 paper, which cites them from earlier work.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The rest, including the ion-exchange resin, the permanganate media and the pressure sensor&#39;s blind spot, comes from ChatGPT&#39;s answer and wasn&#39;t checked claim by claim.&lt;/p&gt;
&lt;h2&gt;Still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;How much of each medium, how deep, at what airflow, and how often to replace it, in this room.&lt;/li&gt;
&lt;li&gt;Whether a third medium for the sulphur compounds earns its resistance and cost.&lt;/li&gt;
&lt;li&gt;Whether a recirculating unit keeps the smell in the room well enough, or the room needs extraction too.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Sources&lt;/h2&gt;
&lt;p&gt;Papers and reports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;L. Zhang et al., &lt;a href=&quot;https://pmc.ncbi.nlm.nih.gov/articles/PMC10854617/&quot;&gt;Semiochemicals from Domestic Cat Urine and Feces Reduce Use of Scratching Surfaces&lt;/a&gt;, Animals, 2024.&lt;/li&gt;
&lt;li&gt;C. Banik et al., &lt;a href=&quot;https://doi.org/10.3390/separations8020015&quot;&gt;Simultaneous Chemical and Sensory Analysis of Domestic Cat Urine and Feces with Headspace Solid-Phase Microextraction and GC-MS-Olfactometry&lt;/a&gt;, Separations, 2021.&lt;/li&gt;
&lt;li&gt;O. Monje et al., &lt;a href=&quot;https://ntrs.nasa.gov/api/citations/20210026041/downloads/NASA%20TM%2020210026041.pdf&quot;&gt;Analytical Methods and Testbeds for Characterizing Adsorbents and Catalysts for Atmosphere Revitalization of Crewed Spacecraft&lt;/a&gt;, NASA/TM-20210026041, 2021.&lt;/li&gt;
&lt;li&gt;Hsieh, Tsai and Chang, &lt;a href=&quot;https://doi.org/10.3390/ma15030784&quot;&gt;Effects of Moisture on NH3 Capture Using Activated Carbon and Acidic Porous Polymer Modified by Impregnation with H3PO4&lt;/a&gt;, Materials, 2022.&lt;/li&gt;
&lt;li&gt;H. Asilian et al., &lt;a href=&quot;https://ijph.tums.ac.ir/index.php/ijph/article/view/1929&quot;&gt;Removal of Ammonia from Air, using Three Iranian Natural Zeolites&lt;/a&gt;, Iranian Journal of Public Health, 2004.&lt;/li&gt;
&lt;li&gt;US EPA, &lt;a href=&quot;https://www.epa.gov/sites/default/files/2018-07/documents/residential_air_cleaners_-_a_technical_summary_3rd_edition.pdf&quot;&gt;Residential Air Cleaners: A Technical Summary&lt;/a&gt;, 3rd edition, 2018.&lt;/li&gt;
&lt;li&gt;US EPA, &lt;a href=&quot;https://www.epa.gov/sites/default/files/2018-07/documents/guide_to_air_cleaners_in_the_home_2nd_edition.pdf&quot;&gt;Guide to Air Cleaners in the Home&lt;/a&gt;, 2nd edition, 2018.&lt;/li&gt;
&lt;li&gt;US EPA, &lt;a href=&quot;https://www.epa.gov/indoor-air-quality-iaq/ozone-generators-are-sold-air-cleaners&quot;&gt;Ozone Generators that are Sold as Air Cleaners&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;J. Schwarcz, &lt;a href=&quot;https://www.mcgill.ca/oss/article/you-asked/why-does-cat-urine-smell-so-bad-and-what-can-i-do-about-it&quot;&gt;Why does cat urine smell so bad?&lt;/a&gt;, McGill Office for Science and Society, 2017.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Manufacturers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Camfil, &lt;a href=&quot;https://www.camfil.com/en/products/molecular-filters/media/impregnated-activated-carbon/impregnated-carbon-for-bases-_-68658&quot;&gt;impregnated carbon for bases&lt;/a&gt;, &lt;a href=&quot;https://www.camfil.com/en/products/molecular-filters/media/impregnated-activated-carbon/impregnated-carbon-for-acids-_-68651&quot;&gt;impregnated carbon for acids&lt;/a&gt;, &lt;a href=&quot;https://www.camfil.com/en/products/molecular-filters/media/blends&quot;&gt;blends&lt;/a&gt; and &lt;a href=&quot;https://www.camfil.com/en/products/molecular-filters&quot;&gt;molecular filters&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Purafil, &lt;a href=&quot;https://www.purafil.com/products/molecular-filtration/molecular-media/purakol/&quot;&gt;Purakol&lt;/a&gt; and &lt;a href=&quot;https://www.purafil.com/products/molecular-filtration/molecular-media/&quot;&gt;molecular media&lt;/a&gt;, including Puracarb AM.&lt;/li&gt;
&lt;li&gt;Sensirion, &lt;a href=&quot;https://sensirion.com/media/documents/02232963/6294E043/Info_Note_VOC_Index.pdf&quot;&gt;VOC Index info note&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;IKEA, &lt;a href=&quot;https://www.ikea.com/ie/en/p/foernuftig-filter-for-gas-cleaning-40487283/&quot;&gt;FÖRNUFTIG filter for gas cleaning&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Hencolin, &lt;a href=&quot;https://www.hencolin.com/en/air-filter-knowledge-installation-guides-hencolin/amc-chemical-filters-for-data-centers-cleanrooms/&quot;&gt;AMC chemical filters&lt;/a&gt;, on checking the life of gas media.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 2 Research</title>
<link>https://adamkdean.com/cat-wc-air-filter/02-research/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/02-research/</guid>
<pubDate>Tue, 13 Oct 2026 08:44:00 +0000</pubDate>
<description>&lt;h1&gt;2 Research&lt;/h1&gt;
&lt;p&gt;Before I buy or model anything, I need to know what the filter is up against and what each part of it has to do. The &lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/&quot;&gt;plan&lt;/a&gt; lists the questions. This post sorts them into topics, in the order I&#39;ll answer them, and says how I&#39;ll answer them.&lt;/p&gt;
&lt;h2&gt;The order&lt;/h2&gt;
&lt;p&gt;The topics depend on each other, so the order matters. The smell decides the filter media. The media and the particle filter set the resistance to the air. The resistance and the airflow decide the fan, and the fan decides the noise. The sensors come last, because they have to measure whether all of that works.&lt;/p&gt;
&lt;h2&gt;The topics&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Topic&lt;/th&gt;
&lt;th&gt;Questions&lt;/th&gt;
&lt;th&gt;Decides&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.1-the-smell-and-the-filter-media/&quot;&gt;2.1 The smell and the filter media&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;What&#39;s in the smell from urine and from faeces. Which media catch which part of it, how much media it takes, and whether the baffles help.&lt;/td&gt;
&lt;td&gt;The gas filter section of the case&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.2-the-particle-filter/&quot;&gt;2.2 The particle filter&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Which HEPA grade, or whether a lower grade does the job with less resistance. A panel or a sheet cut to size. A pre-filter for cat hair.&lt;/td&gt;
&lt;td&gt;The particle section, and part of the fan&#39;s load&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.3-the-fan/&quot;&gt;2.3 The fan&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;The airflow through the whole filter stack, not in free air. Static pressure and noise. A 12 V PWM fan with a tach output, axial or a blower.&lt;/td&gt;
&lt;td&gt;The fan, and the shape of the case around it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.4-the-sensors/&quot;&gt;2.4 The sensors&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Which readings are worth having: PM2.5, VOC, temperature and humidity, ammonia, and the pressure across the filters. What each one can and can&#39;t tell me.&lt;/td&gt;
&lt;td&gt;The electronics, and how I&#39;ll know the filter works&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=&quot;https://adamkdean.com/cat-wc-air-filter/02.5-sourcing/&quot;&gt;2.5 Sourcing&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Where to buy each medium in small amounts in the UK, with a data sheet. FÖRNUFTIG&#39;s filters, as something to compare against.&lt;/td&gt;
&lt;td&gt;What I can actually build&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each topic gets its own post, numbered 2.1, 2.2 and so on as I get to it.&lt;/p&gt;
&lt;h2&gt;How I&#39;m doing it&lt;/h2&gt;
&lt;p&gt;AI does the reading. I give ChatGPT one topic and the plan post as its brief, on the Pro setting, and it searches papers, manufacturers&#39; data sheets and government guidance. The first topic took it about 16 minutes.&lt;/p&gt;
&lt;p&gt;Then it gets checked. ChatGPT can be wrong, and it can be wrong about a number while sounding sure of it. Before a topic goes into a post, Claude reads the sources ChatGPT cites and checks the claims that decide something against them, and the post says which claims were checked and what the check found. The full answer goes into the project&#39;s repo as source data, so I can go back to it later.&lt;/p&gt;
&lt;p&gt;Research only gives me candidates. The room decides. The sensor baseline from the plan still comes first, and every choice the research points to gets tested in the room against that baseline.&lt;/p&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 1.1 The plan</title>
<link>https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/01.1-the-plan/</guid>
<pubDate>Mon, 12 Oct 2026 12:32:46 +0000</pubDate>
<description>&lt;h1&gt;1.1 The plan&lt;/h1&gt;
&lt;p&gt;This is everything I think the project needs, in roughly the order I&#39;ll do it. Some of it will change once I&#39;ve measured the room and read more.&lt;/p&gt;
&lt;h2&gt;Research&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;To find out&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;What the smell is made of&lt;/li&gt;
&lt;li&gt;Plain, impregnated or zeolite carbon&lt;/li&gt;
&lt;li&gt;Which HEPA grade&lt;/li&gt;
&lt;li&gt;Whether the baffles help&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;The research comes first, because it decides what I buy and what I design around. Ammonia is the main part of the smell, but I want to know how much the sulphur compounds matter, and which carbon holds ammonia best and for how long: plain activated carbon, carbon impregnated for ammonia, zeolite, or a mix. The HEPA layer has to be fine enough for litter dust and dander without slowing the air too much. The baffles need testing too, to see whether a longer, folded path through the carbon catches more than it costs in airflow. I&#39;ll use AI for this, check what it finds against the sources, and write up the results here.&lt;/p&gt;
&lt;h2&gt;Measuring&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;To measure&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The room&#39;s volume&lt;/li&gt;
&lt;li&gt;The wall, and the nearest socket&lt;/li&gt;
&lt;li&gt;The door, for the cat flap&lt;/li&gt;
&lt;li&gt;A baseline of the air&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;Before I design anything I need numbers for the room and the air in it. The room&#39;s size sets the airflow, the wall decides how the unit mounts and where its power comes from, and the door&#39;s thickness and material decide which cat flap fits. The most important number is a baseline: the sensors on their own, logging for a week or two before the filter exists. Without it I can&#39;t say whether the filter works.&lt;/p&gt;
&lt;p&gt;The fan has to move the room&#39;s volume &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;V&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; some number of times an hour, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;n&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;Q&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;V&lt;/mi&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mi&gt;n&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;Q = V &#92;times n
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;Q&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7667em;vertical-align:-0.0833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.2222em;&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.4306em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;As a guess until I measure: a WC of 1.5 × 1.0 × 2.4 m is 3.6 m³. At 10 air changes an hour that&#39;s 36 m³/h, about 21 CFM. That&#39;s through the filters, not in free air, which matters for the fan.&lt;/p&gt;
&lt;h2&gt;Sourcing filter material&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;The filter stack&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pre-filter, for cat hair&lt;/li&gt;
&lt;li&gt;HEPA, as a panel or sheet&lt;/li&gt;
&lt;li&gt;Carbon, as honeycomb or granules&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;The air passes through three layers. A cheap, washable pre-filter comes first and catches cat hair, so it doesn&#39;t clog the HEPA layer behind it. The HEPA can be a ready-made panel or sheet cut to size, and the carbon can be a honeycomb panel like FÖRNUFTIG&#39;s, loose granules in a printed cassette, or both. One option is to design around FÖRNUFTIG&#39;s replacement filters, which IKEA sells separately. They&#39;d be easy to replace, but they&#39;d fix the size of the unit and the choice of carbon.&lt;/p&gt;
&lt;h2&gt;Printing&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;Constraints&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;White PLA, ideally&lt;/li&gt;
&lt;li&gt;A 256 × 256 mm bed&lt;/li&gt;
&lt;li&gt;A perforated front&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;I&#39;d like it in white PLA, so it looks like the concept on a white wall. PLA is fine at room temperature, and the fan won&#39;t warm it much. The A1&#39;s bed is 256 × 256 mm, so a case any bigger has to print in parts and join, and the joins need to be hidden or made into a feature. The perforated front is the hard part: lots of small holes, printed so they come out clean.&lt;/p&gt;
&lt;h2&gt;Electronics&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;Parts&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;12 V DC supply on a plug&lt;/li&gt;
&lt;li&gt;Converter down to 5 V&lt;/li&gt;
&lt;li&gt;12 V PWM fan with a tach output&lt;/li&gt;
&lt;li&gt;PM2.5, VOC, temperature and humidity sensors&lt;/li&gt;
&lt;li&gt;ESP32 on Wi-Fi&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;Power comes from a 12 V DC supply on a plug, with a converter down to 5 V for the ESP32 and the sensors, so there&#39;s no mains inside the unit. The fan runs on 12 V with PWM speed control and a tach output, so the ESP32 can set its speed and read it back. It has to cope with the resistance of the filters and baffles, so its static pressure matters more than its free-air rating. The sensors cover particles, a VOC or gas reading, and temperature and humidity, with ammonia too if I can find a sensor that&#39;s good enough. A pressure reading across the filters would show when they&#39;re clogging.&lt;/p&gt;
&lt;h2&gt;Software&lt;/h2&gt;
&lt;aside&gt;
&lt;p&gt;Features&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read the sensors, set the fan&lt;/li&gt;
&lt;li&gt;An automatic mode&lt;/li&gt;
&lt;li&gt;Reporting and a dashboard&lt;/li&gt;
&lt;li&gt;Updates over Wi-Fi&lt;/li&gt;
&lt;/ul&gt;
&lt;/aside&gt;
&lt;p&gt;The firmware on the ESP32 reads the sensors and sets the fan speed. Most of the time it should run quietly, then speed up when the readings rise after a tray gets used and settle again once the air clears. It reports to a server, with a dashboard that shows the readings over time, and it takes updates over Wi-Fi, so the unit doesn&#39;t have to come off the wall to change the code.&lt;/p&gt;
&lt;h2&gt;Fitting it&lt;/h2&gt;
&lt;p&gt;The cat flap goes in first, because the cats have to be happy using it before anything else matters. Then the unit goes on the wall, with its intake low and near the trays and its outlet away from them, so it doesn&#39;t blow litter about. The power cable runs tidily down to the socket.&lt;/p&gt;
&lt;h2&gt;What success looks like&lt;/h2&gt;
&lt;p&gt;These are targets to start with, not promises.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Target&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Smell&lt;/td&gt;
&lt;td&gt;None outside the room, and gone inside it soon after a tray is used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Readings after a tray is used&lt;/td&gt;
&lt;td&gt;Back to the baseline within about 15 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noise&lt;/td&gt;
&lt;td&gt;Can&#39;t be heard with the door shut&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Filters&lt;/td&gt;
&lt;td&gt;Last months, not weeks, and the unit says when they need changing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cats&lt;/td&gt;
&lt;td&gt;Use the flap and the trays as normal&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If it works, the room just won&#39;t smell, and the numbers will show why.&lt;/p&gt;
</description>
</item>
<item>
<title>Cat W/C Air Filtration System: 1 The project</title>
<link>https://adamkdean.com/cat-wc-air-filter/01-the-project/</link>
<guid isPermaLink="true">https://adamkdean.com/cat-wc-air-filter/01-the-project/</guid>
<pubDate>Mon, 12 Oct 2026 12:13:38 +0000</pubDate>
<description>&lt;h1&gt;1 The project&lt;/h1&gt;
&lt;p&gt;We have two cats, and they use the downstairs WC for their litter trays. It&#39;s a small room and it can smell. As an engineer I see that as a problem to solve, not something to live with.&lt;/p&gt;
&lt;h2&gt;The plan&lt;/h2&gt;
&lt;p&gt;There are two parts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A cat flap in the WC door.&lt;/strong&gt; The cats can come and go with the door shut, so the smell stays in the one room where the filter can deal with it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A wall-mounted air filter in the room.&lt;/strong&gt; A DC fan pulls the room&#39;s air through HEPA and activated carbon filters. It runs from a plug-in power supply, so there&#39;s no mains wiring inside the unit. An ESP32 on Wi-Fi reports its numbers to a server.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The shape comes from IKEA&#39;s FÖRNUFTIG air purifier: a slim panel with a fabric front that stands on a wire foot or hangs on the wall. It takes a particle filter, and an additional gas filter (the black honeycomb, bottom right) for smells. I could buy one. I&#39;d rather make my own, and the &lt;a href=&quot;https://adamkdean.com/philosophy/&quot;&gt;philosophy&lt;/a&gt; page says why.&lt;/p&gt;
&lt;div class=&quot;gallery&quot;&gt;
&lt;figure class=&quot;tall&quot;&gt;
&lt;img src=&quot;https://adamkdean.com/cat-wc-air-filter/img/fornuftig-room.jpg&quot; alt=&quot;IKEA FÖRNUFTIG air purifier standing on a wire foot by a window&quot; width=&quot;500&quot; height=&quot;749&quot; /&gt;
&lt;figcaption&gt;IKEA FÖRNUFTIG. Photo: IKEA.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://adamkdean.com/cat-wc-air-filter/img/concept-chatgpt.jpg&quot; alt=&quot;A white wall-mounted air filter with a perforated front, in soft studio light&quot; width=&quot;700&quot; height=&quot;700&quot; /&gt;
&lt;figcaption&gt;ChatGPT&#39;s concept.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure&gt;
&lt;img src=&quot;https://adamkdean.com/cat-wc-air-filter/img/fornuftig-filter.jpg&quot; alt=&quot;IKEA FÖRNUFTIG beside its black honeycomb gas filter&quot; width=&quot;500&quot; height=&quot;482&quot; /&gt;
&lt;figcaption&gt;FÖRNUFTIG with its additional gas filter. Photo: IKEA.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;h2&gt;What the filters do&lt;/h2&gt;
&lt;p&gt;The two filters do different jobs. HEPA catches particles, such as litter dust and dander. Activated carbon adsorbs gases, and that&#39;s where the smell is.&lt;/p&gt;
&lt;p&gt;I also want to try sending the air through a baffled section, folded back and forth like intestines, so it spends longer in contact with the carbon. More contact time should mean more of the smell gets caught. Every turn adds resistance, though, so the fan has to push harder for the same airflow. It&#39;s an experiment, and the sensors should show whether it helps.&lt;/p&gt;
&lt;p&gt;Based on my research, litter tray smell is mostly ammonia, from urine breaking down, plus some sulphur compounds. Plain activated carbon doesn&#39;t hold ammonia well. Carbon impregnated for ammonia, or a layer of zeolite, does better. Part of this project will therefore be research based, and I will use AI to do this and write about it here.&lt;/p&gt;
&lt;h2&gt;What it reports&lt;/h2&gt;
&lt;p&gt;The numbers are there to show whether it works. I want to see the air before and after a tray gets used, how fast it clears, and when the filters need changing. That means particles (PM2.5), a gas or VOC reading, temperature and humidity, and the fan speed. An ammonia reading would be the most useful of all, if I can find a sensor that&#39;s worth having.&lt;/p&gt;
&lt;h2&gt;What I don&#39;t know yet&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The room&#39;s volume, and so how much air the fan has to move. I&#39;ll measure it.&lt;/li&gt;
&lt;li&gt;The filter sizes, and the order they sit in.&lt;/li&gt;
&lt;li&gt;Whether the carbon will deal with the ammonia, or needs an impregnated or zeolite layer.&lt;/li&gt;
&lt;li&gt;Whether the baffles help, and how much airflow they cost.&lt;/li&gt;
&lt;li&gt;A fan that pushes enough air through both filters and is still quiet.&lt;/li&gt;
&lt;li&gt;The sensors, and the server they report to.&lt;/li&gt;
&lt;li&gt;The cat flap, and what the door is made of.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 8.7 Where it stands</title>
<link>https://adamkdean.com/ai-workstation/08.7-where-it-stands/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.7-where-it-stands/</guid>
<pubDate>Sun, 11 Oct 2026 20:14:16 +0000</pubDate>
<description>&lt;h1&gt;8.7 Where it stands&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/lineup-straight.png&quot; alt=&quot;The range from the front&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Yesterday this was a portable monitor, a spare mini PC and a printer. Now there is a designed and checked range: one hub on the monitor&#39;s back that holds the PC, and four supports it docks into. Nothing beyond the two gauges has been printed yet.&lt;/p&gt;
&lt;h2&gt;The range&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E1 Arc&lt;/th&gt;
&lt;th&gt;E2 Column&lt;/th&gt;
&lt;th&gt;E3 Sail&lt;/th&gt;
&lt;th&gt;E4 Wall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Weakest push to tip&lt;/td&gt;
&lt;td&gt;6.2 N&lt;/td&gt;
&lt;td&gt;5.1 N&lt;/td&gt;
&lt;td&gt;6.4 N&lt;/td&gt;
&lt;td&gt;Wall mount: 6.8 N pull on the top screw&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lean change under its own weight&lt;/td&gt;
&lt;td&gt;0.004°&lt;/td&gt;
&lt;td&gt;0.001°&lt;/td&gt;
&lt;td&gt;under 0.001°&lt;/td&gt;
&lt;td&gt;0.005°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top edge sideways under 5 N&lt;/td&gt;
&lt;td&gt;1.05 mm&lt;/td&gt;
&lt;td&gt;1.2 mm&lt;/td&gt;
&lt;td&gt;0.6 mm&lt;/td&gt;
&lt;td&gt;1.0 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whole device: print time, PLA&lt;/td&gt;
&lt;td&gt;9 h 47 min, 398 g&lt;/td&gt;
&lt;td&gt;8 h 58 min, 357 g&lt;/td&gt;
&lt;td&gt;9 h 55 min, 408 g&lt;/td&gt;
&lt;td&gt;7 h 6 min, 267 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Each desk device adds about 10 g of TPU for its pad ring and cable clip. All figures assume a 0.8 kg monitor.&lt;/p&gt;
&lt;p&gt;For scale, the same method gave B2, the stand I nearly built in round 2, a lean change of 0.87° and a weakest push to tip of 1.6 N.&lt;/p&gt;
&lt;h2&gt;What changed between versions&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Stand v1 (B2)&lt;/th&gt;
&lt;th&gt;Stand v2&lt;/th&gt;
&lt;th&gt;Stand v3 (E2)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Layout&lt;/td&gt;
&lt;td&gt;Screen on a band round the PC&lt;/td&gt;
&lt;td&gt;PC behind the screen, one spine&lt;/td&gt;
&lt;td&gt;Hub on the screen, a fin under the centre of gravity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Largest constant moment&lt;/td&gt;
&lt;td&gt;1.72 N m&lt;/td&gt;
&lt;td&gt;0.44 N m&lt;/td&gt;
&lt;td&gt;0.21 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lean change&lt;/td&gt;
&lt;td&gt;0.87°&lt;/td&gt;
&lt;td&gt;0.035°&lt;/td&gt;
&lt;td&gt;0.001°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weakest push to tip&lt;/td&gt;
&lt;td&gt;1.6 N&lt;/td&gt;
&lt;td&gt;3.7 N&lt;/td&gt;
&lt;td&gt;5.1 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Joints&lt;/td&gt;
&lt;td&gt;Not designed&lt;/td&gt;
&lt;td&gt;Laps, inserts, shoulder screws&lt;/td&gt;
&lt;td&gt;Dock with bearing faces, pins that only lock&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The gains came from layout, not from thicker plastic: put the support under the load, make the beam bend across its depth, and put mass low and central.&lt;/p&gt;
&lt;h2&gt;What the process taught&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Gauge before you build.&lt;/strong&gt; Two 4 g prints settled the screw depth for every mount and showed that the PC&#39;s photo-measured inserts were slightly off.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A check proves only what it tests.&lt;/strong&gt; Fused solids hid missing joints. A valid solid hid a hole the slicer found. A wrong cutting plane gave 18 MPa. A self-crossing offset gave six times the area. A STEP file lost 36% of a fin, and the slicer quietly repaired an open mesh. Each one was found by adding a check against something known.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orientation is a design decision.&lt;/strong&gt; Choose how a part prints first. The fins, the inserts and the bridges all follow from it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creep, not strength, governs PLA furniture.&lt;/strong&gt; Stresses stay under 1.5 MPa everywhere. The lever is the enemy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Self-restoring is a number.&lt;/strong&gt; &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;/&lt;/mi&gt;&lt;msub&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;u&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip} = M g &#92;, (y_&#92;mathrm{CG} - y_&#92;mathrm{front}) / z_&#92;mathrm{push}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1.0361em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.044em;&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.044em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;, on every edge, with the edge where the pads actually touch.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fasteners locate; faces bear.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Work in parallel.&lt;/strong&gt; The design work and this blog ran in two agent sessions at the same time, one building and one recording, which kept the record current as the design moved.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Next&lt;/h2&gt;
&lt;p&gt;These steps need me and the real hardware:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Weigh the monitor. Every balance figure assumes 0.8 kg.&lt;/li&gt;
&lt;li&gt;Print the dock coupon: about an hour and 26 g. Check the slide, the shoulder seat and the pin.&lt;/li&gt;
&lt;li&gt;Choose the first device. The case for E2 is in &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.2-three-stands/&quot;&gt;8.2&lt;/a&gt;: half E1&#39;s moment, the quickest print, and the cheapest full test of the shared hub. E1 is now a stiff choice for the reference look. E4 suits a wall.&lt;/li&gt;
&lt;li&gt;Take calliper values for the PC&#39;s inserts and put them in its model.&lt;/li&gt;
&lt;li&gt;Print the device, then measure the PC&#39;s temperature under load inside the shell.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The blog continues from there.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 8.6 Exports and assembly</title>
<link>https://adamkdean.com/ai-workstation/08.6-exports-and-assembly/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.6-exports-and-assembly/</guid>
<pubDate>Sun, 11 Oct 2026 20:25:27 +0000</pubDate>
<description>&lt;h1&gt;8.6 Exports and assembly&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/e2-exploded-rear.png&quot; alt=&quot;E2 exploded, in assembly order&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The last step before printing was to get the design out of FreeCAD intact: a STEP file for every printed part, a STEP assembly for each variant with the monitor and the PC, and an assembly sequence. Two hidden faults turned up on the way. Both parts looked fine where I normally look.&lt;/p&gt;
&lt;h2&gt;Fault 1: STEP lost a third of a fin&lt;/h2&gt;
&lt;p&gt;E3&#39;s fin was a valid solid in FreeCAD. Read back from its STEP file, it was five open shells with 36% of its volume missing. The STEP writer had dropped the faces made by extruding 2D offset curves, which is how every fin profile is built.&lt;/p&gt;
&lt;p&gt;The fix: convert every part to NURBS before export. The export script now reads every STEP file back and checks its solid count and volume against the model.&lt;/p&gt;
&lt;h2&gt;Fault 2: the slicer repaired a broken mesh in silence&lt;/h2&gt;
&lt;p&gt;E3&#39;s fin STL was not a closed solid. The A1 slicer repaired it without a warning, so the slice looked clean. The cause was the 2D offset again: &lt;code&gt;makeOffset2D&lt;/code&gt; left edges of 0.00001 mm in the sail&#39;s profile, and those extruded into sliver faces.&lt;/p&gt;
&lt;p&gt;The fix: drop edges under 1 µm from each profile before extruding. The export script now stops on any STL that is not a closed, manifold solid.&lt;/p&gt;
&lt;p&gt;The lesson extends &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/&quot;&gt;8.3&lt;/a&gt;: the slicer is a check, but not a complete one. It reports some faults and hides others. Check each export file directly: read the STEP back, and test the STL for closure.&lt;/p&gt;
&lt;p&gt;All 12 PLA parts were re-sliced. The structural figures did not change, and the times moved by a few minutes:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E1 Arc&lt;/th&gt;
&lt;th&gt;E2 Column&lt;/th&gt;
&lt;th&gt;E3 Sail&lt;/th&gt;
&lt;th&gt;E4 Wall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Whole device: time, PLA&lt;/td&gt;
&lt;td&gt;9 h 47 min, 398 g&lt;/td&gt;
&lt;td&gt;8 h 58 min, 357 g&lt;/td&gt;
&lt;td&gt;9 h 55 min, 408 g&lt;/td&gt;
&lt;td&gt;7 h 6 min, 267 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Assembly sequence&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Press the three M3 heat-set inserts into the carrier&#39;s pillar tops, and the TPU pad ring into the foot&#39;s underside.&lt;/li&gt;
&lt;li&gt;Screw the carrier to the monitor&#39;s VESA inserts: 4 × M4 × 10 countersunk, flush.&lt;/li&gt;
&lt;li&gt;Screw the two shoulder screws into the PC&#39;s base inserts. Offer the PC to the carrier, heads through the keyhole holes, and slide it 8 mm down onto the ledge.&lt;/li&gt;
&lt;li&gt;Plug in the PC&#39;s rear cables. Lead the mini HDMI and USB-C out of the bay&#39;s side exit to the monitor, and the rest down through the bay&#39;s floor.&lt;/li&gt;
&lt;li&gt;Fit the shell over the PC, its notch round the collar, and screw it on from behind: 3 × M3 × 8 countersunk.&lt;/li&gt;
&lt;li&gt;Drop the fin&#39;s tenon into the foot&#39;s plinth and bolt it: 2 × M4 × 40 with nyloc nuts. For E4, screw the wall plate to the wall first, then bolt the fin into its plinth.&lt;/li&gt;
&lt;li&gt;Lower the hub onto the fin&#39;s tongue until the shoulder seats on the collar. Push the M3 × 30 pin through and fit its nyloc nut.&lt;/li&gt;
&lt;li&gt;Clip the down cables into the TPU clip on the fin&#39;s back edge.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To take the PC out: pin out, lift the hub off the tongue, take off the shell, and lift the PC 8 mm. One VESA screw sits under the PC, so the PC comes off before the carrier.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/e2-exploded-side.png&quot; alt=&quot;E2 exploded, from the side&quot; /&gt;&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 8.5 E4 Wall</title>
<link>https://adamkdean.com/ai-workstation/08.5-e4-wall/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.5-e4-wall/</guid>
<pubDate>Sun, 11 Oct 2026 20:05:57 +0000</pubDate>
<description>&lt;h1&gt;8.5 E4 Wall&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/e4-side.png&quot; alt=&quot;E4 Wall from the side, front on the left&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The shared dock pays off here. E4 puts the same hub on a wall instead of a desk: a short fin and a wall plate, with no change to the carrier, the shell or the dock. The hub moves between desk and wall by lifting it off one tongue and dropping it on the other.&lt;/p&gt;
&lt;h2&gt;Design&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fin.&lt;/strong&gt; Down from the collar, then back in a short curve to the wall. Its centreline is 94 mm long. It keeps the 14 mm flat print, the shoulder and the tongue.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wall plate.&lt;/strong&gt; 80 × 170 × 10 mm with 12 mm corners, printed flat with the wall side on the bed. A plinth stands off its face. The seat is the floor-stand seat turned through 90°: the tenon slides in horizontally and bears on the slot&#39;s floor, and two M4 cross bolts locate it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fixing.&lt;/strong&gt; Two 4.5 to 5 mm screws into wall plugs, countersunk from the front, 130 mm apart, above and below the plinth. The plate reaches up behind the hub, so the top screw sits well above the dock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gap.&lt;/strong&gt; The wall is 15 mm behind the hub&#39;s back, so the vents and the cable bay still have air.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;A different check&lt;/h2&gt;
&lt;p&gt;A wall mount cannot tip, so the self-restoring rule from &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt; does not apply. The question becomes what the screws carry.&lt;/p&gt;
&lt;p&gt;The centre of gravity sits 78 mm out from the wall. The plate tries to rotate about its bottom edge, and the top screw resists that as a pull. The check gives 6.8 N of pull on the top screw and 6.6 N of shear on each screw. Both are small loads for a screw in a wall plug, but the plug and the wall are the weak link, so use plugs that suit the wall.&lt;/p&gt;
&lt;h2&gt;Numbers&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E4 Wall&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Mass on the wall (no ballast)&lt;/td&gt;
&lt;td&gt;1.35 kg, centre of gravity 78 mm out&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fin&#39;s largest constant moment&lt;/td&gt;
&lt;td&gt;0.61 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constant stress&lt;/td&gt;
&lt;td&gt;0.26 MPa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lean change under its own weight&lt;/td&gt;
&lt;td&gt;0.005°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top edge movement at 5 N: front to back, sideways&lt;/td&gt;
&lt;td&gt;0.12, 1.0 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fin: print, PLA&lt;/td&gt;
&lt;td&gt;41 min, 25 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wall plate: print, PLA&lt;/td&gt;
&lt;td&gt;1 h 21 min, 59 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whole device (carrier, shell, fin, plate)&lt;/td&gt;
&lt;td&gt;7 h 6 min, 267 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;E4&#39;s fin carries the largest constant moment in the range, because the whole hub hangs out from the wall on it. Its stress is still about a fifth of B2&#39;s band, and the screen leans 0.005°, about a seventh of v2. It is the cheapest complete device. Moving an existing hub to the wall costs 2 h 2 min and 84 g of PLA.&lt;/p&gt;
&lt;h2&gt;Problems on the way&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A tight curve made the offset cross itself.&lt;/strong&gt; E4&#39;s first fin had a bend tight enough that the band&#39;s 2D offset looped over itself and enclosed about 6 times the right area. The build would have produced a wrong solid with no error. The band function now compares its area with width × length and fails loudly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The centreline doubled back into the plinth&lt;/strong&gt;, so the bending check reported a section inside the supported tenon. The centreline now stops at the plinth&#39;s face.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Both are the same kind of problem as the false 18 MPa in &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/&quot;&gt;8.3&lt;/a&gt;. Geometry code fails quietly. A cheap sanity check against a known quantity turns that into a loud failure.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 8.4 Finishing the device</title>
<link>https://adamkdean.com/ai-workstation/08.4-finishing-the-device/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.4-finishing-the-device/</guid>
<pubDate>Sun, 11 Oct 2026 19:57:32 +0000</pubDate>
<description>&lt;h1&gt;8.4 Finishing the device&lt;/h1&gt;
&lt;p&gt;A stand that passes its checks is still a bracket until the cables, the desk contact and the airflow are dealt with. This step made each v3 stand a complete device.&lt;/p&gt;
&lt;h2&gt;Cables&lt;/h2&gt;
&lt;p&gt;The PC&#39;s rear ports face the monitor&#39;s port edge, so every cable starts on the same side. They split two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;To the monitor&lt;/strong&gt; (mini HDMI and USB-C): out of a side exit in the cable bay&#39;s end wall, then 98 mm along the monitor&#39;s back to its ports, level with them. The check runs a 10 mm path along that route clear of the carrier, the shell, the monitor and the PC.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;To the desk&lt;/strong&gt; (power, network, USB): down through the bay&#39;s floor, then down the fin&#39;s back edge through a TPU clip.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The clip grips the fin&#39;s back edge by friction and holds the cables in a 12 mm loop behind it. The cables push in through a 3 mm slit. The fin&#39;s back edge leans, so the clip&#39;s pocket reaches 1.5 mm past the edge&#39;s furthest point. The clip is 18 × 28 × 12 mm and 2.5 g of TPU 95A.&lt;/p&gt;
&lt;h2&gt;Desk pads, and a trade-off&lt;/h2&gt;
&lt;p&gt;A PLA foot slides on a desk. A TPU pad stops that, but where the pad sits changes the balance.&lt;/p&gt;
&lt;p&gt;The tipping edge is wherever the stand touches the desk, so in &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt; &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;y_&#92;mathrm{front}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; belongs to the pad, not to the foot&#39;s rim. Four round pads at 45° would pull the front tipping edge in to about 70% of the radius. A ring keeps it near the rim.&lt;/p&gt;
&lt;p&gt;So each foot gets a TPU ring 8 mm wide, 3 mm in from the rim, pressed into a 0.8 mm recess and standing 0.4 mm proud. Even 3 mm costs something: the weakest push to tip on E2 went from 5.3 to 5.1 N. Every stand still clears 5 N on every edge.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E1 Arc&lt;/th&gt;
&lt;th&gt;E2 Column&lt;/th&gt;
&lt;th&gt;E3 Sail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pad ring&lt;/td&gt;
&lt;td&gt;214 mm across&lt;/td&gt;
&lt;td&gt;194 mm across&lt;/td&gt;
&lt;td&gt;234 × 174 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TPU: ring, clip&lt;/td&gt;
&lt;td&gt;7.4 g, 2.5 g&lt;/td&gt;
&lt;td&gt;6.7 g, 2.5 g&lt;/td&gt;
&lt;td&gt;8.3 g, 2.5 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push to tip, weakest edge, before and after the ring&lt;/td&gt;
&lt;td&gt;6.4 to 6.2 N&lt;/td&gt;
&lt;td&gt;5.3 to 5.1 N&lt;/td&gt;
&lt;td&gt;6.6 to 6.4 N&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The recess in the foot&#39;s underside prints as an 8 mm bridge.&lt;/p&gt;
&lt;h2&gt;Vents&lt;/h2&gt;
&lt;p&gt;The shell&#39;s grilles open 915 mm² below the PC, where air comes in, and 2,105 mm² above it and over the bay, where air goes out. The PC&#39;s own side vents are about 600 mm² on each side. The shell&#39;s openings are larger than the vents they serve, so the shell does not throttle the flow. The real test is still a temperature measurement under load.&lt;/p&gt;
&lt;h2&gt;Printing TPU&lt;/h2&gt;
&lt;p&gt;The slicing script handles PLA only, so the pads and clips are sliced in Bambu Studio with a TPU 95A preset. Soft TPU and the AMS Lite need care; the external spool holder is the safe route. The clip&#39;s pocket prints at the model&#39;s 14 mm, with no clearance, because it grips by friction.&lt;/p&gt;
&lt;h2&gt;Where v3 stood after this step&lt;/h2&gt;
&lt;p&gt;E1&#39;s figures changed once more when its fin was thickened (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.2-three-stands/&quot;&gt;8.2&lt;/a&gt;); &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.7-where-it-stands/&quot;&gt;8.7&lt;/a&gt; has the final ones.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E1 Arc&lt;/th&gt;
&lt;th&gt;E2 Column&lt;/th&gt;
&lt;th&gt;E3 Sail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Total mass&lt;/td&gt;
&lt;td&gt;2.30 kg&lt;/td&gt;
&lt;td&gt;2.06 kg&lt;/td&gt;
&lt;td&gt;2.49 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push to tip: front, back, left, right&lt;/td&gt;
&lt;td&gt;6.4, 6.3, 6.5, 6.2 N&lt;/td&gt;
&lt;td&gt;5.4, 5.2, 5.5, 5.1 N&lt;/td&gt;
&lt;td&gt;6.5, 6.4, 8.9, 8.5 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whole device in PLA: time, mass&lt;/td&gt;
&lt;td&gt;9 h 31 min, 389 g&lt;/td&gt;
&lt;td&gt;8 h 54 min, 356 g&lt;/td&gt;
&lt;td&gt;9 h 55 min, 408 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Still open: the dock coupon, the monitor&#39;s real weight, the PC&#39;s temperature inside the shell, and the cables in hand against the 50 mm bay. Short right-angle plugs would keep the bay tidy.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 8.3 Printing and iterating</title>
<link>https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/</guid>
<pubDate>Sun, 11 Oct 2026 19:49:46 +0000</pubDate>
<description>&lt;h1&gt;8.3 Printing and iterating&lt;/h1&gt;
&lt;p&gt;Every v3 part prints without supports, in black PLA Basic on the textured PEI plate. Times and weights come from A1 slices at 0.20 mm, 2 walls and 15% infill, each including the start sequence of about 6 minutes.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Orientation&lt;/th&gt;
&lt;th&gt;Size on the A1&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;PLA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Carrier&lt;/td&gt;
&lt;td&gt;Flat, front face down&lt;/td&gt;
&lt;td&gt;162 × 168 × 51 mm&lt;/td&gt;
&lt;td&gt;2 h 21 min&lt;/td&gt;
&lt;td&gt;95 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;Back down on the textured plate&lt;/td&gt;
&lt;td&gt;162 × 155 × 47 mm&lt;/td&gt;
&lt;td&gt;2 h 43 min&lt;/td&gt;
&lt;td&gt;88 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fin E1, E2, E3&lt;/td&gt;
&lt;td&gt;Flat, profile on the bed, 14 mm tall (E1 20 mm)&lt;/td&gt;
&lt;td&gt;up to 161 × 88 mm&lt;/td&gt;
&lt;td&gt;50 min to 1 h 10 min&lt;/td&gt;
&lt;td&gt;35 to 49 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foot E1, E2, E3&lt;/td&gt;
&lt;td&gt;Flat, 30 mm tall&lt;/td&gt;
&lt;td&gt;up to 240 × 180 mm&lt;/td&gt;
&lt;td&gt;2 h 59 min to 4 h 1 min&lt;/td&gt;
&lt;td&gt;138 to 189 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Coupon first&lt;/h2&gt;
&lt;p&gt;The dock is the one new fit in v3, so it gets a gauge before the full parts, as in &lt;a href=&quot;https://adamkdean.com/ai-workstation/03-fit-gauges/&quot;&gt;3&lt;/a&gt;:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Coupon&lt;/th&gt;
&lt;th&gt;Print&lt;/th&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;PLA&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Collar&lt;/td&gt;
&lt;td&gt;Flat, as the carrier: the collar cut out with a little of the plate&lt;/td&gt;
&lt;td&gt;36 × 38 × 50 mm&lt;/td&gt;
&lt;td&gt;45 min&lt;/td&gt;
&lt;td&gt;15 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tongue&lt;/td&gt;
&lt;td&gt;Flat, as a fin: the top of E2&#39;s fin with its tongue, shoulder and pin hole&lt;/td&gt;
&lt;td&gt;56 × 51 × 14 mm&lt;/td&gt;
&lt;td&gt;24 min&lt;/td&gt;
&lt;td&gt;11 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;On one plate the pair takes about an hour, because the start sequence runs once. Slide the tongue into the collar and check three things: it slides with no play, the shoulder seats flat on the collar, and an M3 pin passes through both. Then print the full parts.&lt;/p&gt;
&lt;h2&gt;Sealing steel in a print&lt;/h2&gt;
&lt;p&gt;Each foot has a closed cavity 6.2 mm deep, from Z = 1.6 to 7.8 mm. In Bambu Studio I add a pause at 8.0 mm, before the first layer over the cavity. At the pause the steel goes in: a 6 mm plate cut to the cavity, or steel shot levelled off. The print resumes, and the ceiling prints 0.2 mm above the steel, which carries it like a bridge.&lt;/p&gt;
&lt;p&gt;The slicer&#39;s command line cannot add the pause, so the sliced files in the repo are summaries only. The real G-code comes from Bambu Studio.&lt;/p&gt;
&lt;h2&gt;Print the beam as a beam&lt;/h2&gt;
&lt;p&gt;The fin is the only beam in the stand, and the bending figures assume a solid section. At 2 walls and 15% infill its edges are only 0.84 mm of wall. The fins print with at least 6 walls and 40% gyroid infill.&lt;/p&gt;
&lt;h2&gt;Bridges and openings&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The collar&#39;s pocket prints as a tunnel in the flat carrier, and its roof bridges only 14.4 mm.&lt;/li&gt;
&lt;li&gt;In the shell, every opening runs to the rim or is a slot whose long axis is vertical in the print. No edge bridges more than 3 mm.&lt;/li&gt;
&lt;li&gt;Heat-set inserts sit only in the carrier&#39;s pillar tops, axis vertical. Fins and feet use through bolts with nyloc nuts, so no insert sits in a side-loaded layer.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;What changed after the first build&lt;/h2&gt;
&lt;p&gt;The checks and the slicer found problems. Each fix is in the build script:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Change&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Steel ballast in each foot&lt;/td&gt;
&lt;td&gt;Push to tip 3.5 to 3.9 N at the weakest edge&lt;/td&gt;
&lt;td&gt;5.3 to 6.6 N, up to 9.1 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A shoulder on the fin&#39;s neck&lt;/td&gt;
&lt;td&gt;The neck was the tongue&#39;s size, so the screen&#39;s weight hung on the M3 pin&lt;/td&gt;
&lt;td&gt;The neck bears on the collar&#39;s face; the pin only locks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The tenon down to the slot&#39;s floor&lt;/td&gt;
&lt;td&gt;E1&#39;s and E3&#39;s tenons stopped 0.2 mm short, so the weight hung on the M4 bolts&lt;/td&gt;
&lt;td&gt;The tenon bears on the floor; the bolts only locate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell wall&lt;/td&gt;
&lt;td&gt;2.5 mm: 103 g, 3 h 20 min&lt;/td&gt;
&lt;td&gt;1.8 mm: 90 g, 2 h 44 min (88 g, 2 h 43 min after the side exit)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Back bevel&lt;/td&gt;
&lt;td&gt;3 mm&lt;/td&gt;
&lt;td&gt;5 mm, with the inside chamfered to match&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The shell and the bevel each taught something about the process:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Thin walls break the 35% rule.&lt;/strong&gt; Every mass so far took 35% of a part&#39;s volume as printed solid, from a slice of the v1 band. That read the 2.5 mm shell at 46 g. The slice said 103 g, because a wall that thin is all perimeters and prints solid. The check now takes every printed mass from the slices.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The slicer is a check.&lt;/strong&gt; A 5 mm bevel on a plain cavity cut right through the 1.8 mm wall, so the back came away from the sides. The slicer refused it (&amp;quot;empty layer between 1.8 and 3.8&amp;quot;, exit 156). I missed that at first, because a failed slice left the old &lt;code&gt;slice.json&lt;/code&gt; in place. Now the build fails unless the carrier and shell are one valid solid each.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A fix can break its neighbours.&lt;/strong&gt; Chamfering the cavity to match the bevel then cut 37.6 mm³ into two pillars and the collar. The pillars moved and the collar notch grew. The overlap check caught it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The two bearing fixes are the same lesson as &lt;a href=&quot;https://adamkdean.com/ai-workstation/04.3-what-the-checks-missed/&quot;&gt;4.3&lt;/a&gt; in a new form. A part that fits can still carry its load through the wrong thing. Fasteners should locate and lock; faces should bear.&lt;/p&gt;
&lt;h2&gt;Repeatable checks&lt;/h2&gt;
&lt;p&gt;At the end, the model was closed, reopened from the saved file, and checked again. The new &lt;code&gt;checks.json&lt;/code&gt; was identical. That proves the saved file holds the design, not some state left in the running FreeCAD session.&lt;/p&gt;
&lt;h2&gt;Modelling problems&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;OCCT would not offset a single spline edge&lt;/strong&gt;, so E1&#39;s bowed fin failed to build. Its centreline is now a fine polyline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2D face booleans left split faces.&lt;/strong&gt; They now go through thin solids.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The dock pin ran 0.4 mm into the shell&#39;s bottom wall.&lt;/strong&gt; It moved 5 mm down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Two shell pillars sat in the cable path&lt;/strong&gt; and cut 9 mm³ into the shell&#39;s corner. They moved into the bay&#39;s corners.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The first bending check gave 18 MPa on E1&lt;/strong&gt;, about 100 times the real figure. Each section&#39;s cutting plane also passed lengthwise through the fin&#39;s neck, so it measured the wrong section. The check now clips the fin to a sphere round each centreline point before cutting. When a number jumps by two orders of magnitude, suspect the method before the design.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Hardware per device&lt;/h2&gt;
&lt;p&gt;4 × M4 × 10 countersunk (VESA), 2 × ISO 7379 shoulder screws for the PC, 3 × M3 heat-set inserts and 3 × M3 × 8 countersunk for the shell, 1 × M3 × 30 and nyloc nut for the dock pin, 2 × M4 × 40 and nyloc nuts for the plinth.&lt;/p&gt;
&lt;h2&gt;Still open&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Which stand.&lt;/li&gt;
&lt;li&gt;Weigh the monitor; every balance figure assumes 0.8 kg.&lt;/li&gt;
&lt;li&gt;Print the dock coupon. It is ready but not printed.&lt;/li&gt;
&lt;li&gt;Measure the PC&#39;s temperature under load inside the shell.&lt;/li&gt;
&lt;li&gt;Cable routing and desk pads, which became &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.4-finishing-the-device/&quot;&gt;8.4&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 8.2 Three stands</title>
<link>https://adamkdean.com/ai-workstation/08.2-three-stands/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.2-three-stands/</guid>
<pubDate>Sun, 11 Oct 2026 19:37:33 +0000</pubDate>
<description>&lt;h1&gt;8.2 Three stands&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/lineup-front.png&quot; alt=&quot;E1, E2 and E3 from the front&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Each stand is two parts: a 14 mm fin printed flat, and a foot printed flat. The fin&#39;s tongue docks into the hub&#39;s collar (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.1-the-hub/&quot;&gt;8.1&lt;/a&gt;). Its tenon drops into a slot in the foot&#39;s plinth and takes two M4 × 40 cross bolts with nyloc nuts. Every hole through the fin is vertical in the print, and all the bending runs along the layers.&lt;/p&gt;
&lt;p&gt;Because the profile lies in the bed plane, its shape costs nothing to print: curves, tapers and fillets are all free. The build script fills concave corners with a 25 mm radius and rounds convex ones with 4 mm.&lt;/p&gt;
&lt;p&gt;Each foot carries a 6 mm steel plate sealed inside the print (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/&quot;&gt;8.3&lt;/a&gt;). Without it the push to tip was 3.5 to 3.9 N, no better than v2. That answers v2&#39;s open question.&lt;/p&gt;
&lt;h2&gt;The three&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;E1 Arc&lt;/th&gt;
&lt;th&gt;E2 Column&lt;/th&gt;
&lt;th&gt;E3 Sail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fin&lt;/td&gt;
&lt;td&gt;Bows back like &amp;quot;)&amp;quot; and runs forward into the plinth&lt;/td&gt;
&lt;td&gt;Straight down the screen&#39;s lean, 40 mm deep at the dock, 56 mm at the plinth&lt;/td&gt;
&lt;td&gt;Deep: a straight front edge, a back edge swept to a long plinth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foot&lt;/td&gt;
&lt;td&gt;220 mm disc&lt;/td&gt;
&lt;td&gt;200 mm disc&lt;/td&gt;
&lt;td&gt;240 × 180 mm plate, 40 mm corners&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen&#39;s bottom and top edge above the desk&lt;/td&gt;
&lt;td&gt;160 and 379 mm&lt;/td&gt;
&lt;td&gt;150 and 369 mm&lt;/td&gt;
&lt;td&gt;110 and 329 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Steel ballast&lt;/td&gt;
&lt;td&gt;0.82 kg&lt;/td&gt;
&lt;td&gt;0.62 kg&lt;/td&gt;
&lt;td&gt;0.99 kg&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fin thickness&lt;/td&gt;
&lt;td&gt;20 mm below the neck, 14 mm at the dock&lt;/td&gt;
&lt;td&gt;14 mm&lt;/td&gt;
&lt;td&gt;14 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total mass, centre of gravity height&lt;/td&gt;
&lt;td&gt;2.31 kg, 146 mm&lt;/td&gt;
&lt;td&gt;2.06 kg, 156 mm&lt;/td&gt;
&lt;td&gt;2.49 kg, 109 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push to tip: front, back, left, right&lt;/td&gt;
&lt;td&gt;6.5, 6.3, 6.6, 6.2 N&lt;/td&gt;
&lt;td&gt;5.4, 5.2, 5.5, 5.1 N&lt;/td&gt;
&lt;td&gt;6.5, 6.4, 8.9, 8.5 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fin&#39;s largest constant moment&lt;/td&gt;
&lt;td&gt;0.42 N m&lt;/td&gt;
&lt;td&gt;0.21 N m&lt;/td&gt;
&lt;td&gt;0.20 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lean change under its own weight&lt;/td&gt;
&lt;td&gt;0.004°&lt;/td&gt;
&lt;td&gt;0.001°&lt;/td&gt;
&lt;td&gt;under 0.001°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Top edge movement at 5 N: front to back, sideways&lt;/td&gt;
&lt;td&gt;0.22, 1.05 mm&lt;/td&gt;
&lt;td&gt;0.11, 1.2 mm&lt;/td&gt;
&lt;td&gt;0.04, 0.6 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Whole device: print time, PLA&lt;/td&gt;
&lt;td&gt;9 h 47 min, 398 g&lt;/td&gt;
&lt;td&gt;8 h 58 min, 357 g&lt;/td&gt;
&lt;td&gt;9 h 55 min, 408 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Masses take the monitor as 0.8 kg (not weighed yet) and the printed parts at their A1 slice weights. The figures include the TPU pad ring and cable clip from &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.4-finishing-the-device/&quot;&gt;8.4&lt;/a&gt;. Bending uses solid PLA sections, E = 3.3 GPa, short term, cut every 3 mm at right angles to each fin&#39;s centreline.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/e1-side.png&quot; alt=&quot;E1 Arc from the side, front on the left&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What the numbers say&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Every stand is self-restoring&lt;/strong&gt; to at least 5.1 N on every edge, and all pass the 10° tilt test. Stand v2 managed 3.7 N with no ballast. The steel sits low and central, so the centre of gravity is almost equally far from the front and back edges.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Creep is no longer the issue.&lt;/strong&gt; The worst constant stress in any fin is 0.1 MPa; B2&#39;s band carried 1.35 MPa. Even E1, with the largest moment, leans a ninth as much as v2. The fins bend across their 30 to 60 mm depth, where v2&#39;s spine and B2&#39;s band bent across their thickness. Stiffness grows with the cube of that depth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sideways is the weak direction.&lt;/strong&gt; A 5 N push moves the screen&#39;s top edge 0.04 to 0.22 mm front to back, but 0.6 to 1.2 mm sideways, where the fin bends across its thickness.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E1 Arc&lt;/strong&gt; has the reference image&#39;s look. Its bow gives the longest centreline, so it carries the largest moment. At 14 mm it moved 2.48 mm sideways under 5 N, twice E2. Its body below the neck is now 20 mm thick, and it moves 1.05 mm, less than E2. The tongue and shoulder stay 14 mm, so the dock is unchanged. The extra 6 mm sits on the top side of the print only, so every region shares the bed face and nothing starts in mid-air. The cube law predicted &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;mn&gt;20&lt;/mn&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;/&lt;/mi&gt;&lt;mn&gt;14&lt;/mn&gt;&lt;msup&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;2.9&lt;/mn&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;(20/14)^3 &#92;approx 2.9&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1.0641em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;20/14&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.8141em;&quot;&gt;&lt;span style=&quot;top:-3.063em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;≈&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6444em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;2.9&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; times stiffer; the result is 2.4 times, because the 14 mm neck still bends. The cost is 12 minutes and 9 g.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E2 Column&lt;/strong&gt; stands straight under the centre of gravity, so its moment is half E1&#39;s. It is the lightest and quickest to print, but its smaller disc gives the lowest push to tip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;E3 Sail&lt;/strong&gt; is the steadiest: the plate&#39;s width gives 8.5 N sideways and the deep fin barely moves. Its screen sits 40 to 50 mm lower than the others.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The hub is common.&lt;/strong&gt; Changing the stand means printing only a fin and a foot: 3 h 54 min to 4 h 51 min.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Which one first&lt;/h2&gt;
&lt;p&gt;The case for &lt;strong&gt;E2 Column&lt;/strong&gt; first: its constant bending is half E1&#39;s, it is the quickest and lightest device to print (8 h 58 min, 357 g), and it still clears 5 N on every edge. It is also the cheapest full test of the shared hub and dock. E1 or E3 can follow for only a fin and a foot. If a wall suits, E4 (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.5-e4-wall/&quot;&gt;8.5&lt;/a&gt;) is the cheapest complete device. Before any of them, the one-hour dock coupon (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/&quot;&gt;8.3&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Checks&lt;/h2&gt;
&lt;p&gt;All pass for all three stands:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Carrier, shell, fin and foot are one valid solid each, and nothing overlaps the monitor, the PC or another part.&lt;/li&gt;
&lt;li&gt;The fin&#39;s shoulder bears on the collar, and its tenon bears on the slot&#39;s floor. Both have 0.2 mm each side.&lt;/li&gt;
&lt;li&gt;The dock pin and both plinth bolts have clear paths. An 8 mm driver reaches each shell screw.&lt;/li&gt;
&lt;li&gt;There is 45 mm of cable room past the rear ports, and 4.1 mm of air between the PC and the shell.&lt;/li&gt;
&lt;li&gt;The steel is sealed inside each foot, and every part fits the A1 in its print orientation.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 8.1 The hub</title>
<link>https://adamkdean.com/ai-workstation/08.1-the-hub/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08.1-the-hub/</guid>
<pubDate>Sun, 11 Oct 2026 19:37:33 +0000</pubDate>
<description>&lt;h1&gt;8.1 The hub&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/hub-inside-side.png&quot; alt=&quot;The hub with its shell off, side view, front on the left&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Mount option E had two problems as drawn. It fused the plate and the shell into one part that could not print without supports, and the PC covered all four VESA screws. The v3 hub splits it into two flat prints.&lt;/p&gt;
&lt;h2&gt;Carrier&lt;/h2&gt;
&lt;p&gt;Printed flat, front face down. It bolts to the monitor&#39;s VESA inserts with the same 4 × M4 × 10 countersunk screws as before. The PC hangs on its back on two shoulder screws in keyhole slots, as in stand v2, so it lifts off with no tools.&lt;/p&gt;
&lt;p&gt;At the carrier&#39;s bottom centre sits the &lt;strong&gt;docking collar&lt;/strong&gt;: a pocket that the stand&#39;s fin slides up into. The stand&#39;s load goes straight into the plate, right beside the lower VESA screws, not through the shell.&lt;/p&gt;
&lt;p&gt;The PC moved sideways on the plate (its centre at X = −23 mm, front towards the controls edge). Now only one VESA screw, upper controls side, sits under it. In option E all four did.&lt;/p&gt;
&lt;h2&gt;Shell&lt;/h2&gt;
&lt;p&gt;Printed back down on the textured plate, so the visible back takes the plate&#39;s texture. It is cosmetic and carries no load: a rounded tray over the PC, 1.8 mm walls (four perimeters), with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;grilles over the PC&#39;s side vents and over the cable bay,&lt;/li&gt;
&lt;li&gt;a notch for the PC&#39;s front panel, so the power button, USB and jack stay reachable,&lt;/li&gt;
&lt;li&gt;a cable bay past the rear ports, 50 mm wide, with an exit downwards and a side exit for the monitor&#39;s own cables (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.4-finishing-the-device/&quot;&gt;8.4&lt;/a&gt;),&lt;/li&gt;
&lt;li&gt;a notch round the collar,&lt;/li&gt;
&lt;li&gt;a 5 mm 45° bevel round the back edge, on the bed.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Three countersunk M3 screws hold it to three pillars on the carrier. The pillars carry heat-set inserts with their axes vertical in the print. They are placed clear of the PC, the VESA heads and the cables. The PC has 4.1 mm of air to the shell all round.&lt;/p&gt;
&lt;h2&gt;The dock&lt;/h2&gt;
&lt;p&gt;One interface serves every stand: a 14 mm tongue on the fin slides up into the collar.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The pocket is 14.4 × 40.4 mm and 30 mm deep, open at the bottom, so the tongue has 0.2 mm each side.&lt;/li&gt;
&lt;li&gt;The fin&#39;s neck is deeper than the pocket, so its top is a shoulder that bears on the collar&#39;s bottom face. The tongue stops 0.4 mm short of the pocket&#39;s roof.&lt;/li&gt;
&lt;li&gt;An M3 cross pin through the collar and the tongue locks it. It carries no weight. It sits 3.9 mm below the screen&#39;s bottom edge and below the shell, so it goes in with the shell on.&lt;/li&gt;
&lt;li&gt;Without the pin, gravity alone holds the hub on the stand: lift the screen and it comes off.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The collar hangs 11 mm below the screen&#39;s bottom edge. It is the only part of the hub you see from the front.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Print&lt;/th&gt;
&lt;th&gt;Size on the A1&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;th&gt;PLA (2 walls, 15%)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Carrier&lt;/td&gt;
&lt;td&gt;Flat, front down&lt;/td&gt;
&lt;td&gt;162 × 168 × 51 mm&lt;/td&gt;
&lt;td&gt;2 h 21 min&lt;/td&gt;
&lt;td&gt;95 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell&lt;/td&gt;
&lt;td&gt;Back down&lt;/td&gt;
&lt;td&gt;162 × 155 × 47 mm&lt;/td&gt;
&lt;td&gt;2 h 43 min&lt;/td&gt;
&lt;td&gt;88 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;One interface, one hub. Every stand in &lt;a href=&quot;https://adamkdean.com/ai-workstation/08.2-three-stands/&quot;&gt;8.2&lt;/a&gt; docks into the same collar.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 8 Stand v3: the hub and its stands</title>
<link>https://adamkdean.com/ai-workstation/08-stand-v3/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/08-stand-v3/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;8 Stand v3: the hub and its stands&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v3/renders/lineup-straight.png&quot; alt=&quot;The range from the front&quot; /&gt;&lt;/p&gt;
&lt;p&gt;With the hub chosen (&lt;a href=&quot;https://adamkdean.com/ai-workstation/07.1-five-options/&quot;&gt;7.1&lt;/a&gt;), the workstation becomes two problems with one interface between them:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;The hub&lt;/strong&gt; on the monitor&#39;s back. A flat-printed carrier plate on the four VESA inserts holds the PC and carries a docking collar. A cosmetic shell covers both, so from behind it reads as one device, not a bracket.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The stand&lt;/strong&gt;, which docks into the collar. Because every stand shares that one interface, I can try several without touching the hub.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;The range&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Form&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;E1 Arc&lt;/td&gt;
&lt;td&gt;A bowed fin on a disc, after a reference monitor I liked&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E2 Column&lt;/td&gt;
&lt;td&gt;A straight, tapered fin on a disc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E3 Sail&lt;/td&gt;
&lt;td&gt;A deep fin with a swept back edge, on a flat foot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E4 Wall&lt;/td&gt;
&lt;td&gt;A short fin on a wall plate, added later&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The print method drives the design&lt;/h2&gt;
&lt;p&gt;Each stand is a 14 mm fin printed flat. That follows straight from &lt;a href=&quot;https://adamkdean.com/ai-workstation/05.2-rules-for-printed-structure/&quot;&gt;5.2&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Printed flat, the fin&#39;s profile lies on the bed, so the screen&#39;s bending runs along the layers, not across them.&lt;/li&gt;
&lt;li&gt;A flat print can taper freely in the plane of the bed. The constant-width rule only applies to side prints.&lt;/li&gt;
&lt;li&gt;The heat-set inserts that join the fin to the collar and the foot stay vertical in the print.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The balance check from &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt; applies to every stand: &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; on each edge, with the real masses.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.1-the-hub/&quot;&gt;8.1 The hub&lt;/a&gt;: carrier, shell and docking collar.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.2-three-stands/&quot;&gt;8.2 Three stands&lt;/a&gt;: Arc, Column and Sail, with ballast, balance and stiffness.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.3-printing-and-iterating/&quot;&gt;8.3 Printing and iterating&lt;/a&gt;: sealing steel in a print, bearing faces, and what the slicer caught.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.4-finishing-the-device/&quot;&gt;8.4 Finishing the device&lt;/a&gt;: cable routes, a TPU pad ring that sets the tipping edge, and vent area.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.5-e4-wall/&quot;&gt;8.5 E4 Wall&lt;/a&gt;: the same dock on a wall plate.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.6-exports-and-assembly/&quot;&gt;8.6 Exports and assembly&lt;/a&gt;: two hidden export faults, and the assembly sequence.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.7-where-it-stands/&quot;&gt;8.7 Where it stands&lt;/a&gt;: the final range table, what changed between v1, v2 and v3, the process lessons and next steps.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 7.1 Five options</title>
<link>https://adamkdean.com/ai-workstation/07.1-five-options/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/07.1-five-options/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;7.1 Five options&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/mount-v3/renders/lineup-rear.png&quot; alt=&quot;The five options from behind&quot; /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;A Back plate&lt;/th&gt;
&lt;th&gt;B Shelf&lt;/th&gt;
&lt;th&gt;C Chin&lt;/th&gt;
&lt;th&gt;D Fin&lt;/th&gt;
&lt;th&gt;E Hub&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;How the PC sits&lt;/td&gt;
&lt;td&gt;On its side, flat on the plate, on two shoulder screws in keyholes (as v2)&lt;/td&gt;
&lt;td&gt;Lying flat on a shelf at the plate&#39;s foot, reaching back&lt;/td&gt;
&lt;td&gt;Under the screen, front flush with the screen&#39;s face, on a shelf hung from four corner posts&lt;/td&gt;
&lt;td&gt;On edge, its base screwed to a fin off the plate, ports down&lt;/td&gt;
&lt;td&gt;As A, inside a shell with vent windows and a socket for a stand post&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PC centre above the screen&#39;s bottom edge&lt;/td&gt;
&lt;td&gt;65 mm&lt;/td&gt;
&lt;td&gt;28 mm&lt;/td&gt;
&lt;td&gt;−27 mm&lt;/td&gt;
&lt;td&gt;54 mm&lt;/td&gt;
&lt;td&gt;65 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Combined centre of gravity above the bottom edge&lt;/td&gt;
&lt;td&gt;84 mm&lt;/td&gt;
&lt;td&gt;73 mm&lt;/td&gt;
&lt;td&gt;56 mm&lt;/td&gt;
&lt;td&gt;81 mm&lt;/td&gt;
&lt;td&gt;83 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Depth from the screen&#39;s face&lt;/td&gt;
&lt;td&gt;56 mm&lt;/td&gt;
&lt;td&gt;150 mm&lt;/td&gt;
&lt;td&gt;102 mm&lt;/td&gt;
&lt;td&gt;147 mm&lt;/td&gt;
&lt;td&gt;62 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hangs below the screen&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;53 mm&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;19 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VESA screws under the PC&lt;/td&gt;
&lt;td&gt;All four&lt;/td&gt;
&lt;td&gt;Lower two&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Two&lt;/td&gt;
&lt;td&gt;All four&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Power button&lt;/td&gt;
&lt;td&gt;Side&lt;/td&gt;
&lt;td&gt;Side&lt;/td&gt;
&lt;td&gt;Front, in view&lt;/td&gt;
&lt;td&gt;Top&lt;/td&gt;
&lt;td&gt;Side, through a window&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mount PLA (2 walls, 15%)&lt;/td&gt;
&lt;td&gt;38 g&lt;/td&gt;
&lt;td&gt;69 g&lt;/td&gt;
&lt;td&gt;98 g&lt;/td&gt;
&lt;td&gt;60 g&lt;/td&gt;
&lt;td&gt;76 g&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print&lt;/td&gt;
&lt;td&gt;Flat, no supports&lt;/td&gt;
&lt;td&gt;Plate down; the shelf rises as a 140 mm wall&lt;/td&gt;
&lt;td&gt;Needs supports or a split&lt;/td&gt;
&lt;td&gt;Plate down; a 6 mm fin 136 mm tall&lt;/td&gt;
&lt;td&gt;Two parts&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;All five pass the checks: one valid solid each, no overlap with the monitor or the PC, and each fits the A1.&lt;/p&gt;
&lt;h2&gt;Reading the table&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A and E&lt;/strong&gt; are the thinnest behind the screen (56 to 62 mm) but put the PC highest. A is the simplest print of the five.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B&lt;/strong&gt; puts the PC low and keeps it hidden behind the screen, at the cost of depth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt; gives the lowest centre of gravity and the power button in view. It hangs 53 mm below the screen, so the screen sits higher on any stand, and it needs supports.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;D&lt;/strong&gt; is narrow from behind. Its fin could also be where a stand attaches.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;From &lt;a href=&quot;https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/&quot;&gt;6&lt;/a&gt;: a low centre of gravity does not raise the push to tip by itself. It helps the 10° tilt test. The real gain comes when the stand puts its foot&#39;s edges far from the centre of gravity.&lt;/p&gt;
&lt;h2&gt;A small fix from the checks&lt;/h2&gt;
&lt;p&gt;In the first build of B and D, one side vent of the PC faced the plate with a 1 to 2 mm gap. The fix was to move the PC 15 mm off the plate. This gap is now a fixed parameter (&lt;code&gt;VENT = 15&lt;/code&gt;) in the build script.&lt;/p&gt;
&lt;h2&gt;The choice&lt;/h2&gt;
&lt;p&gt;I chose &lt;strong&gt;E, the hub&lt;/strong&gt;. It keeps the PC thin behind the screen, the shell gives a finished device rather than a bracket, and its socket gives every stand one interface to dock into. That makes the stand a separate design problem, which is where &lt;a href=&quot;https://adamkdean.com/ai-workstation/08-stand-v3/&quot;&gt;8 Stand v3&lt;/a&gt; starts.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 7 The v3 double mount</title>
<link>https://adamkdean.com/ai-workstation/07-the-v3-double-mount/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/07-the-v3-double-mount/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;7 The v3 double mount&lt;/h1&gt;
&lt;p&gt;Stand v2 fixed the creep lever, but its PC sits high on the back of the screen. Many monitors with built-in electronics put the electronics box low, behind the bottom of the screen. That keeps the screen thin where you see it, and it puts the heavy part near the stand.&lt;/p&gt;
&lt;p&gt;For v3 I split the problem. Forget the stand for now, and design the sub-component first: &lt;strong&gt;one printed part that bolts to the monitor&#39;s VESA inserts with 4 × M4, and also holds the PC low.&lt;/strong&gt; Once that part exists, any stand only has to hold one thing.&lt;/p&gt;
&lt;h2&gt;Fixed for every option&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The screen is upright for this study, with no tilt.&lt;/li&gt;
&lt;li&gt;The VESA fixing is the same in all options: 4 × M4 × 10 countersunk, flush, through a 6.5 mm plate, leaving 3.5 mm of thread in the 3.6 mm inserts.&lt;/li&gt;
&lt;li&gt;Any side vent that faces the plate gets 15 mm of open air.&lt;/li&gt;
&lt;li&gt;The frame is the monitor model&#39;s: origin at the VESA centre on the back face, heights measured from the screen&#39;s bottom edge, depths from the screen&#39;s face.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are massing models again, so I listed what they leave out: vent rows, cable routes and the stand interface. The difference from v1 is that the VESA joint is real from the start.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/07.1-five-options/&quot;&gt;7.1 Five options&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 6 The self-restoring rule</title>
<link>https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/06-the-self-restoring-rule/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;6 The self-restoring rule&lt;/h1&gt;
&lt;p&gt;Every stand so far tipped at a push of a few newtons. Before going further I made balance a formal requirement: &lt;strong&gt;every stand must be self-restoring.&lt;/strong&gt; After any push below the tipping force it must fall back upright, so its centre of gravity stays inside the footprint with margin.&lt;/p&gt;
&lt;h2&gt;The equation&lt;/h2&gt;
&lt;p&gt;Take moments about the edge the stand would tip over. Gravity acts at the centre of gravity and holds it down; a horizontal push at the screen&#39;s top edge lifts it. At the point of tipping they balance:&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;msub&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;u&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;M g &#92;, (y_&#92;mathrm{CG} - y_&#92;mathrm{front}) = F_&#92;mathrm{tip} &#92;, z_&#92;mathrm{push}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:1em;vertical-align:-0.25em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.044em;&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.044em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;so&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mo stretchy=&quot;false&quot;&gt;(&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo stretchy=&quot;false&quot;&gt;)&lt;/mo&gt;&lt;/mrow&gt;&lt;msub&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;u&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mfrac&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip} = &#92;frac{M g &#92;, (y_&#92;mathrm{CG} - y_&#92;mathrm{front})}{z_&#92;mathrm{push}}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.3991em;vertical-align:-0.9721em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.427em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.044em;&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.044em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;g&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mopen&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.9721em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Symbol&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;M&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Total mass: stand, screen, PC and ballast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;g&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;g&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;g&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;9.81 m/s²&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;−&lt;/mo&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;y_&#92;mathrm{CG} - y_&#92;mathrm{front}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7778em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;−&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Horizontal distance from the centre of gravity to the tipping edge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;z&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;u&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;s&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;h&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;z_&#92;mathrm{push}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.7167em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.044em;&quot;&gt;z&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.044em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;push&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;Height of the push above the desk (the screen&#39;s top edge)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Apply it to every edge: front, back and both sides.&lt;/p&gt;
&lt;h2&gt;A worked example&lt;/h2&gt;
&lt;p&gt;Stand v2: &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;M&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; = 1.33 kg, centre of gravity 88 mm behind the foot&#39;s front edge, screen top about 0.31 m above the desk.&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mfrac&gt;&lt;mrow&gt;&lt;mn&gt;1.33&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;9.81&lt;/mn&gt;&lt;mo&gt;×&lt;/mo&gt;&lt;mn&gt;0.088&lt;/mn&gt;&lt;/mrow&gt;&lt;mn&gt;0.31&lt;/mn&gt;&lt;/mfrac&gt;&lt;mo&gt;≈&lt;/mo&gt;&lt;mn&gt;3.7&lt;/mn&gt;&lt;mtext&gt; N&lt;/mtext&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip} = &#92;frac{1.33 &#92;times 9.81 &#92;times 0.088}{0.31} &#92;approx 3.7 &#92;text{ N}
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.0074em;vertical-align:-0.686em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3214em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;0.31&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;1.33&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;9.81&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mbin&quot;&gt;×&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2222em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;0.088&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;≈&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;3.7&lt;/span&gt;&lt;span class=&quot;mord text&quot;&gt;&lt;span class=&quot;mord&quot;&gt; N&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;That matches the check script&#39;s 3.7 N forward. A light push with one finger is 5 to 10 N, so v2 fails the spirit of the rule even though it passes the 10° tilt test.&lt;/p&gt;
&lt;h2&gt;The ways to raise it&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;More mass, low down.&lt;/strong&gt; Ballast in the foot. It raises &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;M&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; without raising the centre of gravity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A longer lever.&lt;/strong&gt; Move the centre of gravity further from the edge: a bigger foot, or ballast placed away from the weakest edge (1 kg at the back of B3&#39;s foot took forward from 1.7 to 5.7 N).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A lower push point.&lt;/strong&gt; A lower screen.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;What height does and does not do&lt;/h2&gt;
&lt;p&gt;The height of the centre of gravity does not appear in &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;F&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;i&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;p&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;F_&#92;mathrm{tip}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.9694em;vertical-align:-0.2861em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.1389em;&quot;&gt;F&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3175em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.1389em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;tip&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.2861em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;. A low PC does not raise the push to tip on its own. Height matters in the second test: the stand must stay up when tilted 10° any way, so the margin to every edge must exceed &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;h&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;C&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;G&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;mi&gt;tan&lt;/mi&gt;&lt;mo&gt;⁡&lt;/mo&gt;&lt;msup&gt;&lt;mn&gt;10&lt;/mn&gt;&lt;mo&gt;∘&lt;/mo&gt;&lt;/msup&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;h_&#92;mathrm{CG} &#92;tan 10^&#92;circ&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.8444em;vertical-align:-0.15em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;h&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3283em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:0em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;CG&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mop&quot;&gt;tan&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.6741em;&quot;&gt;&lt;span style=&quot;top:-3.063em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mbin mtight&quot;&gt;∘&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;. A lower centre of gravity passes that test with a smaller foot, and the stand feels steadier.&lt;/p&gt;
&lt;h2&gt;The edge is where it touches&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;msub&gt;&lt;mi&gt;y&lt;/mi&gt;&lt;mrow&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;f&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;r&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;o&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;n&lt;/mi&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;t&lt;/mi&gt;&lt;/mrow&gt;&lt;/msub&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;y_&#92;mathrm{front}&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.625em;vertical-align:-0.1944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0359em;&quot;&gt;y&lt;/span&gt;&lt;span class=&quot;msupsub&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.3361em;&quot;&gt;&lt;span style=&quot;top:-2.55em;margin-left:-0.0359em;margin-right:0.05em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:2.7em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;sizing reset-size6 size3 mtight&quot;&gt;&lt;span class=&quot;mord mtight&quot;&gt;&lt;span class=&quot;mord mathrm mtight&quot;&gt;front&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.15em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is the edge the stand actually rests on, not the edge of the part you drew. Pads under a foot set it. Four round pads at 45° on a disc pull the front tipping edge in to about 70% of the radius. A ring of pad near the rim keeps it out (&lt;a href=&quot;https://adamkdean.com/ai-workstation/08.4-finishing-the-device/&quot;&gt;8.4&lt;/a&gt;).&lt;/p&gt;
&lt;h2&gt;Mind the material&lt;/h2&gt;
&lt;p&gt;PLA is light, so &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;M&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; is small unless ballast adds to it. PLA creeps, so over time the screen and the centre of gravity can move towards an edge. Ballast must sit in parts that do not creep under it.&lt;/p&gt;
&lt;p&gt;The rule is now in the repo&#39;s &lt;code&gt;AGENTS.md&lt;/code&gt;, so every agent working on a stand checks it.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 5.2 Rules for printed structure</title>
<link>https://adamkdean.com/ai-workstation/05.2-rules-for-printed-structure/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/05.2-rules-for-printed-structure/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;5.2 Rules for printed structure&lt;/h1&gt;
&lt;p&gt;The B2 review and the v2 design turned into a set of rules. They now apply to every structural part in this project.&lt;/p&gt;
&lt;h2&gt;Orientation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Load along the layers.&lt;/strong&gt; Layers bond at 50 to 70% of the in-layer strength. Pick the orientation before adding features.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A side print repeats the profile in every layer.&lt;/strong&gt; A feature as wide as the part is a T-junction inside each layer. A narrower one starts above the bed and overhangs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep a side-printed part at constant width.&lt;/strong&gt; A taper adds new, unsupported area to every layer in the lower half. That is why the v2 spine stays 60 mm wide and does not flare into the foot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Walls set stiffness in a side print.&lt;/strong&gt; The curved faces are perimeter walls. Two 0.42 mm walls each side give about half the solid stiffness of an 8 mm band. Top and bottom layers only thicken the two narrow ends.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;45° is not a free lunch.&lt;/strong&gt; Tilting a part 45° evens out the weak direction at the cost of the strong one, needs support under the whole part, and steps every face and hole. Use it only where two loaded legs cannot both lie in the layers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fasteners&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Heat-set inserts go in flat-printed parts, axis vertical.&lt;/strong&gt; An insert presses outwards all round. With its axis in the layer plane, part of that pressure pulls layers apart and can split the wall along a layer line. The side-printed spine has only clearance holes; its mates hold the inserts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A blind insert hole&lt;/strong&gt; needs the insert&#39;s length plus about two thread pitches: about 6.7 mm for a 5.7 mm M3 insert.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Countersunk screws&lt;/strong&gt; are measured head included.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shoulder screws in keyholes&lt;/strong&gt; hang a part at a fixed height with no tools.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Joints&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Laps, not butt joints.&lt;/strong&gt; Spread screws along the direction of the moment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design joints before trusting a split.&lt;/strong&gt; A fused check solid hides overlaps.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Creep governs PLA stands&lt;/h2&gt;
&lt;p&gt;Stresses in these stands stay near 1 MPa, far below breaking. The limit is creep under constant bending. Keep the support under the centre of gravity, and keep warm parts (the PC&#39;s base) off structural PLA.&lt;/p&gt;
&lt;h2&gt;Can FreeCAD do the analysis?&lt;/h2&gt;
&lt;p&gt;Partly. FreeCAD&#39;s FEM workbench meshes with Gmsh and solves with CalculiX. It can apply gravity and point loads to a PLA part and report stress and deflection. That is a good check of the hand integration above.&lt;/p&gt;
&lt;p&gt;Layer orientation is harder. The FEM GUI takes an isotropic material only. CalculiX itself supports orthotropic elastic constants, so the weak Z direction can be modelled by editing the solver&#39;s &lt;code&gt;.inp&lt;/code&gt; input file with the print&#39;s axes. Even then it is linear and short-term: it does not model creep, layer adhesion failure or the infill pattern. The useful approach is to compare orientations and layouts, not to predict a life.&lt;/p&gt;
&lt;p&gt;I have not run FEA on the stand yet. The hand method was enough to show a 25× difference between layouts.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 5.1 Carrier, spine and foot</title>
<link>https://adamkdean.com/ai-workstation/05.1-carrier-spine-and-foot/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/05.1-carrier-spine-and-foot/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;5.1 Carrier, spine and foot&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v2/renders/v2-side.png&quot; alt=&quot;Stand v2 from the side, front on the left&quot; /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;Print&lt;/th&gt;
&lt;th&gt;PLA&lt;/th&gt;
&lt;th&gt;Joints&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Carrier, 110 × 204 × 6.5 mm plate with a ledge&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;63 g&lt;/td&gt;
&lt;td&gt;To the monitor: 4 × M4 × 10 countersunk from behind, flush. To the PC: two keyhole slots. To the spine: 4 M3 heat-set inserts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spine, 60 × 12 mm, leaning back 10°, a 20 mm bend into a 50 mm pad&lt;/td&gt;
&lt;td&gt;On its side, 60 mm width up&lt;/td&gt;
&lt;td&gt;66 g&lt;/td&gt;
&lt;td&gt;4 × M3 into the carrier over a 64 mm lap; 4 × M3 down into the foot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foot, 200 × 180 × 8 mm, 20 mm corners&lt;/td&gt;
&lt;td&gt;Flat&lt;/td&gt;
&lt;td&gt;124 g&lt;/td&gt;
&lt;td&gt;4 M3 heat-set inserts under the pad&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The VESA screws&lt;/h2&gt;
&lt;p&gt;The monitor&#39;s inserts give 3.6 mm of thread (&lt;a href=&quot;https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/&quot;&gt;3.1&lt;/a&gt;). An M4 × 10 countersunk screw (ISO 10642) is measured head included, so through a 6.5 mm plate it leaves 3.5 mm. Countersunk also means flush: my first layout used pan heads, and the upper two clashed with the PC and its ledge.&lt;/p&gt;
&lt;h2&gt;Hanging the PC with no tools&lt;/h2&gt;
&lt;p&gt;The PC hangs on its side on two shoulder screws (ISO 7379: 4 mm shoulder, M3 thread, 8 mm long) in its own base inserts. The shoulder seats on the insert, so the head stands a fixed 8 mm off the base: 6.5 mm of carrier plus the 1.4 mm the corner pads hold it off. A plain screw would keep turning into the insert.&lt;/p&gt;
&lt;p&gt;The heads pass through 7.5 mm holes, and the PC slides 8 mm down into 4.2 mm slots. To remove it, lift 8 mm and pull back. A 60 mm ledge under the lower side takes the weight below the vent rows.&lt;/p&gt;
&lt;p&gt;The PC&#39;s rear ports face the monitor&#39;s port edge, so every cable leaves on one side. Its side vents face up and down, so warm air rises through it like a chimney.&lt;/p&gt;
&lt;h2&gt;Laps, not butt joints&lt;/h2&gt;
&lt;p&gt;The spine&#39;s top lies flat on the carrier&#39;s back for 64 mm, between the VESA screws. Its four screws are 46 mm apart along the screen, so they have a real lever against the screen&#39;s moment. Screws in the 8 mm end of a band have almost none.&lt;/p&gt;
&lt;h2&gt;Assembly order&lt;/h2&gt;
&lt;p&gt;Carrier to spine, spine to foot, monitor to carrier, then hang the PC. The upper VESA screws sit under the PC, so the PC comes off before the monitor does.&lt;/p&gt;
&lt;h2&gt;Checks&lt;/h2&gt;
&lt;p&gt;All pass. Each part is one valid solid, nothing overlaps, and both laps touch. There is 45 mm of cable room past the rear ports and 15 mm of open air at every vent. A 10 mm driver path reaches each VESA screw. The PC lifts off along its path without hitting anything. Every part fits the A1.&lt;/p&gt;
&lt;p&gt;Two fixes came out of the checks. The spine&#39;s bend first looped under the desk because &lt;code&gt;atan2&lt;/code&gt; returned −100° where the code expected 260°; a &lt;code&gt;% 360&lt;/code&gt; fixed it. The spine&#39;s round lap end also blocked the lower vent&#39;s air by 1 mm.&lt;/p&gt;
&lt;h2&gt;Open points&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Push to tip&lt;/strong&gt; is 3.7 to 4.3 N with no ballast. The 8 mm foot is too thin to hold much steel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heat.&lt;/strong&gt; The N100&#39;s base sits 1.4 mm from the PLA carrier, and PLA creeps faster when warm. I need to measure the base temperature under load.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Seen from above.&lt;/strong&gt; The PC stands 18.5 mm below the screen&#39;s top edge. My estimate is that an eye more than about 530 mm above the desk sees it.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 5 Stand v2: the PC behind the screen</title>
<link>https://adamkdean.com/ai-workstation/05-stand-v2/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/05-stand-v2/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;5 Stand v2: the PC behind the screen&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand-v2/renders/v2-isometric-rear.png&quot; alt=&quot;Stand v2 from behind&quot; /&gt;&lt;/p&gt;
&lt;p&gt;The creep problem in B2 came from geometry: the support reached round the PC, so the screen hung on a long lever. The obvious move is to stop reaching round anything. Hang the PC on the back of the screen, and stand both on one short spine almost under the combined centre of gravity.&lt;/p&gt;
&lt;p&gt;Two rules for v2 from the start:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Every part prints on the A1 in its strong orientation.&lt;/li&gt;
&lt;li&gt;Every joint is designed: laps, holes, screw types and lengths. No fused overlaps.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;The result in one table&lt;/h2&gt;
&lt;p&gt;Same method and loads as for B2 (0.8 kg monitor, 0.28 kg PC, solid sections, E = 3.3 GPa):&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;B2 Swoosh (120 × 8 mm band)&lt;/th&gt;
&lt;th&gt;V2 (60 × 12 mm spine)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Largest constant bending moment&lt;/td&gt;
&lt;td&gt;1.72 N m&lt;/td&gt;
&lt;td&gt;0.44 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stress from it&lt;/td&gt;
&lt;td&gt;1.35 MPa&lt;/td&gt;
&lt;td&gt;0.30 MPa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lean change under its own weight&lt;/td&gt;
&lt;td&gt;0.87°&lt;/td&gt;
&lt;td&gt;0.035°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deflection at the screen&#39;s top under a 5 N push&lt;/td&gt;
&lt;td&gt;4.5 mm&lt;/td&gt;
&lt;td&gt;1.1 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Real prints are softer than solid sections and creep grows both columns over time, but the ratio holds: v2&#39;s constant lean change is about 25 times smaller.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/05.1-carrier-spine-and-foot/&quot;&gt;5.1 Carrier, spine and foot&lt;/a&gt;: the parts and their joints.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/05.2-rules-for-printed-structure/&quot;&gt;5.2 Rules for printed structure&lt;/a&gt;: orientation, inserts, laps, and what FEA can and cannot tell us.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 4.3 What the checks missed</title>
<link>https://adamkdean.com/ai-workstation/04.3-what-the-checks-missed/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/04.3-what-the-checks-missed/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;4.3 What the checks missed&lt;/h1&gt;
&lt;h2&gt;The joints were never designed&lt;/h2&gt;
&lt;p&gt;The renders of B2 showed z-fighting where the parts met: two surfaces flickering in the same place. That was the clue. The check script fused the parts into one solid before it tested them, and the parts overlapped. The tray sat 6 mm inside the band. The band&#39;s round end was buried 4 mm in the VESA plate.&lt;/p&gt;
&lt;p&gt;In a fused solid, an overlap looks exactly like a joint. So the checks proved that the parts fit in space, not that anyone could screw them together. Nobody had chosen a screw, a hole or a lap.&lt;/p&gt;
&lt;p&gt;Lesson: a fused check solid shows fit, not assembly. Design every joint before trusting a split.&lt;/p&gt;
&lt;h2&gt;Second opinions&lt;/h2&gt;
&lt;p&gt;I wrote a dense technical brief of B2 and gave it to two other models for review. I treated their answers as reviews, not as authority. They agreed on two points:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Print B2 as one piece on its side.&lt;/strong&gt; A side print repeats the profile in every layer. A tray or pad as wide as the band is then a T-junction inside every layer, as strong as the plastic, with no joint at all. A narrower feature starts above the bed and overhangs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stiffness and creep, not strength, are the risk.&lt;/strong&gt; The stresses are tiny. The problem is the lever.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;The creep problem&lt;/h2&gt;
&lt;p&gt;PLA creeps under a constant load at room temperature. B2 holds the screen on a curve that reaches round the PC, so the screen&#39;s weight acts on a long lever of thin plastic all day, every day.&lt;/p&gt;
&lt;p&gt;I integrated the bending along the band&#39;s centreline (solid section, &lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;E&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;E&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6833em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0576em;&quot;&gt;E&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; = 3.3 GPa):&lt;/p&gt;
&lt;p class=&quot;katex-block&quot;&gt;&lt;span class=&quot;katex-display&quot;&gt;&lt;span class=&quot;katex&quot;&gt;&lt;span class=&quot;katex-mathml&quot;&gt;&lt;math xmlns=&quot;http://www.w3.org/1998/Math/MathML&quot; display=&quot;block&quot;&gt;&lt;semantics&gt;&lt;mrow&gt;&lt;mi&gt;θ&lt;/mi&gt;&lt;mo&gt;=&lt;/mo&gt;&lt;mo&gt;∫&lt;/mo&gt;&lt;mfrac&gt;&lt;mi&gt;M&lt;/mi&gt;&lt;mrow&gt;&lt;mi&gt;E&lt;/mi&gt;&lt;mi&gt;I&lt;/mi&gt;&lt;/mrow&gt;&lt;/mfrac&gt;&lt;mtext&gt; &lt;/mtext&gt;&lt;mi mathvariant=&quot;normal&quot;&gt;d&lt;/mi&gt;&lt;mi&gt;s&lt;/mi&gt;&lt;/mrow&gt;&lt;annotation encoding=&quot;application/x-tex&quot;&gt;&#92;theta = &#92;int &#92;frac{M}{EI} &#92;, &#92;mathrm{d}s
&lt;/annotation&gt;&lt;/semantics&gt;&lt;/math&gt;&lt;/span&gt;&lt;span class=&quot;katex-html&quot; aria-hidden=&quot;true&quot;&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:0.6944em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0278em;&quot;&gt;θ&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mrel&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.2778em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;base&quot;&gt;&lt;span class=&quot;strut&quot; style=&quot;height:2.2226em;vertical-align:-0.8622em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mop op-symbol large-op&quot; style=&quot;margin-right:0.4445em;position:relative;top:-0.0011em;&quot;&gt;∫&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mopen nulldelimiter&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mfrac&quot;&gt;&lt;span class=&quot;vlist-t vlist-t2&quot;&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:1.3603em;&quot;&gt;&lt;span style=&quot;top:-2.314em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0576em;&quot;&gt;E&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.0785em;&quot;&gt;I&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.23em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;frac-line&quot; style=&quot;border-bottom-width:0.04em;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;top:-3.677em;&quot;&gt;&lt;span class=&quot;pstrut&quot; style=&quot;height:3em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord&quot;&gt;&lt;span class=&quot;mord mathnormal&quot; style=&quot;margin-right:0.109em;&quot;&gt;M&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-s&quot;&gt;​&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;vlist-r&quot;&gt;&lt;span class=&quot;vlist&quot; style=&quot;height:0.686em;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mclose nulldelimiter&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;mspace&quot; style=&quot;margin-right:0.1667em;&quot;&gt;&lt;/span&gt;&lt;span class=&quot;mord mathrm&quot;&gt;d&lt;/span&gt;&lt;span class=&quot;mord mathnormal&quot;&gt;s&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;B2 Swoosh&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Largest constant bending moment&lt;/td&gt;
&lt;td&gt;1.72 N m&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stress from it&lt;/td&gt;
&lt;td&gt;1.35 MPa (far below breaking)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen lean change under its own weight, short term&lt;/td&gt;
&lt;td&gt;0.87°&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deflection at the screen&#39;s top under a 5 N push&lt;/td&gt;
&lt;td&gt;4.5 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Those are short-term values for a solid section. A print with 2 walls is softer (two 0.42 mm walls on each face give about half the solid stiffness of an 8 mm band), and creep multiplies the lean change over months. The screen would slowly nod forward.&lt;/p&gt;
&lt;p&gt;The fix is not a thicker band. It is a different layout that puts the support under the load. That became &lt;a href=&quot;https://adamkdean.com/ai-workstation/05-stand-v2/&quot;&gt;stand v2&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 4.2 Round 2: B1, B2 and B3</title>
<link>https://adamkdean.com/ai-workstation/04.2-round-2/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/04.2-round-2/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;4.2 Round 2: B1, B2 and B3&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand/renders/b-derivatives-isometric.png&quot; alt=&quot;B&#39;s three derivatives&quot; /&gt;&lt;/p&gt;
&lt;p&gt;For round 2 I added a rule: the screen&#39;s bottom edge, the PC&#39;s front and the stand&#39;s front end on one line, with nothing further forward. The line is the front of the tray&#39;s lip, 3.2 mm ahead of the PC&#39;s face. The checks confirm the screen and the stand both end on it.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;B1 Flush&lt;/th&gt;
&lt;th&gt;B2 Swoosh&lt;/th&gt;
&lt;th&gt;B3 Pedestal&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Form&lt;/td&gt;
&lt;td&gt;B pulled back to the line: 100 mm band, tight bends, straight runs&lt;/td&gt;
&lt;td&gt;One smooth curve from the foot round behind the PC to the screen; 120 mm band&lt;/td&gt;
&lt;td&gt;B1 on a flat 200 × 165 × 8 mm foot&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Footprint&lt;/td&gt;
&lt;td&gt;100 × 129 mm&lt;/td&gt;
&lt;td&gt;120 × 135 mm&lt;/td&gt;
&lt;td&gt;200 × 165 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push to tip: forward, back, sideways&lt;/td&gt;
&lt;td&gt;1.4, 3.8, 2.0 N&lt;/td&gt;
&lt;td&gt;1.6, 4.0, 2.5 N&lt;/td&gt;
&lt;td&gt;1.7, 5.3, 4.2 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The same with 1 kg of ballast at the back of the foot&lt;/td&gt;
&lt;td&gt;4.3, 5.0, 3.6 N&lt;/td&gt;
&lt;td&gt;4.6, 5.3, 4.4 N&lt;/td&gt;
&lt;td&gt;5.7, 6.6, 7.4 N&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Parts&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Print time and PLA&lt;/td&gt;
&lt;td&gt;4 h 46 min, 194 g&lt;/td&gt;
&lt;td&gt;about 5 h 50 min, 230 g&lt;/td&gt;
&lt;td&gt;6 h 45 min, 305 g&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand/renders/b2-side.png&quot; alt=&quot;B2 from the side, front on the left&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;What the flush front costs&lt;/h2&gt;
&lt;p&gt;With the foot no longer reaching forward, the centre of gravity sits only 35 to 40 mm behind the front edge. About 1.5 N at the top of the screen pulls any of them over forwards.&lt;/p&gt;
&lt;p&gt;Ballast at the back of the foot does two things: it adds mass, and it moves the centre of gravity back, away from the front edge. On B3, 1 kg there raised the forward figure from 1.7 to 5.7 N. Every derivative needs it.&lt;/p&gt;
&lt;h2&gt;Splitting for the A1&lt;/h2&gt;
&lt;p&gt;Each derivative splits into parts that fit the A1 and print without supports, each in its strong orientation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;band&lt;/strong&gt; prints on its side. The curve lies on the bed, so bending runs along the layers, not across them.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;tray&lt;/strong&gt; and &lt;strong&gt;VESA plate&lt;/strong&gt; print flat, holes vertical.&lt;/li&gt;
&lt;li&gt;B3&#39;s &lt;strong&gt;foot&lt;/strong&gt; prints flat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;FDM layers bond at 50 to 70% of the strength within a layer, so orientation is a design decision, made before the details.&lt;/p&gt;
&lt;p&gt;I leaned towards B2. Then I looked harder at how the parts actually joined.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 4.1 Round 1: Swoop, Hook and Rails</title>
<link>https://adamkdean.com/ai-workstation/04.1-round-1/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/04.1-round-1/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;4.1 Round 1: Swoop, Hook and Rails&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/concepts/stand/renders/lineup-isometric.png&quot; alt=&quot;The first three concepts&quot; /&gt;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;A Swoop&lt;/th&gt;
&lt;th&gt;B Hook&lt;/th&gt;
&lt;th&gt;C Rails&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Form&lt;/td&gt;
&lt;td&gt;One 130 mm band, 8 mm thick: a foot with a heel and an arm leaning back 10°&lt;/td&gt;
&lt;td&gt;One 100 mm band in a &amp;quot;?&amp;quot; profile: the arm rises behind the PC and curls forward to the screen&lt;/td&gt;
&lt;td&gt;Two 12 × 12 mm runners past the PC&#39;s sides to a crossbar behind the screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Screen relative to the PC&lt;/td&gt;
&lt;td&gt;Behind it: the PC&#39;s front is 105 mm ahead&lt;/td&gt;
&lt;td&gt;Directly above it&lt;/td&gt;
&lt;td&gt;Above it, 16 mm behind its front&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cables&lt;/td&gt;
&lt;td&gt;Through a window in the arm, as on an iMac&lt;/td&gt;
&lt;td&gt;Into the open loop behind the PC&lt;/td&gt;
&lt;td&gt;Out of the open frame&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Push at the screen&#39;s top that tips it: forward, back, sideways&lt;/td&gt;
&lt;td&gt;8.1, 3.6, 2.7 N&lt;/td&gt;
&lt;td&gt;5.7, 3.7, 2.1 N&lt;/td&gt;
&lt;td&gt;5.4, 4.0, 3.4 N&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The stand that fell over on its own&lt;/h2&gt;
&lt;p&gt;Concept A&#39;s first version had no heel. The screen leans back on the arm, and that put the centre of gravity 6 mm behind the foot. The model tipped over backwards with no push at all. The fix was a heel 70 mm behind the arm.&lt;/p&gt;
&lt;p&gt;That is the first balance lesson: a screen that leans back moves the centre of gravity behind its support. Check balance with real masses, not only fit.&lt;/p&gt;
&lt;h2&gt;The choice&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A&lt;/strong&gt; reads most like an iMac, but the PC sits in front of the screen like a plinth.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;B&lt;/strong&gt; stacks the screen over the PC and leaves an open loop for cables. Its band is 268 mm long, more than the A1&#39;s 256 mm, so it would need a split.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;C&lt;/strong&gt; is the lightest and the steadiest sideways, but the runners look like skis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I chose B.&lt;/p&gt;
&lt;h2&gt;A note on these numbers&lt;/h2&gt;
&lt;p&gt;All three pass the usual display test: the centre of gravity stays over the footprint when tilted 10° any way. But a push of 2 to 8 N at the top of the screen tips them, and a light push with one finger is 5 to 10 N. A PLA stand is light, and a 357 mm screen is wide against a 100 to 130 mm band. Widening the foot raises the sideways figure in step with its half-width. Ballast low down adds mass.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 4 Stand v1: the screen above the PC</title>
<link>https://adamkdean.com/ai-workstation/04-stand-v1/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/04-stand-v1/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;4 Stand v1: the screen above the PC&lt;/h1&gt;
&lt;p&gt;The first brief was mine and visual: a curved, iMac-like foot and arm, the computer floating below, the screen above. One printed stand for both.&lt;/p&gt;
&lt;p&gt;Every concept shares the same interfaces, so only the form changes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Screen:&lt;/strong&gt; on an 85 mm VESA 75 plate, leaning back 10°, bottom edge 86.5 mm above the desk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PC:&lt;/strong&gt; on a tray under its base, like the base gauge: 80 mm wide between the corner pads, with a lip up the front face. The base sits 35 mm above the desk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cables:&lt;/strong&gt; every cable leaves the PC&#39;s rear, so a zone 45 mm deep behind the ports stays clear.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Masses:&lt;/strong&gt; monitor 0.8 kg (typical for a 15.6&amp;quot; portable; not weighed yet), PC 0.28 kg, PLA at 1.24 g/cm³ with 35% of the volume printed solid (from an A1 slice at 2 walls and 15% infill).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These were massing models for choosing a direction: fixed dimensions, no joints and no fasteners. That last point turned out to matter more than I expected.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/04.1-round-1/&quot;&gt;4.1 Round 1: Swoop, Hook and Rails&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/04.2-round-2/&quot;&gt;4.2 Round 2: B1, B2 and B3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/04.3-what-the-checks-missed/&quot;&gt;4.3 What the checks missed&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 3.2 The Beelink base plate</title>
<link>https://adamkdean.com/ai-workstation/03.2-the-beelink-base-plate/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/03.2-the-beelink-base-plate/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;3.2 The Beelink base plate&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/parts/beelink-base-test-plate/renders/side.png&quot; alt=&quot;Profile, front on the left&quot; /&gt;&lt;/p&gt;
&lt;p&gt;This gauge screws to the PC&#39;s two M3 inserts and bends 5 mm up the front face. The bend turns a hole test into a set-back test as well: if the holes are right but the set-back is wrong, the lip either presses on the front face or leaves a gap.&lt;/p&gt;
&lt;h2&gt;Design&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Insert spacing&lt;/td&gt;
&lt;td&gt;34.1 mm&lt;/td&gt;
&lt;td&gt;The photo with the rule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Insert set-back&lt;/td&gt;
&lt;td&gt;5.4 mm&lt;/td&gt;
&lt;td&gt;Front face to the insert centres&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Holes&lt;/td&gt;
&lt;td&gt;3.4 mm&lt;/td&gt;
&lt;td&gt;M3 clearance, ISO 273 medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plate&lt;/td&gt;
&lt;td&gt;80 × 15 × 2 mm&lt;/td&gt;
&lt;td&gt;Clears the front pads by 3.5 mm each side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lip&lt;/td&gt;
&lt;td&gt;5 mm up the front face, 0.2 mm off it&lt;/td&gt;
&lt;td&gt;Stays below the front panel at about 9.4 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Two choices worth noting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sharp inside corner, round outside.&lt;/strong&gt; The case&#39;s front-bottom edge has an unknown radius. A sharp inside corner clears any radius; an inside fillet could hit a smaller one. The outside is a 2 mm arc on the inside corner, so the wall stays 2 mm all the way round.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Little slack on purpose.&lt;/strong&gt; With M3 screws in 3.4 mm holes the plate can shift about 0.2 mm each way. The hand value of 34.6 mm is 0.5 mm off 34.1 mm, more than the holes allow. If the photo value is wrong, the second screw will not start, and the gauge says so.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The check places the gauge on the PC model&#39;s STEP: no overlap, the plate touches the base, the lip stands 0.20 mm off the front face, and each hole centre equals the model&#39;s insert centre.&lt;/p&gt;
&lt;h2&gt;Result&lt;/h2&gt;
&lt;p&gt;Printed in red, sent by the agent, 35 layers, flat on the bed throughout.&lt;/p&gt;
&lt;p&gt;On the PC, the holes were slightly off, both ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Brass showed on the inner side of both holes, so the inserts sit further apart than 34.1 mm, as the hand value of 34.6 mm suggested.&lt;/li&gt;
&lt;li&gt;Brass also showed on the front-edge side, so the inserts probably sit further back than 5.4 mm.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The photo method got close but not close enough for a fit. Callipers will set the final values in the PC model&#39;s &lt;code&gt;Params&lt;/code&gt; sheet, and every holder will take them from there.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 3.1 The VESA 75 frame</title>
<link>https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;3.1 The VESA 75 frame&lt;/h1&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/parts/vesa75-test-plate/renders/top.png&quot; alt=&quot;The frame, top view&quot; /&gt;&lt;/p&gt;
&lt;h2&gt;Plate to frame&lt;/h2&gt;
&lt;p&gt;Version 1 was a solid 87 × 87 × 3 mm plate with a window for the kickstand: 9.84 g and 17.5 minutes. My white filament was running low, and a gauge does not need a solid plate, so version 2 became a frame before it was printed:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Version 1&lt;/th&gt;
&lt;th&gt;Version 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shape&lt;/td&gt;
&lt;td&gt;Solid plate, 87 × 87 × 3 mm, window 52 × 71 mm&lt;/td&gt;
&lt;td&gt;Frame, 85 × 85 × 2 mm: four 5 mm bars on the hole lines, a 10 mm boss round each hole&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Volume&lt;/td&gt;
&lt;td&gt;11 440 mm³&lt;/td&gt;
&lt;td&gt;3 118 mm³&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Slice&lt;/td&gt;
&lt;td&gt;9.84 g, 17 min 36 s&lt;/td&gt;
&lt;td&gt;3.64 g, 8 min 11 s&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The frame keeps every gauge function. Its 70 mm opening shows the whole kickstand recess, and its top edge stops at about 93 mm, below the back step at 96 mm, so it sits on the spine only. The holes are 4.5 mm (ISO 273 medium fit for M4).&lt;/p&gt;
&lt;p&gt;One check detail: the script finds holes by their circular edges, and each boss has a concentric outer circle. Group circles by centre and take the smallest radius, or the check reports the boss as the hole.&lt;/p&gt;
&lt;h2&gt;Printing it&lt;/h2&gt;
&lt;p&gt;This was the first print sent by the agent, and the first attempt was the empty-nozzle job from &lt;a href=&quot;https://adamkdean.com/ai-workstation/01.2-printing-over-the-lan/&quot;&gt;1.2&lt;/a&gt;. After the slicer fix, the second attempt loaded red from the AMS, purged the old white and finished all 10 layers. The first layer held on the textured PEI plate without bed levelling.&lt;/p&gt;
&lt;h2&gt;Results&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;All four holes line up with the inserts.&lt;/li&gt;
&lt;li&gt;The thread is M4 in all four.&lt;/li&gt;
&lt;li&gt;Printed thickness 2.1 mm, for 2.0 mm designed.&lt;/li&gt;
&lt;li&gt;Usable thread depth: an M4 × 8 through the frame clamped snugly only with four washers (0.55 to 0.60 mm each) under its head. That leaves 8 − 2.1 − 2.3 = 3.6 mm of thread. With three washers it would reach about 4.2 mm, and it bottomed out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So the inserts give 3.6 to 4.2 mm of thread, and I design for 3.5 mm. That one number set the screw for every later mount: an M4 × 10 countersunk through a 6.5 mm plate leaves exactly 3.5 mm.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 3 Fit gauges</title>
<link>https://adamkdean.com/ai-workstation/03-fit-gauges/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/03-fit-gauges/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;3 Fit gauges&lt;/h1&gt;
&lt;p&gt;Before designing a mount, I print a thin gauge that carries only the mating features: the hole pattern, a locating edge, the clearances. It goes on the real object and answers one question: do the measured values match the part?&lt;/p&gt;
&lt;p&gt;A gauge costs about 4 g of PLA and 15 minutes on the A1. A wrong mount costs hours and a lot more filament. The gauge also fails cheaply in a way you can see: brass showing at one side of a hole tells you which way the value is off.&lt;/p&gt;
&lt;p&gt;The A1 adds a fixed start sequence of about 6 minutes to every job (heating, AMS load, purge, vibration check, nozzle wipe, homing, prime line). On a gauge that is close to half the job, so small parts that are ready together share a plate.&lt;/p&gt;
&lt;p&gt;Two gauges so far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/&quot;&gt;3.1 The VESA 75 frame&lt;/a&gt;: the monitor&#39;s four M4 inserts. Lined up first time.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/03.2-the-beelink-base-plate/&quot;&gt;3.2 The Beelink base plate&lt;/a&gt;: the PC&#39;s two M3 inserts and their set-back from the front face. Slightly off, which is the point of a gauge.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 2.2 The mini PC</title>
<link>https://adamkdean.com/ai-workstation/02.2-the-mini-pc/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/02.2-the-mini-pc/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;2.2 The mini PC&lt;/h1&gt;
&lt;p&gt;The Beelink Mini S12 Pro is 115 × 102 × 39 mm by the maker&#39;s figures. Every permanent cable (power, two HDMI, RJ45, two USB-A) leaves from the rear. Both sides carry vent slots, as does the top of the rear face. The power button is on the front.&lt;/p&gt;
&lt;p&gt;The base has two brass M3 inserts near the front edge for Beelink&#39;s own VESA bracket, which I do not have. Those inserts are the mounting interface, so their positions matter more than anything else on the unit.&lt;/p&gt;
&lt;h2&gt;The wrong photo&lt;/h2&gt;
&lt;p&gt;The first insert spacing came from a review photo of a base, labelled &amp;quot;Model: EQ&amp;quot;. It matched the S12 Pro&#39;s front, so it was taken as the same unit. At the S12 Pro&#39;s width it gave 29.8 mm between the inserts. A third-party bracket on Printables had 32.0 mm.&lt;/p&gt;
&lt;p&gt;Both were for the Beelink EQ12, a bigger case (about 124 × 113 mm) with the same front layout. Rescaled to the EQ12&#39;s width, the photo gave 32.1 mm, which matches the bracket. The lesson: read the model code on the label and check the case size before you trust a third-party photo.&lt;/p&gt;
&lt;h2&gt;Measuring my own unit&lt;/h2&gt;
&lt;p&gt;I photographed my base square-on with a steel inch rule under the inserts. The script scales from the rule&#39;s 1 and 2 inch lines (21.69 px/mm), not its worn end. The rule hides the lower half of each brass ring, so it takes each centre as the midpoint of the widest visible row.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Insert spacing&lt;/td&gt;
&lt;td&gt;34.1 mm (photo with rule); 34.6 mm by hand&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Front face to insert centres&lt;/td&gt;
&lt;td&gt;5.4 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usable insert depth&lt;/td&gt;
&lt;td&gt;At least 8 mm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Height on the base plate&lt;/td&gt;
&lt;td&gt;38.2 mm (callipers)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Height on the corner pads&lt;/td&gt;
&lt;td&gt;39.6 mm (callipers)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The corner pads&lt;/h2&gt;
&lt;p&gt;The feet are stuck-on triangular pads in shallow pockets, too shallow for a depth rod. The pad measured 2.00 mm. The unit is 39.6 mm on its pads and 38.2 mm with one pad off, so the pads stand 1.4 mm proud and the pockets are 2.00 − 1.4 = 0.6 mm deep.&lt;/p&gt;
&lt;p&gt;That 1.4 mm matters. A bar screwed flat to the inserts must fit between the front pads (about 87 mm along the front edge) or it rocks on them. A 110 mm bracket like the EQ12&#39;s lands on the pads.&lt;/p&gt;
&lt;h2&gt;The model&lt;/h2&gt;
&lt;p&gt;The model carries the case, the front panel, the ports and vents, the four pads in their pockets and the two inserts at (±17.05, −45.6) mm. Its check proves each port and vent opening is open to its depth and closed beyond it, and that nothing overlaps. The next step was to test those insert values on the real unit with a gauge (&lt;a href=&quot;https://adamkdean.com/ai-workstation/03.2-the-beelink-base-plate/&quot;&gt;3.2&lt;/a&gt;).&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 2.1 The monitor</title>
<link>https://adamkdean.com/ai-workstation/02.1-the-monitor/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/02.1-the-monitor/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;2.1 The monitor&lt;/h1&gt;
&lt;p&gt;The monitor&#39;s back has a thin upper panel and a thicker lower spine. The spine carries a flip-out kickstand, two speakers and four brass threaded inserts in a square. Ports are on the left edge, controls on the right.&lt;/p&gt;
&lt;h2&gt;Which VESA pattern?&lt;/h2&gt;
&lt;p&gt;The listing photo of the back, taken near square-on, gave the first layout. The inserts form a square to within 1%. The question is the pitch, which sets the scale of the whole photo:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Assumed pitch&lt;/th&gt;
&lt;th&gt;Body width it implies&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;50 mm&lt;/td&gt;
&lt;td&gt;Narrower than the 344 mm active area of a 15.6&amp;quot; panel&lt;/td&gt;
&lt;td&gt;Impossible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;75 mm&lt;/td&gt;
&lt;td&gt;About 357 mm, just wider than the panel&lt;/td&gt;
&lt;td&gt;Plausible&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;100 mm&lt;/td&gt;
&lt;td&gt;About 476 mm&lt;/td&gt;
&lt;td&gt;Far too wide&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Only one standard pitch gives a plausible body, so the pattern is VESA 75. That means M4 screws.&lt;/p&gt;
&lt;h2&gt;Removing perspective&lt;/h2&gt;
&lt;p&gt;One mean scale read the width about 7 mm short. The body measured 1501 px at its bottom edge and 1465 px at its top, so the photo had perspective.&lt;/p&gt;
&lt;p&gt;The script removes it with a homography fitted to the four body corners, which are far apart, and takes the scale from the 75 mm insert spacing. My first attempt fitted the homography to the four inserts instead. That small pattern extrapolated badly: two corners on one straight edge came out 6 mm apart in height. As a check, the final fit reads the four insert spacings at 74.69 to 75.31 mm.&lt;/p&gt;
&lt;p&gt;Results (about ±2%): body 357.1 × 222.0 mm, lower inserts 13.6 mm above the bottom edge, upper inserts 88.6 mm, the back step at 96.4 mm.&lt;/p&gt;
&lt;h2&gt;What the photo cannot give&lt;/h2&gt;
&lt;p&gt;Thickness. A USB-C shell in an edge photo scales the spine to about 10 mm, but the mini HDMI port gives a different answer, so that value is good to about ±30%. The model carries SpineT = 10 mm and PanelT = 5 mm as guesses until callipers replace them.&lt;/p&gt;
&lt;h2&gt;Measured so far&lt;/h2&gt;
&lt;p&gt;The VESA gauge (&lt;a href=&quot;https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/&quot;&gt;3.1&lt;/a&gt;) confirmed the thread is M4 and the usable depth is 3.6 to 4.2 mm. That is shallow. Every M4 screw in this project is sized for 3.5 mm of thread or less, because a longer screw can press on the electronics behind the insert.&lt;/p&gt;
&lt;p&gt;The model is parametric through its &lt;code&gt;Params&lt;/code&gt; sheet, including an expression that opens the kickstand about its hinge. Its checks probe each insert pocket, each port opening and the kickstand at 0, 30, 60 and 90°.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 2 Modelling what I have</title>
<link>https://adamkdean.com/ai-workstation/02-modelling-what-i-have/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/02-modelling-what-i-have/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;2 Modelling what I have&lt;/h1&gt;
&lt;p&gt;A mount is only as good as the model of the thing it mounts. Neither maker publishes a drawing or CAD for these parts. A web search for the monitor&#39;s SKU found no other listing at all; the chassis is a generic OEM design sold under several brands.&lt;/p&gt;
&lt;p&gt;So each part gets a reference model built from evidence, in this order of trust:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Calliper measurements on the real part.&lt;/li&gt;
&lt;li&gt;Measurements from my own photos with a rule in frame.&lt;/li&gt;
&lt;li&gt;Standards (VESA 75 means M4 on a 75 mm square).&lt;/li&gt;
&lt;li&gt;Listing photos and maker&#39;s figures.&lt;/li&gt;
&lt;li&gt;Guesses, marked as guesses.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each model has a &lt;code&gt;Params&lt;/code&gt; spreadsheet whose Meaning column marks every value as measured, photo, standard or guess. As callipers replace guesses, one cell changes and the model follows.&lt;/p&gt;
&lt;p&gt;Both models share one rule for coordinates: the origin sits on the feature a mount bolts to. For the monitor that is the centre of the VESA pattern on its back face; for the PC, the centre of its underside. A mount drawn in that frame drops onto the model without a move.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/monitor/model/renders/back.png&quot; alt=&quot;The monitor model from behind&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://adamkdean.com/ai-workstation/img/mini-pc/model/renders/isometric-rear.png&quot; alt=&quot;The mini PC model from behind&quot; /&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/02.1-the-monitor/&quot;&gt;2.1 The monitor&lt;/a&gt;: measuring a screen from one listing photo.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://adamkdean.com/ai-workstation/02.2-the-mini-pc/&quot;&gt;2.2 The mini PC&lt;/a&gt;: finding two M3 inserts, and a photo of the wrong model.&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>
<item>
<title>AI workstation: 1.2 Printing over the LAN</title>
<link>https://adamkdean.com/ai-workstation/01.2-printing-over-the-lan/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/01.2-printing-over-the-lan/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;1.2 Printing over the LAN&lt;/h1&gt;
&lt;p&gt;I wanted the agent to slice and print without me at Bambu Studio. That took three parts: a slicing script, a printer MCP server, and network access.&lt;/p&gt;
&lt;h2&gt;Slicing from a script&lt;/h2&gt;
&lt;p&gt;Bambu Studio has a command line, but it does not resolve the &lt;code&gt;inherits&lt;/code&gt; chains in Bambu&#39;s system presets. Version 02.06 crashed. Version 02.08 exits 0 and slices with the wrong settings and no warning: 20% infill instead of 15%, 0 g of filament, the Cool Plate and no time estimate.&lt;/p&gt;
&lt;p&gt;The fix is a script (&lt;code&gt;bambu_slice.py&lt;/code&gt;, in a Bambu Lab skill I had to put together) that merges each chain into one flat preset first. It gives the same result on both versions: 17 min 36 s and 9.84 g for the first test plate.&lt;/p&gt;
&lt;h2&gt;The empty-nozzle print&lt;/h2&gt;
&lt;p&gt;The first agent print ran the whole job with nothing coming out of the nozzle. The printer reported no error.&lt;/p&gt;
&lt;p&gt;The cause: Bambu Studio 02.08 keeps the A1&#39;s start G-code in separate template files, not in the preset chain. The merged preset fell back to the generic start G-code, which never loads filament from the AMS. The status showed &lt;code&gt;tray_now&lt;/code&gt; 255 (no filament in the toolhead) all the way through.&lt;/p&gt;
&lt;p&gt;The script now merges the template files too, and it stops if the G-code has no filament load command. A slice whose total time is only seconds above its model time is the warning sign: the real A1 start sequence adds about 6 minutes.&lt;/p&gt;
&lt;h2&gt;The printer MCP and the network&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;bambu-printer-mcp&lt;/code&gt; talks to the A1 over local MQTT. It reads the access code from a CLI password manager at launch, so no config file holds a secret. The read-only tools run freely; every tool that acts on the printer asks first.&lt;/p&gt;
&lt;p&gt;Printing over the LAN needed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;LAN Only Mode and Developer Mode on the printer (firmware 01.08.01.00). In cloud mode it rejected the job with HMS 0500-0500-0001-0007.&lt;/li&gt;
&lt;li&gt;Firewall rules from my network to the printer&#39;s isolated VLAN: MQTT on 8883, FTPS on 990 plus passive data ports 50000 to 50100, and the camera on 6000. Port 990 alone carries only commands, so uploads failed until the data ports opened.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Two more lessons. A stopped job leaves the printer in &lt;code&gt;FAILED&lt;/code&gt;, and only a restart clears it. The MCP turns on bed levelling, flow calibration and vibration calibration by default; on a 10-minute gauge they can take as long as the print. I now send prints with flow and vibration calibration off.&lt;/p&gt;
&lt;h2&gt;The checklist&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Slice, then check the time, weight and plate in &lt;code&gt;slice.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Check the printer is &lt;code&gt;IDLE&lt;/code&gt; or &lt;code&gt;FINISH&lt;/code&gt; with no HMS errors.&lt;/li&gt;
&lt;li&gt;Agree the AMS slot, then send.&lt;/li&gt;
&lt;li&gt;Once printing starts, &lt;code&gt;tray_now&lt;/code&gt; must show the slot. 255 means an empty nozzle.&lt;/li&gt;
&lt;li&gt;Confirm &lt;code&gt;FINISH&lt;/code&gt; with all layers done, and record the result.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The second agent print finished all 10 layers in red. That was the VESA 75 gauge in &lt;a href=&quot;https://adamkdean.com/ai-workstation/03.1-the-vesa-75-frame/&quot;&gt;3.1&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 1.1 FreeCAD over MCP</title>
<link>https://adamkdean.com/ai-workstation/01.1-freecad-over-mcp/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/01.1-freecad-over-mcp/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;1.1 FreeCAD over MCP&lt;/h1&gt;
&lt;p&gt;The CAD tool is FreeCAD 1.1.4 with the FreeCADMCP add-on. The call chain is: MCP tool, then an external Python server, then an XML-RPC bridge inside FreeCAD on &lt;code&gt;127.0.0.1:9875&lt;/code&gt;, then FreeCAD&#39;s GUI thread.&lt;/p&gt;
&lt;h2&gt;Starting the bridge&lt;/h2&gt;
&lt;p&gt;The bridge does not start with FreeCAD, and the MCP tools still load when it is off. Every call then fails with a generic error. Two checks save time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;lsof -nP -iTCP:9875&lt;/code&gt; shows whether anything listens.&lt;/li&gt;
&lt;li&gt;In the FreeCAD Python console, &lt;code&gt;Gui.runCommand(&#39;Start_RPC_Server&#39;, 0)&lt;/code&gt; starts it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The console echoes each menu click as a commented line. Remove the &lt;code&gt;# &lt;/code&gt; and the line runs. That is a quick way to find the Python call behind any menu item.&lt;/p&gt;
&lt;h2&gt;Scripts, not clicks&lt;/h2&gt;
&lt;p&gt;Each part lives in its own directory with a &lt;code&gt;build.py&lt;/code&gt; and a &lt;code&gt;check.py&lt;/code&gt;. They run inside FreeCAD through &lt;code&gt;execute_code&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;exec(compile(open(p).read(), p, &amp;quot;exec&amp;quot;), {&amp;quot;__file__&amp;quot;: p, &amp;quot;__name__&amp;quot;: &amp;quot;__main__&amp;quot;})
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The build script makes the model from named dimensions, saves it and exports STEP and STL. The check script proves the model: valid solids, exact bounds, hole positions, overlap with mating parts (as common volumes), and STL closure. It writes &lt;code&gt;checks.json&lt;/code&gt; and the renders.&lt;/p&gt;
&lt;h2&gt;Things that caught us out&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;optimalBoundingBox()&lt;/code&gt; reads the tessellation by default and gave a 3 mm plate as 3.033 mm. Use &lt;code&gt;optimalBoundingBox(False, False)&lt;/code&gt; for exact bounds.&lt;/li&gt;
&lt;li&gt;A render straight after &lt;code&gt;viewTop()&lt;/code&gt; caught the camera mid-animation. Turn animation off around renders.&lt;/li&gt;
&lt;li&gt;A reopened file takes its document name from the file name, not the name it was built with. Find documents by &lt;code&gt;FileName&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A boolean &lt;code&gt;common&lt;/code&gt; of a solid with a compound returned a null shape. Sum the common volumes pair by pair.&lt;/li&gt;
&lt;li&gt;Two agent sessions can share one FreeCAD, but they share the active document and the view. One session owns the window; the other works in a hidden temporary document.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Parametric, and proven&lt;/h2&gt;
&lt;p&gt;Binding a feature to a spreadsheet cell is easy. Proving that the binding works is the step people skip. Every &lt;code&gt;check.py&lt;/code&gt; changes one parameter, recomputes, checks that the volume changes by the expected amount, and then restores the value.&lt;/p&gt;
</description>
</item>
<item>
<title>AI workstation: 1 The project</title>
<link>https://adamkdean.com/ai-workstation/01-the-project/</link>
<guid isPermaLink="true">https://adamkdean.com/ai-workstation/01-the-project/</guid>
<pubDate>Sun, 11 Oct 2026 19:20:08 +0000</pubDate>
<description>&lt;h1&gt;1 The project&lt;/h1&gt;
&lt;p&gt;I want a small, self-contained AI workstation on my desk: a screen, a computer and a webcam that act as one unit. I already had most of the hardware, so the job is to join it with printed parts.&lt;/p&gt;
&lt;h2&gt;The parts&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Part&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;th&gt;Why this one&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Screen&lt;/td&gt;
&lt;td&gt;JEEJIA 15.6&amp;quot; portable monitor, 1920 × 1080 IPS, USB-C or mini HDMI, 5 V 3 A&lt;/td&gt;
&lt;td&gt;Thin, light and powered from one cable. It has VESA 75 inserts on the back&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Computer&lt;/td&gt;
&lt;td&gt;Beelink Mini S12 Pro, Intel N100, 16 GB RAM, 500 GB SSD, 115 × 102 × 39 mm, 280 g&lt;/td&gt;
&lt;td&gt;A spare unit from my home lab. Small, quiet and low power&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Webcam&lt;/td&gt;
&lt;td&gt;Not chosen yet&lt;/td&gt;
&lt;td&gt;Later&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Printer&lt;/td&gt;
&lt;td&gt;Bambu Lab A1, 0.4 mm nozzle, Bambu PLA Basic, textured PEI plate&lt;/td&gt;
&lt;td&gt;What I have&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;The constraints&lt;/h2&gt;
&lt;p&gt;Every printed part has to print on the A1. That sets hard limits before any design starts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Build volume 256 × 256 × 256 mm. Anything bigger is split.&lt;/li&gt;
&lt;li&gt;Bed up to 100 °C, hot end up to 300 °C.&lt;/li&gt;
&lt;li&gt;PLA, PETG, TPU and PVA only. The A1 is an open-frame printer, so ABS, ASA, PC and PA are out.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PLA is the default material. It is stiff and easy to print, but it creeps under a constant load and softens near 60 °C. Both facts come back later.&lt;/p&gt;
&lt;h2&gt;The method&lt;/h2&gt;
&lt;p&gt;This is also a test of AI-assisted mechanical design. I drive the work in plain language. Claude Code builds the parts in FreeCAD through an MCP server, checks them with scripts, slices them and sends them to the printer. I measure the real parts, make the decisions and say what is wrong.&lt;/p&gt;
&lt;p&gt;The rules I set for the repo:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every part is built by a &lt;code&gt;build.py&lt;/code&gt; and verified by a &lt;code&gt;check.py&lt;/code&gt;, so the repo holds exactly what ran.&lt;/li&gt;
&lt;li&gt;Every model is parametric: a &lt;code&gt;Params&lt;/code&gt; spreadsheet drives the features, so a measured correction changes one value.&lt;/li&gt;
&lt;li&gt;Print a cheap gauge before any real part.&lt;/li&gt;
&lt;li&gt;Record every measurement, decision and lesson as it happens.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The next two posts set up the toolchain: &lt;a href=&quot;https://adamkdean.com/ai-workstation/01.1-freecad-over-mcp/&quot;&gt;1.1 FreeCAD over MCP&lt;/a&gt; and &lt;a href=&quot;https://adamkdean.com/ai-workstation/01.2-printing-over-the-lan/&quot;&gt;1.2 Printing over the LAN&lt;/a&gt;.&lt;/p&gt;
</description>
</item>
</channel>
</rss>
