【已验证】基于STM32F103的土壤湿度传感器驱动

在什么智慧大棚、智慧农业等一些课设毕设中土壤湿度检测是一个常见需求。本文将介绍如何使用STM32F103微控制器(基于HAL库)驱动一款常见的模拟输出土壤湿度传感器(内部使用NE555芯片),通过ADC读取湿度值,并通过串口输出数据。

1. 硬件准备

  • STM32F103开发板(如STM32F103C8T6最小系统板)

  • 土壤湿度传感器(模拟输出,带NE555芯片,通常有三个引脚:VCC、GND、AO)

  • USB转TTL模块(用于串口调试)

  • 杜邦线若干

传感器与STM32连接

传感器引脚 STM32引脚
VCC 3.3V / 5V(根据传感器要求,多数为3.3V)
GND GND
AO PA0(ADC1通道0)

这玩意的原理就是通过湿度引起电压变化,然后我们通过电压转换为对应的湿度值。不加湿纸巾的时候电压是2.258V,使用湿纸巾覆盖探头部分后电压为1.476V,所以湿度和电压是反比关系。

2. 软件环境

  • STM32CubeMX(用于生成初始化代码)

  • Keil MDK 或 STM32CubeIDE(编译下载)

  • 串口调试助手(如XCOM、SecureCRT)

3. 项目配置(STM32CubeMX)

  1. 新建工程,选择芯片型号(如STM32F103C8)。

  2. 配置RCC:HSE外部晶振(8MHz),系统时钟设为72MHz。

  3. 配置ADC1:

    • 选择IN0(PA0),单次转换,软件触发。

    • 分辨率12位,采样时间可设为55.5周期。

  4. 配置USART1:

    • 异步模式,波特率115200,8N1。

    • 引脚:PA9(TX),PA10(RX)。

  5. 生成代码,选择"初始化所有外设",生成独立的.c/.h文件。

4. 代码实现

在生成的工程基础上,编写main.c文件,实现ADC读取、电压转换、湿度百分比计算并通过串口打印。下面给出关键部分代码,其实原理很简单的。

复制代码
/**
 * @brief 读取ADC值,计算电压和湿度百分比,通过串口输出
 */
void ReadSoilMoisture(void)
{
    uint16_t adc_value = 0;
    float voltage = 0.0;
    float moisture_percent = 0.0;

    HAL_ADC_Start(&hadc1);
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK)
    {
        adc_value = HAL_ADC_GetValue(&hadc1);
    }
    HAL_ADC_Stop(&hadc1);

    // 参考电压3.3V,12位ADC最大值4095
    voltage = (adc_value * 3.3f) / 4095.0f;

    // 湿度换算:假设电压0V对应100%湿度,3.3V对应0%湿度(线性)
    // 实际使用时请根据传感器特性校准
    moisture_percent = (1.0f - (voltage / 3.3f)) * 100.0f;
    if (moisture_percent < 0) moisture_percent = 0;
    if (moisture_percent > 100) moisture_percent = 100;

    char msg[64];
    sprintf(msg, "ADC: %d, Voltage: %.2f V, Moisture: %.1f%%\r\n", adc_value, voltage, moisture_percent);
    HAL_UART_Transmit(&huart1, (uint8_t*)msg, strlen(msg), 100);
}

5. 代码说明

  • ADC读取:采用单次转换模式,每次读取前启动转换,读取后停止。采样时间设为55.5周期,可适应传感器输出阻抗。

  • 电压转换:STM32F103的ADC为12位,参考电压3.3V,因此电压值 = ADC值 * 3.3 / 4095。

  • 湿度计算:传感器输出与湿度的关系通常是非线性的,但很多低成本传感器可以近似为线性。示例中假设电压越低湿度越高(常见情况),实际使用时建议在干燥空气和水中分别测量ADC值,然后通过插值得到更准确的百分比。

  • 串口输出:通过USART1每秒输出一次数据,便于在串口助手查看。

6. 测试结果

将程序下载到开发板,连接传感器,打开串口助手(波特率115200),即可看到类似输出:

7. 参考代码

通过网盘分享的文件:SoilSensor_ADC_Example.zip

链接: https://pan.baidu.com/s/1E-QKsymzPdlj2C0TVGNegw?pwd=rvfw 提取码: rvfw

--来自百度网盘超级会员v8的分享

相关推荐
HQB20263 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
果壳science5 小时前
张祥前实验如何获取正电荷
笔记·科技·嵌入式硬件·硬件工程·制造
南山电子nscn5 小时前
中科芯CETC汽车电池管理系统BMS进口芯片国产型号替代指南
单片机·汽车·bms
沉淀的.晴天5 小时前
can总线
stm32
桀人6 小时前
认识AT24C02
stm32·单片机·嵌入式硬件
国科安芯7 小时前
星间激光通信终端CANFD控制网络的时延确定性与辐射可靠性
网络·嵌入式硬件·信息与通信·canfd·低轨卫星·商业航天·抗辐射
一直C7 小时前
嵌入式 Linux 驱动开发学习笔记:内核定时器、platform 总线与 I²C 驱动
linux·驱动开发·嵌入式硬件·学习·imx6ull
传感器与混合集成电路7 小时前
150MHz主频、8路DAC与6路PWM:JLH221360伺服控制SIP解析
嵌入式硬件
comyccccc7 小时前
STM32PID控制板设计全解析学习笔记
单片机·嵌入式硬件
碧海银沙音频科技研究院8 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法