0 голосов

В программировании не имею опыта, поэтому прошу помочь.

Вот этот датчик

На этот

вот скетч:
 

 // Подключаем библиотеку для работы с дисплеем
    #include "QuadDisplay2.h"
    // даём разумное для пина, к которому подключена реле
    #define RELAY_PIN        4
    // даём разумное для пина, к которому подключён датчик влажности почвы
    #define SENSOR          A0
    // минимальный порог влажности почвы
    #define HUMIDITY_MIN    550
    // максимальный порог влажности почвы
    #define HUMIDITY_MAX    600
    // интервал 10 мин между проверкой на полив растения
    #define INTERVAL        60000 * 10                           
    // переменная для хранения показания влажности почвы
    unsigned int humidity = 0;
     
    // статическая переменная для хранения времени
    unsigned long waitTime = 0;
     
    // создаём объект класса QuadDisplay и передаём номер пина CS
    QuadDisplay qd(9);
    
    void setup(void)
    {
      qd.begin();
      // пин реле в режим выхода
      pinMode(RELAY_PIN, OUTPUT);
      // выводим 0 на дисплей
      qd.displayInt(0);
    }
     
    void loop(void)
    {
      // считываем текущее показания датчика влажности почвы
      int humidityNow = analogRead(SENSOR);
      // если показания текущей влажности почвы
      // не равняется предыдущему запросу
      if(humidityNow != humidity) {
        // сохраняем текущие показания влажности
        humidity= humidityNow;
        // и выводим показания влажности на дисплей
        qd.displayInt(humidityNow);
      }
      // если прошёл заданный интервал времени
      // и значения датчика влажности меньше допустимой границы
      if ((waitTime == 0 || millis() - waitTime > INTERVAL) && humidity < HUMIDITY_MIN ) {
        // включаем реле
        digitalWrite(RELAY_PIN, LOW);
        // ждём 20 мин
        delay(60000 * 20);
        // выключаем реле
        digitalWrite(RELAY_PIN, HIGH);
        // приравниваем переменной waitTime
        // значение текущего времени плюс 3 минуты
        waitTime = millis();
      }
      
    }


Подскажите что заменить или дописать?

(5 баллов) 3
исправил

1 Ответ

0 голосов
 
Лучший ответ
Из документации , ссылки на которые даются на страницах обоих датчиков, следует , что аналоговый сигнал подаваемый с датчиков при одинаковых условиях будет примерно равным , хотя сами датчики по-разному мереют влажность . То есть в Вашем коде изменения не требуется.
(2.7 тыс. баллов) 6 17 38
выбран
//может быть через математическое вычисление (map)?
// переводим диапазон возможных значений сенсора max400-min1023 (пример)
// в диапазон вывода 255-0
map(sensor, 400, 1023, 255, 0);

Только куда добавить и что подставить?
При большой влажности. В первом датчике, значение увеличивается, а вот во втором, ёмкостном датчике, значение уменьшается. Из-за этого получается не стыковка со значениями. И код работает не правильно.
А датчик подключён правильно?
После int humidityNow = analogRead(SENSOR); вставить map(  humidityNow , 400, 1023, 255, 0);    
Но тогда  нужно будет менять значения на подходящие:
// минимальный порог влажности почвы
    #define HUMIDITY_MIN    550
    // максимальный порог влажности почвы
    #define HUMIDITY_MAX    600
У меня через troyka shild. Но подключен правильно.(A0)
Спасибо, попробую.
Доброго времени суток! Вопрос! Длинна(более 15м.) кабеля(витая пара) влияет на значение? Так как в лабораторных условиях с коротким кабелем работает все правильно.
Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
  1. Aromik

    75 балл(ов)

  2. Un_ka

    54 балл(ов)

  3. parovoZZ

    12 балл(ов)

  4. sser

    6 балл(ов)

  5. Тёмик

    5 балл(ов)

  6. NesteruS

    5 балл(ов)

Награды месяца
1-е место: OLED-дисплей (Troyka-модуль)
2-е место: Графический экран 128×64
3-е место: Текстовый дисплей 16×2 (Troyka-модуль)

...