#1 Re: Програмування Arduino » Потрібна допомога з кодом для автополиву » 2023-07-08 20:53:54

t725.png?rev=1604485434037000000&s=&v=1&type=circuits
Ось сама плата, а праворуч сервопривід. В моєму випадку він просто прокручується коли на нього подається сигнал (схема з інтернету)

#2 Програмування Arduino » Потрібна допомога з кодом для автополиву » 2023-07-08 20:28:19

NoNirvana
відповідей: 4

Вперше працюю з Ардуїно і роблю автоматичну систему поливу рослин в tinkercad. Підключив екран, датчик вологості та сервопривід який імітує кран для поливу.

Потрібно, щоб він включався при вологості в 20% чи меньше і при досягнені вологості в 75% вимикався до моменту, поки вологість знову не буде 20 чи меньше відсотків.

Проблема: при зміні параметрів на датчику вологості привід не перестає працювати після свого включення (тобто якщо він один раз запуститься, потім не вимикається).

#include <LiquidCrystal.h>

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);  // Піни підключення LCD монітора

int sensorPin = A0;                   // Пін, до якого підключено датчик вологості
int servoPin = 8;                     // Пін, до якого підключено сервопривід

int threshold = 20;                   // Порогове значення для рівня вологості
int dryAngle = 0;                     // Кут повороту сервоприводу при сухому ґрунті
int wetAngle = 180;                   // Кут повороту сервоприводу при вологому ґрунті

void setup() {
  lcd.begin(16, 2);                   // Ініціалізація LCD монітора
  lcd.print("Humidity:");             // Виведення заголовка на моніторі LCD
  
  pinMode(servoPin, OUTPUT);          // Встановлюємо пін сервоприводу на висновок
  
  // Настроюємо швидкість передачі даних для датчика вологості
  Serial.begin(9600);
}

void loop() {
  int sensorValue = analogRead(sensorPin);  // Зчитуємо значення з датчика вологості
  int humidity = map(sensorValue, 0, 1023, 0, 100); // Перетворюємо вологість у відсотки
  
  lcd.setCursor(0, 1);                       // Встановлюємо курсор на другий рядок
  lcd.print("   ");                          // Очищаємо попереднє значення вологості
  lcd.setCursor(0, 1);                       // Встановлюємо курсор на другий рядок
  lcd.print(humidity);                        // Виводимо поточний рівень вологості
  
  if (humidity > threshold) {             // Якщо рівень вологості вищий за порогове значення
    digitalWrite(servoPin, HIGH);            // Включаємо сервопривід
  } else {
    digitalWrite(servoPin, LOW);             // Вимикаємо сервопривід
  }

  delay(1000);                               // Затримка між вимірами
}

Підвал форуму