当前位置: 首页 > news >正文

外设模块学习(14)——雨滴传感器、土壤湿度传感器(STM32实现)

目录

引言

一、雨滴传感器

1.1 雨滴传感器介绍

1.2 相关参数

1.3 硬件构成

1.3.1 感应板(垫)

1.3.2 电子模块

1.3.3 原理图

1.4 引脚定义及功能

1.5 参考代码(STM32)

1.5.1 rain.h

1.5.2 rain.c

1.5.3 adc.h

1.5.4 adc.c

1.5.5 main.c

二、土壤湿度传感器

2.1 土壤湿度传感器介绍

2.2 相关参数

2.3 硬件构成

2.3.1 土壤探头

2.3.2 电子模块

2.3.3 原理图

2.4 引脚定义及功能

2.5 参考代码(STM32)

2.5.1 soilhum.h

2.5.2 soilhum.c

2.5.3 adc.h

2.5.4 adc.c

2.5.5 main.c

三、小结


       本次我们继续学习俩传感器,分别是雨滴传感器以及土壤湿度传感器,顾名思义,就是用于检测雨水量以及检测土壤湿度的传感器,如下图所示。

       最右边就是雨滴传感器核心部件、中间是土壤湿度传感器核心部件,最左边是大家应该很熟悉的器件,用于调节检测灵敏度的比较器电路,可以通过调节蓝色电位器修改检测阈值(也就是判断雨水是否够多、土壤湿度是否够大),然后可以看见一共6个管脚,分别对应与传感器部件(2个引脚)和控制器(4个引脚)连接的引脚,详细内容下面来介绍。


一、雨滴传感器

1.1 雨滴传感器介绍

       雨滴传感器是一种传感装置,主要用于检测是否下雨及雨量的大小,可用于天气状况的监测,可以检测有没有下雨。

        这个传感器之所以能够检测雨水量,得益于它的感应板上分布了多排裸露的铜导线,他们可以充当一个可调电阻(电位器),这个电阻可以根据感应到的水量发生变化。

       简单来说也就是:

       (1)感应板上雨水越多,电阻越低,传导能力越强

       (2)感应板上雨水越少,电阻越高,导电性就变差

       所以当雨水滴落时,水分的增加使得电阻变小,导电性增强;反之,水分减少时,电阻增大,导电性降低。传感器会根据电阻变化输出不同大小的电压,我们可以连接单片机(如STM32、51等)的端口进而获取电压大小,进而获取当前外界环境雨水量,最终实现对当前天气的简单预测。

1.2 相关参数

名称

雨滴传感器

工作电压

DC 3.3~5V

比较器

LM393

工作电流

15mA

输出方式

AO、DO

1.3 硬件构成

       正如前面所述,雨滴传感器硬件主要由两部分构成:雨水感应板电子模块,如下图所示。

1.3.1 感应板(垫)

       这是实现检测雨水量的核心部件,所以传感器核心原理也在此,前面简单介绍过,这里再详细说一下:

        雨滴传感器有一个感应板,板上布满了一系列裸露的铜导线,这些导线通常放置在户外,可能安装在屋顶或者任何能直接受到雨水影响的地方。

       这些导线通常是不连接的,而是通过水的桥接作用来传导电流。当水滴落在导线表面时,水的存在使得导线之间形成电流通路。水越多,导电性越强,电阻越低。

1.3.2 电子模块

       传感器还有一个电子模块,它的2引脚那端会连接感应板,另一端4引脚会连接使用的单片机。这个模块可以根据感应板的电阻变化产生不同电压,然后通过模拟输出(AO)引脚提供给单片机(如STM32、51等)。

        同时,该模拟量还会送到LM393高精度比较器进行数字化处理,输出结果能够通过数字输出(DO)引脚传给单片机。而且模块上放置了一个蓝色电位器,可以调节数字输出的灵敏度,换句话说,调节电位器旋钮可以设定雨水量阈值:当水量超过阈值时,数字输出DO引脚就会输出低电平,否则输出高电平。简单来说即:顺时针旋转旋钮可以增加灵敏度,逆时针旋转则减少灵敏度

       此外,模块上还有两个LED灯:电源LED,当模块通电时亮起;状态LED,当数字输出为低电平时亮起,表示感应到一定量雨水。

1.3.3 原理图

1.4 引脚定义及功能

引脚名称

功能描述

VCC

电源正极,接3.3V~5V

GND

电源负极,接地

DO

数字输出,0-超过阈值,1-低于阈值

AO

模拟输出,描述雨水量

1.5 参考代码(STM32)

       接下来,根据其原理基于STM32给出参考测试代码,该代码基于寄存器方式进行编写,当然由于传感器原理比较简单,因此逻辑应该容易理解。

1.5.1 rain.h

/** @Descripttion: 雨水传感器驱动文件(.h)* @Author: JaRyon* @version: * @Date: 2025-11-03 07:49:56*/
#ifndef __RAIN_H
#define __RAIN_H#include "stm32f10x.h"/*** 引脚接线* * VCC  --->  3.3/5V* GND  --->  GND* DO   --->  PA0* AO   --->  PA1* 
*/void Rain_Init(void);
uint8_t Rain_Detect(void);#endif 
/*** (C) COPYRIGHT 2025 END OF FILE ***/

1.5.2 rain.c

/** @Descripttion: 雨水传感器驱动文件(.c)* @Author: JaRyon* @version: * @Date: 2025-11-02 10:19:57*/
#include "rain.h"/*** @brief      雨水传感器初始化* @param      void 无* @return     void* @example    Rain_Init();* @attention  */
void Rain_Init(void)
{// 1. 开启时钟 PARCC->APB2ENR |= RCC_APB2ENR_IOPAEN;// 2. DO-PA0 浮空输入 mode-00 cnf-01GPIOA->CRL &= ~GPIO_CRL_MODE0;GPIOA->CRL |= GPIO_CRL_CNF0_0;GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
}/*** @brief      检测雨水量,获取状态* @param      void 无* @return     uint8_t* @example    uint8_t gasState = Rain_Detect();* @attention  */
uint8_t Rain_Detect(void)
{uint8_t rainState = 0;if (GPIOA->IDR & GPIO_IDR_IDR0){rainState = 1;}return rainState;
}

1.5.3 adc.h

1.5.4 adc.c

       这部分可以参考前面使用的ADC代码如下

外设模块学习(11)——火焰传感器、光敏电阻传感器(STM32)-CSDN博客https://blog.csdn.net/2301_79475128/article/details/154203303?spm=1001.2014.3001.5501

1.5.5 main.c

       雨水量超过设定阈值,PC13连接的LED点亮,同时屏幕显示特定字符,反之LED熄灭,同样显示指定字符。

/** @Descripttion: 雨水传感器测试程序* @Author: JaRyon* @version:* @Date: 2025-11-02 10:19:57*/
#include "stm32f10x.h"
#include <string.h>
#include "Systick.h"
#include "oled.h"
#include "rain.h"
#include "LED.h"
#include "adc.h"int main(void)
{uint32_t waitTimes = 0;char *str = "Normal";double RainIntensity = 0, RainRes = 0.0;uint8_t count = 0;// 初始化Systick_Init();LED_Init();OLED_Init();OLED_ClearAll();ADC1_Init();Rain_Init();ADC1_StartConvert();waitTimes = Systick_GetTick();while (1){if (Systick_GetTick() - waitTimes >= 10000){if (Rain_Detect() == 0){str = "rainDrops";LED_On(LED1);}else{str = "Normal";LED_Off(LED1);}// 提高精度 算10次均值RainIntensity += (3.3 - ADC1_GetVol()) * 100 / 3.3;count++;if (count >= 10){RainRes = RainIntensity / count;count = 0;RainIntensity = 0;}waitTimes = Systick_GetTick();}OLED_ShowString(63 - 8 * strlen(str) / 2, 27, str, 8);OLED_ShowString(25, 45, "RI:", 8);OLED_ShowFloat(53, 45, RainRes, 3, 1, 8);OLED_Update();}
}

二、土壤湿度传感器

2.1 土壤湿度传感器介绍

       土壤湿度检测是现代智能农业、园林自动灌溉系统中的重要组成部分。本次介绍的四针式土壤湿度传感器模块可以通过探头的两个导电电极以及电子模块实现对土壤湿度的监测

        该传感器成本低、可靠性高、易于集成等,常用于土壤湿度监测等其他应用场景。

2.2 相关参数

参数规格
工作电流约15-20mA

工作电压

DC 3.3~5V

模拟输出范围0-VCC
数字输出电平0V或VCC
响应时间<1s
工作温度-10°C ~ +60°C

2.3 硬件构成

       土壤湿度传感器同样也由土壤探头以及电子模块由两部分组成,其中电子模块与前面介绍的雨滴传感器使用的电子模块一模一样,这里不再赘述。因此下面主要介绍其土壤探头。

2.3.1 土壤探头

       这个探头部分是检测土壤湿度的核心部件,只需要将该探头插进土壤中即可。其检测原理如下:

       该探头由两个导电电极组成,然后将这俩导电电极插进土壤中时,土壤水分含量会影响电极间的电阻值,土壤的水分含量越高,导电性越强,电阻越低。然后通过模块上的其他电路转换成电压,原理与雨滴传感器比较类似。

2.3.2 电子模块

       由于土壤湿度传感器的电子模块与前面雨滴传感器使用的电子模块一模一样,原理类似,因此这里不再赘述。

2.3.3 原理图

2.4 引脚定义及功能

引脚名称

功能描述

VCC

电源正极,接3.3V~5V

GND

电源负极,接地

DO

数字输出,0-超过阈值,1-低于阈值

AO

模拟输出,描述土壤湿度高低

2.5 参考代码(STM32)

       接下来,根据其原理基于STM32给出参考测试代码,该代码基于寄存器方式进行编写,当然由于传感器原理比较简单,因此逻辑应该容易理解。

2.5.1 soilhum.h

/** @Descripttion: 土壤湿度传感器驱动文件(.h)* @Author: JaRyon* @version: * @Date: 2025-11-03 8:22:12*/
#ifndef __SOILHUM_H
#define __SOILHUM_H#include "stm32f10x.h"/*** 引脚接线* * VCC  --->  3.3/5V* GND  --->  GND* DO   --->  PA0* AO   --->  PA1* 
*/void SoilHum_Init(void);
uint8_t SoilHum_Detect(void);#endif 
/*** (C) COPYRIGHT 2025 END OF FILE ***/

2.5.2 soilhum.c

/** @Descripttion: 土壤湿度传感器驱动文件(.c)* @Author: JaRyon* @version: * @Date: 2025-11-03 8:22:12*/
#include "soilhum.h"/*** @brief      雨水传感器初始化* @param      void 无* @return     void* @example    SoilHum_Init();* @attention  */
void SoilHum_Init(void)
{// 1. 开启时钟 PARCC->APB2ENR |= RCC_APB2ENR_IOPAEN;// 2. DO-PA0 浮空输入 mode-00 cnf-01GPIOA->CRL &= ~GPIO_CRL_MODE0;GPIOA->CRL |= GPIO_CRL_CNF0_0;GPIOA->CRL &= ~GPIO_CRL_CNF0_1;
}/*** @brief      检测雨水量,获取状态* @param      void 无* @return     uint8_t* @example    uint8_t soilHumState = SoilHum_Detect();* @attention  */
uint8_t SoilHum_Detect(void)
{uint8_t soilHumState = 0;if (GPIOA->IDR & GPIO_IDR_IDR0){soilHumState = 1;}return soilHumState;
}

2.5.3 adc.h

2.5.4 adc.c

       这部分同样可以参考前面使用的ADC代码如下

外设模块学习(11)——火焰传感器、光敏电阻传感器(STM32)-CSDN博客https://blog.csdn.net/2301_79475128/article/details/154203303?spm=1001.2014.3001.5501

