基于HR202和LM393的湿敏传感器开关量检测电路设计与应用
2026/9/14 2:28:37 网站建设 项目流程

简介:这是一份面向电子设计、单片机开发与传感器应用的湿敏传感器模块技术资料包,适合在校学生、电子竞赛备赛团队以及初级硬件开发者参考。资料以湿度检测开关传感器为核心,给出从电路原理图到程序实现的一体化设计内容,可用于毕业设计、课程设计或小型项目中的环境湿度检测功能开发。压缩包内共21个文件,主要包含C语言测试程序与汇编启动文件(.c/.a51)、编译生成的Hex与Obj文件、原理图与产品使用手册文档(.doc/.bmp)以及若干图片备份文件,整体大小仅734KB,结构紧凑且便于本地查阅。目前已有141人学习浏览。通过学习这份资料,读者可掌握湿敏传感器的TTL输出测试方法、单片机程序编写框架,并参照原理图与芯片资料完成硬件选型和电路搭建,是快速上手湿度检测模块设计的实用参考资料。

1. 湿敏传感器资料包拆解:一个可用的湿度开关长什么样

解压《湿敏传感器(设计方案+原理图+程序+芯片资料).zip》后,你会看到一套典型的国产湿度开关模块资料:原理图 doc、产品使用手册、Keil C51 工程、STARTUP.A51 启动文件、hex 文件,还有两张实物照片。这套东西的定位很明确——用 HR202 湿敏电阻感知环境湿度,由 LM393 比较器把湿度变化整形成 TTL 电平,51 单片机读取这个电平去控制继电器和 LED。它不直接输出湿度百分比,而是输出一个“湿度是否越限”的开关量。这种设计在学生毕设里常见,在工业现场也大量存在,因为很多场合只需要在湿度过高时启动风机或切断电源,并不需要精确数值。你要做的就是看懂信号链、掌握阈值设定方法,然后把这个模块接到自己的控制板里。

2. 从 HR202 到 LM393:阈值开关式湿度检测的组网原理

2.1 为什么选 HR202 电阻式湿敏传感器

HR202 是一颗阻抗型高分子湿敏电阻,阻抗随相对湿度变化。在 25℃、1kHz 测试条件下,30%RH 时典型阻值约 200kΩ,60%RH 时降到约 30kΩ,90%RH 时只有几 kΩ。这个非线性变化范围跨了两个数量级,用来做开关量判断非常方便:只要设定一个中间电阻作为翻转点,湿度一过线,电阻就会明显变小,分压点电压产生清晰跳变。相比 DHT11 这类数字传感器,HR202 不需要严格时序协议,也不会因为通信失败卡死主机,在长时间通电、震动、油污环境中更不容易跑飞。

新收到的 HR202 建议先做一次“活化”处理:在 25℃、60%RH 环境下放置 24 小时,让高分子感湿层恢复稳定。另外要注意,湿度传感器的阻值参数都是在特定交流测试频率下得到的,1kHz 是厂家常用测试条件,因为纯直流下感湿膜容易极化,导致阻值逐步漂移。

这块资料里的方案没有用 555 振荡器激励,而是直接让 HR202 和一个固定电阻对电源分压,分压点送入 LM393 比较器。直流激励会带来极化效应,长时间工作确实会漂移,但对开关量应用,只要定期校准电位器就能接受。如果你之后要做精密湿度计,可以改成交流方波激励再整流,那是另一套电路了。

2.2 LM393 比较器与阈值设定:电阻比怎么算

LM393 是双路开漏比较器,这里只用其中一路。基本接法是:HR202 一端接 VCC,另一端接一个固定电阻 R1 到 GND,分压点接 LM393 同相输入端,反相输入端接 10k 电位器抽头。当环境湿度升高,HR202 阻值下降,分压点电压 V+ = VCC × R1 / (Rs + R1) 也下降。当 V+ 低于电位器设定的 Vref 时,比较器输出变低,LED 亮、继电器吸合。反过来,当湿度回落,Rs 变大,V+ 上升,输出恢复高电平。

