Argon40 Fan Hat for Raspberry Pi

Hey guys, for anyone needing some easy cooling for their Raspberry Pi’s, I stumbled across a smart fan hat. It’s very basic but also very inexpensive.

It’s called the Argon Fan Hat for Raspberry Pi 4, Raspberry Pi 3B, and Raspberry Pi 3B+. They are around $10. Amazon has them.

The fan speed is automatically controlled by CPU temperature and you can program your own curve if you want. It works a trick. There are also 4 LED indicators to tell how fast the fan is running and a pushbutton that allows soft shutdown, forced shutdown, and reboot. The hat has GPIO sockets on both sides if anyone is using GPIO pins.

The product photos show a ball bearing fan but mine came with sleeve bearings. There is some fan noise but not too bad. I’m swapping the stock 40mm x 40mm x 7mm 5v fan for a high zoot Noctua for longer life. The Noctua is 3mm taller though. I used a couple of M2.5 x 10 standoffs to enforce the fan to heat sink clearance and removed one of the fan mounting screw/nut assemblies to let the hat sit lower and closer to the heat sink. Only the board is supplied. You’ll need to supply any additional hardware like standoffs.

Software setup is trivially easy with a command line install that downloads and executes a shell script. It should be noted that the script uses sudo to install things and start a daemon so there is some security risk to this. Without installing the software, the fan runs at 50% speed and the button has no effect.

If anyone is curious about the script:

curl https://download.argon40.com/argon1.sh > argon1.sh

That will download the script to your current directory. If you put the URL in a browser, that will let you see it too. Use wget, etc. The command you use when you actually install it is:

curl https://download.argon40.com/argon1.sh | bash

Dropped CPU temperature by over 15C in my installation.

The contents of my config file (the $ lines are command/prompt, also had to remove the comment pound signs. They were messing up formatting here but are in the actual config file):

$ cat /etc/argononed.conf

Argon One Fan Speed Configuration

Min Temp=Fan Speed
40=25
45=50
50=75
55=100
$

5 Likes

Thanks for taking the time to post information and the scripts. I picked one up after seeing your post and received it this morning. Nice looking piece! I’ll dig into it soon. My only gripe thus far is they didn’t include stand-offs, but it’s not a big deal.

On the same token, you cost me $25 in toys since I ran across a new case the same company offers that I couldn’t pass up (dude with the most toys wins right?):

https://www.amazon.com/gp/product/B07WMG27T7

I like the fact the cover slides back and have access to the GPIO and other ports as well and retains passive cooling like the Flirc/Kodi case I like so much.

ADD/EDIT: Pleasant surprise! The fan works with the case, guess they were made to work together and easy enough to pop the fan hat off if needed for a project. After installing the script, the fan barely kicks on and it’s staying as cool as a cucumber due to the passive cooling of the case itself. So far I like the setup a lot!

EDIT #2: Ran some sysbench load tests - using pre-canned script (above) with the hat installed per the pictures (with cover on), a 10-minute sysbench run yielded max CPU temp of 62c. Ambient temp in this hellish room is currently 28c. The fan barely kicked on.

Now, I modded the curve and ran with cover off using the following config parms, same test yielded max CPU temp of 52c under full load:
40=10
50=25
60=55
65=100

I cranked the Pi4 up to 2.1Ghz, ran the same test as above, peak CPU temp hit 58c. Fan never spun above 25%. :+1:
With cover on, max temp seen @ 2.1Ghz = 66c

1 Like

Fans (and a heatsink) are great for keeping RPIs cool enough for airspys.

1 Like

@Nitr0 - nice find! That’s a cool case! Is there a lid with a fan port? I bet one would be easy to 3D print If not and best of both worlds!

I don’t think so, but it would definitely be more efficient if the lid had more ventilation. There are vents on the bottom of the board but I dont think it’s enough to let it breathe properly. That said, it’s still a pretty efficient case on it’s own and it’s quiet as well when the lid is on so it’s neat to have the option. I have a pile of cases for these boards (I’m a useless junk collector evidently) and I think this is one of the better ones I’ve seen to date, although it isn’t perfect obviously.

1 Like

