基于STM32的土壤湿度传感器使用

这篇具有很好参考价值的文章主要介绍了基于STM32的土壤湿度传感器使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于STM32的土壤湿度传感器使用

最近在学习中用到了ADC数据采集这里使用的硬件模块为土壤湿度传感器,下面为土壤传感器相关的使用方法和代码介绍。

1、土壤湿度传感器实物图

基于STM32的土壤湿度传感器使用,SMT32,stm32,嵌入式硬件,单片机

土壤湿度传感器一共有4个引脚分别为:
GND VCC DO AO,在本次实验中使用的为A0模拟引脚,因此在单片机资源上需要使用到ADC,模数转换,将模拟量进行数字的形式输出。当然也可以直接接DO数字引脚,通过调节模块上的电位器进行数字阈值的改变。

2、代码介绍

在代码部分这里不详细介绍ADC的使用,有需要的可自行去查看相关adc的知识,这里使用的是单片机内部资源ADC2,对于STM32F103C8T6这款单片机来讲内部一共有三个ADC,每个ADC又对于着多个通道的采集,引脚参考如下所示。

基于STM32的土壤湿度传感器使用,SMT32,stm32,嵌入式硬件,单片机

adc.c

#include "delay.h"
#include "sys.h"
#include "adc.h"
//编写ADC2_Init初始化函数//                  
void  ADC2_Init(void)
{      
 ADC_InitTypeDef ADC_InitStructure; 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC2, ENABLE );    //使能ADC2通道时钟//   
 RCC_ADCCLKConfig(RCC_PCLK2_Div6);                         //设置ADC时钟//
 ADC_DeInit(ADC2);                                         //复位ADC2,将外设ADC2的全部寄存器重设为缺省值// 
 //ADC2_InitStructure参数设置//
 ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                   //独立模式//
 ADC_InitStructure.ADC_ScanConvMode = DISABLE;                        //关闭扫描模式//
 ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                  //单次转换模式//
 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;  //软件触发启动//
 ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;               //数据右对齐//
 ADC_InitStructure.ADC_NbrOfChannel = 1;                              //顺序进行规则转换的ADC通道的数目//
 ADC_Init(ADC2, &ADC_InitStructure);   
 ADC_Cmd(ADC2, ENABLE);                                               //使能指定的ADC2//
 //下面四个函数用于校准//
 ADC_ResetCalibration(ADC2);                                          //使能复位校准//   
 while(ADC_GetResetCalibrationStatus(ADC2));                          //等待复位校准结束//
 ADC_StartCalibration(ADC2);                                          //开启AD校准//
 while(ADC_GetCalibrationStatus(ADC2));                               //等待校准结束//
}   
//编写Get_ADC2函数//
u16 Get_ADC2(u8 ch)   
{
 //设置指定ADC的规则组通道,四个入口参数//
 ADC_RegularChannelConfig(ADC2, ch, 1, ADC_SampleTime_239Cycles5 );        
 ADC_RegularChannelConfig(ADC2, ch, 2, ADC_SampleTime_239Cycles5 );     
 ADC_SoftwareStartConvCmd(ADC2, ENABLE);         //使能指定的ADC2的软件转换启动功能//   
 while(!ADC_GetFlagStatus(ADC2, ADC_FLAG_EOC )); //等待转换结束//
 return ADC_GetConversionValue(ADC2);            //返回最近一次ADC2规则组的转换结果//
} 

adc.h

#ifndef __ADC_H
#define __ADC_H 
#include "stm32f10x.h"
void  ADC2_Init(void);    //ADC3初始化//
u16 Get_ADC2(u8 ch) ;
#endif 

Sensor.c

这里使用了光敏传感器PA4模拟引脚和土壤湿度传感器PA5模拟引脚输入

#include "ldr.h"
#include "delay.h"
//该文件为土壤湿度检测 原理和光敏采集一样//
void Lsens_Soil_Init(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO ,ENABLE);    //使能GPIOF时钟 
 //配置GPIOF参数,引脚4 引脚5,模拟输入//
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;     
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;  
 GPIO_Init(GPIOA, &GPIO_InitStructure); 
 ADC2_Init();
}

//范围0-100

u8 Get_ADC_Val(u8 ch)
{
 u32 temp_val=0;
 u8 t;
 for(t=0;t<LSENS_READ_TIMES;t++)       //LSENS_READ_TIMES在lsens.h文件中设好,默认10//
 {
  temp_val+=Get_ADC2(ch); 
  delay_ms(2);
 }
 temp_val/=LSENS_READ_TIMES;           //计算平均值// 
 if(temp_val>4000)temp_val=4000;       //当计算后的值大于4000时,强制转换为4000//
 return (u8)(100-(temp_val/40));       //将temp_val值归一化到0-100之间//
}
/***************************************************************/

Sensor.h

#ifndef __LDR_H
#define __LDR_H 
#include "sys.h" 
#include "adc.h" 
//定义两个常量//
#define LSENS_READ_TIMES 10              //定义光敏传感器读取次数,读10次,然后取平均值//
#define LSENS_ADC_CHX    ADC_Channel_4  //定义光敏传感器所在的ADC通道编号,即0x06//
#define SOIL_ADC_CHX     ADC_Channel_5  //定义土壤湿度传感器
//申明两个函数//    
void Lsens_Soil_Init(void);              //初始化光敏传感器和土壤湿度传感器函数//
u8 Get_ADC_Val(u8 ch);
#endif 

