树莓派4B加装风扇并实现风力和CPU温度控制

  • 一、想法及摘要
  • 二、2021-04-10更新(关于风扇口接GPIO口)
  • 三、2021-04-19更新(各种设备已到货,并复习了下高中知识)
  • 四、2021-04-24更新(成功点亮LED)
    • 测试三极管
  • 五、2022-05-15更新
    • 焊接
  • 五、2022-09-11更新

一、想法及摘要

淘了个二手树莓派4B
然后刷了 Ubuntu20.04 Server lts 版系统
装了BT面板,搭了个网站
唯一一点不足是不能从外网访问80端口,并且外网IP不固定

软件方面搞的差不多了,就像搞搞硬件
就像想给它装个风扇,根据引脚图
引脚图

把买回来的风扇装在物理引脚 4、6处,风扇能正常运转,注意正负极

转的太快,看不见扇叶
把正级接在3.3V上转的慢

为了测试风扇的作用,我实时查询CPU温度
cat /sys/class/thermal/thermal_zone0/temp
这是获取CPU温度的
watch -n 0.1 cat /sys/class/thermal/thermal_zone0/temp
这是实时获取CPU温度的
获取到的温度精度是3位数

然后风扇通电(千万注意插入接口时不要短路,我不小心短路了4-6接口,然后就冒火花系统重启了,万幸机器没坏,后来查资料发现5V电压口好像直连TypeC电源)

通电时间大约是我写完上面一段话的时间,然后温度就稳定在35以内,在31到53之间跳,我刚好截了个大的。

从数据来看,散热效果蛮好的
1分钟左右下降10°+

但是一直让风扇这么转也不是个事
一来太吵,二来费电

然后我想让温度控制风扇,岂不美哉
然后也不能用风扇开启阈值的方式做
因为这会引入一个问题,我称之为 “快开关问题”
什么是快开关问题呢,在软件领域还是比较常见的
也许它有专业术语,但恕我经验少,
快开关问题是指在一个条件过渡中,当这个条件位于一个临界值
这个过渡就会在这个临界值附近疯狂转换
举个例子:
在前端中,写一个过渡动画,这个过渡动画的触发条件是当鼠标位于此元素上,然后过渡动画位移+1,当鼠标不再此元素,位移-1,然后把鼠标放置0-1之间,这个过渡就会疯狂转换,在这里过渡泛指属性的变化,如位置、角度等,+1-1是指过渡标量。可能说的不直观,直接看图:

前段时间我在U3D开发中又遇到了这个问题,但是已经上升到三维空间了,不过最终通过直线和斜率问题解决了,在此不细说,数学是真的有用。

所以不能简单的通过阈值去实现,因为阈值的真值和温度相关,而风扇的启动和阈值相关,而温度又与风扇的启动相关,也许快开关是一系列闭环且又互相相关的集合引起的,嗯,说不定可以抽象成数学公式,^ _ ^
不过这个问题可以解决,把快开关转变成慢开关,,,

然后再实现风力控制,实则控制电压就行,最后封装成脚本开机执行,期间可能会写到一些控制算法;

但想归想,还有很多问题要解决
下面将不定时直播

二、2021-04-10更新(关于风扇口接GPIO口)

首先我想的是实现风扇的电压可控
然后我查了一大堆资料
没查出个所以然
只学会了在控制台控制GPIO接口的一些操作
至少可以操作GPIO口的输入输出模式和输入输出电平(输入电平只读)

我先是把风扇正极接到物理4口,负极接入物理6口
然后操作代码
su root #获取root权限
cd /sys/class/gpio/ #进入GPIO操作目录
echo 4 > export #挂载4号接口
cd gpio4 #进入4接口操作目录
echo out > direction #设置接口为输出还是输入
echo 1 > value #设置接口输出值
首先我们进入GPIO操作目录
然后挂载一个接口
方法即为向export重定向一个接口号
因为Linux万物皆文件,所以所有的操作都可以用文件去解决
接着就会在当前目录生成一个接口的文件夹,命名为 gpio + 接口号
然后进入目录,ls一下可以看到一些文件,以下是常用命令
direction 更改输入输出方向;value 设置获取接口电平;
最后不要忘记使用 echo 接口号 > unexport 来卸载接口

知道了如何操作接口那就好办,我直接挂载了4号接口,6号因为是地线,而且我插着直接能用,不用管
然后想着4号是正极并且能直接驱动,那么4号接口应该是高电平
然而当我输出之后,结果并不是想象的那样
而且我更改value值也不会有任何反应
接着我查询资料,发现在这里挂载的接口号,不是物理号,而是BCM编码
但是接口里边电源接口并没有BCM接口号,这就让我很为难
最后发现有派友说2、4这些电源接口可以直接给派供电
那就说明派的2、4接口可能直接和TypeC充电接口相连
如果这样的话,那么派好像并不能控制电源接口
所以在GPIO工作目录使用BCM编码,自动屏蔽掉电源口