电位器必须接成三端分压形式,而不是只把抽头和一端串联当成可调电阻。三端分压时,Vref 的调节范围是 0~VCC,且调节曲线接近线性;两端接法会造成 Vref 在低端严重压缩,很难在 60%RH 附近精细调到位。具体设定关系是:Vref = VCC × (R_lower / (R_pot_total)),其中 R_pot_total 是电位器总阻值,R_lower 是抽头对地那一段的阻值。电位器旋到不同位置,Vref 随之变化,翻转点也就变化。

假设 VCC=5V、R1=100kΩ,你希望相对湿度 60% 时翻转(HR202 约 30kΩ),则 V+ = 5 × 100 / (100+30) ≈ 3.85V。因此把 Vref 调到 3.85V,比较器就会在 60%RH 附近切换。实际由于 HR202 的温度漂移,这个计算值只作起点,最后以现场湿度计校准为准。想提高翻转点对应的湿度,就把 Vref 调低;想降低翻转点,就把 Vref 调高,因为 V+ 随湿度升高而下降。

2.3 开关量输出与数字传感器的选型边界

很多人在选型时纠结:既然 DHT11 输出数字信号、直接读湿度,为什么还要用这套模拟开关方案?一个重要原因是可靠性。DHT11 的时序要求挺严格,尤其在单片机同时处理继电器、按键时,偶尔一个长中断就可能导致读到的数值全为 0xFF;而 LM393 输出的 TTL 电平只有高低两个状态,单片机只需查询一个引脚,误判概率很低。另一个原因是成本:整套模块元件不到两块钱,还没算单片机 IO 占用。缺点也很明确:没有湿度数值,只有阈值,且受温度和传感器老化影响。所以这套资料适合做湿度边界报警、自动控制,不适合需要连续记录湿度曲线的项目。

另外要注意,LM393 是开漏输出,不接上拉电阻时不能老实输出高电平。这个上拉最好接 4.7kΩ 左右,接到模块 VCC。如果要接到 3.3V 单片机,也可以把上拉电阻单独接到 3.3V,这样输出高电平就是 3.3V,直接兼容一点几伏的 IO 阈值。但模块里 LED 和继电器驱动的电源仍用 5V,两端电源共地即可。

3. 原理图工程化:分压网络、电位器和检查清单

3.1 分压网络怎么接:HR202、R1 和电位器

原文件里的原理图是用 Word 文档和 BMP 位图保存的,放大后能看清网络编号。首先确认电源:模块用 5V 供电,LM393 的 VCC 接 5V,GND 共地。分压网络由 HR202 和 100kΩ 电阻串联构成,这里要注意方向:HR202 接 VCC,R1 接 GND,分压点再进比较器同相端。HR202 的引脚没有严格极性,但焊接时要小心陶瓷基体,引脚根部折弯容易断裂,建议先弯脚再焊接。电位器是 3296 多圈可调电阻,引脚 1 接 VCC,引脚 2 接 LM393 反相端,引脚 3 接 GND,这样调节起来线性度更好。

在重画或移植这个电路时,我一般会加上两个电容:一个 10uF 电解电容在电源入口去耦,一个 0.1uF 瓷片电容在 LM393 电源附近。原图里不一定有,但在继电器吸合瞬间,电流冲击会造成电压跌落,没有去耦电容的话比较器会在跳变点附近来回抖动,这是现场经常踩的坑。更讲究一点的会在比较器输出与同相端之间接一个几百 kΩ 的正反馈电阻,形成约几十毫伏的滞回,进一步抑制临界抖动,但会改变翻转点,需要重新标定。

3.2 元件清单与参数计算

位号规格/型号数量作用备注
U1LM3931双电压比较器只用一半,另一半可以并联或悬空
RsHR2021湿度敏感电阻阻值 30%RH 约 200kΩ,60%RH 约 30kΩ
R1100kΩ 1/4W 金属膜1分压串接电阻改变它可调整检测范围
RP13296W-10kΩ1阈值电位器多圈可调,精度高
R24.7kΩ1LM393 开漏输出上拉不加上拉,高电平无效
R31kΩ1LED 限流如果 LED 直接接比较器输出
C110uF/50V 电解1电源去耦继电器吸合时稳住 VCC
C20.1uF 瓷片1LM393 高频旁路防止输出振荡

