智慧农业沙盘模型物联网控制系统设计:基于STM32与Modbus RTU的传感器-执行器闭环方案

智慧农业沙盘模型涉及智能温室大棚、智慧大田、智能灌溉与水肥一体化、智慧养殖、农业物联网数字孪生等多个场景,涵盖空气温湿度传感器、土壤墒情传感器、光照传感器、CO₂浓度传感器、电动天窗、遮阳帘、风机湿帘、滴灌/喷灌电磁阀、水肥一体化泵组、北斗导航农机、植保无人机等多个执行器的协同控制与数据采集。一套完整的智慧农业沙盘物联网控制系统,需要实现"传感器采集→边缘计算→执行器响应→数据上云→数字孪生映射"的完整闭环。与工业场景的设备协同控制不同,智慧农业场景的核心控制逻辑是多变量耦合判断------温度高了开风机、土壤干了开灌溉、光照强了关遮阳帘,每个控制决策都依赖多个传感器数据的综合判断。

本文结合筑城世纪模型在工业模型控制系统开发中的项目经验(2008年成立,2000㎡制作工厂,控制系统自主研发,已为华北电力大学、国机集团、巴斯夫、国家电网、清华大学等500+企事业单位提供服务),梳理智慧农业沙盘模型物联网控制系统的设计与实现方案,涵盖系统架构、硬件选型、传感器数据采集与滤波、多变量耦合控制逻辑、Modbus RTU寄存器映射及数字孪生数据对接要点。

一、为什么智慧农业沙盘必须用STM32+Modbus RTU方案

智慧农业沙盘的控制系统有几个特殊要求:

第一,多传感器并发采集要求高。 空气温湿度、土壤温湿度、光照强度、CO₂浓度等多路传感器需要同时采集,采样周期需稳定在1秒以内。STM32的多通道ADC和中断响应机制可满足并发采集需求。

第二,多变量耦合控制逻辑复杂。 智能温室需要根据传感器数据自动控制天窗、遮阳帘、风机、湿帘等多个执行器,控制逻辑涉及多变量耦合判断(如温度高且湿度低时开启风机+湿帘,温度高且湿度高时只开风机不开湿帘)。STM32配合状态机编程可实现复杂联动逻辑,而PLC的梯形图实现这类多变量耦合逻辑较为困难。

第三,数据上云与数字孪生对接需求明确。 智慧农业沙盘通常需要配套数字孪生大屏或云平台,实现"物理沙盘设备状态→数字孪生平台实时映射"。STM32方案支持Modbus RTU、MQTT等多种协议数据输出,便于与第三方平台对接。

第四,成本敏感且后期修改频繁。 农业沙盘的控制逻辑经常根据客户需求调整(如新增"应急模式"、调整温控阈值)。PLC方案每次修改需专业软件授权和工程师到场,STM32方案通过寄存器在线修改参数即可。

STM32 vs PLC vs 树莓派 选型对比

对比项 PLC方案 树莓派方案 STM32方案

硬件成本 5000-10000元 300-600元 500-1200元

实时性 10-20ms扫描周期 受Linux调度影响 1ms中断响应

传感器采集 依赖专用模块 需GPIO库 ADC直接采集,12位精度

多变量耦合逻辑 梯形图实现困难 Python实现灵活 C语言状态机灵活可控

数据上云能力 需额外网关模块 原生支持 串口转WiFi/4G模块

工业可靠性 高 低(SD卡易损) 高

后期修改 需软件授权 需重写代码 寄存器在线修改

为什么用RS485/Modbus RTU?

智慧农业沙盘模型内部传感器和执行器分布广泛(温室、大田、养殖区等多区域),RS485总线支持多点通讯(理论32个节点),一线串接所有设备,布线简洁。WiFi/蓝牙在沙盘内部金属结构和密集设备环境中信号衰减严重,不可靠。Modbus RTU是工业标准协议,支持接入触摸屏、云平台网关、数字孪生系统等第三方设备。

二、系统架构设计

2.1 总体架构

text

┌─────────────────────────────────────────────────────────────┐

│ 数字孪生大屏/云平台(数据可视化 + 远程控制) │

│ 实时数据展示 历史趋势分析 远程指令下发 │

└─────────────────────────┬───────────────────────────────────┘

│ MQTT/HTTP(4G/WiFi网关)

┌─────────────────────────▼───────────────────────────────────┐

│ 触摸屏/中控平板(Modbus RTU 主站) │

│ 本地监控 手动控制 参数设置 模式切换 │

└─────────────────────────┬───────────────────────────────────┘

│ RS485(9600,8N1,120Ω终端电阻)

┌─────────────────────────▼───────────────────────────────────┐

│ STM32F103RCT6 从站(边缘计算网关) │

│ 传感器采集 → 逻辑判断 → 执行器驱动 → 数据上报 │

└───────┬─────────┬─────────┬─────────┬───────────────────────┘

│ │ │ │

┌───▼───┐ ┌───▼───┐ ┌───▼───┐ ┌───▼───┐

│传感器 │ │执行器 │ │执行器 │ │LED/ │

│采集 │ │驱动1 │ │驱动2 │ │灯带 │

│(温湿/ │ │(天窗/ │ │(水泵/ │ │(状态 │

│光照/ │ │风机) │ │电磁阀)│ │指示) │

│CO₂) │ └───────┘ └───────┘ └───────┘

└───────┘

2.2 硬件选型

组件 选型 数量 选型理由

主控MCU STM32F103RCT6 1 256KB Flash,51个GPIO,3个USART

温湿度传感器 DHT22/AM2302 3-5 数字输出,精度±0.5°C

土壤湿度传感器 电容式 3-5 模拟输出,抗腐蚀

光照传感器 BH1750(I²C) 2-3 数字输出,0-65535 Lux

CO₂传感器 MH-Z19B 1-2 串口输出,0-5000ppm

通讯接口 MAX485ESA 1 RS485收发器

执行器驱动 DRV8833/继电器模组 依执行器数 驱动微型电机/电磁阀

数据网关 ESP8266/4G模块 1 WiFi/4G上云

2.3 GPIO分配表

端口 功能 信号类型 说明

PA9/PA10 USART1 通讯 与触摸屏RS485通讯

PA2/PA3 USART2 通讯 预留与4G/WiFi网关通讯

PB0 温湿度传感器1 单总线 DHT22(温室)

PB1 温湿度传感器2 单总线 DHT22(大田)

PA0 土壤湿度1 ADC输入 电容式(温室)

PA1 土壤湿度2 ADC输入 电容式(大田)

PA4/PA5 光照传感器 I²C BH1750

PA6/PA7 CO₂传感器 串口 MH-Z19B

PB3 电动天窗电机 PWM输出 开合控制

PB4 遮阳帘电机 PWM输出 收放控制

PB5 风机 PWM输出 转速控制

PB6 灌溉电磁阀 GPIO输出 开关控制

PB7 水肥泵组 GPIO输出 开关控制

三、Modbus寄存器映射设计

以下为智慧农业沙盘控制系统的寄存器定义(共32个保持寄存器):

3.1 系统控制寄存器(40001-40008)

寄存器地址 偏移地址 功能 数据类型 读写 取值范围 说明

40001 0x0000 系统启停 bit R/W 0/1 0=停止,1=启动

40002 0x0001 控制模式 uint16 R/W 1-3 1=自动,2=手动,3=应急

40003 0x0002 当前场景 uint16 R 0-5 0=待机,1=温室,2=大田,3=灌溉,4=养殖,5=全场景

40004 0x0003 采集周期 uint16 R/W 1-60 秒

40005 0x0004 系统状态 uint16 R 0-3 0=停止,1=运行,2=告警,3=故障

40006 0x0005 故障代码 uint16 R 0-99 0=无故障

40007 0x0006 数据上报 bit R/W 0/1 0=不上报,1=上报云端

40008 0x0007 固件版本 uint16 R --- 只读

3.2 传感器数据寄存器(40009-40018,只读)

地址 偏移 功能 单位

40009 0x0008 温室温度 0.1°C

40010 0x0009 温室湿度 0.1%RH

