树莓派配置自动风扇(附源码)

  • A+
所属分类:技术分享 运维笔记

买了个树莓派,自带了个风扇,一般都是一直开着,后来发现没必要,所以自己找了点资料,使用三极管,通过CPU的温度来调节风扇。

材料:

三极管

树莓派配置自动风扇(附源码)

注意下他的管脚就行

连接方式:

树莓派配置自动风扇(附源码)

盗用某网站的图片,大致是基极连接GPIO,发射级连接风扇的负极,集电极连接风扇的正极。

原理是,当基极接收到高电平,树莓派目前是3V的时候,集电极和发射极导通,形成通路,当低电平时候,只有微弱的电流经过,不足可以驱动风扇转动。

硬件部分完成,下面谈谈软件部分。

软件驱动

使用树莓派官方的系统,RPi.GPIO控制GPIO的输入

导入相关的包,然后写具体的功能函数,驱动风扇转动我们首先定义好gpio引脚和模式

这里使用了14号引脚,因为个GND以及5V电源靠在一起

读取CPU温度,大于50的时候开始风扇,小于45的时候关闭风扇,然后清除GPIO再等待10s进行再次判断

为了让程序稳定执行,避免再次调用crontab等其他程序呢,我们加入守护进程

就这样,加入开机启动,以后程序默默的就可以在后台守护风扇的开关了,本人使用的是s9014 NPN小功率的三极管,所以基极不需要串一个电阻,直接使用三极管也不会太热。

最后来一个成品图

树莓派配置自动风扇(附源码)

 

有点丑,不想买那种外壳,只是装逼又不防尘,没意思的,目前由于剪短了导线所以盖子可以完美的合上去的,就是杜邦线有点弯曲,无所谓咯,反正不值钱,三极管麽,虽然很脆弱,1.8元买了50个,无所谓咯

 

echo少年

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:18   其中:访客  9   博主  9

    • avatar 科研软件小站 1

      图片加载超级慢,看看什么原因,我访问其他网站正常

      • avatar xml 0

        可以加个电容,然后树莓派输出PWM调节风扇速度呀

          • avatar echo少年 Admin

            @xml 加在基极和GPIO之间么?

            • avatar echo少年 Admin

              @xml 刚查了一下,可以直接输出PWM信号,大佬加电容是为啥哇

            • avatar Kay 2

              我操作完,电风扇完全不动了。。不知道哪里出现了问题。。

                • avatar echo少年 Admin

                  @Kay po出你的代码,还有确认下你的GPIO接口是不是和我的一样

                    • avatar Kay 2

                      @echo少年 我的代码倒是跟你不一样 但是大同小异啦
                      python
                      import sys
                      import time
                      try:
                      import RPi.GPIO as GPIO
                      except RuntimeError:
                      print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")

                      def cpu_temp():
                      with open("/sys/class/thermal/thermal_zone0/temp", 'r') as f:
                      return float(f.read())/1000

                      def main():
                      channel = 29
                      GPIO.setmode(GPIO.BOARD)
                      GPIO.setwarnings(False)

                      # close air fan first
                      GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
                      is_close = True
                      while True:
                      temp = cpu_temp()
                      if is_close:
                      if temp > 45.0:
                      print time.ctime(), temp, 'open air fan'
                      GPIO.output(channel, GPIO.HIGH)
                      is_close = False
                      else:
                      if temp < 38.0:
                      print time.ctime(), temp, 'close air fan'
                      GPIO.output(channel, GPIO.LOW)
                      is_close = True

                      time.sleep(2.0)
                      print time.ctime(), temp

                      if __name__ == '__main__':
                      main()

                      我的GPIO接口是第一排的最后一个。

                      按照你的也是一样的效果呢

                      • avatar Kay 2

                        @echo少年 评论

                        就是右排的最后一个啦~

                          • avatar echo少年 Admin

                            @Kay writingpi编码是对的啊,你的三极管对的么

                              • avatar Kay 2

                                @echo少年 特地买了一个跟你一样的 上面写着 S9014 C331

                                • avatar echo少年 Admin

                                  @Kay 你首先搞好三极管三个级对不对,中间引脚B接GPIO,然后看你的接线问题,最后看你的代码问题。。。前期使用5-10度温度测试,他能不能运行,我现在运行很稳,啊哈哈,准备折腾智能音箱

                                  • avatar Kay 2

                                    @echo少年 三个极也完全正确。我把发射极插到基极风扇可以转动。

                                    调成了高于10度也不转,气死我了,完全没有头绪

                                    • avatar echo少年 Admin

                                      @Kay 艹,仔细看了你的代码,你也是马虎的,你的模式是GPIO.setmode(GPIO.BOARD)是BORD,bord是40,writing pi是29,BCM是21,

                                      • avatar Kay 2

                                        @echo少年 啊啊啊啊啊!可以了老哥!!厉害(。^▽^) 我觉得我可以去水文一篇了!

                                        • avatar echo少年 Admin

                                          @Kay 啊哈哈,建议写进守护进程,开机启动,后期可以根据CPU使用率添调节转速啥的

                                          • avatar Kay 2

                                            @echo少年 守护进程我就用PM2了,PM2可以startup 开机自启和守护一起搞定

                                            • avatar echo少年 Admin

                                              @Kay 奥奥,我不想多加其他软件