For a project that needs a cooling fan e.g. an enclosed Raspberry Pi4 can require cooling - a small custom printed circuit board (PCB) has been designed with a PNP transistor as a switch that can switch the fan on/off by the setting of a GPIO pin HIGH/LOW.
Using this PCB, populated with its few simple components, a cooling requirement can be controlled by a short Python program that:
- periodically checks the CPU temperature (using the 'vcgencmd measure_temp' command), and
- switches the fan on at a threshold high temperature and switches it off again at a lower threshold temperature.
The two sides of the 'bare' PCB are shown in the image above left and the 3 images below show the various stages of a test build.
A typical use is shown in the image on the right where a Raspberry Pi4 is mounted in a custom3D printed enclosure (shown here without its enclosing lid) and an additional custom 3D printed bracket is used to mount the PCB control board.
Some simple test/development Python code has been developed that can be run continuously that:
- on start-up reads a pair of high/low threshold temperatures and an operational wait interval in seconds from a text file
- periodically checks the CPU temperature after each wait interval
- switches the fan on/off depending upon the measured CPU temperature and the high/low threshold values, and
- keeps track of the accumulative fan on/off periods of time which is then periodically written out to a log file (where the log file only keeps a maximum number of records to stop it getting bigger and bigger)
With the use of this arrangement for the PCB/fan with a Raspberry Pi4 in its fully enclosed 3D printed housing, it was found that:
- for high/low thresholds of 45/40oC and the Raspberry Pi 4 in more or less an idle state (but obviously running the fan control code!), the fan was on for about 13% of the time in an ambient environment of c.20oC
- but for high/low thresholds of 55/50oC and the Pi still more or less idle, the fan was always off, i.e. passive/natural convection within the enclosure was enough to keep the CPU below 55oC which is a very acceptable operational level, when the Pi is just in a idle state
- however for another scenario, where the Raspberry Pi 4 is continuously running an Apache webserver with an associated MariaDB database, high/low thresholds of 58/48oC made the fan run for less than 10% of the time in an ambient environment of c.22oC
The images below further illustrate a Raspberry Pi 4 in the 3D printed fan-cooled case:
The 3D print designs for the case and the PCB mounting bracket can be downloaded from the Prusa web site here.
All the currently available maker project information: