You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino Uno灌溉项目代码修改:实现持续循环检测灌溉

修复后的自动灌溉系统代码
int relayPin = 8;
int sensor_pin = A0; // 土壤湿度传感器接模拟引脚A0
int output_value;
// 加入滞后阈值,防止频繁启停
const int MOISTURE_LOW_THRESHOLD = 20;   // 低于此值启动水泵
const int MOISTURE_HIGH_THRESHOLD = 30;  // 高于此值停止水泵
bool pumpRunning = false; // 记录水泵当前状态

void setup()         
{ 
  Serial.begin(9600);                 
  pinMode(relayPin, OUTPUT);
  pinMode(sensor_pin, INPUT);
  Serial.println("Reading From the Sensor ...");
  delay(2000);
  // 初始化继电器状态为关闭
  digitalWrite(relayPin, HIGH);
}

void loop()
{
  int rawValue = analogRead(sensor_pin);
  // 根据传感器实际输出范围调整map参数,确保干燥时湿度值低,湿润时高
  // 多数土壤湿度传感器:干燥时rawValue≈500-800,湿润时≈100-300,可根据实际校准
  output_value = map(rawValue, 600, 100, 0, 100);
  // 限制数值范围,避免map超出0-100
  output_value = constrain(output_value, 0, 100);

  Serial.print("Moisture : ");
  Serial.print(output_value);
  Serial.println("%");

  // 带滞后的控制逻辑,防止频繁启停
  if (!pumpRunning && output_value < MOISTURE_LOW_THRESHOLD) {
    digitalWrite(relayPin, LOW); // 启动水泵(根据继电器类型调整电平)
    pumpRunning = true;
    Serial.println("Pump started - soil is dry");
  } else if (pumpRunning && output_value > MOISTURE_HIGH_THRESHOLD) {
    digitalWrite(relayPin, HIGH); // 停止水泵
    pumpRunning = false;
    Serial.println("Pump stopped - soil is moist");
  }

  delay(1000);
}

关键修改点说明

  • 滞后控制逻辑:新增MOISTURE_HIGH_THRESHOLD和pumpRunning状态变量,避免湿度在阈值附近波动时水泵频繁启停,同时确保传感器从湿润环境移开后,湿度低于低阈值时能触发水泵启动。
  • 传感器数值校准:调整map函数的输入范围为600, 100(适配多数土壤湿度传感器的实际输出:干燥时模拟值高,湿润时低),并通过constrain函数确保湿度值始终在0-100%范围内,避免异常数值导致逻辑错误。
  • 初始状态明确:在setup中初始化继电器为关闭状态,避免上电时水泵误启动。
  • 调试日志补充:添加水泵启停的串口日志,方便观察系统运行状态。

额外调试建议

  • 若水泵仍不启动,先确认继电器触发电平:部分继电器模块为高电平触发,此时需将启动逻辑改为digitalWrite(relayPin, HIGH),停止改为digitalWrite(relayPin, LOW)。
  • 用串口监视器记录传感器原始值:将传感器分别放在干燥、湿润土壤中,记录实际模拟值范围,再调整map函数的输入参数,确保湿度计算准确。

内容的提问来源于stack exchange,提问作者Tendai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 06:45:29