首页 分享 STM32土壤湿度传感器学习指南

STM32土壤湿度传感器学习指南

来源:花匠小妙招 时间:2024-11-25 03:55

STM32是一款非常流行的微控制器,广泛应用于各种嵌入式系统中。在本篇文章中,我们将介绍如何使用STM32来读取土壤湿度传感器的数据。本文将包含以下几个部分:

硬件准备 传感器原理 传感器接线 STM32代码实现

硬件准备:

为了完成本次任务,我们需要准备以下硬件:

STM32开发板:这里我们选择了最常用的STM32F103C8T6开发板。 土壤湿度传感器:常用的土壤湿度传感器有许多种类,如YL-69、YL-38等。在本文中,我们将使用YL-69传感器。 杜邦线:用于连接STM32开发板与传感器。

传感器原理:

土壤湿度传感器通过测量土壤中的电导率来判断土壤的湿度。当土壤湿度较高时,土壤中的离子浓度也较高,电导率也较大。当土壤湿度较低时,土壤中的离子浓度也较低,电导率也较小。

传感器接线:

接下来,我们需要将传感器与STM32开发板进行连接。在本文中,我们将使用以下接线方式:

将传感器的VCC引脚连接到STM32开发板的5V引脚。 将传感器的GND引脚连接到STM32开发板的GND引脚。 将传感器的OUT引脚连接到STM32开发板的PA0引脚。

STM32代码实现:

在本节中,我们将使用STM32CubeIDE来编写代码。

首先,我们需要创建一个新的STM32项目。在创建项目时,选择正确的芯片型号(STM32F103C8T6)和开发板(NUCLEO-F103RB)。

一旦项目创建完成,我们可以开始编写代码。首先,我们需要在main函数中初始化GPIO和ADC:

#include "stm32f1xx_hal.h" ADC_HandleTypeDef hadc1; void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC1_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_ADC1_Init(); while (1) { } }

接下来,我们需要在MX_ADC1_Init函数中配置ADC:

void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig = {0}; __HAL_RCC_ADC1_CLK_ENABLE(); hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } sConfig.Channel = ADC_CHANNEL_0; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } }

然后,我们需要在MX_GPIO_Init函数中配置GPIO引脚:

void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); GPIO_InitStruct.Pin = GPIO_PIN_0; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); }

接下来,我们可以编写代码来读取土壤湿度传感器的数值:

uint16_t soil_moisture; while (1) { HAL_ADC_Start(&hadc1); HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY); soil_moisture = HAL_ADC_GetValue(&hadc1); HAL_ADC_Stop(&hadc1); }

上述代码中,我们首先启动ADC转换,然后等待转换完成,并将转换结果存储在soil_moisture变量中。最后,停止ADC转换。

现在,我们可以使用soil_moisture变量来获取土壤湿度传感器的数值。如果我们想要将土壤湿度以百分比的形式显示,我们可以使用以下公式:

soil_moisture_percent = (float)soil_moisture / 4095 * 100;

上述公式将ADC读数映射到0-100的百分比范围内。

最后,我们可以使用串口输出将土壤湿度传感器的数值打印出来:

char uart_msg[50]; sprintf(uart_msg, "Soil Moisture: %.2f %%rn", soil_moisture_percent); HAL_UART_Transmit(&huart2, (uint8_t *)uart_msg, strlen(uart_msg), HAL_MAX_DELAY);

上述代码中,我们使用sprintf函数将土壤湿度格式化为字符串,并使用HAL_UART_Transmit函数将字符串通过串口发送。

为了使上述代码正常工作,我们还需要在STM32CubeIDE中进行一些配置。首先,在Project Explorer窗口中选择"Core"选项卡,然后双击"Src"文件夹。选择main.c文件并右击,选择Properties。在弹出的对话框中选择"C/C++ Build" -> "Settings" -> "Tool Settings" -> "Target" -> "C/C++ Compiler"。在"Defines"栏中添加以下内容:

USE_HAL_DRIVER

然后,在"Tool Settings" -> "Target" -> "Linker"中的"Libraries"栏添加以下内容:

m c gcc stm32f1

最后,在"Tool Settings" -> "Target" -> "Linker"中的"Script"栏中选择正确的链接脚本文件。

现在,我们可以编译代码并下载到STM32开发板中。在下载完成后,我们可以通过串口监视器来查看土壤湿度传感器的数值。

综上所述,本文详细介绍了如何使用STM32读取土壤湿度传感器的数值。通过上述代码和方法,我们可以方便地获取土壤湿度,并据此决定是否需要浇水。

作者:大黄鸭duck.

相关知识

基于STM32的土壤湿度传感器使用
STM32的串口打印土壤湿度传感器(YL
基于STM32的土壤湿度传感器(FC
基于STM32的智能灌溉系统设计
基于STM32的智能花盆浇水系统设计
基于STM32的植物浇水系统开发
基于STM32开发的智能花园灌溉系统
STM32 HAL库实现GY302光照传感器驱动指南
实践案例丨利用小熊派开发板获取土壤湿度传感器的ADC值
基于STM32的土壤湿度检测自动浇水系统proteus仿真设计(仿真+程序+设计报告+讲解视频)

网址: STM32土壤湿度传感器学习指南 https://www.huajiangbk.com/newsview708682.html

所属分类:花卉
上一篇: 生石花如何养殖,需观察盆土的干湿
下一篇: 各种花卉土壤最佳湿度百分比是多少

推荐分享