树莓派风扇声音太大了, 非常影响睡觉, 不开风扇cpu温度又很容易太高了
准备
杜邦线母对母2根, 公对母2根, 直接淘宝买40pin的2排
三极管S85501个,淘宝买2块钱50个包邮
S8550为PNP型三极管,基极施加低电平时才导通电路,如果是用的NPN型三极管则与之相反
树莓派小风扇1个
树莓派引脚:
三极管引脚:
-
E: 发射机
正级(接电源正极, 5V)
可接树莓派4号引脚 -
B: 基级
信号极控制是否通电(GPIO)
可以接树莓派8号引脚 -
C:集电极
负极 (接电源负极, Ground)
可以接树莓派6号引脚
接线
- 风扇红线(正极)接树莓派5V,如4号引脚
- 风扇黑线(负极)接三极管C(集电集)
- 三极管E(发射极)接树莓派Ground, 如6号引脚
- 三极管B级, 接树莓派GPIO,如8号引脚
如图:
Python程序风扇
在python交互式命令行下测试下是否可行
pi@raspberrypi:~/script $ python
Python 2.7.16 (default, Apr 6 2019, 01:42:57)
[GCC 8.2.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import RPi.GPIO as GPIO
>>> GPIO_OUT = 14
>>> GPIO.setmode(GPIO.BCM)
>>> GPIO.setwarnings(False)
>>> GPIO.setup(GPIO_OUT, GPIO.OUT, initial=GPIO.HIGH)
>>> GPIO.output(GPIO_OUT, GPIO.LOW) # 风扇开
>>> GPIO.output(GPIO_OUT, GPIO.HIGH) # 风扇关闭
注:PNP型三极管GPIO.LOW是开, HIGH是关, NPN型相反
完整程序:
主要逻辑:
- 读取/sys/class/thermal/thermal_zone0/temp内容, 除1000获取CPU温度
- 风扇初始状态设置为关闭状态
- 温度低于55度且当前处于关闭状态开机风扇
- 温度低于45度且当前处于开启状态关闭风扇
- 每隔15秒查一下温度并更新状态
mkdir -p /home/pi/script && cd /home/pi/script
wget https://raw.githubusercontent.com/lovehhf/raspi_script/master/smartfan.py
supervisor管理python进程
添加配置文件: vim /etc/supervisor/conf.d/fan.conf:
内容如下:
[program:fan]
command=/usr/bin/python3 /home/pi/script/smartfan.py
user=root
directory=/home/pi/script
stdout_logfile=/var/log/supervisor/%(program_name)s-stdout.log
stderr_logfile=/var/log/supervisor/%(program_name)s-stderr.log
autorestart=true
autostart=true
重启supervisor并查看状态:
pi@raspberrypi:/var/log $ sudo systemctl restart supervisor
pi@raspberrypi:/var/log $ sudo supervisorctl status fan
fan RUNNING pid 3903, uptime 0:01:26
测试
sudo apt install stress
stress -c 50 # cpu压力测试, 开50个进程不停地sqrt, 一下子风扇就转起来了
tail -f /var/log/fan_control.log # 查看日志