[shell]树莓派控制散热风扇的开和关

首页 / 软件 / 正文

前言

  平时在使用树莓派的时候都是接上5V的散热风扇,风扇接上就开始工作,刚开始的时候还不觉得,但是时间长了风扇的声音特别的大。作为强迫症的博主来说,简直难以忍受。于是百度查询了相关帖子,使用树莓派的引脚来控制风扇,然后就有了这篇文章。

硬  件:树莓派B+

软件环境:WiringPi库

材  料:PNP三极管 * 1 树莓派散5V热风扇 * 1 杜邦线 * 2


安装WiringPi

可以去WiringPi官网(WiringPi官网地址)下载相关源代码编译。先安装所需要的依赖。

#安装所需要的库
sudo apt-get install i2c-tools
sudo apt-get install libi2c-dev

安装WiringPi(我这里使用的是deb包来安装),如果用不了这个包的请使用源代码编译安装

# 下载deb包
wget https://lion.drogon.net/wiringpi-2.50-1.deb
# 安装
sudo dpkg -i wiringpi-2.50-1.deb

查看gpio版本和gpio信息

#查看版本信息
sudo gpio -v
#查看gpio引脚信息
sudo gpio readall

将会得到如下图的结果

gpio引脚详情


连接电路

首先先来看看树莓派的引脚定义

树莓派引脚定义

将三极管和风扇连接起来(原理图如下)

风扇和原理图

我觉得我有必要再贴上一张三极管的引脚图1(发射极)、2(基级)、3(集电极)

三级管的引脚图

连接起来的效果图如下

连接起来的实际效果图


使用脚本控制风扇

通过命令行控制风扇的旋转,在wiringPi中8号引脚(TXD)的编码为15

#设置引脚为输出模式,执行以后风扇就开始旋转了
sudo gpio mode 15 output
#关闭风扇
sudo gpio write 15 1
#开启风扇
sudo gpio write 15 0

如何获取树莓派cpu温度?

# 将获取到的结果除以1000就是当前cup的温度
cat /sys/class/thermal/thermal_zone0/temp

编写shell脚本

既然可以通过shell控制风扇的开和闭,那么编写一个shell脚本扔到后台,执行脚本代码

#!/bin/bash
sudo gpio mode 15 output
while [[ 1 == 1 ]];do
    cputemp=`sudo cat /sys/class/thermal/thermal_zone0/temp`
    temp=$[ $cputemp/1000 ]
    #温度大于47度开启风扇
    if [[ $temp > 47 ]];then
        sudo gpio write 15 0
    fi
    #温度小于39度关闭风扇
    if [[ $temp < 39 ]];then
        sudo gpio write 15 1
    fi
    sleep 4
done

设置开机自启和后台运行本脚本,打开文件/etc/rc.local 在倒数第二行添加如下代码

su pi -c "exec nohup /home/pi/fan.sh > /home/pi/fan.log &"
转载请注名出处https://rainss.cn/essay/1133.html
评论区
头像
    头像
    新加卷
      

    三极管型号是ss8850吗,怎么找不到这个呢

      头像
      新加卷
        
      @新加卷

      还是不对啊 ss8050不是pnp类型的呀,这个是npn,你这个到底是啥三极管?

      头像
      @新加卷

      啊这,你不说我都没注意,图片上是我标注错了是ss8050。。

        头像
        新加卷
          
        @雨落凋殇

        还是不对啊 ss8050不是pnp类型的呀,这个是npn,你这个到底是啥三极管?

          头像
          @新加卷

          看来还是我没太仔细看,仔细看了下我这个ss8550,不过用s8050也可以,不论是npn还是pnp的,不过是脚本里面简单改下就好了。

            头像
            新加卷
              
            @雨落凋殇

            树莓派3b+,三极管是s8550 pnp型
            vcc 5v接e脚,b脚接wiringpi 16,c脚接风扇正极,gnd接风扇负极
            效果为:16设置为output,风扇运行,write 0风扇运行,write 1风扇运行,16设置为input,风扇停止
            这通过高低电平没办法实习开关啊,只能吧16脚断掉

    头像
    cc
      

    请问必须要接三极管,才能开关风扇吗

      头像
      @cc

      对,使用gpio控制风扇需要使用三极管。如果不需要控制的话树莓派开机风扇就工作的话就接2个引脚就不需要三极管

        头像
        cc
          
        @雨落凋殇

        好的,谢谢

    头像
    丘八
      

    写的很好,支持一下

      头像
      @丘八

      感谢支持~

    头像
    鸟叔
      

    很多人都在玩这个,鸟叔看来都是爱折腾之人

      头像
      @鸟叔

      emmm,其实这东西折腾还行,,实际上我也没用它做什么。。