数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4940|回复: 158

[Arduino] 用18B20配合热力学方程测算鱼缸参数,精准选择加热棒应对白点病(原创)

    [复制链接]
发表于 2023-8-21 04:58:36 | 显示全部楼层 |阅读模式
一切的孽缘,从邻居扔了一只玻璃鱼缸,又被我捡回家开始。

捡回来挺大个,清理消毒擦干净,2812光污染灯条扯上,滤水水泵搞起来:




【水缸测温】

起初菜场买了几条小鱼,发现镇不住缸,索性花鸟鱼市场跑一趟。鱼终于是凑齐了,可问题随之而来:
回家没几天,鱼身鱼尾上开始出现小白点,并且有增多趋势。



一查不要紧,就是传说的白点病。本质是一种鱼的皮下寄生虫,诱因是水温低,特点是会传染。
按照过来人的说法,能加热到 >30℃ 这个病症就能自行消退,反过来任其发展就会整缸吃席。

当晚没有合适的加热装置,只能强行换入热水,短暂提升到30℃+,计划天明后再去购入加热棒。

看着稍纵即逝的水温,觉着可以用 18B20 测个曲线啥的,说干就干:



由于事出紧急,水温时刻都在下降,准备太久可能就测不到手动换热水的状态了。
索性拿 Arduino 和笔记本直接搞,读取 18B20 后直接丢给笔记本串口存储,连夜工作起来。

第二天拿到数据,画个曲线大致这样:




【热力学推导】

养鱼小白对加热器没啥经验,但知道加热失控会进入【煮鱼】模式,一缸鱼分分钟变火锅涮肉。

为避免这种悲剧,打算先用数学方式解决一下,万一真搞坏了也不留遗憾。

考虑到水缸有 “气”、“泵” 以及 “鱼” 的循环工作,可以认为缸内水温大致是均匀的。
因而水缸和周围环境大致符合经典热方程,以拉普拉斯算符表示为:



式中水温 T 随时间 t 的变化率,正比于 T 在空间中梯度的散度,即 ▽^2 T.
鱼缸置于室内,可认为四面环境温度 Tamb 近似一致,拉普拉斯算符可以退化为:



至此热方程退化为一阶线性常微分方程:



式中 T 为水温,Tamb 为室温,k 为比例常数。按照分离变量法搞一下:



获得了经典的 exp 暂态解,一般将 1/k 写作时间常数τ,上述式子整理为:



这与电容充放电暂态有着一样的数学表达。

Tamb+A 就是刚加上热水时刻(t=0)的水温,类似于电容的起始电压;
随着时间推移,水温高于环境而不停散热,类似于电容被电阻不停放电;
最终很长时间后(t=+∞)水温降至环境 Tamb,类似于电容放电完成。


【热力学回归】

理论上上述 18B20 测得的温度衰减过程,应该符合热方程的解,因而考虑进行回归运算。

然而 Excel 这个智障只给简单的线性回归、指数回归,趋势线(图中黑色)不堪入目:



走到这里只能靠自己,那就对方程的解改造一下,传说中的曲线改直大法:



在 Excel 当中手动微调 Tamb,使得 ln(T-Tamb) 与 t 的函数关系成近似直线,就相当于估算出了 Tamb 数值;
同时利用 Excel 的直线回归,就可以获得 τ、A 这些参数,整个回归运算就稳妥了。

为此在 Excel 当中设定一个可调的 Tamb,利用 Excel 自动运算,获取原始数据 T 的 ln(T-Tamb) 曲线。
当 Tamb 过低或过高时,ln 曲线都会偏离直线的样子,表现为再次回归 R^2 偏离 +1.0:

Tamb 偏低的样子:


Tamb 偏高的样子:


Tamb 正确回归的样子:


可以看到 Tamb 正确回归后,ln 曲线与趋势直线的符合度 R^2= 0.999,这是非常棒的线性关系。
利用 EXCEL 给出的回归方程 y= (-1.34e-4)x + 1.64,以及手调的 Tamb 就可以算出完整的鱼缸温度方程:



式中 T 为鱼缸水温(℃),t 为热水注入后的时长(s)。可以看到时间常数 τ≈5hr,对应鱼缸热了5小时的量级。
把原始18B20的温度点(红)与上述温度方程(蓝)画在一起,这俩曲线就很符合了,证实分析与回归有效果:




【功率参数推导】

至此获得了鱼缸的温度方程,配合鱼缸容量、水的比热,可以很方便的推导出鱼缸的散热功率:



式中 C 为水的比热容(4.2kJ/kg℃),M 为水的质量(50L鱼缸对应50kg),进而推导出鱼缸与环境的等效导热系数:



这个数值代表着鱼缸比室温每高 1℃,就会产生约 11.26W 的散热功率;
反过来代表着每使用 11.26W 的加热器,就可以把鱼缸水温抬高 1℃.

考虑到四季室温在 20-30℃ 区间变化,为使鱼缸都能有 30℃+ 的水温,最差情况需要抬升约 10℃,对应不小于 100W 加热器。

更进一步查询养鱼加热经验,一般要求每升水使用 1.5-2.0W 加热功率,即 50L 水缸需要 75-100W 加热器。
这与热力学计算结果相吻合,侧面证实了方程没跑偏、18B20 测试没跑偏。


【入手加热棒】

算到这里天还没黑,赶紧又跑去花鸟鱼市场入手一根 100W 加热棒,安装走起来。



加热棒可调温,果断拧到 32℃ 附近启动自行恒温。为求稳妥,再次挂上 18B20 企图测温,然而开始蛋疼了:

使用 220V 的加热棒在水中产生了感应电压,这个电压与笔记本 220V 供电叠加为共模干扰,
导致 18B20 误码率、USB串口误码率明显上升,测量结果时好时坏。

虽然断开笔记本供电(即使用电池浮地测量)可以解决该共模干扰,但让笔记本电池续航十几个小时并不现实。

这要求必须搞一套浮地的测量+记录系统,并且要求电池续航 >10hr.


【浮地测温】

翻出早期组装的堆叠式 SD 扩展板,尝试把 SD 卡挂载在 Arduino 测量系统上:



再扒出祖传 128M 小容量大卡,这些 SD 卡对传统 SPI 访问兼容性非常好:



灌入程序,带 SD 卡存储的 18B20 温度采集器工作起来:



10000mAh 的充电宝在 5V 模式下大约有 7.2Ah;按照显示电量(65%)计算还剩余 4.7Ah;
整套 Arduino+SD+18B20 工作电流大约 100mA,这样续航将近 47h 足够测试需求。

Arduino 框架对于 SD-FAT 文件系统的支持非常完善,可以直接 fopen-print-fclose 这样访问 SD 文本文件:



连续记录 10hr 的加热工作,只产生了 230 KB 的 TXT 文件,相比之下 128 MB 的卡容量简直太充足:




【加热评估】

数据考出来再画个曲线,很明显看到了加热棒的开关恒温过程:



温度被准确控制在 31.6-31.9 ℃ 之间的范围。拉宽横轴估算工作占空比约为 31% :



水温平均为 31.8℃,室温大约 29℃,鱼缸平均散热功率:Pdis= (31.8℃-29℃)*11.26W/℃ = 31.5W;
在上述 31% 占空比下,可以估算加热器的峰值功率:Pmax= 31.5W/31% = 101.6W .

与购买的额定值 100W 相符,证实老板没坑我,同时也证实加热器控温正常。

另一方面,即使未来某天加热器控温失效,触点黏连导致 D=100% 全力加热,也只有 100W 的热功率。
对应到水温峰值不超过 Tamb +9℃,这样一来从物理上也就规避了【煮鱼】的风险,懒人表示很安心。


最后附上两次的测温固件:

--------------------------------------------------------------------------------------------------------

目前 31.8℃ 保持了一周,鱼身小白点已基本脱落,终于可以安心养鱼了。

以上,用 DS18B20 配合热力学方程测算鱼缸参数,精准选择加热棒应对锦鲤白点病。
事后通过占空比测算,证实花鸟鱼市场的卖家很诚实:加热棒功率达标,恒温控制正常。

最终助力一众锦鲤成功摆脱小白点。

最后祝大家养鱼 / 摸鱼顺利!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 10家元 +297 收起 理由
cushion + 30 優秀文章
IlovePLC + 30 優秀文章
zzqqzzz + 30
zto中通快递 + 27
飞向狙沙 + 30 優秀文章