参数计算的核心是分压点电压。若把 R1 放在地侧、HR202 接 VCC,则湿度升高时 V+ 下降。翻转条件为 V+ = Vref,即 Rs = R1 × (VCC / Vref - 1)。比如希望 60%RH 时翻转,取 R1=100kΩ,预先用万用表测 HR202 在 60%RH 下的阻值约 30kΩ,那 Vref = VCC × R1 / (100kΩ + 30kΩ) ≈ 3.85V(VCC=5V)。如果把 R1 换成 150kΩ,那么同样 Vref 下翻转点对应的 Rs 更大,也就是在更低湿度就翻转。反过来,R1 越小,需要更潮湿才能触发。所以 R1 是传感器量程粗调,电位器是精调。

3.3 用立创 EDA 检查和重画原理图的几个关键点

如果需要在原图基础上做 PCB,不要直接抄位图,建议用立创 EDA 照着重画。要注意几个细节:HR202 的库在立创 EDA 里可以直接搜到,但引脚封装需要确认是否兼容常见的立式封装;LM393 是 SOIC-8 还是 DIP-8 要提前确定,因为 PCB 封装选择会影响焊盘间距。如果你画过 DHT11 的最小系统原理图,再看这个图会很快上手,因为它比 DHT11 直连更简单,只是多了一个比较器和分压网络。

画完原理图后,用 DRC 检查网络是否只有一个 VCC、一个 GND,重点查 LM393 的 7 脚(OUT)是否接上拉到 VCC,以及电位器抽头是否连接到反相端,而不是接成可变电阻。还有一个容易错的地方:HR202 分压点要接到比较器的同相端,反相端接电位器,如果接反,输出逻辑会完全反过来,变成湿度越高越不报警。这些错误在初学原理图时最常见,花几分钟检查比打板后飞线省时得多。

4. C51 测试程序复位:从源码到 HEX 的完整路径

4.1 工程文件里每个文件是干什么的

解压后有几个后缀名第一次接触的人会发懵:chengxu.lnp、chengxu_Opt.Bak、chengxu.Uv2、STARTUP.A51、chengxu.OBJ、chengxu.hex、chengxu.M51。这里简单归类:Uv2 是 Keil 工程文件,C 源码和 STARTUP.A51 参与编译,OBJ 是编译产生的中间文件,hex 是最终烧录文件,lnp 和 M51 分别是链接脚本和存储器布局,Bak 是备份,LST 是编译列表。其中 STARTUP.A51 是 Keil C51 启动代码,负责清零内部 RAM、调用 main 函数,一般不需要修改。你真正要改的是 chengxu.c 和工程里的芯片型号、晶振频率。hex 文件是 Intel HEX 格式,烧录时不需要关心地址计算,STC-ISP 软件会自动解析。

4.2 主程序:查询比较器输出,带消抖驱动继电器

下面这段代码模拟了资料里 chengxu.c 的核心逻辑,端口定义以 STC89C52RC 为例:

#include <reg51.h> sbit HUM_IN = P3^2; // LM393 输出接 P3.2,低电平表示湿度过高 sbit RELAY = P1^0; // 继电器控制,低电平导通 sbit LED = P1^1; // 湿度超标指示 void delay_ms(unsigned int ms) { unsigned int i, j; for (i = 0; i < ms; i++) for (j = 0; j < 123; j++) // 12MHz 下约 1ms ; } void main(void) { bit over = 0; // 当前湿度是否超标 bit last_over = 0; // 上一次状态 RELAY = 1; // 上电默认不吸合 LED = 1; while (1) { if (HUM_IN == 0) // 第一次检测到低电平 { delay_ms(20); // 消抖,避开继电器弹跳和比较器临界抖动 if (HUM_IN == 0) over = 1; } else { delay_ms(20); if (HUM_IN == 1) over = 0; } if (over != last_over) // 状态变化时才驱动外部设备 { last_over = over; RELAY = over ? 0 : 1; // 超标时继电器吸合 LED = over ? 0 : 1; // 超标时 LED 点亮 } } }

代码的逻辑很直接:HUM_IN每 20ms 采样一次,连续两次读到同一电平才确认状态,避免比较器在翻转点附近振荡导致继电器频繁吸合。over表示当前湿度超标,只有状态翻转时才对继电器和 LED 输出,这样控制动作一次到位,不会周期性重启。delay_ms函数在 12MHz 晶振下,内层循环 123 次约 1ms,如果换到 11.0592MHz 晶振,这个数字不需要改,因为这里不依赖精确时基;但若之后要加串口通信,就必须重新校准延时或改用定时器。

