// 引脚定义
#define SURFACE_SENSOR A0 // 表层湿度传感器
#define DEEP_SENSOR A1 // 深层湿度传感器
#define WATER_LEVEL_SENSOR A2 // 水位传感器(低电平表示有水)
#define PUMP_RELAY 8 // 水泵继电器控制引脚
// 阈值设置
const int DRY_THRESHOLD = 600; // 干燥阈值(值越大表示越干)
const int WET_THRESHOLD = 350; // 湿润阈值
const int WATER_EMPTY = 200; // 水位空阈值(根据实际传感器调整)
// 时间控制(毫秒)
const unsigned long WATERING_DURATION = 5000; // 每次浇水5秒
const unsigned long CHECK_INTERVAL = 30000; // 检测间隔30秒
void setup() {
pinMode(PUMP_RELAY, OUTPUT);
digitalWrite(PUMP_RELAY, HIGH); // 继电器默认断开(安全设计)
Serial.begin(9600);
Serial.println("System Started");
}
void loop() {
// 1. 读取所有传感器
int surface = analogRead(SURFACE_SENSOR);
int deep = analogRead(DEEP_SENSOR);
int water_level = analogRead(WATER_LEVEL_SENSOR);
Serial.print("Surface: ");
Serial.print(surface);
Serial.print(" | Deep: ");
Serial.print(deep);
Serial.print(" | Water: ");
Serial.println(water_level);
// 2. 检查水位安全
if (water_level < WATER_EMPTY) {
Serial.println("WARNING: Water tank empty!");
delay(CHECK_INTERVAL);
return; // 跳过本次循环
}
// 3. 灌溉决策(任一土层干燥即启动)
if (surface > DRY_THRESHOLD || deep > DRY_THRESHOLD) {
Serial.println("Starting irrigation...");
digitalWrite(PUMP_RELAY, LOW); // 继电器闭合,启动水泵
unsigned long startTime = millis();
// 实时监测灌溉效果
while (millis() - startTime < WATERING_DURATION) {
// 持续检测水位(紧急停止功能)
if (analogRead(WATER_LEVEL_SENSOR) < WATER_EMPTY) {
Serial.println("EMERGENCY STOP: Water depleted during watering!");
break;
}
delay(100);
}
digitalWrite(PUMP_RELAY, HIGH); // 关闭水泵
Serial.println("Irrigation completed");
}
// 4. 等待下次检测
delay(CHECK_INTERVAL);
}