事情变得棘手起来了
我没法控制风扇电压了
不对,既然这里GPIO接口value值只能输入0、1,那么接口就只有布尔值,也就是说只有高低电平,那岂不是只是数字电路,这样控制电压大小就可以不用想了
当然也可以实现数字电路信息控制模拟信号,使电压可随意变动,可代价有点大

那就先实现可控制风扇的启动与否吧
既然我们能控制GPIO的信号接口,然后根据查到的资料,GPIO口电压基本稳定在3.3V,虽然不能让我的风扇跑满,但至少能制动
接着我接风扇正极口到GPIO.0口,也就是BCM 17接口,然后我疯狂的设置value值
风扇压根不理我,动都不动一下
这时候我并不知道export需要的是BCM编码,然后我就把各种编码全部尝试了一遍
依旧不行,没有一点起色,这时我怀疑淘到了换的板子

第二天一早,在睡梦中还依稀得想到底是什么原因,
起来打开电脑,搜索各种资料
突然看到有人说GPIO接口的电流是多少
然后我开始怀疑是否是GPIO接口没有足够电流为我的风扇驱动
我查看我风扇,5V==0.6W
也就是说,我的风扇需要0.12A的电流驱动,120mA
我接着辛辛苦苦得找树莓派GPIO的输出电流
结果为

默认驱动强度为8mA,最大16mA
然后我突然明白了,我这是让蚂蚁拉大车呢
细想之后也就明白了
一般GPIO口用作传输数字信息,根本用不到那么大电流
反而徒增功耗

你以为到这里就结束了?
不不不,虽是这么说,但是我还是不能够知道我到底能不能控制GPIO口
但是上哪找这么小工作电流且又反馈的东西去
然后我生成了一个奇怪的想法
既然网络都有回环地址,那我也回环下
让树莓派自己发自己收
示意图:

我让18发17收
但是我也没什么工具呀
接着就展现了我的就地取材:

在我眼前的感觉能用上的东西
卡片用于绝缘,掏耳朵的想用作导线,结果发现太薄,就用细螺丝刀
咱先测试下这两个接口:

先进入18口设置为输出模式,并查看电平为0
然后进入17口设置为输入模式,参看电平为0
就说明18口没电压输出,17口也没有电压输入
然后更改18口电压:

可以看见我更改了18口的电平为高,但是17并没有变化
并且我尝试更改17电平,错误提示我说操作不允许,
也就是输入口不能手动更改电平

接着我利用手头可用工具,做了个硬核跳线

然后我们直接查看17电平:

果然不出所料,然后置18电平为低

在这里,我想试一下0.5是否能行,结果是不行
随后的输出都符合预期

今天就到这,下一步就是先恶补电路知识
计划使用二极管三极管控制双路输出
实现5V和3.3V切换

在这一刻,能让我有一种非常强的成就感^ 0 ^
就像刚学编程写的第一句 HelloWorld一样
其实笔者挺喜欢硬件的,屋里书桌上一大堆拆下来的电子元件和电路板
可那时候也就初中,搞不懂啊,纯属喜欢,也没有条件学习
时隔这么多年,我终于又重新拾起硬件这份兴趣
在此对我第一个树莓派小工程开启玩机直播
同时也下单了各种设备,希望我这实习工资能撑住这无底洞,哈哈哈…

三、2021-04-19更新(各种设备已到货,并复习了下高中知识)


设备上周就到货了,一直没时间折腾,恰巧又感冒发烧,周六折腾了一天,发现以前学的东西全忘了,哈哈哈哈

先是回顾了下电阻

虽然五个电阻烧焦了,但是我成功的把灯泡点亮了
PS:电烙铁果然是便宜没好货
这个电路是五个10Ω电阻并联了一个150欧姆和一个2V20mA的串联电路
因为我现在的电源是5V2.4A,直接接LED会直接烧坏,LED的功率是0.06W
然后我给LED分压分流,我发现电阻这个东西真奇怪,一般电路都是串联分压,并联分流,电阻串联却分压又分流,分压大小在网上查说是整个电路电阻的比值,
那五个并联10Ω的电阻应当分流2.38A,几乎分走了全部电流,然而他们的功率是1/4W,但他们现在的承受功率是2.38W,所以一会会就直接烧成黑炭似的
由于电阻很快就烧的很烫,就不好测每个元件的电压电流

在这之前,也学习了下数字万用表的使用方法,现在是电阻和二极管基本上搞明白了,三极管和电容还待研究,

实干主义确实理解更深刻,之前公式记一大堆,却不会用。

