Skip to content

A simple PWM fan controller for Orange Pi boards

License

Notifications You must be signed in to change notification settings

dandycyclone/opifancontrol

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

opifancontrol

A simple PWM fan controller for Orange Pi boards (Only tested on an Orange Pi 5 Plus).

ℹ️ This is for fans connected through standard GPIO header pins. Orange Pi 5 Plus has a dedicated fan header, which can be configured by following the manual.

Features

  • Runs as a systemd service
  • Automatically control the speed of a PWM fan based on the temperature of the CPU
  • Configurable thresholds for fan speed and temperature
  • Ramp up and ramp down delays to avoid rapid on/off switching of the fan

Hardware Setup

I am currently using:

For the Orange Pi 5 Plus, I connect the fan to the 5V and GND pins and the PWM wire to the physical pin 5 (wPi pin 2) on the GPIO header

Pins to connect fan to on the Orange 5 Plus board

Software Installation

Prerequisites

Installed the wiringOP library. Check the installation instructions.

Install via script

Run the following command to install the fan controller:

# Run again with sudo if you get permission errors
curl -sSL https://raw.githubusercontent.com/jamsinclair/opifancontrol/main/install.sh | bash

Install manually

Install the fan controller manually.
  1. Copy the opifancontrol.sh script to /usr/local/bin/ and make it executable:
cp opifancontrol.sh /usr/local/bin/opifancontrol
chmod +x /usr/local/bin/opifancontrol
  1. Copy the opifancontrol.conf file to /etc/:
cp opifancontrol.conf /etc/
  1. Copy the opifancontrol.service file to /etc/systemd/system/:
cp opifancontrol.service /etc/systemd/system/
  1. Enable the service:
systemctl enable opifancontrol.service

Configuration

The configuration file is located at /etc/opifancontrol.conf. The default configuration is:

# The GPIO pin to use for the fan. This is the wPi pin number, not the physical pin number.
# You can find the wPi pin number by running `gpio readall` on the Orange Pi.
FAN_GPIO_PIN=2

# TEMP_LOW, TEMP_MED, TEMP_HIGH are in degrees Celsius
# FAN_LOW, FAN_MED, FAN_HIGH are in percent of max fan speed, max 100.
# The fan will only be turned on if the temperature is above TEMP_LOW.
TEMP_LOW=55
FAN_LOW=50
TEMP_MED=65
FAN_MED=75
TEMP_HIGH=70
FAN_HIGH=100

# How frequently, in seconds, to poll the temperature data
TEMP_POLL_SECONDS=2

# To avoid rapid on/off switching, the fan will delay switching back on if it was recently turned off.
RAMP_UP_DELAY_SECONDS=15
# The ramp down delay is how long the fan will stay on after the temperature drops below the threshold.
RAMP_DOWN_DELAY_SECONDS=60

# The PWM range and clock are used to control the fan speed. You shouldn't need to change these unless you know what you're doing.
# Assumes the CPU fan runs at 25kHz.
PWM_RANGE=192
PWM_CLOCK=4

# Set to true to enable debug logging of fan speed changes.
DEBUG=false

Uninstallation

To uninstall the fan controller, first stop and disable the service:

systemctl stop opifancontrol.service
systemctl disable opifancontrol.service

Then remove the files:

rm /usr/local/bin/opifancontrol.sh
rm /etc/opifancontrol.conf
rm /etc/systemd/system/opifancontrol.service

License

This project is licensed under the MIT License - see the LICENSE file for details.

About

A simple PWM fan controller for Orange Pi boards

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 100.0%