我有以下设置:
- Arduino Duemilanove
- 小型热水器与光继电器连接(PWM正常)
- 防水DS18B20温度传感器
- 未知水量(但温度传感器和加热器始终在水下)。
如何根据温度传感器的读数准确控制水温?准确地说,我指的是达到温度传感器的精度(在这种情况下为±0.5°C)。一切都应该在Arduino上运行,因此没有额外的数据存储或处理能力。对于调试,我显然可以使用计算机。
我已经尝试过运行PID,但似乎真的很难
- 避免超调-最初或在添加(冷)水时超过目标温度
- 加入冷水后要适当稳定。
我有以下设置:
如何根据温度传感器的读数准确控制水温?准确地说,我指的是达到温度传感器的精度(在这种情况下为±0.5°C)。一切都应该在Arduino上运行,因此没有额外的数据存储或处理能力。对于调试,我显然可以使用计算机。
我已经尝试过运行PID,但似乎真的很难
Answers:
BrettAM,dE(误差变化率)将随着控制参数而变化,在这种情况下,加热元件信号的脉冲宽度由PID进行更改。我的用语是温度误差变化率是一个糟糕的选择。导数项也将用于解决水的比热随温度的微小变化(20℃时为4.186 kJ /(kg K)至100 ℃时为4.219 kJ /(kg K))。
我的意思是,是的,导数项是计算dE的变化率。由于此处的误差是所需温度与实际温度之间的差,因此导数可计算出水加热速率的变化。
问题在于,通常很难创建带有导数项的稳定系统。PID系统应主要基于比例项。我认为,当改变水量时,会产生更多的非线性,而不是PID可以补偿的。因此,PID需要具有一定的可重复性,并且如果水位严重变化,其系统将不再可重复。
对操作人员:在我的类似设计中,我将尝试使用小型散热器/风扇组合和12V直流泵使水流过,作为冷却水的方法。我觉得这可能会更好。如果成功,我会让你知道。
您需要保持被加热的水量恒定。当您改变水量时(如您提到的那样添加冷水),水温升高的速率将改变。比例积分微分控制器(PID)可以观察到您要控制的变量的微分(变化率)。如果温度变化率不是(合理)恒定的,则PID将永远无法正常工作。
研究水的比热,主要是方程Q = c m dT。Q是增加的热量,我认为在您的设置中是恒定的。m是被加热物质的质量(必须保持恒定!)。c是水的比热,为4.186焦耳/克*℃。如果Q,m和c为常数,则为dT,那么水温的上升速度也将为常数(实际上,c随着温度的变化而略有变化,但是我要说的是,如果您的温度从0开始, 100C)。尝试用恒定的水量调节PID,可能会得到更好的结果。
您正在使用什么热水器?我目前正在做类似的事情,但尝试使用化学实验室的热板,并遇到巨大的过冲。我曾经考虑过改用水族箱加热器,但想知道您正在使用什么?
-马特