基于STM32单片机农场监控设计

举报
DS小龙哥 发表于 2025/02/24 17:52:59 2025/02/24
81 0 0
【摘要】 本项目通过STM32单片机与传感器结合,设计一套智能花盆监控系统。通过光敏传感器、土壤湿度传感器、温度传感器等,实时获取环境信息,并根据采集的数据控制水泵、电机等执行设备,实现环境的智能调节。同时,通过HC-05蓝牙模块与手机APP实现远程控制,方便用户对花盆进行管理与监控。本项目结合了硬件控制、传感器采集、无线通信等技术,具有很高的实用性和前景。

基于STM32单片机农场监控设计

项目开发背景

随着现代农业的不断发展,智能化农业逐渐成为农业生产中的新趋势。传统的农场管理方式已经不能满足日益增长的生产需求,而采用智能化设备来进行农场监控与管理,能够有效提高作物的产量与质量。基于物联网技术,结合传感器与自动化设备,可以实现环境监测、作物管理、数据采集与远程控制等功能。尤其在花卉、蔬菜等温室种植领域,通过智能监控系统对环境的温湿度、光照强度以及土壤湿度等因素进行精准调控,可以为作物的生长提供更加适宜的环境。

本项目通过STM32单片机与传感器结合,设计一套智能花盆监控系统。通过光敏传感器、土壤湿度传感器、温度传感器等,实时获取环境信息,并根据采集的数据控制水泵、电机等执行设备,实现环境的智能调节。同时,通过HC-05蓝牙模块与手机APP实现远程控制,方便用户对花盆进行管理与监控。本项目结合了硬件控制、传感器采集、无线通信等技术,具有很高的实用性和前景。

设计实现的功能

(1)环境光照监测与调节

利用光敏传感器采集当前环境的光照强度,当光照过强时,系统自动控制电机进行正转,遮挡阳光,保持适宜的光照强度;当光照不足时,电机反转,进行补光操作,确保花盆环境中的植物能够获得充足的光照。

(2)土壤湿度监测与浇水

通过土壤湿度传感器,实时监测土壤中的水分含量。当土壤湿度低于设定阈值时,系统自动开启水泵进行浇水,保证土壤水分充足,防止植物干旱。

(3)温度监测与显示

利用DHT11温度传感器采集花盆外界环境的温度数据,实时反馈温度信息。温度数据会通过液晶屏显示,供用户查看。同时,系统会根据采集的温度数据调节相关设备的工作状态。

(4)按键控制

系统配备了两个按键,用户可通过按键手动开启或关闭花盆的浇水功能,以及控制电机进行遮光或补光操作。按键控制简便直观,能够满足紧急情况下的手动干预。

(5)OLED液晶显示

系统通过OLED液晶显示屏显示当前的温度、光照强度、土壤湿度等实时监测数据,方便用户观察花盆的工作状态和环境状况。同时,液晶屏显示当前的水泵浇水状态、光照调整状态等信息。

(6)无线控制与监控

通过HC-05蓝牙模块实现数据的无线传输。用户可以通过手机APP无线控制花盆的浇水、电机控制以及其他相关操作,实时查看监控数据,方便管理与操作。

项目硬件模块组成

(1)STM32单片机

STM32系列单片机作为本项目的核心控制单元,负责接收传感器数据、控制电机及水泵的工作状态,进行按键处理以及蓝牙数据的收发。选用STM32F103C8T6型号,该型号具备较好的处理能力和外设支持,适合本项目的需求。

(2)光敏传感器

光敏传感器用于检测环境光照强度,当光照强度过高时,系统通过电机进行遮光;当光照不足时,系统通过电机进行补光。该传感器通过模拟输出信号与STM32单片机进行连接。

(3)土壤湿度传感器

土壤湿度传感器用于监测土壤水分情况,当土壤水分不足时,传感器输出低电平信号,STM32单片机通过此信号控制水泵启动,进行浇水操作。

(4)DHT11温湿度传感器

DHT11温湿度传感器用于采集环境的温度数据,向STM32单片机输出数字信号。该传感器响应较慢,但足以满足此项目对于温度监测的需求。

(5)电机与驱动模块

电机用于实现花盆遮光和补光功能,通过电机的正反转控制来调节光照强度。电机由驱动模块控制,STM32单片机通过PWM信号控制驱动模块,进而控制电机的旋转方向。

(6)水泵与继电器

水泵用于浇水,当土壤湿度传感器检测到水分不足时,系统会通过继电器驱动水泵工作。继电器作为开关控制器,由STM32单片机通过IO口控制,确保水泵的开启与关闭。

(7)OLED显示屏

OLED显示屏用于显示环境温度、光照强度、土壤湿度等实时监测数据。STM32单片机通过I2C总线与OLED屏幕进行通信,将实时数据展示给用户。

(8)HC-05蓝牙模块

HC-05蓝牙模块用于实现无线通信,通过蓝牙与手机APP进行数据传输和远程控制。STM32单片机与HC-05进行串口通信,实现数据的收发与控制。

设计思路

