随着现代化温室农业的发展,传统的温室管理方法逐渐向自动化和智能化转型。智能温室监控与控制系统能够实时监控温室内的各项环境参数,并根据预设条件自动调节温室内的温度、湿度、光照强度等因素,从而提高作物的生长效率。本文设计了一个基于STM32的智能温室监控与控制系统,利用各种传感器实时采集环境数据,并通过控制设备进行自动化调节。
系统的硬件设计包括以下几个关键部分:
软件设计主要分为以下几个部分:
该模块通过DHT22传感器实时获取温湿度数据,并根据预设的阈值控制风扇和加热设备。当温度过高时,风扇自动开启;当湿度过低时,灌溉系统启动。
MH-Z19传感器实时监测温室内的二氧化碳浓度,当浓度过低时,系统会启动CO2发生器以增加浓度;当浓度过高时,系统会启动通风系统降低浓度。
根据土壤湿度传感器的检测结果,当土壤湿度过低时,系统会自动启动水泵进行灌溉。
根据温度数据,当温度超过设定的阈值时,系统会自动开启风扇进行降温。
通过ESP8266模块将实时数据上传至云平台或移动App,用户可以通过网页或App查看温室内的环境数据,进行远程监控和控制。
#include "dht22.h"
#include "stm32f4xx_hal.h"
#define TEMP_SENSOR_PIN GPIO_PIN_0
#define TEMP_SENSOR_PORT GPIOA
void DHT22_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = TEMP_SENSOR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(TEMP_SENSOR_PORT, &GPIO_InitStruct);
}
void DHT22_Read(uint8_t *temperature, uint8_t *humidity) {
if (DHT22_Get_Data(temperature, humidity) == DHT22_OK) {
printf("Temperature: %d C, Humidity: %d %%\n", *temperature, *humidity);
}
}
void Control_Fan(uint8_t temperature) {
if (temperature > 30) {
// 启动风扇
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_SET);
} else {
// 关闭风扇
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_1, GPIO_PIN_RESET);
}
}
4.2 CO2监测模块
#include "mh_z19.h"
#include "stm32f4xx_hal.h"
#define CO2_SENSOR_PIN GPIO_PIN_1
#define CO2_SENSOR_PORT GPIOA
void CO2_Sensor_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = CO2_SENSOR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(CO2_SENSOR_PORT, &GPIO_InitStruct);
}
void CO2_Read(uint16_t *co2_level) {
*co2_level = MH_Z19_Read_CO2_Level();
printf("CO2 Level: %d ppm\n", *co2_level);
}
void Control_CO2_Generator(uint16_t co2_level) {
if (co2_level < 400) {
// 启动CO2发生器
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_SET);
} else {
// 关闭CO2发生器
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_2, GPIO_PIN_RESET);
}
}
4.3 灌溉控制模块
#include "soil_moisture.h"
#include "stm32f4xx_hal.h"
#define IRRIGATION_PIN GPIO_PIN_3
#define IRRIGATION_PORT GPIOA
void Soil_Moisture_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = GPIO_PIN_4;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void Soil_Moisture_Read(uint16_t *moisture) {
*moisture = HAL_ADC_GetValue(&hadc1);
printf("Soil Moisture: %d\n", *moisture);
}
void Control_Irrigation(uint16_t moisture) {
if (moisture < 500) {
// 启动灌溉
HAL_GPIO_WritePin(IRRIGATION_PORT, IRRIGATION_PIN, GPIO_PIN_SET);
} else {
// 关闭灌溉
HAL_GPIO_WritePin(IRRIGATION_PORT, IRRIGATION_PIN, GPIO_PIN_RESET);
}
}
4.4 风扇控制模块
#include "stm32f4xx_hal.h"
#define FAN_PIN GPIO_PIN_5
#define FAN_PORT GPIOA
void Fan_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct = {0};
__HAL_RCC_GPIOA_CLK_ENABLE();
GPIO_InitStruct.Pin = FAN_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(FAN_PORT, &GPIO_InitStruct);
}
void Control_Fan(uint8_t state) {
if (state == 1) {
HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, GPIO_PIN_SET);
} else {
HAL_GPIO_WritePin(FAN_PORT, FAN_PIN, GPIO_PIN_RESET);
}
}
4.5 数据通信模块
#include "esp8266.h"
#include "stm32f4xx_hal.h"
#define WIFI_TX_PIN GPIO_PIN_6
#define WIFI_RX_PIN GPIO_PIN_7
void WiFi_Init(void) {
ESP8266_Init();
}
void Upload_Data(uint16_t temp, uint16_t humidity, uint16_t co2, uint16_t moisture) {
char data[200];
snprintf(data, sizeof(data), "Temp: %d, Humidity: %d, CO2: %d, Soil Moisture: %d", temp, humidity, co2, moisture);
ESP8266_Send_Data(data);
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
本文设计的基于STM32的智能温室监控与控制系统,实现了温湿度监控、CO2浓度监控、土壤湿度控制等功能,并通过Wi-Fi模块将数据上传至云平台,供用户进行远程监控与控制。未来的工作可以加入更多的传感器模块,并通过大数据分析提高智能控制水平,以实现更加精准和高效的农业管理。