数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 4845|回复: 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 優秀文章
aping365 + 30 優秀文章
jf201006 + 30 優秀文章
zzy_85569381 + 30 謝謝分享
兔包公 + 30 認真發帖
铃兰花匠 + 30 养好鱼也是一门科学!

查看全部打赏

 楼主| 发表于 2023-8-21 09:46:01 来自手机浏览器 | 显示全部楼层
sadfun 发表于 2023-8-21 09:04
能不能帮我算一下,热水器恒温每增加一度消耗多少电

导热系数 11.26W/C,
每上升一度,一天增加0.27度电
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 09:48:07 来自手机浏览器 | 显示全部楼层
zhkrid 发表于 2023-8-21 09:24
搞这么复杂干什么,直接上温控器设置成32度不够简单

关键是选功率,控温倒是默认都有
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 09:54:09 来自手机浏览器 | 显示全部楼层
pz007123 发表于 2023-8-21 09:15
这么说吧,你要是养热带鱼我还仰慕你一下,你养金鱼加热,哈哈哈,不如你把钻研加热的这个劲学学养鱼吧,弄 ...

鱼是新入手的,缸是消杀好的,所以就往物理因素上选了:用水太凉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 10:25:45 | 显示全部楼层
btywan 发表于 2023-8-21 10:01
小题大作。完全没必要的。到最后也没总结出来,在室温多大?鱼缸多大?时应该用多大功率的加热器。讲句粗话 ...

等效导热系数 11.26W/℃,主要为这个参数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 10:27:51 | 显示全部楼层
水表君 发表于 2023-8-21 10:01
后面直接做一套鱼缸监测系统。水温,水质,过滤,灯光,等等全套控制

哈哈那样就彻底折腾没完了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:27:46 | 显示全部楼层
brianlee 发表于 2023-8-21 09:44
表面养鱼,实则大搞热力学工程

借助方程科学摸鱼
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:31:19 | 显示全部楼层
dianziguan 发表于 2023-8-21 12:47
很专业。但不完美的是最终那条锯齿状的温度曲线。能不能弄条没有波动的恒温线?根据散热量调整加热量? ...

是的,这也是我最开始的设想之一。后续慢慢往里追加吧。

理论上用可控硅 / 固态继电器调功,可以达到稳恒的平衡状态。一般仪器级别恒温水槽就是这种功能,需要额外配合 PID 来避免响应速度不理想。

这个有波动的曲线,恰恰说明了常规开关法控制水温,最终精度就是个锯齿波。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:33:09 | 显示全部楼层
m99010 发表于 2023-8-21 11:52
我去年新手入坑养锦鲤的时候也发生了和你一样的情况,鱼身上也是长了很多小白点,我当时也是觉得是水温低 ...

对,两个方向都有操作。

反正养鱼小白一枚,目前加温+消毒液已经基本控制住了白点。
损失一条大眼泡,白点过快增长,眼炸了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:34:39 | 显示全部楼层
wangxiangtan2 发表于 2023-8-21 11:04
什么样的学历才能搞出热力学方程的拉普拉斯表示???

物理+高数+数理方程,工科科班的要求。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:36:22 | 显示全部楼层
本帖最后由 t3486784401 于 2023-8-21 13:38 编辑
ahyu99 发表于 2023-8-21 11:04
整理下,可以发个SCI了。
不过,似乎也不用这么麻烦,经典的PID就可以保证上下1度的控制要求。


我用了足够加温的功率下限,就算失控也不会上到 40℃+ 煮鱼。

单从这个安心的角度看,就没白折腾

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

PID 折腾恒温水槽的话,一般以 ±0.1℃ 作为平均的合格线;±1℃还是留给简单开关吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 13:46:00 | 显示全部楼层
本帖最后由 t3486784401 于 2023-8-21 13:47 编辑
kindzhon 发表于 2023-8-21 09:58
太牛了,可以写一篇论文了,一般的本科生估计都写不出这么好的。这是来秀高数和物理专业水平来的。Ardunio ...


被恒温水槽的 PID 调节深深磨出了老茧.... 当时要是像这样先给水槽大致建个模,也就能多好多先验算法了。

后来调过一次恒温冷冻箱的 PID,直接就预估模型了,先验模型配合 PID 简直爽到飞起。

倒是低功耗根本顾不上做:
从发现白点开始加热水,到测完温 +建模 +买加热棒 +再测试,也就不到 20hr 的时间。
所有的测试装备都是现组合+软件适配,能跑起来就没再关注优化的事情。

即使这个拯救速度,还是损失了一条大眼泡: 白点入眼,眼炸了。
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-8-21 15:14:16 | 显示全部楼层
m99010 发表于 2023-8-21 14:37
大眼泡、狮子头属于金鱼,和锦鲤一起养还是有点不合适的

还有这说法,我之前大小一起养,小的在几个小时内被吃光了...

然后就只挑大小差不多,互相吃不掉的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 16:24:47 | 显示全部楼层
lemontreenm 发表于 2023-8-21 16:18
所有的看似很复杂的计算过程基本都是在做无用功,最后还是凭经验买的加热棒。实际上测温也没什么必要,直接 ...

加热部分用热得快?
回复 支持 反对

使用道具 举报

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

所以我选择先算,选择一个功率尽可能小的加热棒,100W 就算失控也最高抬升 9℃.

另外用继电器+大功率电热丝的方案,一开始我就没打算折腾,机械继电器用到最后太容易黏连。
非要搞的话,至少也得是 SSR 固态方案。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 18:31:19 | 显示全部楼层
tomyluo 发表于 2023-8-21 18:16
鱼缸的传递函数输入量为加热功率(W),输出量为温升(℃),由导热系数取倒数,得到系统的静态增益0.088 ...

对对就这个套路,再往下去就有个最优的 PID 参数数值;

不过这个系统又不是要随时设定温度的,没有响应速度要求,直接整 P+I 环节大致就能运行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 18:33:41 | 显示全部楼层
look_99 发表于 2023-8-21 16:39
拜读了一篇即将获奖的科学论文,  对小白来讲  一个大功率可调恒温加热棒解决的问题,整出买多大加 ...

就是不知道功率等级,才这么算着来的。

实际上买个小功率的够用,刚刚好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 18:34:32 | 显示全部楼层
renpeng009 发表于 2023-8-21 17:45
开眼界了,我以为要PID呢,最后是选择购买成品加热棒

这么个系统,单单 P 控制就足够恒温;

主要是选加热棒的功率等级,花了些功夫。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 18:35:51 | 显示全部楼层
coverme 发表于 2023-8-21 17:15
要实现什么效果

就是纯小白没经验,通过测算选定了合适功率级的加热棒
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-21 23:56:05 | 显示全部楼层
lemontreenm 发表于 2023-8-21 23:46
你喜欢用也可以啊,又不是不行。关键还是控制模块。

加热棒都带控制模块了,干嘛还要自己搞?

另外计算系统参数的目的,并不是要自己控温,而是选择加热功率等级。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-8-7 14:26 , Processed in 0.171600 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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