去年冬天回鲁西南老家,发现邻居张叔在堂屋地上铺了一块两米见方的"电热毯"——表层是防水皮革,底下埋着碳纤维发热线,接一个从旧冰箱上拆下来的温控器。他挺得意:"一冬天没冻脚,电费才多掏一百多。"但我伸手摸了一下地面,温度忽高忽低,靠近发热线的地方烫手,边角却还是凉的。问题就出在那个冰箱温控器上——它是位式控制,通断温差动辄两三度,根本压不住地暖垫这种小热容负载。
这篇文章想聊的是:如果你真打算在农村自制一块地暖垫,怎么用几十块钱的单片机和合适的算法,把温度控制做到商用产品的水平。
张叔那个冰箱温控器用的是最简单的位式控制(Bang-Bang):温度低于设定值就通电,高于就断电。对于冰箱这种大热惯性的负载,压缩机启停周期长,问题不大。但地暖垫的热容很小——一块2m×1m的碳纤维发热垫,功率200W,热容大约只有3000 J/K。这意味着满功率加热时,温升速率可以达到0.07℃/秒,也就是说位式控制下超调2℃只需要不到30秒。
PID控制的核心在于它不是"开关",而是根据偏差的大小、累积和变化趋势,连续调节输出功率。具体到地暖垫,通常用位置式PID配合PWM输出:
u(t) = Kp·e(t) + Ki·∫e(t)dt + Kd·de(t)/dt
对于200W/2㎡的地暖垫,我实测过一组可用的参数:Kp=8.0,Ki=0.15,Kd=45。这里的单位是"每摄氏度偏差对应多少PWM占空比"。Kp=8意味着偏差1℃时输出8%的占空比,响应不算激进;Ki=0.15用来消除稳态误差,因为地暖垫向水泥地面传热存在固定热阻,纯P控制会留下1~2℃的静差;Kd=45比较大,是因为碳纤维发热线的热惯性虽小,但温度传感器贴在垫子表面时存在约20秒的滞后,微分项能提前"刹车"防止超调。
实际跑下来,从15℃升到35℃,超调不超过0.5℃,稳定后波动在±0.3℃以内。这个精度已经和市售三百元以上的地暖温控器持平。
农村自制场景下,传感器要同时满足三个条件:便宜、防水、能长距离走线。常见的选择有三种:
NTC 10K热敏电阻是最便宜的选择,单价不到两块钱。B值通常取3950K,在25℃时阻值10KΩ,温度系数约-4.4%/℃。缺点是线性度差,需要查表或Steinhart-Hart方程换算。在0~60℃范围内,用三阶Steinhart-Hart公式可以把误差压到±0.1℃。但NTC的一致性差,同批次不同个体的B值可能相差2%,换传感器就得重新校准。
DS18B20是数字传感器,单总线输出,直接给摄氏度数值,12位分辨率下精度±0.5℃。它最大的好处是抗干扰强——单总线协议对时序要求严格,但数据本身是数字的,走三米长的普通双绞线没问题。价格约五块钱一个,防水封装版贵两块。对于农村自制地暖垫,这是性价比最高的方案。
PT100精度最高,±0.1℃起步,但需要恒流源和放大电路,成本直接上到二十元以上,而且模拟小信号在长线下容易受干扰。除非你要做多区精确控温,否则没必要。
我建议的布局是:每平方米放一个DS18B20,贴在发热线之间的空隙处,用铝箔胶带固定,再覆盖一层3mm的EVA隔热棉。这样测的是垫子表面实际温度,而不是发热线局部温度。注意传感器不能直接压在发热线上,否则测到的是线温,可能比表面高10℃以上。
如果你只做一块垫子,单片机直接读传感器、跑PID、输出PWM驱动MOS管就行,不需要通讯。但农村自建房里往往需要多个房间各铺一块,这时候通讯协议就重要了。
方案一:RS-485 + Modbus RTU
这是工业场景的标配,也是我最推荐的。用一对双绞线(甚至普通的网线一对)就能挂32个节点,通讯距离1200米。波特率设9600或19200,半双工。每个温控节点用MAX485芯片,成本三块钱。主控用ESP32或STM32,轮询各节点温度,下发设定值。Modbus寄存器映射可以很简单:保持寄存器0x0000是当前温度(放大10倍),0x0001是设定温度,0x0002是PWM输出值。
实际布线时注意两点:一是总线两端各接一个120Ω终端电阻,二是A/B线要双绞,不要和220V电源线平行走。我见过一个案例,农户把RS-485线和电热垫的电源线捆在一起走了一米,结果通讯误码率飙升到30%,分开走线后立刻恢复正常。
方案二:Wi-Fi(ESP8266/ESP32)
适合有路由器的家庭,可以直接用MQTT上报数据到本地Home Assistant或者自己写的服务器。缺点是农村老房子墙体厚,Wi-Fi穿墙后信号可能只剩-85dBm,丢包严重。如果要用Wi-Fi,建议每个节点配一个外置天线,或者用ESP-NOW协议做节点间直连,再选一个节点做网关。
方案三:LoRa
如果你家院子大,比如主房和偏房之间隔了三十米,LoRa是更好的选择。SX1278模块一对不到三十块钱,433MHz频段,视距通讯轻松过百米,穿两堵砖墙也能有-110dBm的信号。速率低没关系,温度数据每30秒发一次就够了。
以我帮张叔改造的那套为例:主控用ESP32,跑Arduino框架;每个房间一个温控节点,节点用STC15W204单片机(一块五一片),配DS18B20和MOS管驱动;节点间用RS-485手拉手连接,主控轮询。主控同时连Wi-Fi,把数据推到手机上的一个简单网页。总物料成本:主控35元,三个节点各12元,传感器各5元,电源和线材约50元,合计不到150元。加上碳纤维发热线和皮革表层,整块垫子材料费在300元左右。
控温效果:三个房间独立设定,比如卧室32℃、客厅28℃、卫生间35℃,实测温度波动都在±0.4℃以内。PID参数在ESP32上每100ms计算一次,PWM频率用1kHz,MOS管用IRF540N,发热线电流2A以内,连散热片都不用加。
唯一需要留意的是安全:220V转24V的开关电源要选正规品牌,发热线接头必须用热缩管加焊锡压接,不能只拧在一起。地暖垫表面温度建议不超过45℃,所以PID的设定上限要在固件里做硬限幅。
说到底,农村自制地暖垫的核心不是"能不能热",而是"能不能稳"。把传感器选对、PID调好、通讯做可靠,三百块的成本完全能做到千元级产品的控温体验。张叔现在逢人就夸他那块垫子"比城里亲戚家的还准",我知道那是Kd=45的功劳。