2.5.5 main.c

       土壤湿度超过设定阈值,PC13连接的LED点亮,同时屏幕显示特定字符,反之LED熄灭,同样显示指定字符。

/** @Descripttion: 土壤湿度传感器测试程序* @Author: JaRyon* @version:* @Date: 2025-11-03 8:22:12*/
#include "stm32f10x.h"
#include <string.h>
#include "Systick.h"
#include "oled.h"
#include "soilhum.h"
#include "LED.h"
#include "adc.h"int main(void)
{uint32_t waitTimes = 0;char *str = "Normal";double SoilHum = 0, SoilHumRes = 0.0;uint8_t count = 0;// 初始化Systick_Init();LED_Init();OLED_Init();OLED_ClearAll();ADC1_Init();SoilHum_Init();ADC1_StartConvert();waitTimes = Systick_GetTick();while (1){if (Systick_GetTick() - waitTimes >= 10000){if (SoilHum_Detect() == 0){str = "HumOver";LED_On(LED1);}else{str = "Normal";LED_Off(LED1);}// 提高精度 算10次均值SoilHum += (3.3 - ADC1_GetVol()) * 100 / 3.3;count++;if (count >= 10){SoilHumRes = SoilHum / count;count = 0;SoilHum = 0;}waitTimes = Systick_GetTick();}OLED_ShowString(63 - 8 * strlen(str) / 2, 27, str, 8);OLED_ShowString(25, 45, "SH:", 8);OLED_ShowFloat(53, 45, SoilHumRes, 3, 1, 8);OLED_Update();}
}

三、小结

       本文介绍了雨滴传感器和土壤湿度传感器的原理及应用,两种传感器均包含电子模块,提供模拟和数字输出,并可通过电位器调节灵敏度。本文详细说明了传感器参数、硬件构成、引脚定义,并提供了基于STM32的驱动代码测试程序,包括初始化设置、检测函数及主程序逻辑,可用于实际检测以及学习使用。


以上便是本次文章的所有内容,欢迎各位朋友在评论区讨论,本人也是一名初学小白,愿大家共同努力,一起进步吧!

鉴于笔者能力有限,难免出现一些纰漏和不足,望大家在评论区批评指正,谢谢!

http://www.dtcms.com/a/573514.html

相关文章:

  • 小白银行测试初步了解(一)
  • 第14讲:HTTP网络请求 - Dio库的使用与封装
  • 西安市城乡建设管理局网站唐山专业网站建设公司
  • Flink集群部署以及作业提交模式详解
  • Windows系统Git的安装及在IDEA中的配置
  • Linux网络(二)——socket编程
  • 图书出版的幕后故事-《JMeter核心技术、性能测试与性能分析》背后不为人知的事
  • 最好的做网站公司有哪些河北网站推广优化
  • Voronoi 图及其在路径搜索中的应用
  • 网站模版自适应建设商务网站ppt
  • 舞台灯光透镜厂数字化:AI赋能光学检测与镀膜调控新范式
  • 买国外空间哪个网站好中国正式宣布出兵
  • 建设网站需要注册证书吗建站排行榜
  • AWS区域显示工具:统一化设计与实现
  • Valgrind 在嵌入式 Linux 平台:工作原理、典型场景与案例分析
  • 仙桃网站设计游戏优化是什么意思
  • journalctl 日志清理
  • 【javaFX基础】示例“无标题“控制器类的骨架、public class PleaseProvideControllerClassName {}问题处理
  • 计算文章的相似度
  • 网络通信的奥秘:HTTP详解 (六)
  • 郴州网站建设设计网站开发工程师职位概要
  • 夸克网盘下载速度几十KB怎么解决?- 在线免费工具
  • 如何搭建自己的交易系统
  • 分苹果问题
  • 2025年人工智能领域五大认证体系全景解析与选择策略
  • 人工智能导论(期末复习)
  • 怎么用软件做原创视频网站dw个人网站设计模板
  • Linux 安装 Elasticsearch:避坑指南 + 性能调优实战
  • 测开学习DAY23
  • 站长之家域名信息查询微信店铺怎么开