树莓派 温度监控 PWM 控制风扇 shell python c 语言
Mine:

图中圈出来的是三极管 和滤波电容

依赖库: wiringPi
sudo apt-get install wiringpi
Shell脚本
本文介绍使用Shell脚本在树莓派上启用软件PWM控制风扇转速。
最新版本下载地址https://github.com/tankririri/RaspberryPi_CPU_PWM
硬件需求
树莓派(这里用的3代B);
5V小风扇;
NPN三极管,我用的s8050;
面包板加杜邦线,或者用电烙铁。
硬件接法:

先把电扇直接接到树莓派上测试一下哪根线是+极,然后把风扇+极直接接在树莓派的5V上,-极接在三极管集电极Collector。

(从三极管平的那面看)
三极管发射极Emitter接树莓派GND,基极Base接树莓派Pin12#(GPIO18)(GPIO_GEN1),资料表明只有这个针脚可以启用软件pwm,其他针脚我也没有试过。

软件需求
安装GPIO驱动,这里使用C语言编写的wiringPi,安装步骤看这里。
在按照上面的方法连接好风扇以后,风扇是不会转的,此时可以先手动控制风扇测试一下,在终端中输入以下命令开启风扇
gpio mode pwm
gpio pwm
正常情况下风扇应该会开始全速运转。
可以使用gpio readall命令查看针脚信息,针脚模式应该显示ALT5,见下图。

设置风扇自动调速:
新建一个cpu_fan.sh文件,输入以下内容
#!/bin/sh #sleep
#设置运行状态文件
RUN=/var/run/cpu-fan.run
touch $RUN
chmod $RUN
#设置风扇默认运行模式,0为关闭,1为全速,2为自动,运行过程中可以直接修改/var/run/cpu-fan.run文件来生效
echo "" > $RUN
#设置开启风扇的最低温度
set_temp_min=
#设置关闭风扇温度比最低温度小1度
shutdown_temp=`expr $set_temp_min - `
#设置风扇全速运行的温度
set_temp_max= #开机风扇全速运行
#默认的pwm值范围是0~
gpio mode pwm
gpio pwm #初始化参数
fan= while true
do
#获取cpu温度
tmp=`cat /sys/class/thermal/thermal_zone0/temp`
status=`cat $RUN` #计算pwm值,从变量set_temp_min设置的温度开始开启风扇,最低转速50%
pwm=$((($tmp-$set_temp_min)*/($set_temp_max-$set_temp_min)+)) #设置pwm值上限
if [ $pwm -gt ] ;then
pwm=
fi #小于设置温度关闭风扇
if [ $tmp -le $shutdown_temp ] ;then
pwm=
fan=
else #第一次超过设置温度全速开启风扇,防止风扇不能启动
if [ $tmp -gt $set_temp_min ] && [ $fan -eq ] ;then
gpio pwm
fan=
sleep
fi
fi #检查run文件,为0时关闭风扇
if [ $status -eq ] ;then
pwm=
fan=
else #检查run文件,为1时持续开启风扇最高转速
if [ $status -eq ] ;then
pwm=
fi
fi gpio pwm $pwm #每5秒钟检查一次温度
sleep #输出日志,不需要的可注释掉
echo "`date` temp=$tmp pwm=$pwm status=$status" >> /var/log/cpu-fan/cpu-fan.log
done
最新版本下载地址https://github.com/tankririri/RaspberryPi_CPU_PWM
配置日志自动管理:
新建/etc/logrotate.d/cpu-fan文件,输入以下内容
/var/log/cpu-fan/cpu-fan.log {
su root
rotate
daily
compress
delaycompress
missingok
notifempty
create root root
}
由于脚本运行在一般用户下,所以对日志文件的访问会产生权限问题,第一次运行的时候需要将/var/log/cpu-fan/cpu-fan.log文件的组和拥有者改为root,文件权限改为666
mkdir /var/log/cpu-fan
chown root:root /var/log/cpu-fan
chmod /var/log/cpu-fan
touch /var/log/cpu-fan/cpu-fan.log
chown root:root /var/log/cpu-fan/cpu-fan.log
chmod /var/log/cpu-fan/cpu-fan.log
设置开机自动运行
在/etc/rc.local文件中添加以下内容
su -c /home/xbian/cpu_fan.sh xbian
我这里装的是xbian的系统,所以用户名是xbian,如果用的是官方rasbian系统,用户名就是pi。
这里需要注意的是,如果使用root用户开机运行脚本,会发生bug,脚本不会发生作用。另外还需要关闭lirc服务,否则会导致cpu占用率100%。
如果开机完成后手动运行脚本则没有任何问题,目前尚不知道bug产生的具体原因,上述问题可能都跟gpio驱动有关系。
Python