四、2021-04-24更新(成功点亮LED)

话不多说,看图

先连上18针脚,然后修改方向模式
修改value,LED的亮灭就会和value对应

电压和电流:

基本都正常,不过有一点很疑惑,
把电流表调到200m档位,测出来尽然80多mA,
误差有4倍之多,也不知道是不是刚买回来不会用把机子烧了,
不多鳄鱼夹是真好用,电烙铁太容易氧化,用砂纸打磨就会很吸锡,

测试三极管


用的是S9013三极管,参数:

引脚参数
参数:结构 NPN
集电极-发射极电压 25V
集电极-基极电压 45V
发射极-基极电压 0.7V
集电极电流Ic Max 0.5A
耗散功率 0.625W
工作温度 -55℃ ~ +150℃
特征频率 150MHz
放大倍数 D64-91 E78-122 F96-135 G122-166 H144-220 I190-300
主要用途 放大电路。

我主要看了电流和电压这块在环境范围,别的也看不懂


18号为常高电平,
然后开关4号,能控制LED,
不过有一点迷惑的是,LED电流只有0.12mA了,光亮很微弱
寻思着会不会是放大系数的问题,
但是我这个基极也有16mA呐,就算GPIO最大20mA,
那两个接口应该也10mA啊,
这样发射级最大能通过10 * 倍数的电流,
然后我大电流电源是10mA,那会全通过,
不至于0.12mA,
接着我测电路发现,是鳄鱼夹的问题,
它接触面就一个牙齿尖,我用背面平整的地方接入基极,
LED就发出了耀眼的光芒

以上证明了三极管的可行性,
那么回到主题,我可以把18接口换为5V接口,LED换为风扇,
就可以控制风扇的运转,
你可能会想,直接用GPIO控制风扇不就好了,
记住,前文解释了,GPIO电流不足以驱动风扇,
所以需要用三极管小电流控制大电流,

五、2022-05-15更新

殇璃计划五周年 不负前程 未来可期

有前辈提意见,使用PWM调速风扇会更好,确实非常方便,而且加有一条风速数据线。
但是我想以目前配置环境,建设一套风控系统。但还是非常感谢提议。

由于对电路基础薄弱,本着对技术循序渐进,目前只使用三极管电阻等基本原件实现大小风,至少需要四条线,而实现定速开关控制,只需要三条线。
对于大小风电路图如图:

S1控制5V电压;S2控制3V电压。
相当于两条信号线都控制控制三极管。S2和S1之间加二极管,使S1开关无法与R3形成回路。
R2充当电机,S2闭合后使R3形成回路,分走电机电压。
四条线分别为:正极、负极、5V信号线、3V信号线

控制逻辑为:
仅当5V信号线高电平时,则电机获得5V电压;仅当3V信号线高电平时,电机获得3V电压;
当两信号线同为高电平时,电机获得3V电压;当两信号线同为低电平时,电机不获得电压。

如果只实现定速开关控制,则去掉上图的S2、二极管、R3即可。

焊接

使用 S9013 NPN型三极管,最大电流可达 0.5A。

测试发现驱动不了风扇,用万用表排查时,发现:
集电极和接地为5V,集电极和发射极为3V左右,基极和接地为3V左右,发射级和接地为2V左右
发射信号,三极管能正常开关,但是电压没有在预料之中,不能驱动风扇也是因为发射极电压太小。

今天就先到这,过后学习一下三极管相关知识,可能是我三极管选的不对
电路图也有问题,在画的时候信号线和供电共用电压的,实际上这并不能工作

在算电阻时,计算比较麻烦,所以想顺便开发一个电阻计算程序。

五、2022-09-11更新

今天测试了一下,发现是我把负载接错了位置。
在npn形三极管中,负载应该在集电极,发射机应该接地。

之前是因为我把风扇接在发射集,导致风扇电压过低,大概2V左右,而基极电压是3.3V,集电极是5V,所以我猜测,基极电压加发射集电压等于集电极,集电极和基极的电流等于发射极。


其中红线为5V正极,黑色线为GND

怪我没有电路相关知识,这次乌龙不亚于把main写成mian

