Захотел я сделать автоматический капельный полив у себя в теплице и купил датчик влажности почвы Подкинул реле и Ардуино сделал нейросетью код Вот он const int sensorPin = A5; // Пин для датчика влажности const int relayPin = 5; // Пин для реле const int startButtonPin = 6; // Пин для кнопки запуска const int stopButtonPin = 7; // Пин для кнопки остановки const int threshold = 600; // Пороговое значение влажности (настройте его!) unsigned long lastWateringTime = 0; // Время последнего полива bool manualWatering = false; // Флаг ручного полива
void loop() { int sensorValue = analogRead(sensorPin); // Считываем значение с датчика Serial.print("Sensor value: "); Serial.println(sensorValue); // Для отладки
// Проверка состояния кнопок if (digitalRead(startButtonPin) == LOW) { // Если кнопка запуска нажата manualWatering = true; digitalWrite(relayPin, HIGH); // Включаем реле Serial.println("Manual watering started"); lastWateringTime = millis(); // Обновляем время последнего полива delay(1000); // Задержка для предотвращения дребезга кнопки }
if (digitalRead(stopButtonPin) == LOW) { // Если кнопка остановки нажата manualWatering = false; digitalWrite(relayPin, LOW); // Выключаем реле Serial.println("Manual watering stopped"); delay(1000); // Задержка для предотвращения дребезга кнопки }
// Автоматический полив if (!manualWatering) { if (sensorValue < threshold) { // Если почва сухая digitalWrite(relayPin, HIGH); // Включаем реле lastWateringTime = millis(); // Обновляем время последнего полива Serial.println("Automatic watering started"); } else { // Если почва влажная if (digitalRead(relayPin) == HIGH) { digitalWrite(relayPin, LOW); // Выключаем реле Serial.println("Automatic watering stopped"); } }
// Отключение реле через 4 минуты после начала полива if (digitalRead(relayPin) == HIGH && (millis() - lastWateringTime >= 240000)) { digitalWrite(relayPin, LOW); // Выключаем реле через 4 минуты Serial.println("Watering stopped (Max time reached)"); } }
delay(1000); // Задержка 1 секунда между считываниями } Но реле не отключается при влажной почве и порог влажности устанавливал ничего не помогло Помогите пожалуйста решить проблему
(digitalRead(startButtonPin) == LOW) { // Если кнопка запуска нажата LOW- означает что кнопка не начата. if (digitalRead(stopButtonPin) == LOW) { // Если кнопка остановки нажата Тут тоже самое
Подкинул реле и Ардуино сделал нейросетью код
Вот он
const int sensorPin = A5; // Пин для датчика влажности
const int relayPin = 5; // Пин для реле
const int startButtonPin = 6; // Пин для кнопки запуска
const int stopButtonPin = 7; // Пин для кнопки остановки
const int threshold = 600; // Пороговое значение влажности (настройте его!)
unsigned long lastWateringTime = 0; // Время последнего полива
bool manualWatering = false; // Флаг ручного полива
void setup() {
Serial.begin(9600); // Для отладки
pinMode(relayPin, OUTPUT);
pinMode(startButtonPin, INPUT_PULLUP); // Внутренний подтягивающий резистор
pinMode(stopButtonPin, INPUT_PULLUP); // Внутренний подтягивающий резистор
}
void loop() {
int sensorValue = analogRead(sensorPin); // Считываем значение с датчика
Serial.print("Sensor value: ");
Serial.println(sensorValue); // Для отладки
// Проверка состояния кнопок
if (digitalRead(startButtonPin) == LOW) { // Если кнопка запуска нажата
manualWatering = true;
digitalWrite(relayPin, HIGH); // Включаем реле
Serial.println("Manual watering started");
lastWateringTime = millis(); // Обновляем время последнего полива
delay(1000); // Задержка для предотвращения дребезга кнопки
}
if (digitalRead(stopButtonPin) == LOW) { // Если кнопка остановки нажата
manualWatering = false;
digitalWrite(relayPin, LOW); // Выключаем реле
Serial.println("Manual watering stopped");
delay(1000); // Задержка для предотвращения дребезга кнопки
}
// Автоматический полив
if (!manualWatering) {
if (sensorValue < threshold) { // Если почва сухая
digitalWrite(relayPin, HIGH); // Включаем реле
lastWateringTime = millis(); // Обновляем время последнего полива
Serial.println("Automatic watering started");
} else { // Если почва влажная
if (digitalRead(relayPin) == HIGH) {
digitalWrite(relayPin, LOW); // Выключаем реле
Serial.println("Automatic watering stopped");
}
}
// Отключение реле через 4 минуты после начала полива
if (digitalRead(relayPin) == HIGH && (millis() - lastWateringTime >= 240000)) {
digitalWrite(relayPin, LOW); // Выключаем реле через 4 минуты
Serial.println("Watering stopped (Max time reached)");
}
}
delay(1000); // Задержка 1 секунда между считываниями
}
Но реле не отключается при влажной почве и порог влажности устанавливал ничего не помогло
Помогите пожалуйста решить проблему