40011 0x000A 大田温度 0.1°C

40012 0x000B 大田湿度 0.1%RH

40013 0x000C 温室土壤湿度 %

40014 0x000D 大田土壤湿度 %

40015 0x000E 光照强度 Lux

40016 0x000F CO₂浓度 ppm

40017 0x0010 养殖区温度 0.1°C

40018 0x0011 养殖区湿度 0.1%RH

3.3 执行器控制与参数寄存器(40019-40028)

地址 偏移 功能 读写 说明

40019 0x0012 天窗开度 R/W 0-100%

40020 0x0013 遮阳帘开度 R/W 0-100%

40021 0x0014 风机转速 R/W 0-100%

40022 0x0015 灌溉阀门 R/W 0=关,1=开

40023 0x0016 水肥泵组 R/W 0=关,1=开

40024 0x0017 温度上限 R/W 0.1°C

40025 0x0018 温度下限 R/W 0.1°C

40026 0x0019 土壤湿度下限 R/W %

40027 0x001A 光照上限 R/W Lux

40028 0x001B CO₂上限 R/W ppm

四、核心代码实现

4.1 传感器数据采集与滑动平均滤波

cpp

#include "ModbusRTU.h"

#include "DHT.h"

#include <Wire.h>

#include "BH1750.h"

#define SLAVE_ID 1

#define BAUD_RATE 9600

#define FILTER_SIZE 5

#define DHTPIN1 PB0

#define DHTPIN2 PB1

#define DHTTYPE DHT22

#define SOIL_ADC1 PA0

#define SOIL_ADC2 PA1

#define MOTOR_WINDOW PB3

#define MOTOR_SHADE PB4

#define MOTOR_FAN PB5

#define VALVE_IRRIGATE PB6

#define PUMP_FERTILIZER PB7

ModbusRTU mb;

uint16_t holdingRegs32 = {0};

DHT dht1(DHTPIN1, DHTTYPE);

DHT dht2(DHTPIN2, DHTTYPE);

BH1750 lightMeter;

// 滑动平均滤波器

float filterBufferFILTER_SIZE;

int filterIndex = 0;

float movingAverage(float newValue) {

filterBufferfilterIndex = newValue;

filterIndex = (filterIndex + 1) % FILTER_SIZE;

float sum = 0;

for (int i = 0; i < FILTER_SIZE; i++) sum += filterBufferi;

return sum / FILTER_SIZE;

}

void setup() {

SystemClock_Config();

Serial1.begin(BAUD_RATE);

mb.begin(&Serial1);

mb.slave(SLAVE_ID);

mb.addHreg(0, holdingRegs, 32);

复制代码
mb.onGet(handleRead);
mb.onSet(handleWrite);

dht1.begin();
dht2.begin();
Wire.begin();
lightMeter.begin();

pinMode(MOTOR_WINDOW, OUTPUT);
pinMode(MOTOR_SHADE, OUTPUT);
pinMode(MOTOR_FAN, OUTPUT);
pinMode(VALVE_IRRIGATE, OUTPUT);
pinMode(PUMP_FERTILIZER, OUTPUT);

Timer1.initialize(1000000);
Timer1.attachInterrupt(sensorCollectTick);

}

void loop() {

mb.task();

}

4.2 多变量耦合控制逻辑

cpp

void sensorCollectTick() {

// 采集传感器数据

float temp = dht1.readTemperature();

float humidity = dht1.readHumidity();

float soil = map(analogRead(SOIL_ADC1), 0, 4095, 0, 100);

float light = lightMeter.readLightLevel();

复制代码
// 更新寄存器
holdingRegs[8] = (uint16_t)(temp * 10);
holdingRegs[9] = (uint16_t)(humidity * 10);
holdingRegs[12] = (uint16_t)soil;
holdingRegs[14] = (uint16_t)light;

// 自动控制模式
if (holdingRegs[1] == 1) {
    autoControl(temp, humidity, soil, light);
}

}

