关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
最近对树莓派很感兴趣。查了很多资料,买了树莓派3代、面包板、杜邦线、散热风扇和其他各种元器件、感应器等。
我那个TF卡是在某宝的商家已经装好系统的了,里面已经包含了Python开发包和GPIO库。
为了快速上手,用装好的系统方便省事。
我用手机充电器给树莓派提供电源(5V和1.2A,电压足够了,电流略不足);
连上HDMI显示器(之前改造笔记本屏幕的显示器刚好用得上);
插上散热风扇(风扇红色的线插在4号引脚,黑色的线插在6号引脚。4号是5V输出,6号是零极);
可以顺利正常启动。
不过散热风扇声音有点大,因为是亚克力外壳,固定不稳。(亚克力易碎,不小心摔了一下就碎了。后来换成注塑外壳,并用热熔胶固定风扇)。
通电之后,风扇就一直开着。所以我想通过监控CPU的温度去控制风扇的开关。查阅了一些资料,大部分是要继电器控制风扇电路的开关。继电器有点大,麻烦。后来找到可以用开关三极管去控制电路的开关。开关三极管是可以通过一个较小的电流信号控制该三极管是否断电或者通电。身形娇小,符合我的要求。于是我又跑去某宝买了型号为S8050的三极管。
三极管顾名思义,它有3个极。分别是E发射机、B基极、C集电极。可以理解为E极是正极、C极是负极、B极是信号极控制是否通电。和二极管一样,正极接电源正极,负极接电源的负极。S8050的引脚示意图如下:
我们可以用这个开关三极管控制散热风扇了,画个电路图如下:
这个可能还不够直观,再画一个接上树莓派引脚的示意图:
我习惯用16号引脚控制输出电信号。不知道树莓派引脚编号的可以在网上搜索一下。
为了方便实验和测试,我用面包板和杜邦线连接(通用不懂面包板和杜邦线的搜索一下),这个接线很简单。拍照看不太清楚具体接线。大致看看样子就行(风扇在充电器上面):
好吧,看不清。搜索了一下,找到一款可以画示意图的软件Fritzing,不过里面的树莓派不是3代的。将就用一下:
接好线之后,就写代码控制了。我这里用Python控制GPIO引脚。需要安装RPi.GPIO库。
#!/usr/bin/python2.7 #coding:utf-8 __author__ = "Haddy Yang" __date__ = "2016-06-30" __blog__ = "http://yshblog.com" from RPi import GPIO as gpio #注意RPi中的i是小写的 import time #获取cpu的温度 def get_cpu_temp(): with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f: temp = float(f.read()) / 1000 return temp #监控温度,控制风扇开关 def check_temp(port): #BOARD编号方式,基于插座引脚编号 gpio.setmode(gpio.BOARD) #设置哪个引脚为输出模式 gpio.setup(port, gpio.OUT) #标记风扇开关状态 is_close = True try: while True: temp = get_cpu_temp() if is_close: #温度大于等于50时,打开引脚,输出电信号 if temp>=50: gpio.output(port, 1) is_close = False else: #温度降低到45极其以下时,关闭引脚 if temp<=45: gpio.output(port, 0) is_close = True #休眠1秒 time.sleep(1) print "temp:%s, fan is close:%s" % (temp, is_close) except Exception, e: gpio.cleanup() if __name__ == '__main__': port = 16 check_temp(port)
每隔1秒就检查一下CPU的温度。如果CPU温度达到50极其以上时,就打开风扇。直到温度降低至45度,才关闭风扇。
合上盖子,执行代码,测试成功。