#1 2023-07-08 20:28:19

NoNirvana
Учасник
Зареєстрований: 2023-07-08
Повідомлень: 2

Потрібна допомога з кодом для автополиву

Вперше працюю з Ардуїно і роблю автоматичну систему поливу рослин в 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);                               // Затримка між вимірами
}

Неактивний

#2 2023-07-08 20:46:01

г0cть
Гість

Re: Потрібна допомога з кодом для автополиву

NoNirvana пише:

сервопривід

Поясніть що ви маєте на увазі під сервоприводом?

#3 2023-07-08 20:53:54

NoNirvana
Учасник
Зареєстрований: 2023-07-08
Повідомлень: 2

Re: Потрібна допомога з кодом для автополиву

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

Неактивний

#4 2023-07-08 20:58:39

г0cть
Гість

Re: Потрібна допомога з кодом для автополиву

Почитайте як працює сервопривод. Нариклад, https://arduino.ua/ru/art18-podklucheniya-servoprivoda-k-arduino-i-ypravlenie-im-s-pomoshhu-potenciometra-

#5 2023-07-11 21:33:11

гоcть
Гість

Re: Потрібна допомога з кодом для автополиву

1) "вывод" - це не висновок, а вихід сигналу
2) серводвигун не світлодіод, тому він не вмикається та вимикається, а повертає на потрібний кут. Тому він потребує певного сигналу, а не просто наявності чи відсутності живлення.

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

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