void autoControl(float temp, float humidity, float soil, float light) {

uint16_t tempHigh = holdingRegs23;

uint16_t tempLow = holdingRegs24;

uint16_t soilLow = holdingRegs25;

uint16_t lightHigh = holdingRegs26;

复制代码
// 温度控制:超温开风机,低温关风机(多变量耦合:温度高+湿度低→开风机+湿帘)
if (temp > tempHigh) {
    analogWrite(MOTOR_FAN, 200);
    holdingRegs[20] = 80;
} else if (temp < tempLow) {
    analogWrite(MOTOR_FAN, 0);
    holdingRegs[20] = 0;
}

// 土壤湿度控制:低于下限开灌溉
if (soil < soilLow) {
    digitalWrite(VALVE_IRRIGATE, HIGH);
    holdingRegs[21] = 1;
} else {
    digitalWrite(VALVE_IRRIGATE, LOW);
    holdingRegs[21] = 0;
}

// 光照控制:超过上限关遮阳帘
if (light > lightHigh) {
    analogWrite(MOTOR_SHADE, 150);
    holdingRegs[19] = 100;
} else {
    analogWrite(MOTOR_SHADE, -150);
    holdingRegs[19] = 0;
}

}

4.3 寄存器读写回调

cpp

uint16_t handleRead(uint16_t offset, uint8_t index) {

return holdingRegsoffset;

}

void handleWrite(uint16_t offset, uint8_t index, uint16_t value) {

switch(offset) {

case 1:

holdingRegs1 = value;

break;

case 18:

if (holdingRegs1 == 2)

analogWrite(MOTOR_WINDOW, map(value, 0, 100, 0, 255));

holdingRegs18 = value;

break;

case 19:

if (holdingRegs1 == 2)

analogWrite(MOTOR_SHADE, map(value, 0, 100, -255, 255));

holdingRegs19 = value;

break;

case 20:

if (holdingRegs1 == 2)

analogWrite(MOTOR_FAN, map(value, 0, 100, 0, 255));

holdingRegs20 = value;

break;

case 21:

if (holdingRegs1 == 2)

digitalWrite(VALVE_IRRIGATE, value ? HIGH : LOW);

holdingRegs21 = value;

break;

default:

holdingRegsoffset = value;

break;

}

}

五、关键技术细节

5.1 多传感器并发采集与滑动平均滤波

智慧农业沙盘需要同时采集多路传感器数据,STM32的ADC支持多通道扫描模式。注意事项: 土壤湿度传感器(电容式)存在温漂,建议在软件中做温度补偿。DHT22的采样周期建议≥2秒。

传感器数据存在噪声,滑动平均滤波(窗口大小5)可有效平滑数据波动,避免控制逻辑频繁抖动。

5.2 多变量耦合控制逻辑设计

智能温室的执行器之间存在逻辑耦合:温度高且湿度低时开风机+湿帘,温度高且湿度高时只开风机不开湿帘。在状态机中需设计优先级逻辑,避免执行器冲突。建议将控制逻辑拆分为独立函数,便于现场调试和参数调整。

5.3 数字孪生数据对接

智慧农业沙盘通常需要配套数字孪生大屏,实现"物理沙盘→虚拟孪生体"的双向同步。Modbus RTU寄存器中的数据(传感器值、执行器状态)可通过4G/WiFi网关以MQTT协议上报至云平台。寄存器40007(数据上报开关)控制是否上报云端,便于现场调试时关闭上报避免干扰。

5.4 通讯异常处理

策略 实现方式 适用场景

保持当前状态 不改变输出,等待通讯恢复 展厅演示

自动切换应急模式 切换至预设安全状态 安全要求较高

状态上报 向上位机发送故障码 远程监控

六、现场调试要点

6.1 传感器异常排查

现象 排查方向 解决方案

温湿度读数异常 接线/时序 确认供电3.3-5V,数据线接上拉电阻

土壤湿度跳变 ADC噪声 增加软件滤波,检查电源纹波

光照传感器无数据 I²C地址 确认BH1750地址(0x23或0x5C)

6.2 执行器异常排查

现象 排查方向 解决方案

电机不转 电源/驱动 检查DRV8833供电,确认EN引脚电平