本系统通过STM32单片机与各种传感器的结合,实现花盆环境的自动化监控与管理。首先,系统通过光敏传感器检测环境光照强度,根据采集的数据控制电机进行遮光或补光。其次,土壤湿度传感器监控土壤水分,当土壤湿度低时,通过继电器控制水泵启动,实现自动浇水。温度传感器实时采集外部环境温度,通过OLED液晶屏显示,帮助用户了解温湿度情况。通过按键,用户可以手动干预花盆的工作状态,控制浇水或光照调整功能。

系统还采用了HC-05蓝牙模块,能够通过手机APP进行远程控制。APP与STM32单片机之间通过蓝牙通信,实时获取各类数据,用户可以在手机上查看监控信息并进行控制。通过这些传感器与执行器的协同工作,系统能够自动调节花盆环境,确保植物的生长条件。

系统功能总结

功能模块 描述
光照强度监测与调节 通过光敏传感器实时监测光照强度,并根据光照强度调节电机遮光或补光
土壤湿度监测与浇水 通过土壤湿度传感器监测土壤水分,低于设定值时自动启动水泵浇水
温度监测与显示 使用DHT11温度传感器采集温度,实时显示环境温度
按键控制 配备两个按键,控制浇水和电机遮光补光功能
OLED液晶显示 显示环境温度、光照强度、土壤湿度等信息
无线控制与监控 通过HC-05蓝牙模块实现与手机APP的无线通讯与远程控制

技术方案

本系统采用STM32F103C8T6单片机作为核心控制单元,配合光敏传感器、土壤湿度传感器、DHT11温湿度传感器等,实现环境信息的实时监控与调节。系统通过PWM信号控制电机和水泵,执行环境调节任务。通过OLED液晶屏显示实时数据,用户可以清晰了解花盆的工作状态。此外,系统通过HC-05蓝牙模块与手机APP实现远程监控和控制,方便用户随时查看数据和调整参数。

模块技术详情介绍

(1)光敏传感器:光敏传感器根据光强的变化输出对应的电压信号,通过ADC转换为数字信号送入STM32单片机进行处理。

(2)土壤湿度传感器:通过电阻值的变化来判断土壤的湿度。当土壤水分较少时,电阻值增大,传感器输出相应信号,控制水泵开启。

(3)DHT11温湿度传感器:DHT11是数字化温湿度传感器,通过单总线协议与STM32单片机进行数据通信,采集温湿度数据。

(4)OLED显示屏:采用I2C通信协议,与STM32单片机连接,显示温度、湿度等数据,提供直观的环境监控信息。

(5)HC-05蓝牙模块:通过串口通信与STM32单片机连接,实现蓝牙数据的发送与接收,控制系统的远程操作。

预期成果

通过本项目的设计与实现,最终将开发出一套智能化的花盆监控系统。该系统能够实时监测环境温湿度、光照强度和土壤湿度,并根据数据自动控制水泵和电机工作。此外,通过蓝牙模块与手机APP的配合,用户能够方便地远程控制系统,实现高效的花盆管理。

总结

本项目结合了多种传感器、执行器以及无线通信技术,构建了一套完整的智能花盆监控系统。通过STM32单片机的控制,实现了对环境的智能监控与调节,提高了花卉种植的自动化水平。系统通过LCD显示和手机APP提供实时反馈,方便用户操作与监控。未来,可以将该系统扩展至更大规模的农业自动化系统,实现更广泛的应用。

STM32设计

下面是基于STM32的main.c代码,其他子模块(如传感器读取、按键控制、OLED显示、蓝牙控制等)未贴出。以下代码主要负责整个系统的初始化、主控制循环和与传感器的互动。这个代码将包括光照强度、土壤湿度监测、温度显示、按键控制、OLED显示以及蓝牙通信部分的集成。