For my PiAware setup I swapped the stock fan for a Noctua fan (https://www.amazon.com/dp/B00NEMGCIA). Its a little thicker but has a high tech bearing and should give much longer service life. Had to swap the stock screws for M3x12, though, and for the PiAware setup leave one out to clear the CPU heatsink on a Pi 3B+.

I didn’t have any mating connectors to crimp onto the Noctua leads and didn’t want to splice the connector from the stock fan. I just soldered the Noctua leads directly to the back of the stock fan wire connector and protected with a dab of silicone. Works great and super quiet at half speed. The fan is a 3-wire with a yellow tach lead too. I cut the yellow lead off at the Noctua hub. It’s not needed. The Noctua also pulls less than half the current of the stock fan.

I’m building a Pi4 out for another project but it runs the CPU pretty hard and also needs cooling. I’ve been using the ribbed cases below (Amazon.com) and am using the Argon40 there too. I’ve been using one of the 5V Noctua fans there but it’s running at full speed and a bit annoying. This Argon40 hat needs a stackable header extension to fit (Amazon.com) but should make for a much more sound friendly setup. Have to work up a 3D printed case to hold it though.

1 Like

Thank you for this post! I ordered a fan and one of the power supplies they sell.

The Pimoroni fan shim I have has been having some reliability issues with the fan. a nice proper 40mm fan will last MUCH longer.

1 Like

Oh that’s interesting, I have one of those - If the fan needs swapping, I’d rather do it before it hits production.

I’ve been on the lookout for cooling solutions for the Pi and this Argon hat is the hands down best I’ve found - with the caveat of swapping out the fan. The tiny and thin sleeve bearing fans don’t seem to last in my experience and don’t move much air when they do work.

Another tell is probably the current rating on the fans. The stock fans that came with my Argon fan hats are rated at 0.12A while the Noctua is rated at 0.05A. Either the stock fan is moving a lot more air (don’t think so), or there is a fair amount more stiction in the bearing. Not that the current rating predicts failure, but I think it gives an insight into construction. The stock Argon fans also just seemed a bit “stiff” to me right out of the bag. That’s been pretty common for me with the small and thin fans. They might loosen up with breaking in, but tiny fans just seem to be problematic.

I have another 5v 40mm Noctua that’s been running great with quite a few hours on it at full speed and still turns easy. I’m at least hopeful that on the fan hat it may last for years. Time will tell.

I have mine (currently) in my attic next to a gable vent, but it can get above 120f up there.

The fan that came with it stopped spinning. I could tap it and it would go again, but it would stop again sometime later. I found replacement ones on aliexpress or similar site and bought like 3 more. But the replacement did the same thing.

I’m going to be moving the pi into my conditioned space soon, but upgrading to a much more reliable 40mm fan would be the way to go.

I have a bunch of RPIs. Mostly RPI4s and a few RPI3s that I haven’t replaced with RPI4s because I have been busy.
I like to keep them cool (with a fan, of course) but it is hard if they have HATs. I have several GPS/GNSS has (uputronics, Ardusimple and RasPiGNSS) and AIS hats.
I ordered several of these stacking header kits from Uputronics last week

They are designed to work with the stock POE hats so may not work with other setups. I power my RPIs by POE so it just make things easier to use one device for POE and cooling.

Some temperature data since this is a thread about cooling the Pi. :wink:

I wrote a bash script to grab timestamped Pi CPU temperature every 10 seconds and plotted it with the ambient air temperature as reported by the National Weather Service. I didn’t have temperature sensors in the box or outside. The box is hit by afternoon sun and has vents but no fan to circulate air with the outside.

The setpoints for the fan are 40C/25%, 45C/50%, 50C/75%, and 55C/100%.

The graph is interesting for the “breathing” of the fan where temperatures cycle about 8’C. I am going to try a replacing the 40C/25% with something like 10% so the cooling isn’t as harsh. The daemon that runs the fan and watches the buttons is a python script (/usr/bin/argononed.py) and might be able to be made a bit smarter or just update a bit faster. I don’t know that those repeated thermal cycles are damaging, but I can’t see them helping anything.

Running the fan softer at the first setpoint may help reduce those temperature cycles. I’ll edit when that dataset is done. It’ll be a day, though. Also going to mount a sun shield to minimize solar heating of the box.

If anyone is interested, here is how I grabbed the temperatures. It’s a really dumb script that increments through a little more than 24 hours worth of data collection and saves the data to “tempfile”.

#! /bin/bash
i=“0”
while [ $i -lt 9600 ]
do
A=`date +%X`
B=`/opt/vc/bin/vcgencmd measure_temp`
echo $A $B >> tempfile
sleep 10
i=$[$i+1]
done

It might be worth running a stress test when the ambient temperature is high and see what cooling capacity the fan has and work back from there. I’d be tempted to raise the lowest temperature the fan switches on at a bit - the pi would be quite happy sitting at 50C and it would reduce wear on the fan considerably.

Can you set any hysteresis in the fan control? That would help with rapid cycling.

Hi @caius, I definitely agree about minimizing wear on the fan. The way the code works stock, it It looks like it sleeps for 30 seconds between temperature tests so I’m trying with a 1 second sleep instead to see if that might tighten up the control. (It definitely does) That’s really their hysteresis - having a 30 second sleep in the code, at least that I see.

The other thing is I only muddle at python, so am not certain but I’m not finding any reasonable limit to the number of temperature/fan speed pairs you can have. That might be the easy way to input a sharper curve that isn’t so steppy with all the thermal cycling on the chip/board. And I have to say I don’t know if that is much ado about nothing. I know CPU and heat loads change all the time as a system runs.

But if it’s easy to tighten up how it runs with a shorter update cycle and more points, it might be easy to keep the system happy and minimize stress and fan hours.

Argononed is pretty lightweight. I shortened time.sleep() down to 1 second and that smoothed out the temperature cycles. I checked top and everything is dwarfed by dump-1090-fa and fa-mlat-client. 5 minute load average is 0.25-0.26 with python3 (where I think argononed resides but maybe other stuff is using it too) is less than 1% CPU.

I updated the config file to have 9 pairs - 40C through 48C, from 10% to 100% fan speed.

40=10
41=15
42=20
43=25
44=35
45=50
46=65
47=80
48=100

Temperatures are much steadier now. Next step is to give it better ventilation and some shade.

Here’s the edit I made to the /usr/bin/argononed.py file. I just changed time.sleep(30) to time.sleep(1). It’s near the end and there are two locations. Easier to post a screen grab…

1 Like

Just an update to close this out. Cutting back the two sleeps in the daemon as noted above definitely makes a difference and reduces the temperature oscillations. The graphs now trace lines with hair from just the error in the Pi temperature measurement. I also think the stock 30 seconds is way too long. I’m running 1 second now.

The argononed.conf does seem to let you input a lot of points. The Noctua fan starts and runs well even at a setting of 1 so it can soft start nicely.

I’m not sure why this happens or if it’s just my desktop monitor, but it would go black for a second or so whenever the fan would start from a dead stop. Speed steps didn’t seem to phase it, though. I’m running these either headless so it doesn’t matter, or on a different monitor and no issues at all. I suspect it’s my desktop monitor being sensitive to something but don’t know what. I mention it in case anyone else has the issue. The cure for me was to just set a low first temperature so the fan would spin up at boot and everything after that was fine. It’s a fairly old monitor that was doing this. Newer monitors I tried didn’t show the issue.

As to max cooling, I had my PiAware Pi on the roof in a box and the fan went 100% at 48C (how I configured it). It never climbed above 50C even with outside air temps as high as 88F with sun. I don’t know air temp in the box but am certain it was higher. I finally just punted, bought a good, long piece of coax and brought the box into the garage from outside to keep from running the SDR and Pi so hot. It still carries the Argon40 fan hat on a Pi3B+ and works great.

I worked up a 3D printed box for a Pi 4B that I use for other stuff that uses the nice ribbed aluminum heat sink cases and the Argon40 hat. Stl files available here: Raspberry Pi 4 Heatsink and Argon40 Fan Case by SF3DPrint - Thingiverse

So all in all, I’m very pleased with these fan hats. No more fans blasting full speed when not needed. Put in some extra temperature/speed pairs in the config file and you don’t even hear the speed changes. It just ramps up and down as needed.

2 Likes

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.