查看全部打赏

发表于 2023-12-9 11:28:55 | 显示全部楼层
楼主这一通数学计算,是搞科研的吗?
回复 支持 反对

使用道具 举报

发表于 2023-11-16 23:52:11 | 显示全部楼层
热力学计算可是个高难度的活
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-10-26 15:34:42 | 显示全部楼层
maya593 发表于 2023-9-29 16:02
有种拿炮打鸟的感觉不过很佩服楼主,技术强大的无以复加 ...

同时学习了工科的测量,又有理科的方程,索性拿来互相印证下
回复 支持 反对

使用道具 举报

发表于 2023-10-9 15:02:23 | 显示全部楼层
13870917078 发表于 2023-8-21 10:47
被养鱼耽误的数学家

回复 支持 反对

使用道具 举报

发表于 2023-9-29 16:02:44 | 显示全部楼层
有种拿炮打鸟的感觉不过很佩服楼主,技术强大的无以复加
回复 支持 反对

使用道具 举报

发表于 2023-9-29 12:06:43 | 显示全部楼层
灯光花里胡哨的,鱼受得了吗?
回复 支持 反对

使用道具 举报

发表于 2023-9-25 08:25:54 | 显示全部楼层
t3486784401 发表于 2023-9-24 17:39
4. 把缸砸了。。。

思路新奇
杀生了
回复 支持 反对

使用道具 举报

发表于 2023-9-24 21:02:15 | 显示全部楼层
pxb8888 发表于 2023-8-21 07:21
完全看不懂什么意思,好复杂的样子,智能温度控制器不行吗

这一串的公式表示都还给老师了
回复 支持 反对

使用道具 举报

发表于 2023-9-24 21:01:47 | 显示全部楼层
好家伙楼主这是搞了个光污染呀
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-24 17:39:19 | 显示全部楼层
网络孤客 发表于 2023-9-24 16:08
解决方法很多:
1、PWM控制温度(楼主的)
2、通过调压控制温度

4. 把缸砸了。。。
回复 支持 反对

使用道具 举报

发表于 2023-9-24 16:08:58 | 显示全部楼层
解决方法很多:
1、PWM控制温度(楼主的)
2、通过调压控制温度
3、恒温房
......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-23 00:56:13 | 显示全部楼层

逮bug会导致体重不受控上升,让我都觉着地球OL是不是也有bug
回复 支持 反对

使用道具 举报

发表于 2023-9-11 07:43:29 | 显示全部楼层
t3486784401 发表于 2023-9-10 17:18
不,下辈子要投胎为BUG,坑死程序员

逮bug逮到头秃。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-10 17:18:34 | 显示全部楼层
xuyapple 发表于 2023-9-10 17:11
可怜的鱼,鱼下辈子要投胎程序员了

不,下辈子要投胎为BUG,坑死程序员
回复 支持 反对

使用道具 举报

发表于 2023-9-10 17:16:49 来自手机浏览器 | 显示全部楼层
t3486784401 发表于 2023-8-25 00:01
用两个温控器,比用一个的可靠性肯定要高一些。

目前我就是用的加热棒自带温控;可靠性全靠功率峰值在这 ...

但是持续加热在40度,水会蒸发得更快,最终水温会一直上升的,如果没有及时发现的话
回复 支持 反对

使用道具 举报

发表于 2023-9-10 17:11:43 来自手机浏览器 | 显示全部楼层
xueyeteng 发表于 2023-8-21 16:27
我煮过鱼。当年买了个加热棒恒温不准,我就把我自做的DS18B20测温板挂上了,但忘记了我原来的固件有个BUG导 ...

可怜的鱼,鱼下辈子要投胎程序员了
回复 支持 反对

使用道具 举报

发表于 2023-9-7 13:17:34 | 显示全部楼层
换做是我,一不小心做了一缸汤呢
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-7 00:41:39 | 显示全部楼层
lvyylvyy 发表于 2023-8-29 11:19
注电热力学里面,看到过两条类似曲线,什么mpv,忘得一干二净

搞工程出身没学过这个方向,结果都是书到用时方恨少
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-9-5 13:56 , Processed in 0.249601 second(s), 14 queries , Gzip On, Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表