#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "dht11.h"
#include "soil_moisture.h"
#include "light_sensor.h"
#include "motor_control.h"
#include "water_pump.h"
#include "bluetooth.h"// 定义GPIO引脚
#define LIGHT_SENSOR_PIN GPIO_PIN_0 // 光敏传感器连接在PA0引脚
#define SOIL_SENSOR_PIN GPIO_PIN_1  // 土壤湿度传感器连接在PA1引脚
#define MOTOR_PIN GPIO_PIN_2      // 电机连接在PA2引脚
#define WATER_PUMP_PIN GPIO_PIN_3 // 水泵继电器连接在PA3引脚
#define BUTTON1_PIN GPIO_PIN_4    // 按键1连接在PA4引脚
#define BUTTON2_PIN GPIO_PIN_5    // 按键2连接在PA5引脚// 全局变量定义
uint8_t button1_state = 0;
uint8_t button2_state = 0;
float temperature = 0.0f;
float humidity = 0.0f;
uint16_t soil_moisture = 0;
uint16_t light_intensity = 0;// 函数声明
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_I2C1_Init(void);
void update_display(void);
void read_sensors(void);
void control_system(void);
​
int main(void)
{
    // HAL库初始化
    HAL_Init();
    
    // 系统时钟配置
    SystemClock_Config();
    
    // 初始化GPIO
    MX_GPIO_Init();
    
    // 初始化USART(用于蓝牙通信)
    MX_USART1_UART_Init();
    
    // 初始化I2C(用于OLED显示)
    MX_I2C1_Init();
    
    // 初始化OLED显示
    LCD_Init();
    
    // 初始化传感器(光敏、土壤湿度、温湿度传感器已初始化)// 主循环
    while (1)
    {
        // 读取传感器数据
        read_sensors();
        
        // 控制系统(根据传感器数据控制电机、水泵等)
        control_system();
        
        // 更新显示
        update_display();
       
    }
}void read_sensors(void)
{
    // 读取温湿度传感器(DHT11)
    DHT11_Read(&temperature, &humidity);
    
    // 读取土壤湿度传感器
    soil_moisture = Soil_Moisture_Read();
    
    // 读取光照强度传感器
    light_intensity = Light_Sensor_Read();
}void control_system(void)
{
    // 控制电机(光照调节)
    if (light_intensity > 800) // 超过800为强光
    {
        Motor_Control(1); // 电机正转,遮挡阳光
    }
    else if (light_intensity < 200) // 低于200为弱光
    {
        Motor_Control(0); // 电机反转,补充光照
    }
    else
    {
        Motor_Control(0); // 电机停止,光照适中
    }// 控制水泵(浇水)
    if (soil_moisture < 400) // 土壤湿度小于400表示干燥
    {
        Water_Pump_Control(1); // 开启水泵,浇水
    }
    else
    {
        Water_Pump_Control(0); // 关闭水泵,不浇水
    }
    
    // 按键1控制浇水
    if (HAL_GPIO_ReadPin(GPIOA, BUTTON1_PIN) == GPIO_PIN_SET)
    {
        Water_Pump_Control(1); // 按下按键1时浇水
    }
    
    // 按键2控制电机遮光/补光
    if (HAL_GPIO_ReadPin(GPIOA, BUTTON2_PIN) == GPIO_PIN_SET)
    {
        if (light_intensity > 800)
        {
            Motor_Control(1); // 遮挡阳光
        }
        else if (light_intensity < 200)
        {
            Motor_Control(0); // 补充光照
        }
    }
}void update_display(void)
{
    // 清除显示
    LCD_Clear();
    
    // 显示温度和湿度
    LCD_SetCursor(0, 0);
    LCD_Printf("Temp: %.2f C", temperature);
    
    LCD_SetCursor(1, 0);
    LCD_Printf("Hum: %.2f %%", humidity);
    
    // 显示光照强度和土壤湿度
    LCD_SetCursor(2, 0);
    LCD_Printf("Light: %d", light_intensity);
    
    LCD_SetCursor(3, 0);
    LCD_Printf("Soil: %d", soil_moisture);
    
    // 如果系统开启蓝牙,显示状态
    if (Bluetooth_Is_Connected())
    {
        LCD_SetCursor(4, 0);
        LCD_Printf("Bluetooth: ON");
    }
    else
    {
        LCD_SetCursor(4, 0);
        LCD_Printf("Bluetooth: OFF");
    }
}void SystemClock_Config(void)
{
    // 系统时钟配置代码
}static void MX_GPIO_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct = {0};__HAL_RCC_GPIOA_CLK_ENABLE();
    
    // 配置光敏传感器引脚(连接在PA0)
    GPIO_InitStruct.Pin = LIGHT_SENSOR_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 配置土壤湿度传感器引脚(连接在PA1)
    GPIO_InitStruct.Pin = SOIL_SENSOR_PIN;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 配置电机控制引脚(连接在PA2)
    GPIO_InitStruct.Pin = MOTOR_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 配置水泵控制引脚(连接在PA3)
    GPIO_InitStruct.Pin = WATER_PUMP_PIN;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
    // 配置按键引脚(连接在PA4和PA5)
    GPIO_InitStruct.Pin = BUTTON1_PIN | BUTTON2_PIN;
    GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}static void MX_USART1_UART_Init(void)
{
    // USART1初始化,用于蓝牙通信
}static void MX_I2C1_Init(void)
{
    // I2C1初始化,用于OLED显示
}

代码解释:

  1. 硬件初始化:通过MX_GPIO_InitMX_USART1_UART_InitMX_I2C1_Init等函数初始化STM32的GPIO、USART(蓝牙通信)、I2C(OLED显示)等硬件。

  2. 传感器读取:通过read_sensors函数获取温度、湿度、光照强度和土壤湿度传感器的数据。

  3. 系统控制control_system函数根据传感器的数据控制电机和水泵的工作状态。根据光照强度调节电机运行,土壤湿度过低时启动水泵进行浇水。

  4. 按键控制:通过HAL_GPIO_ReadPin读取按键的状态,按键1控制水泵,按键2控制电机的运行(遮光或补光)。

  5. 显示更新:通过update_display函数在OLED显示屏上实时显示环境数据,包括温度、湿度、光照强度、土壤湿度等。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。