引脚分配上,P3.2 同时也是 INT0,可以改成下降沿中断方式:当湿度从正常变为超标,比较器输出从高变低,触发中断,在中断服务函数里吸合继电器。不过中断方式要处理抖动,反而复杂,查询方式在这种低速信号下更可靠。代码里继电器和 LED 共用over状态,实际项目中可以把它们分开,比如只驱动 LED 调试,继电器留给你自己的控制逻辑。

4.3 Keil C51 编译配置与 STC-ISP 下载

打开 chengxu.Uv2 后,先看 Options for Target 里的 Device 选项。如果 Keil C51 版本较老,里面可能没有 STC89C52RC,这时可以选 AT89S52 先把程序编译通过。STC 芯片在 Keil 中没有原生包,需要从 STC-ISP 软件里找到“Keil 仿真设置”或“添加芯片型号”功能,把 STC 型号库安装进去。这和 Keil MDK 需要单独安装 stm32 芯片包类似,只是 C51 的安装更简单,运行一次自动拷贝即可。

编译前把 Target 标签里的晶振频率改成实际值(比如 12MHz),在 Output 标签勾选 Create HEX File。点击编译后,在输出窗口会看到 “creating hex file from ...” 表示成功。然后打开 STC-ISP 软件,选择芯片型号 STC89C52RC,点击打开程序文件加载 chengxu.hex,串口号选择 USB 转串口对应的 COM 口,波特率可以先设 9600。点击“下载/编程”后,对单片机冷启动(先点下载按钮再给板上电),直到提示下载完成。如果失败,把波特率降到 2400,并检查是否安装了 CP2102 或 CH340 驱动,以及是否有其他软件占用串口。

5. 调试阈值、排除故障和把开关量升级成模拟量

5.1 现场调阈值:三个测量点

拿到焊好的板子,不要急着接单片机。用万用表先测三个点:一是 HR202 两端,确认阻值在几十 kΩ 量级;二是 LM393 的 2 脚(反相端)和 3 脚(同相端),正常时电位器能把 Vref 在 0~5V 之间调节;三是 1 脚(输出),应看到接近 0V 或接近上拉电压(约 5V),中间态说明比较器在振荡或输入悬空。调阈值时,把万用表表笔接到比较器输出,一边缓慢旋转电位器,一边对 HR202 哈气,输出应该发生一次清晰的翻转。若翻转后回不了原状态,把电位器稍微往回调半圈,留出滞回余量。

5.2 常见故障现象与对应检查项

如果输出一直低电平,先看同相端电压是否在所有条件下都低于 Vref——很可能是 R1 焊错或者 HR202 开路,导致 V+ 被拉低。如果输出闪烁不止,检查 LM393 供电脚是否并联 0.1uF 去耦电容,以及上拉电阻是否为 4.7kΩ 左右。上拉阻值过大会造成边沿变缓,接长线时被干扰。另一个隐藏问题是 HR202 在直流激励下的极化,表现为用万用表电阻档测过之后,再上电看阈值漂移了几百毫伏。遇到这种情况,把 HR202 在干燥箱里放一会儿,或反向激励几分钟即可恢复。如果继电器一吸合,比较器输出就抖动,说明电磁干扰串进了分压网络,这时应该把继电器线圈两端并联一个 1N4007 二极管,并把继电器控制线远离湿度采样线。

5.3 把开关量升级成湿度值:ADC 方案思路

这套硬件稍微改动就能从开关量升级成模拟量:把 LM393 拆掉,直接将 HR202 分压点接到单片机内置 ADC,比如 STC89C52RC 没有 ADC,换成 STC12C5A60S2 或 STM32。用 12 位 ADC 采集 V+,再配合 NTC 温度补偿,在 MCU 里做插值查表,就能得到湿度百分比。最好的做法是先把 HR202 校准数据做成二维表格,以 ADC 值和温度为索引,而不是用简化公式算,因为 HR202 的对数阻抗曲线在不同温度区间斜率不同。这样就相当于给毕业设计增加了一个可以展开讲的创新点,而资料里的开关量电路可以作为最终控制输出级继续用。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询