树莓派的15号引脚连接到了三极管的基极(引脚编号可参看这里),当温度过高时,GPIO引脚输出低电平,可以开启风扇。python程序为:
#!/usr/bin/python2
#coding:utf8
#自动风扇控制程序,使用wiringPi的gpio命令来操作GPIO
import commands,time
#控制风扇的GPIO
FAN_GPIO = 15
commands.getoutput('sudo gpio mode '+str(FAN_GPIO)+' OUTPUT') while True:
# 获取CPU温度
tmpFile = open( '/sys/class/thermal/thermal_zone0/temp' )
cpu_temp_raw = tmpFile.read()
tmpFile.close()
cpu_temp = round(float(cpu_temp_raw)/1000, 1)
print cpu_temp #如果温度大于50`C,就启动风扇
if cpu_temp >= 50.0 :
commands.getoutput('sudo gpio write '+str(FAN_GPIO)+'')
#如果温度小于45`C,就关闭风扇
if cpu_temp <= 45.0 :
commands.getoutput('sudo gpio write '+str(FAN_GPIO)+'') time.sleep(10)
保存为 cool.py 后,运行程序。
sudo python cool.py
当温度高于50度就开启风扇降温,温度降到45度以下时关闭风扇,这样可以防止风扇在临界点往复。
C 语言 电机调速
#include <wiringPi.h> #define PWMPin 1 //定义PWM引脚 void setup(); int main (void)
{
setup();
intval = ;
intstep = ;
while()
{
if(val>)
{
step = -step;
val = ;
}
else if(val<)
{
step = -step;
val = ;
} pwmWrite(PWMPin,val);
val+=step;
delay();
}
return ;
}
/*初始化配置*/
void setup()
{
wiringPiSetup (); //wiringPi库初始化
pinMode (PWMPin, PWM_OUTPUT); //设置1为PWM输出
}
编译
gcc -o pwm pwm.c -lwiringPi
运行:
./pwm或者sudo ./pwm
参考:
https://blog.csdn.net/lzty634158/article/details/72902803
树莓派 温度监控 PWM 控制风扇 shell python c 语言的更多相关文章
- 剖析CPU温度监控技术【转】
转自:http://blog.csdn.net/hunanchenxingyu/article/details/46476545 迄今为止还没有一种cpu散热系统能保证永不失效.失去了散热系统保护伞的 ...
- 剖析CPU温度监控技术
转载 :剖析CPU温度监控技术 标签: CPU 温度控制技术 1805 具体温度检测调整代码(转载) 迄今为止还没有一种cpu散热系统能保证永不失效.失去了散热系统保护伞的“芯”,往 ...
- 树莓派Zero W GPIO控制
作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0. 概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...
- 【原创】控制perl和python脚本执行过程中脚本文件是否关闭的方法
引子 跟踪perl和python脚本对文件的访问,实际过程中,perl和python解析器在解析完脚本后,直接关闭了 脚本文件,在进程中查询不到是访问文件的脚本文件名称. shell.perl和pyt ...
- 树莓派3 之 pi3Robot 控制系统配置
需求 个人正在用Python写一个控制系统,技术选型是python3 + Flask + Mysql + Bootstrap.需要将这套系统直接部署到树莓派中. 代码地址:https://github ...
- amba H2平台用PWM控制LCD背光
ambarella H2系列Soc的GPIO口能作PWM使用的个数有限(GPIO0-GPIO3),从PRM里GPIO: Function Selection章节可以得到如何配置GPIO为PWM功能. ...
- PWM控制led渐变
PWM,中文释义:脉冲宽度调制.它是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术. PWM 是一种对模拟信号电平进行数字编码的方法.通过高分辨率计数器的使用,方波的占空比被调制用来对 ...
- Shell Python 日期和时间戳的互相转换
一.初衷: 很多时候,时间的存储都是时间戳格式,如果需要展示就要转化成标准格式日期.也许会需要date和timestamp互转. 二.方法: 1.Shell下对date和timestamp的互转,是通 ...
- tomcat监控,自动重启shell脚本
tomcat监控,自动重启shell脚本如下,取名 monitor_tomcat.sh: #!/bin/sh # func:自动监控tomcat脚本并且执行重启操作 # 获取tomcat进程ID(其中 ...
随机推荐
- spring boot 中使用swagger 来自动生成接口文档
1.依赖包 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swa ...
- odoo开发基础--模型之基本字段类型
定义模型的时候,和python的其他框架类似,可以对比Django,同样是一个模型即:一个class对应生成数据库中的一张表, 只是odoo的继承机制比较复杂一点,在日常的开发中,定义模型的时候, 基 ...
- PHP:判断客户端是否使用代理服务器及其匿名级别
要判断客户端是否使用代理服务器,可以从客户端所发送的环境变量信息来判断. 具体来说,就是看HTTP_VIA字段,如果这个字段设置了,说明客户端使用了代理服务器. 匿名级别可以参考下表来判断. 给出一个 ...
- CentOS 部署 Python3 的一些注意事项
环境:centos6.7https://github.com/vinta/awesome-pythonhttps://github.com/PyMySQL/PyMySQLhttps://github. ...
- float四舍五入保留一位小数点(坑)
Float四舍五入保留一位小数点 public class Test { public static void main(String[] args){ double data1 ...
- 快速选择算法/Select 寻找第k大的数
参考算法导论9.3节的内容和这位大神的博客:http://blog.csdn.net/v_JULY_v上对这一节内容代码的实现进行了学习 尝试实现了以查找中位数为前提的select算法. 算法功能:可 ...
- Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作
首先声明:该文虽以Ubuntu 13.04为例,同样适用于Fedora 17(已测试),但在较低版本的Ubuntu下可能有所差异,具体看后面的注意事项. 技巧目录: 解决Ubuntu下每隔几分钟自动锁 ...
- gpexpand分析
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由maxluo发表于云+社区专栏 一. gp扩容步骤 1.1 初始化机器 目标:新增加的机器需要初始化和已有机器环境一样. 具体包括不限 ...
- docker空间管理之清理磁盘占用
1.docker部署后修改数据存放目录,默认存放到/var/lib/docker下面,修改到一个大的空间目录下面.参考我的另外一篇博客:https://www.cnblogs.com/cuishuai ...
- confluence输入数学公式之mathjax
1.概述 公司大数据业务需求,需要一些计算公式写入到confluence里面,并且可能会不断修改,如果上传图片的话修改起来不是很方便.于是google了一把,发现收费的有Latex Math下载量还是 ...