树莓派 温度监控 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(其中 ...
随机推荐
- elasticsearch+logstash+redis+kibana 实时分析nginx日志
1. 部署环境 2. 架构拓扑 3. nginx安装 安装在192.168.176.128服务器上 这里安装就简单粗暴了直接yum安装nginx [root@manager ~]# yum -y in ...
- 【sping揭秘】5、IOC容器(一)
OC容器实现过程 1. 容器启动阶段,读取配置文件,解析文件BeanDefinitionReader 2. Bean 实例化阶段 关于BeanFactoryPostProcessor 插手spring ...
- Vue2.5开发去哪儿网App 第五章笔记 下
1. 多个元素或组件的过渡 多个元素的过渡: <style> .v-enter,.v-leace-to{ opacity: 0; } .v-enter-active,.v-leave-ac ...
- redis常用命令(一)
一.redis常见的数据操作命令 http://redisdoc.com/ 二.键(key) keys *: 查询所有的key. exists key:判断某个key是否存在. move key db ...
- odoo开发笔记 -- 权限机制
转两篇关于权限的2篇文章,加深这方面的认识.注:后面附有原作者地址,希望不构成侵权. https://www.cnblogs.com/crazyguo/p/6999408.html 第一篇:http: ...
- opencv实现正交匹配追踪算法OMP
//dic: 字典矩阵: //signal :待重构信号(一次只能重构一个信号,即一个向量) //min_residual: 最小残差 //sparsity:稀疏度 //coe:重构系数 //atom ...
- ThreadLocal管理Connection
ThreadLocal管理Connection 每一个用户都对应有一个单独线程,每一个线程都有一个数据库连接对象Connection对象接待它. 一个用户对应一个线程,这个线程中的Connection ...
- css box-reflect投影实例讲解
box-reflect一共有以下几个属性: above: 指定倒影在对象的上边 below: 指定倒影在对象的下边 left: 指定倒影在对象的左边 right: 指定倒影在对象的右边 offset: ...
- java断言assert初步使用:断言开启、断言使用
1 说明 java断言assert是jdk1.4引入的. jvm断言默认是关闭的. 断言可以局部开启的,如:父类禁止断言,而子类开启断言,所以一般说“断言不具有继承性”. 断言只适用复杂的调式过程. ...
- Java你不知道的那些事儿—Java隐藏特性(上)
每种语言都很强大,不管你是像我一样的初学者还是有过N年项目经验的大神,总会有你不知道的东西.就其语言本身而言,比如Java,也许你用Java开发了好几年,对其可以说是烂熟于心,但你能保证Java所有的 ...