前言
之前树莓派服务器装好了,顺便买了个风扇。但是风扇只有正负极,没有控制线。树莓派5V针时直连usb的,无论是否开机、温度高低都会转,这带来了不必要的花销
正好树莓派引脚能输出控制信号,根据查询到的资料:只需加一个三极管就能达到效果,因此就打算自己DIY一个控制端
所需材料 | 数量 |
---|---|
5v风扇 | 1 |
S8550 PNP三极管 | 1 |
杜邦线+母头 | 2 |
热缩管 | 3 |
焊锡+电烙铁 | 1 |
以下操作是靠物理入门知识和数电入门知识完成的,有不妥之处请多多包涵:
一、焊接三极管
S8550是PNP三极管,因此用它控制负极,当基极为低电平0时,导通负极
将风扇正极直插在5V针脚,三极管基级(最中间的)和任意一级(左右均可)焊接上杜邦线母头,余下的一极和风扇负极用焊锡完成焊接,最后用热缩管固定,防止脱落
得到成品如下:
二、插线
参照树莓派4B的引脚图 (来源见水印)
- 风扇正极插入02、04的任意一个引脚,接入+5V
- 三极管基极(中间的)插入任意GPIO引脚,例如12
- 三极管剩下的一级任意GND引脚,例如14
三、测试
wiringPi是树莓派IO控制库,使用C语言开发,用它可以控制引脚输入和输出。首先安装wringPi,对于树莓派4B,安装的版本要>=2.25
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
运行查看版本号,有显示即可
gpio -v
对照引脚图:基极(控制线)插入了第12号引脚,对应GPIO的ID是1号,要使这个引脚输出为0时,风扇才会开始工作,设置输出低电平
#设置1号引脚为输出模式
gpio mode 1 out
#设置1号引脚信号为低电平
gpio write 1 0
键入完毕后,如果操作、设置全部正确,风扇就会开始旋转,测试完毕,关闭风扇
gpio write 1 1
四、编写Python自动温控脚本并运行
脚本中引脚的编号是BOARD编码,是物理编号,请区分GPIO编号
自动化温度控制风扇Python脚本:
# -*- coding: utf-8 -*-
# 引入的库函数
import RPi.GPIO as GPIO
from time import sleep
# 控制线的板载BOARD编码引脚号
FAN = 12
# 风扇开始工作的温度,单位摄氏度
ON = 49
# 风扇停止工作的温度,单位摄氏度
OFF = 40
# 连续两次之间停顿的时间(while循环,小了可能会吃资源)
GAP = 60
# GAP = 5
# GPIO的基础设置,设置错误提示关闭、使用BOARD编码、初始化引脚输出低电平
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(FAN,GPIO.OUT)
GPIO.output(FAN,GPIO.LOW)
# 无限循环检测温度
while 1 :
file = open("/sys/class/thermal/thermal_zone0/temp")
# 读取的温度单位是毫摄氏度,转化成摄氏度
temp = float(file.read()) / 1000
# print(temp)
if temp >= ON:
# 开
GPIO.output(FAN,0)
# print("ON")
elif temp < OFF:
# 关
GPIO.output(FAN,1)
# print("OFF")
sleep(GAP)
手动运行检查bug,可以将间隔时间调短、并加入显示温度,以便于查错
python /xxx/xxx.py
一切完成后,接下来设置开机自启动:
打开文件rc.local
sudo nano /etc/rc.local
在exit前面(最好是前几行),输入:
#你的脚本路径
python /xxx/xxx.py &
切记:不要忘记最后的与运算符!
切记:不要忘记最后的与运算符!,如果没有与运算符,系统会等待当前语句执行完毕才会启动,而当前指令是死循环,造成错误
现在已经完成了自动化温控,重启即可查看效果
完
感谢浏览,快使用评论区与我交流8~