{"id":618,"date":"2026-10-25T19:40:23","date_gmt":"2026-10-25T18:40:23","guid":{"rendered":"https:\/\/www.fabidouille.com\/?p=618"},"modified":"2026-10-25T19:58:35","modified_gmt":"2026-10-25T18:58:35","slug":"souffler-chaud-froid","status":"publish","type":"post","link":"https:\/\/www.fabidouille.com\/?p=618","title":{"rendered":"Souffler le Chaud et le Froid: my 3D-printed Peltier frigo, designed with AI agents (alpha)"},"content":{"rendered":"<p>60 hours of printing. About 850 g of PETG. Eight tiny brass inserts. 9 \u00b0C on the multimeter after 40 minutes. And the first can is not cold yet.<\/p>\n<p>This is my 3D-printed frigo (mini fridge) for one can of soda. It is an alpha of a prototype: everything is printed and assembled, and the measurements are only starting. So this post is about how it was made, and how much of it was done by AI agents. A lot, and not without mistakes.<\/p>\n<p>In French, \u00ab\u00a0souffler le chaud et le froid\u00a0\u00bb (\u00ab\u00a0blow hot and cold\u00a0\u00bb) means to keep changing your mind. My box does it for real: hot air goes up, cold air goes down.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/alpha-40min.jpg\" alt=\"The assembled purple box with its white roof and the Peltier kit with a big fan on top, a power supply, a multimeter and a thin white wire running to the box, on a wooden floor\"\/><figcaption>The alpha, about 40 minutes after power on. The multimeter reads 9 \u00b0C. The room is at 21.7 \u00b0C.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">What is inside<\/h2>\n<ul class=\"wp-block-list\">\n<li>A \u00ab\u00a050 W\u00a0\u00bb Peltier kit (TEC1-12706, 12 V): big heat sink and fan on the hot side, a small finned block and a 40 mm fan on the cold side. Already assembled and sealed with silicone: no disassembly.<\/li>\n<li>A 360 W 12 V power supply.<\/li>\n<li>A box that I print, with the kit as its roof. The hot side stays outside and blows up. The cold block goes inside, and its fan blows cold air down on the can. The can never touches the Peltier.<\/li>\n<\/ul>\n<p>That last idea was mine. It matters in a minute.<\/p>\n<h2 class=\"wp-block-heading\">Un froid de canette<\/h2>\n<p>I started with a chat with Gemini. Its two answers did not agree: in open air the module was \u00ab\u00a0at 100 %\u00a0\u00bb, in a closed box it reached \u00ab\u00a02 \u00b0C at 30 \u00b0C\u00a0\u00bb. It also assumed a power that nobody had measured.<\/p>\n<p>So I gave the chat and my photos to Claude Code, and it wrote its own model: the Peltier equations, calibrated on my only three numbers (hot sink 34 \u00b0C, cold sink 12 \u00b0C, room 21 \u00b0C). First answer: an empty, insulated box can get down to a few degrees, even at 30 \u00b0C. But the can is the problem, not the Peltier. A 33 cl can gives its heat to still air very slowly.<\/p>\n<p>The agent had assumed that the can touches a cold metal cradle. I said no: air only. It ran the model again:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/model.png\" alt=\"Terminal output of the thermal model: empty-box air temperature at 30 degrees ambient, and the time to cool one can to 20, 15 and 10 degrees, for a good and a weak module\"\/><figcaption>The model, real output. One can, 30 \u00b0C room, two cases: a good module and a weak one.<\/figcaption><\/figure>\n<p>One can from 30 \u00b0C to 15 \u00b0C: 30 to 51 minutes with a good module, 46 to 78 with a weak one. Later reviews said that even this is optimistic, and that 15 \u00b0C is \u00ab\u00a0a coin flip\u00a0\u00bb. We will see.<\/p>\n<h2 class=\"wp-block-heading\">A ruler, a phone and a 10-minute print<\/h2>\n<p>I could not open the kit, so the agent measured it from my photos, with a ruler held next to each part. Result: within 3 to 5 mm (the ruler was not in the same plane as the part, so the photos lie a little).<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/ruler.jpg\" alt=\"Two photos with a ruler: the cold block and its small fan seen from the side, and the power supply seen from above\"\/><figcaption>Measuring without a caliper: a ruler, a phone, and the agent doing the maths.<\/figcaption><\/figure>\n<p>Then a cheap test: a 10-minute printed \u00ab\u00a0gauge\u00a0\u00bb to check that the cold block goes through the roof window. It did, but not the aluminium plate behind it (60 mm, for a 50 mm window). The window became 66 x 52 mm.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/gauge.jpg\" alt=\"A white printed frame on the Peltier kit, and a ruler measuring the cold plate and fan\"\/><figcaption>The gauge. 10 minutes of plastic saved me a roof.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Design in code<\/h2>\n<p>The whole design is one OpenSCAD file: change a number, every part follows.<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>Roof<\/strong>: a plate with the window and four M3 heat-set inserts.<\/li>\n<li><strong>Body<\/strong>: a double-wall box. The inner wall is watertight (condensation), the outer wall is pretty, and between them is a 20 mm cavity for four layers of aluminium bubble foil, hidden from view. The agent estimated the heat leak at 0.2 W\/K.<\/li>\n<li><strong>Collar and baffle<\/strong>: the collar holds a pipe and has windows where the cold air comes back up. The baffle closes the gap around the fan, so the air has to go down.<\/li>\n<\/ul>\n<p>Before every print, the agent ran a preflight on my home server: a support check, a headless slicer, about 30 checks.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/scad.jpg\" alt=\"Two OpenSCAD previews: the roof with the kit window above a can, and a cut-away of the box\"\/><figcaption>The first OpenSCAD previews. Not pretty, but they never lie.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Sang-froid<\/h2>\n<p>The first body was white PLA+, with a hollow printed tube for the air. It was thin. Too thin. And the tube grew a web of strings inside, so many that I could not clean it without breaking it.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/first-attempt.jpg\" alt=\"Three photos of the first attempt in white plastic: a thin double-wall box, a printed tube seen from above full of strings, and a ball of white strings pulled out of it\"\/><figcaption>Left: the first body, thin and fragile. Middle and right: the tube, and what came out of it.<\/figcaption><\/figure>\n<p>Before printing more, I asked two other agents (Claude Sonnet) for a counter-review: one on the strength, one as devil&rsquo;s advocate on the whole design. They found:<\/p>\n<ul class=\"wp-block-list\">\n<li><strong>An air short circuit<\/strong>: a free gap of 2,700 mm\u00b2 let the cold air go back up without passing the can. The fix is a flat ring on the fan, a baffle. In French, \u00ab\u00a0chicane\u00a0\u00bb means a baffle, and also a quarrel. Between the air and the can, there was one.<\/li>\n<li><strong>Windows too small<\/strong>: 461 mm\u00b2 for a fan that needs about 1,000.<\/li>\n<li><strong>A wrong gap<\/strong> between the can and the fan: 17 mm, not 12.<\/li>\n<li><strong>A thermal estimate too optimistic<\/strong>: my kit looks like a weak module.<\/li>\n<\/ul>\n<p>My brief for the next version was short: strong, and I do not care how long it takes. So: PETG (240 \u00b0C, bed at 85 \u00b0C), walls of 3 mm, and no printed tube. I had a rigid pipe at home (76 mm inside, 80 mm outside). I cut it to 131 mm, within 1 mm, and the agent designed a short printed collar to hold it.<\/p>\n<h2 class=\"wp-block-heading\">60 hours<\/h2>\n<p>The body took 3,631 minutes on my Artillery Sidewinder X2: about 60 hours. During a long night print, the agent checked the camera and the printer every 16 minutes, looking for lifted corners and strings.<\/p>\n<p>One bug almost cost me those 60 hours. The first PETG collar and baffle weighed 24 g, and they should have weighed 65 to 70 g. The slicer had silently ignored my filament diameter (1.75 mm) and computed for 2.85 mm: the extrusion was only 38 % of what it should be. A thin wall at 38 % does not look wrong. It is just weak.<\/p>\n<p>We found it by weighing a test cube (2.3 g predicted, 6.1 g expected), fixed the command, and printed a new cube: 6 g. Then the body. The rule is now written in the repo: compare the predicted mass with the real volume before every big print.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/purple-parts.jpg\" alt=\"The purple PETG box with its aluminium foil inside, and two printed rings on the floor\"\/><figcaption>The body, in PETG this time, with the foil already in the cavity. The two rings are the collar and the baffle.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Chaud devant<\/h2>\n<p>Some time later I came back to the parts and had forgotten how they fit together. I asked for \u00ab\u00a0a simple diagram\u00a0\u00bb. It took three tries.<\/p>\n<ol class=\"wp-block-list\">\n<li>A text answer and a French diagram. I understood nothing.<\/li>\n<li>Ten flat pages in English, one per step. \u00ab\u00a0Really not clear.\u00a0\u00bb<\/li>\n<li>My idea: \u00ab\u00a03D renders with local tools, something more realistic.\u00a0\u00bb The agent exported each part from the OpenSCAD file, built one scene per step, and rendered them offline with f3d. The colours come from my photos. The labels are piece names, and nothing else.<\/li>\n<\/ol>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/manual-before-after.jpg\" alt=\"Step 6 of the manual twice: on the left a flat schematic page, on the right a 3D render of the box cut in half with labelled parts\"\/><figcaption>Step 6, attempt 2 and attempt 3.<\/figcaption><\/figure>\n<p>Then I asked which inserts and screws I need at each step, and what a bolt is called. (A screw goes into an insert. A bolt goes through and needs a nut. Here: only screws, washers and inserts.) The agent added a hardware page with a photo of my screw box.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/manual-hardware.jpg\" alt=\"A manual page called Hardware: a photo of a box of screws, and 3D drawings of the two inserts, the M3 screws and the washer, with their sizes\"\/><figcaption>The hardware page: M3x8 screws, M3x12 screws with washers, and two sizes of inserts.<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/manual-steps.jpg\" alt=\"Two manual pages: step 3, the tube going into the sleeve of the purple collar, and step 7, the kit going through the roof, with labelled parts\"\/><figcaption>Two more steps. The whole manual rebuilds in 25 seconds.<\/figcaption><\/figure>\n<p>Meanwhile, real photos of the assembly:<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/inserts.jpg\" alt=\"Left: the white roof with four brass inserts and spare inserts on the table. Right: the purple box seen from above with aluminium foil in the cavity\"\/><figcaption>Left: heat-set inserts in the roof. Right: aluminium foil in the cavity.<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/hardware.jpg\" alt=\"A transparent box of 1440 screws, nuts and washers with a yellow label\"\/><figcaption>1,440 pieces. I need 12 of them.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Where it stands<\/h2>\n<p>The box is assembled: inserts in the roof and in the body, foil in the cavity, the kit on the roof, and a power supply with a multimeter next to it.<\/p>\n<p>First sign of life: about 40 minutes after power on, the multimeter reads 9 \u00b0C, in a room at 21.7 \u00b0C (my baseline). My model says an empty box should end below 0 \u00b0C in a 21 \u00b0C room. The real box has a bare roof and floor, and it is only 40 minutes in, so we will see where it settles. No can yet.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.fabidouille.com\/wp-content\/uploads\/2026\/10\/powered.jpg\" alt=\"Left: the Peltier kit with its big fan on the white roof, resting on the white pipe. Right: the kit on its roof, a power supply, a multimeter and cables on the floor\"\/><figcaption>Alpha, in the workshop (my floor).<\/figcaption><\/figure>\n<p>Still to do:<\/p>\n<ul class=\"wp-block-list\">\n<li>measure the real current (weak module or good one?)<\/li>\n<li>a real test with a real can<\/li>\n<li>a thermal fuse on the hot sink, in case its fan stops<\/li>\n<li>insulate the roof and the floor, and seal with silicone<\/li>\n<\/ul>\n<p>The result, good or bad, may become a second post.<\/p>\n<h2 class=\"wp-block-heading\">How AI was used<\/h2>\n<p>Almost all the engineering was done with AI agents (Claude Code), on my desktop and my home server.<\/p>\n<p><strong>Who did what<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li><strong>The agent<\/strong>: re-checked the Gemini maths, wrote the thermal model and the simulations, took dimensions from my photos, wrote the OpenSCAD design, sliced, launched and watched the prints, and made the manual.<\/li>\n<li><strong>Two more agents<\/strong>: the counter-reviews.<\/li>\n<li><strong>A notes file<\/strong>: every mistake became a written rule that the next agent reads first.<\/li>\n<\/ul>\n<p><strong>What the agents got wrong<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li>The first model: the can on a cold cradle, and a module as good as its datasheet.<\/li>\n<li>A cold-air window at the level of the fan, so the air left at once. Windows too small. A plate that did not fit the gauge.<\/li>\n<li>The 38 % under-extrusion.<\/li>\n<\/ul>\n<p>Most of these were caught by a second agent, a test print, a scale or me.<\/p>\n<p><strong>What I did<\/strong><\/p>\n<ul class=\"wp-block-list\">\n<li>The architecture: hot up, cold down.<\/li>\n<li>Photos, rulers, the pipe and its cut at 131 mm.<\/li>\n<li>\u00ab\u00a0Strong, not fast.\u00a0\u00bb PETG, and \u00ab\u00a0go\u00a0\u00bb on every print.<\/li>\n<li>The glue, the inserts, the screws, the assembly.<\/li>\n<li>Saying \u00ab\u00a0I don&rsquo;t understand that\u00a0\u00bb until the manual became real 3D renders.<\/li>\n<\/ul>\n<p>Note: I don&rsquo;t have much time for the blog these days, so this post was written with the help of an AI, from my own notes, then read and corrected by me. Better to share the content this way than not at all.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A 3D-printed Peltier mini fridge for one can, with AI agents for the maths, the design, the mistakes and a 3D assembly manual. 60 hours of PETG. Alpha of a prototype.<\/p>\n","protected":false},"author":0,"featured_media":619,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-618","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-non-classe"],"_links":{"self":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/618","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=618"}],"version-history":[{"count":8,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/618\/revisions"}],"predecessor-version":[{"id":632,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/posts\/618\/revisions\/632"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=\/wp\/v2\/media\/619"}],"wp:attachment":[{"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=618"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=618"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fabidouille.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=618"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}