main.c

#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "ldr.h"

unsigned char ldr = 0;
unsigned char soil_humi = 0;
void Sensor_Task(void)
{
	 ldr = Get_ADC_Val(LSENS_ADC_CHX);
	 soil_humi = Get_ADC_Val(SOIL_ADC_CHX);
	 delay_ms(500);
	 printf("ldr = %d soli_value = %d\r\n",ldr,soil_humi);
}

int main(void)
{
	LED_Init();                   //led初始化
	Init_Usart();                 //串口初始化
	Lsens_Soil_Init();                 //光敏初始化
	while(1)
	{
			Sensor_Task();              //数据采集任务
	}
}

输出结果

基于STM32的土壤湿度传感器使用,SMT32,stm32,嵌入式硬件,单片机文章来源地址https://www.toymoban.com/news/detail-528523.html

到了这里,关于基于STM32的土壤湿度传感器使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32实战项目-温湿度传感器

    程序功能: 1、软件模拟I2C协议与SHT30数字温湿度传感器通讯; 2、数码管显示环境温湿度; 3、串口打印环境温湿度。 目录 一、硬件电路 二、技术讲解  2.1IIC简介 2.2 IIC总线协议 2.2设备接入  三、SHT30数字温湿度传感器  3.1性能介绍 3.1.1湿度最优测量环境 3.1.2温度最优测量环

    2023年04月23日
    浏览(38)
  • STM32--DHT11温湿度传感器

    本文介绍基于STM32F103实现的DHT11温湿度传感器数据采集及显示,完整代码见文末链接 一、DHT11传感器简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期

    2024年02月16日
    浏览(42)
  • STM32+DHT11温湿度传感器

    DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次 通讯时间4ms左右,数据分小数部分和整数部分,具体格式在下面说明,当前小数 部分用于以后扩展,现读出为零.操作流程如下: 一次完整的数据传输为40bit,高位先出。 数据格式:8bit湿度整数数据+8bit湿度小数数据

    2023年04月13日
    浏览(38)
  • STM32—DHT11温湿度传感器

    (1).下图一是DHT11总的时序图。 (2).图二对应图一的左边黑色部分,图三对应图一的绿色部分,图四的左部分图对应图一的红色部分,图四的右部分对应图一的黄色部分。 (3).首先图二部分是单片机向DHT11发送我要开始的信号,此时单片机IO口处于输出模式,输出低电平至少18MS,

    2024年02月19日
    浏览(43)
  • stm32连接DHT11温湿度传感器

    目录 1. DHT11简介 1.1. 连接电路  1.2. 串行接口 (单线双向)  2. cubeMX设置 3. 代码开发  3.1. 实现定时函数 3.2. 打开串口调试 3.4. 测试代码实现 4. 运行效果 信息如下: 建议连接线长度短于20米时用5K上拉电阻,大于20米时根据实际情况使 用合适的上拉电阻  DHT11的供电电压为 3-5

    2023年04月16日
    浏览(37)
  • STM32 —— 温湿度( AHT20 )传感器入门

    温湿度的具体使用方法可以看官方给出的基于 STM32 的历程,这里只进行简单介绍 官方历程如下: AHT20-21 DEMO V1_3(stm32) AHT20在STM32上的例程 V1.4 DHT20 是 DHT11 的全新升级产品,配置了专用的 ASIC 传感器芯片、高性能的半导体硅基电容式湿度传感器和一个标准的片上温度传感器,并

    2024年02月07日
    浏览(38)
  • stm32读取DHT11温湿度传感器

    我们知道DHT11是单总线协议,只有一根数据线。 且内部有个上拉电路(下图)。那么数据线默认就是高电平那接下来就可以讲解主机如何和DHT11通讯的 读取DHT11的芯片手册,可以知道,DHT11一次完成的数据输出是40bit,高位先出。 格式:8bit湿度整数数据+8bit湿度小数数据 +8bi温

    2024年02月09日
    浏览(38)
  • STM32+DHT11采集温湿度传感器数据

            DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温度。 DHT11 与单片机之间能采用简单的单总线进行通信,仅

    2024年02月07日
    浏览(34)
  • 【STM32】DHT11温湿度模块传感器详解&代码

    DHT11是数字温湿度传感器,测量范围:湿度20%-95%,温度0-50℃,广泛应用于加湿器、温湿度计、空调、汽车等领域。 如上图DATA引脚用于MCU与DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右(超时时间的判断)。一次完整的数据传输为40bit,高位先出(MSB最高

    2024年02月12日
    浏览(44)
  • 嵌入式 STM32 SHT31温湿度传感器

    目录 简介 1、原理图  2、时序说明  数据传输 起始信号  结束信号  3、SHT31读写数据  SHT31指令集 读数据  温湿度转换 4、温湿度转换应用  sht3x初始化 读取温湿度  什么是SHT31?  一主机多从机--通过寻址的方式--每个从机都有唯一的地址(器件地址0x44+引脚地址)1 + 读写位

    2024年02月01日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包