|
发表于 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℃,这样一来从物理上也就规避了【煮鱼】的风险,懒人表示很安心。
最后附上两次的测温固件:
温度测试固件.rar
(30 kb, 下载次数: 3)
--------------------------------------------------------------------------------------------------------
目前 31.8℃ 保持了一周,鱼身小白点已基本脱落,终于可以安心养鱼了。
以上,用 ds18b20 配合热力学方程测算鱼缸参数,精准选择加热棒应对锦鲤白点病。
事后通过占空比测算,证实花鸟鱼市场的卖家很诚实:加热棒功率达标,恒温控制正常。
最终助力一众锦鲤成功摆脱小白点。
最后祝大家养鱼 / 摸鱼顺利!
|
打赏
-
查看全部打赏
|