电磁阀不动作 驱动电流 确认继电器驱动电流满足线圈要求

6.3 调试工具推荐

调试阶段推荐使用Modbus Poll(Windows)作为主站调试工具,配合USB转RS485转换器连接目标板。通讯正常后,依次测试各寄存器的读写功能,确认传感器数据更新正常后再测试自动控制逻辑。

七、工程实践能力

基于STM32平台的多传感器采集与多执行器联动控制方案,已在筑城世纪多个工业模型项目中完成部署验证:

华北电力大学火电原理教学沙盘:多路温度、压力传感器采集与多设备联动控制

国机集团柬埔寨燃机联合循环电站沙盘:6级灯光联动、65米灯带,多节点时序控制

上述项目验证的核心能力(多传感器并发采集、多变量耦合控制、Modbus RTU数据对接),与智慧农业沙盘的控制需求一致。

筑城世纪模型在智慧农业沙盘方向具备以下三项核心交付能力:

  1. 农业物联网系统理解能力

技术团队具备对接农业物联网系统图纸的能力,能够按图纸精确还原传感器布局、设备联动逻辑和数据流向。传感器部署位置、执行器控制逻辑按图施工,可签署技术图纸确认单。

  1. 控制系统自主研发能力

控制系统基于STM32平台自主研发,支持多路传感器并发采集、多变量耦合控制逻辑编程、Modbus RTU数据对接。后期可根据客户需求随时修改控制逻辑和阈值参数,无需依赖第三方。

  1. 全流程自主交付能力

2000㎡制作工厂,位于北京通州,可为京津冀地区智慧农业项目提供本地化定制服务。设计、3D打印、CNC加工、喷涂、组装、控制系统编程全部自主完成,不外包。签约前出具《模型制作工艺说明》,零增项承诺写入合同。有图纸就能做。

八、总结

智慧农业沙盘物联网控制系统的设计,核心在于三个层面:

  1. 多传感器并发采集是感知基础。 采用ADC多通道扫描+滑动平均滤波,确保数据可靠性。土壤湿度传感器的温漂补偿和DHT22的采样周期控制是关键细节。

  2. 多变量耦合控制逻辑是核心。 智能温室的执行器控制涉及多变量耦合判断。采用状态机编程,将传感器数据→阈值判断→执行器动作定义为独立状态,逻辑清晰、便于调试。

  3. 数据上云与数字孪生对接是价值延伸。 Modbus RTU寄存器数据可通过MQTT协议上报至云平台,实现"物理沙盘→虚拟孪生体"的双向同步。

筑城世纪模型的工业模型控制系统方案,基于STM32平台自主研发,支持Modbus RTU协议,已在多套工业模型项目中完成部署验证。控制系统支持多路传感器并发采集、多执行器联动控制、数据接口对接,后期可根据需求随时修改控制逻辑和阈值参数。

相关推荐
Cry丶6 小时前
ubuntu安装vsftpd
服务器·网络·ubuntu
乐讯通物联网服务商7 小时前
智能蒸烤箱连 WiFi 还是插物联网卡?家电联网方案怎么选
物联网·物联网卡·厨房家用电器
木子欢儿8 小时前
openconnect Linux客户端安装 以及开机自启和登录
linux·运维·服务器
..Dauntless..9 小时前
【Linux】文件系统(一)
linux·运维·服务器
数字会议深科技9 小时前
会议方案设计应如何融入 AI 和物联网等领先会议技术
人工智能·物联网·会议解决方案·会议设计方案
Alinket9 小时前
不训练模型也能加 AI:5 套可直接量产的组合方案
人工智能·物联网·ai·健康医疗·无线通信·智能硬件·iot
九零HTTP10 小时前
10月21号-CSDN配菜-IP池的5个坑
服务器·数据库·tcp/ip
SHENGWEI胜为10 小时前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
HQB202610 小时前
EG1198|屹晶微电子 120V 内置 MOS 异步降压 DC‑DC(高性价比)
嵌入式硬件·硬件工程
极光通讯10 小时前
液冷服务器对内存和SSD的适配要求:高密度部署下的散热与信号完整性
运维·服务器