【BIGTREETECH CB1】制作温控风扇和CPU负载指示灯
[复制链接]
BIGTREETECH CB1开发板的CPU在空闲的时候温度在58℃左右,CPU在高负荷时温度会快速上升,因此有必要安装散热片或风扇,开发板已经附带一个散热片我没有使用,我这里就制作一个CPU散热风扇加一个CPU负载指示灯。风扇功能是在CPU高于某个温度开启,低于某个温度关闭,三个LED指示CPU不同的负载率。
成品图:
散热风扇品牌:ADDA协禧
规格参数:
型号:AD0205MX-K50
类型:DC直流风扇
电压:DC5V
规格: 2506
尺寸:25*25*06 mm
转速:12000转
电流:0.13A
风压:4.70mmAq
风量:0.07CMM
轴承:双滚珠轴承
寿命:70000hr
CPU负载指示灯由绿色,黄色,红色三个发光二极管组成,指示CPU不同的负载率。
红黄绿灯亮---表示CPU负载过高,CPU(70%---100%)
黄绿灯亮-----表示CPU在正常负载区间,CPU(20%---70%)
绿灯亮-------表示CPU空闲,CPU(0%---20%)
硬件电路:
电路中使用了4个GPIO,分别控制3个LED和一路风扇,5V电压风扇转速太快,这里将风扇电压降到3.3V,风扇转速和噪音都有所降低,控制风扇的IO连接1K电阻后连接PNP三极管B级,三极管E级连接3.3V,三极管C级连接风扇正极,风扇负极连接GND,3个LED通过1K电阻后连到3.3V,4个GPIO都是低电平有效。
PIN21(gpio232)-----红色LED
PIN23(gpio230)-----黄色LED
PIN19(gpio231)-----绿色LED
PIN37(gpio79)------三极管B级
程序流程图:
程序功能:
程序使用Linux的Shell脚本语言,优点是简单易学,通用性强,在其他Linux开发板或树莓派上可以直接使用,缺点是执行速度较慢。
程序里设定CPU温度高于65℃开启风扇,CPU温度低于55℃关闭风扇。
CPU负载<20%绿灯亮,CPU负载在20%-70%绿黄灯亮,CPU负载>70%绿黄红灯亮。
程序每1秒轮询一次。
程序代码:1.sh
#!/bin/bash
sudo chmod -R 777 /sys/class/gpio
#cd /sys/class/gpio
if [ ! -d "/sys/class/gpio/gpio232" ];
then
echo 232 > /sys/class/gpio/export
sudo chmod -R 777 /sys/class/gpio/gpio232
fi
if [ ! -d "/sys/class/gpio/gpio230" ];
then
echo 230 > /sys/class/gpio/export
sudo chmod -R 777 /sys/class/gpio/gpio230
fi
if [ ! -d "/sys/class/gpio/gpio231" ];
then
echo 231 > /sys/class/gpio/export
sudo chmod -R 777 /sys/class/gpio/gpio231
fi
if [ ! -d "/sys/class/gpio/gpio79" ];
then
echo 79 > /sys/class/gpio/export
sudo chmod -R 777 /sys/class/gpio/gpio79
fi
echo out > /sys/class/gpio/gpio232/direction
echo 1 > /sys/class/gpio/gpio232/value
echo out > /sys/class/gpio/gpio230/direction
echo 1 > /sys/class/gpio/gpio230/value
echo out > /sys/class/gpio/gpio231/direction
echo 1 > /sys/class/gpio/gpio231/value
echo out > /sys/class/gpio/gpio79/direction
echo 1 > /sys/class/gpio/gpio79/value
#-------------------- --------------------
declare -i cpu_temp=0
declare -i cpu_high=65
declare -i cpu_low=55
while [ ture ]
do
#---------------------------FAN-------------------------------
temp1=`cat /sys/class/thermal/thermal_zone0/temp | sed 's/...$//'`
cpu_temp=$((temp1))
# echo $cpu_temp
if [ $cpu_temp -gt $cpu_high ];
then
echo 0 > /sys/class/gpio/gpio79/value
elif [ $cpu_temp -lt $cpu_low ];
then
echo 1 > /sys/class/gpio/gpio79/value
fi
#---------------------------LED-------------------------------
declare -i cpu_load=0
declare -i led_red=70
declare -i led_yellow=20
declare -i led_green=0
temp2=`top -b -n1 | grep 'Cpu(s)' | awk '{print $2 + $4}'`
temp2=$(printf "%.0f" $temp2)
cpu_load=$((temp2))
#echo $cpu_load
if [ $cpu_load -gt $led_red ];
then
echo 0 > /sys/class/gpio/gpio232/value
echo 0 > /sys/class/gpio/gpio230/value
echo 0 > /sys/class/gpio/gpio231/value
elif [ $cpu_load -lt $led_yellow ];
then
echo 1 > /sys/class/gpio/gpio232/value
echo 1 > /sys/class/gpio/gpio230/value
echo 0 > /sys/class/gpio/gpio231/value
else
echo 1 > /sys/class/gpio/gpio232/value
echo 0 > /sys/class/gpio/gpio230/value
echo 0 > /sys/class/gpio/gpio231/value
fi
sleep 1s
done
程序如果在Windows下编写,在传到Linux下运行时别忘记用dos2unix更改一下格式,否则语法报错。
测试方法:
这里测试用到一条命令
dd if=/dev/zero of=/dev/null &
这条指令是在后台运行dd命令,输出到/dev/null, 实际上仅仅占用CPU算力,没有IO操作。
执行1条此指令会使一个核心的CPU满载,因为此开发板的H616是四核心,也就是达到总的CPU占用率25%(黄灯亮),执行2条就会达到50%,执行3条就会达到75%(红灯亮)。当执行完3条dd指令后CPU温度也会快速上升,当CPU温度超过65℃就会开启风扇,风扇转一小会儿后,当CPU温度低于55℃风扇停止。
使用 pkill dd 命令杀死dd进程,观察LED灯的变化。
测试视频:
视频在24秒开启风扇,1分38秒关闭风扇。
测试
|