This article describes how I successfully configured a PWM fan on an Orange Pi 5 Max running Armbian Debian Trixie Minimal vendor 6.1.115, using the opifancontrol utility.
Special thanks to Jamie Sinclair for creating and sharing the opifancontrol project with the community.
I have an Orange Pi 5 Max installed in a metal case and running several Docker containers, including Frigate, Immich, Samba, and others. The case originally came with a internal 30x30x10 mm fan, which was not able to provide sufficient cooling. Under load, CPU temperatures were reaching nearly 70°C.
To improve cooling, I installed an external 40x40x10 mm PWM fan that was originally used on an Odroid HC4. The fan was mounted using screws, which required drilling holes in the case cover. I also added several ventilation holes, in the case cover above the CPU area to improve airflow. After these modifications, the CPU temperature now stays around 48°C.
1. Install wiringOP
Follow the instructions from the wiringOP project:
Download wiringOP
$ apt-get update
$ apt-get install -y git
$ git clone https://github.com/orangepi-xunlong/wiringOP.git
Build wiringOP
$ cd wiringOP
$ ./build clean
$ ./build
Verify the installation:
$ gpio readall
This command should display the Orange Pi 5 Max GPIO pin map.
2. Configure GPIO Pin 7 as a PWM Output
In Armbian, configure GPIO Pin 7 (PWM3_IR_M3) as a PWM output.
$ sudo armbian-config
Navigate to:
System
└─ Kernel
└─ Overlays
Select:
rk3588-pwm3-m3
Press the space bar to enable it, save the configuration, and reboot the system.
3. Install opifancontrol: https://github.com/jamsinclair/opifancontrol
$ su
$ cd /usr/local/bin/
$ wget https://github.com/jamsinclair/opifancontrol/blob/main/opifancontrol.sh
$ chmod +x /usr/local/bin/opifancontrol.sh
$ curl -sSL https://raw.githubusercontent.com/jamsinclair/opifancontrol/main/install.sh | bash
Enable the service to start automatically at boot:
$ systemctl enable opifancontrol.service
Start the service:
$ systemctl start opifancontrol.service
Check the service status:
$ systemctl status opifancontrol.service
4. PWM Fan Wiring
I used a 5V, 4-wire, 4,000 RPM fan from an Odroid HC4.
Connection details:
Fan Wire Function GPIO Pin
Red +5V Power Pin 4
Black GND Pin 6
Blue PWM Speed Control Pin 7
Yellow TACH (RPM Sensor) Not Connected
5. Adjust the Fan Control Configuration
Edit the configuration file:
$ sudo nano /etc/opifancontrol.conf
My settings are:
TEMP_LOW=45
FAN_LOW=60
TEMP_MED=60
FAN_MED=75
TEMP_HIGH=70
FAN_HIGH=100
RAMP_UP_DELAY_SECONDS=30
RAMP_DOWN_DELAY_SECONDS=60
After saving the configuration file, restart the service:
$ sudo systemctl stop opifancontrol.service
$ sudo systemctl start opifancontrol.service
With these settings and the hardware modifications described above, my Orange Pi 5 Max now operates significantly cooler, maintaining temperatures around 48°C while running multiple Docker services