告别DHT22用STM32HR202湿敏电阻自制低成本高精度温湿度计附完整代码与PCB在电子创客圈里DHT22温湿度传感器一直是入门项目的常客但它的高成本和脆弱性也让不少开发者头疼。一块DHT22模块动辄几十元而潮湿环境下的频繁损坏更是让人抓狂。有没有一种既便宜又可靠的替代方案今天我们就用STM32微控制器搭配HR202湿敏电阻打造一个成本不到15元的高精度温湿度测量系统。这个方案的核心优势在于成本极低HR202湿敏电阻单价仅2-3元STM32F103C8T6开发板约10元可定制性强完全自主设计电路和算法适应不同场景需求耐用性高HR202采用树脂封装比DHT22更耐潮湿环境精度可控通过软件算法优化测量精度可媲美商用模块1. 硬件设计与元器件选型1.1 核心元件HR202湿敏电阻特性分析HR202是一款基于高分子材料的湿敏电阻其电阻值随环境湿度变化而改变。与DHT22的数字化输出不同HR202需要配合模拟电路和ADC进行测量。它的关键参数如下参数数值范围说明工作电压AC 1V 1kHz必须使用交流激励信号测量范围20%~95% RH适合常规环境监测响应时间10s比DHT22略慢但足够使用温度系数0.1% RH/℃需要温度补偿注意HR202必须使用交流信号驱动直流电压会导致元件极化失效。这是与DHT22最大的使用差异。1.2 激励信号生成电路设计由于HR202需要交流激励我们采用STM32的PWM输出配合简单RC电路生成1kHz正弦波// PWM初始化代码TIM2 Channel1 void PWM_Init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); TIM_TimeBaseStructure.TIM_Period 71; // 1kHz PWM TIM_TimeBaseStructure.TIM_Prescaler 0; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 36; // 50%占空比 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OCInit(TIM2, TIM_OCInitStructure); TIM_Cmd(TIM2, ENABLE); }通过低通滤波器将PWM转换为近似正弦波电路设计如下[PWM输出] → [10kΩ电阻] → [0.1μF电容] → [HR202] → [地] ↑ [10kΩ电阻]2. 软件算法与温度补偿2.1 ADC采样与数字滤波STM32的ADC以1kHz频率采样HR202两端的电压由于环境噪声影响需要采用滑动平均滤波#define SAMPLE_SIZE 32 uint16_t Get_Filtered_ADC(void) { static uint16_t samples[SAMPLE_SIZE]; static uint8_t index 0; uint32_t sum 0; samples[index] ADC_GetConversionValue(ADC1); if(index SAMPLE_SIZE) index 0; for(int i0; iSAMPLE_SIZE; i) { sum samples[i]; } return (uint16_t)(sum / SAMPLE_SIZE); }2.2 湿度查表与线性插值HR202的电阻-湿度关系是非线性的我们采用查表法线性插值提高精度。首先通过实验测量得到校准数据表typedef struct { uint16_t adc_value; float humidity; } CalibrationPoint; const CalibrationPoint humi_table[] { {1250, 20.0}, // 20% RH {980, 30.0}, {760, 40.0}, {580, 50.0}, {430, 60.0}, {320, 70.0}, {240, 80.0}, {180, 90.0} };插值计算函数实现float Calculate_Humidity(uint16_t adc_val) { uint8_t i; for(i0; isizeof(humi_table)/sizeof(CalibrationPoint)-1; i) { if(adc_val humi_table[i1].adc_value) { float slope (humi_table[i].humidity - humi_table[i1].humidity) / (humi_table[i].adc_value - humi_table[i1].adc_value); return humi_table[i].humidity slope * (adc_val - humi_table[i].adc_value); } } return humi_table[i].humidity; // 超出范围返回最后一个值 }3. PCB设计与开源硬件3.1 四层板设计要点为了减小噪声干扰我们建议采用四层PCB结构顶层放置主要元件和信号走线内电层1完整的3.3V电源平面内电层2地平面底层模拟信号走线和HR202相关电路关键布局原则将HR202放置在板边远离MCU和其他数字元件模拟部分使用独立的LDO供电PWM滤波电路尽量靠近HR2023.2 立创EDA设计分享我们已将完整工程开源在立创EDA平台包含原理图含BOM清单PCB布局文件支持SMT贴片3D预览模型生产用Gerber文件项目特点采用Type-C接口供电板载CH340串口芯片预留SWD调试接口支持18650电池供电4. 系统校准与性能测试4.1 两点校准法为提高测量精度建议使用饱和盐溶液进行两点校准低湿度点使用LiCl饱和溶液约11% RH 25℃高湿度点使用K2SO4饱和溶液约97% RH 25℃校准步骤将传感器置于校准环境中静置2小时记录ADC读数并更新校准表重复3次取平均值4.2 实测性能对比我们使用专业温湿度记录仪作为参考测试结果如下湿度条件DHT22测量值HR202测量值参考值30% RH29.8%30.2%30.1%50% RH49.5%50.3%50.0%70% RH69.2%70.5%70.0%90% RH88.7%89.9%90.0%测试表明经过校准后HR202方案的精度与DHT22相当但在高湿环境下表现更稳定。整个系统成本仅14.5元含PCB是DHT22方案的1/3。