[树莓派][GPIO][风扇][断点直播]树莓派4B加装风扇并实现风力和CPU温度控制相关推荐

  1. 随身WiFi加装风扇+天线、插卡可用安卓系统高通410

    花了20块钱买的板子已改好的棒子/加装风扇+天线.插卡可用.安卓系统高通410.已root 面具 .可装模块.百度智连山停北停川停 已经改好的棒子.加装了散热风扇.加装了信号增强天线.插卡可用.安卓系 ...

  2. 树莓派gpio编程c语言,树莓派底层编程-GPIO篇

    0 前言 本来是准备写一篇用python控制GPIO的例子,结果发现太简单了,还是深入一些吧,多深入底层 接下来,我会按照下面的顺序来介绍: 1)GPIO控制器地址映射 2)GPIO主要控制寄存器介绍 ...

  3. 树莓派gpio编程c语言,树莓派gpio编程(一)控制Led灯

    一.编程语言 个人比较喜欢c语言,所以后面的编程都会使用c语言. 使用c语言的话可以使用用wiringPi类库. 1.查看是否安装wiringPi类库,输入下面的命令,如果返回版本信息则表示已安装wi ...

  4. 树莓派 触摸屏_树莓派加装3.5寸触摸屏方法和触摸屏问题处理

    近期给树莓派4B加装3.5寸屏幕,过程记录如下: 目录 前言 一.给系统安装驱动 1.在线安装 2.离线安装 二.使用预装驱动的镜像 三.调整方向 四.调整分辨率 五.屏幕校准 总结 前言 屏幕连接如 ...

  5. 树莓派系列-6-Qt控制树莓派GPIO(3B V1.2)

    Qt 控制树莓派GPIO ​ 今天来个临时小任务,使用树莓派通过GPIO引脚控制继电器开关. 文章目录 Qt 控制树莓派GPIO 系统安装 安装Qt 树莓派引脚图 在Shell中测试 在Qt中编码 在 ...

  6. 利用rfcomm实现树莓派与手机通信_树莓派资源整理汇总(2020年2月18日更新)

    本文收集了树莓派使用过程中经常需要用到的资源,主要包括树莓派系统镜像.树莓派硬件介绍.树莓派GPIO引脚编号.树莓派电路原理图下载.树莓派应用.树莓派工具等等,非常值得收藏. 一.快速上手 树莓派快速 ...

  7. 随身WiFi加装散热风扇完美教程

    买到的第一步就是破坏Esim卡,这一步简单至极,平口螺丝刀一翘就OK了 (注意不要破坏周围线路.元器件) 平口螺丝刀一翘就行 之后就是加装风扇,陶特APP 2.5CM规格风扇花费1.5元包邮(新人0元 ...

  8. 大数据——CentOS 7加装虚拟机存储空间、CPU和内存

    CentOS 7加装虚拟机存储空间 准备条件 扩展空间 操作系统中进行分区扩展文件系统 虚拟机扩展CPU和内存 准备条件 一台已经配置好的虚拟机 虚拟机安装和配置 扩容前 扩展空间 点击扩展 增加存储 ...

  9. Raspberry Pi 4B树莓派 |#入门教程02# 树莓派GPIO控制(Python、C)

    树莓派GPIO编号方式 功能物理引脚 从左到右,从上到下:左边奇数,右边偶数:1-40 通过打开终端窗口并运行命令,可以在Raspberry Pi上访问方便的参考pinout.该工具由GPIO零 Py ...

  10. 树莓派入门(一)—— 树莓派4B介绍

    树莓派由注册于英国的慈善组织"Raspberry Pi 基金会"开发,Eben·Upton/埃·厄普顿为项目带头人.2012年3月,英国剑桥大学埃本·阿普顿(Eben Epton) ...

最新文章

  1. K-Means聚类算法原理
  2. with as递归调用
  3. 缓慢渐变维度的处理方式
  4. 钉钉上手体会:阿里实用主义的野望
  5. LVS——DR模式(负载均衡)
  6. 【转】tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
  7. php调java_php调java接口
  8. 关于DXP2004的安装
  9. HTML5之HTML+CSS3代码(二)
  10. 洛谷P1725 琪露诺
  11. html table中td内容超出显示.怎么实现
  12. 都市白领要学会的规则
  13. Kaggle教程 机器学习中级3 分类变量
  14. 如何将某一文件添加到信任列表?
  15. 小红书数据平台:2022年5月彩妆行业数据洞察报告
  16. Python算法-穷举法和二分法
  17. 【参营经历贴】2022网安夏令营
  18. 奇兔recovery卡刷教程_vivo X6(双4G)刷Recovery教程
  19. ISO14001环境管理体系认证 具体操作流程有哪些?
  20. python float函数是什么,Python float函数实例用法

热门文章

  1. 解决502 bad gateway的九种方案及原因
  2. 502——错误的网关
  3. 优美诗词(持续更新)
  4. 在夕阳再晨的日子里(一)----部员的成长
  5. 约瑟夫环数学问题——举一反三、触类旁通
  6. Windows Server Raid磁盘阵列
  7. 两波形相位差的计算值_有功功率、无功功率和视在功率该怎么计算?
  8. 基于 Verilog 的经典数字电路设计(7)JK 触发器与 T 触发器
  9. KeilC51使用详解 (三)
  10. 自签名证书的安装(一)