一、土壤湿度传感器介绍
土壤湿度传感器是一种用于测量土壤中水分含量的传感器,广泛应用于农业、园艺和环境监测等领域。它可以帮助用户实时监测土壤的湿度,进而决定是否需要灌溉,确保植物获得适量的水分。
土壤湿度传感器的工作原理:
土壤湿度传感器通过测量土壤的电导率来确定其湿度。通常,湿润的土壤具有较好的导电性,而干燥的土壤则导电性较差。传感器内置的电极会在土壤中插入,通过测量电流变化来推算土壤的湿度。
主要类型:
-
模拟型土壤湿度传感器:
- 输出模拟信号(如0-5V),可以直接与微控制器的模拟输入接口连接。通过读取模拟信号的电压变化,计算土壤的湿度值。
- 优点:结构简单、成本较低。
- 缺点:需要进行模拟信号的校准,且易受外部环境干扰(如温度变化)。
-
数字型土壤湿度传感器:
- 输出数字信号(如高或低),通常通过比较湿度阈值来判断土壤湿度是否低于某个标准。适用于一些简单的判断应用。
- 优点:抗干扰能力强,操作简便。
- 缺点:不能提供具体的湿度数值,通常只能提供湿度高或低的状态。
二、土壤湿度传感器接线说明
以下是 土壤湿度传感器 的接线说明表,详细描述了每个引脚的功能以及如何连接到控制器(如Arduino等)。
土壤湿度传感器接线说明表:
土壤湿度传感器引脚 | 连接到 | 说明 |
---|---|---|
VCC | 电源引脚(5V 或 3.3V) | 连接至STM32单片机的电源引脚,提供电源。电压一般为5V或3.3V,具体电压请参考传感器规格。 |
GND | 地线(GND) | 连接至STM32单片机的地线(GND),作为电路的公共地,确保电流回流正常。 |
A0 | 模拟输入引脚(如Arduino的A0) | 连接至STM32单片机的模拟输入引脚,传感器输出的模拟信号与土壤湿度成正比,可以读取湿度值。 |
D0 | 数字输入引脚(如Arduino的D2) | 连接至STM32单片机的数字输入引脚,传感器输出的数字信号,用于简单的湿度检测。当湿度达到设定的阈值时,输出高电平(1)表示湿润,低电平(0)表示干燥。 |
三、测试说明、土壤湿度传感器驱动代码
编译环境:keil5
测试单片机: STM32F103C8T6
功能:功能1:采集土壤湿度数据在OLED屏幕上显示出来,超过阈值触发蜂鸣器报警
功能2:把采集土壤湿度数据发送到串口调试助手上
Soil_Moisture.c文件编写土壤湿度传感器驱动代码如下:
u8 times;
void Adc_Init()
{
GPIO_InitTypeDef GPIO_Initstructre;
ADC_InitTypeDef ADC_InitStruct;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
GPIO_Initstructre.GPIO_Mode=GPIO_Mode_AIN;//模拟输入模式
GPIO_Initstructre.GPIO_Pin=GPIO_Pin_1;
GPIO_Initstructre.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_Initstructre);
GPIO_SetBits(GPIOA,GPIO_Pin_1);
RCC_ADCCLKConfig(RCC_PCLK2_Div6); //设置ADC的时钟为PCLK2的6分频
ADC_DeInit(ADC1); //复位ADC1
ADC_InitStruct.ADC_ContinuousConvMode = DISABLE; //配置ADC为单次转换模式
ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right; //配置ADC数据右对齐
ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//配置ADC为软件触发转换
ADC_InitStruct.ADC_Mode=ADC_Mode_Independent; //工作模式,配置ADC为独立模式
ADC_InitStruct.ADC_NbrOfChannel = 1; //配置ADC通道数量为1
ADC_InitStruct.ADC_ScanConvMode = DISABLE; //配置ADC为非扫描模式
ADC_Init(ADC1,&ADC_InitStruct); //初始化ADC1
ADC_Cmd(ADC1,ENABLE); //使能ADC1
ADC_ResetCalibration(ADC1); //重置ADC1的校准寄存器
while(ADC_GetResetCalibrationStatus(ADC1)); //等待校准重置完成
ADC_StartCalibration(ADC1); //开启ADC1的校准
while(ADC_GetCalibrationStatus(ADC1)); //等待校准完成。
}
u16 Get_Adc(u8 ch)
{
ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_239Cycles5); // 配置ADC1的规则通道,设置采样时间为239.5个时钟周期
ADC_SoftwareStartConvCmd(ADC1,ENABLE); // 启动ADC1的软件转换
while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); // 等待ADC转换完成
return ADC_GetConversionValue(ADC1); // 返回ADC转换结果
}
u16 Get_Adc_Average(u8 ch,u8 times)
{
u32 temp_val=0; // 用于累加采样值的变量
u8 t; // 循环计数器
for(t=0;t<times;t++) // 循环采样指定次数
{
temp_val+=Get_Adc(ch); // 累加每次采样的值
Delay_ms(5); // 延时5毫秒,等待下一次采样
}
return temp_val/times; // 返回多次采样的平均值 稳定
}
四、串口调试助手把采集的土壤湿度数据发送出来
五、串口调试助手软件下载
串口调试助手-keil5调试工具_stm32水位传感器资源-CSDN文库
六、源代码
STM32单片机+土壤湿度传感器+OLED屏幕+蜂鸣器报警+土壤湿度数据发送到串口调试助手+源代码资源-CSDN文库