Вытяжка в ванной через твердотельное реле(вместо простого)

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Pashtet, 14 сен 2016.

  1. Pashtet

    Pashtet Нерд

    Добрый день.

    Хочу сделать вытяжку в ванной, из железок - DHT11, Arduino UNO, Твердотельное реле(в своё время его заказывал, т.е. оно есть, хочется применить его, что б не валялось).

    По идее(я полный нуб в электронике, а ардуино один раз включал), схема будет такой:

    Graphic1.jpg


    Программа будет такой:

    Код (C++):
    #include "DHT.h"
    #define DHTPIN 2     // вывод, к которому подключается датчик
    #define DHTTYPE DHT22   // DHT 22  (AM2302)
    #define fan 4
    int maxHum = 60;
    int maxTemp = 40;
    DHT dht(DHTPIN, DHTTYPE);
    void setup() {
      pinMode(fan, OUTPUT);
      Serial.begin(9600);
      dht.begin();
    }
    void loop() {
      // ждем пару секунд перед началом измерений
      delay(2000);
      // считывание температуры или влажности занимает примерно 250 мс!
      // считанные показания могут отличаться от актуальных примерно на 2 секунды (это очень медленный датчик)
      float h = dht.readHumidity();
      // Считывание температуры в цельсиях
      float t = dht.readTemperature();

      // проверяем, были ли ошибки при считывании и, если были, начинаем заново
      if (isnan(h) || isnan(t)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }

      if(h > maxHum || t > maxTemp) {
          digitalWrite(fan, HIGH);
      } else {
         digitalWrite(fan, LOW);
      }

      Serial.print("Humidity: ");
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: ");
      Serial.print(t);
      Serial.println(" *C ");
    }

    Самое главное - как подключить твердотельное реле вместо обычного(на схеме справа)?
    Заранее огромное спасибо.
     
    Последнее редактирование: 14 сен 2016
  2. vvr

    vvr Инженерище

    минус на GND, плюс на 4 пин))))
     
  3. Pashtet

    Pashtet Нерд

    Значит правильно с самого начала раскрасил.

    Можно немного потупить?

    Т.е. на цифровом выходе мы получим 5в для замыкания реле?

    И годится ли код?

    Заранее огромное спасибо!
     
  4. vvr

    vvr Инженерище

    ну вы барин даёте)))
    digitalWrite(fan, HIGH); - на пине будет 5 вольт
     
    Pashtet нравится это.
  5. alp69

    alp69 Форумчанин

    Неплохо бы параллельно твердотелке резистор 10 кОм подключить (притянуть вход к GND, чтобы гарантировать отсутствие случайных самопроизвольных включений от помех). Ну и порядка 200 Ом между зеленым проводом твердотелки и 4 пином ардуины (ограничить ток на пине ардуины).
    Только смотрите внимательно - в зависимости от потребляемой нагрузкой мощности может понадобится радиатор для твердотелки.
    Вполне достаточно.
     
    Pashtet нравится это.
  6. Tomasina

    Tomasina Сушитель лампочек Модератор

    DHT11 сразу выкинуть и поставить хотя бы DHT 22 (кстати в коде именно DHT 22 написано).
    Еще нет гистерезиса, поэтому на пограничных значениях реле может начать дребезжать. Добавь небольшую дельту между порогами включения и выключения:
    Код (C++):

    if(h > maxHum || t > maxTemp) digitalWrite(fan, HIGH);
    else if(h < maxHum -10 || t < maxTemp -3) digitalWrite(fan, LOW);
     
    Pashtet нравится это.
  7. Pashtet

    Pashtet Нерд

    Скажите, а на сколько точные DHT11/22?

    Может есть какие аналоги по вменяемой цене?
    Типа:
    HTU21D temperature & humidity sensor breakout board module
    или
    AM2320
     
  8. по вменяемой цене AM2320
     
  9. AlexVS

    AlexVS Гик

    Si7021
     
  10. Pashtet

    Pashtet Нерд

    С датчиком может быть засада, возможно придётся покупать часы реального времени (что бы задать сезонность зима-лето).

    За 6 лет наблюдений за домашней метеостанцией средняя влажность зимой, при включенных батареях, около 20-27%, летом ~65%.
    Т.е. при купании в ванной зимой 65% практически не будет превышаться, в то время как летом там всегда будет >65%.

    Вопрос - а что ставить в качестве "большая влажность, нужно включить вентилятор"?

    Можно ли в коде указать, что независимо от влажности вентилятор нужно включать раз в 15 минут на 2 минуты?
     
    Последнее редактирование: 17 сен 2016
  11. alp69

    alp69 Форумчанин

    Это реализуемо, но может есть смысл отслеживать текущую влажность за сутки и усредненное значение использовать как опорное (с некоторым допуском) на следующие сутки?
    Таким образом получим адаптивный датчик...
     
  12. Pashtet

    Pashtet Нерд

    Да, классная идея.

    Ещё можно так:
    Показания снимаются раз в минуту. Если 3 показания на 5% > чем среднее значение за последние 100 замеров, то включается вытяжка, которая должна за 20 минут должна достигнуть того среднего значения с сотни замеров.
    Если значение за 20 минут работы вентилятора не достигнуто, то следующее включение будет через, допустим, 60 минут на 5 минут.
    Если через 3 часа значение так и не было достигнуто, то значения обнуляются и рассчитываются заново (если естественная влажность начала увеличиваться, то вентилятор может достигнуть той влажности(полученной со ста замеров) только через пару месяцев)

    [потупить on]
    а разве в арудино есть память, в которую можно записать значения?
    [/потупить on]
     
    Последнее редактирование: 18 сен 2016
    rico нравится это.
  13. Pashtet

    Pashtet Нерд

    Есть ещё вариант - считать через 2 датчика влажности, один в ванной, второй на кухне.

    Если значение первого датчика(туалет) отличается более чем на 10%(можно меньше, но наверняка у двух рядом лежащих датчиков будет разница в измерениях из-за погрешности изготовления датчика) от значения второго датчика, то включается вентилятор, который за, допустим, 20 минут должен достигнуть одинакового значения(с учётом 10% разницы), если нет, то пауза в 30 минут, затем очередное включение вентилятора.

    А можно реализовать по другому.
    На потолке венной светодиодные светильники работающие от 12 вольт. Можно ли эти 12 вольт как-то подвести к ардуине, что бы она их "видела"?

    Включаем свет в ванной на период < 7 минут, после выключения света вентилятор включается на 5 минут.

    Включаем свет в ванной на период >7 минут(купаемся), после выключения света включаем вентилятор в ванной на 1 час.



    Будет тупо и цинично, но основная задача будет выполнена, этого времени будет вполне достаточно, что бы убрать избыточную влажность(ну я просто не напишу сам код для двух датчиков влажности, а этот можно попробовать сделать).
    Через датчик света не сделаю(было бы проще всего) - у меня окно в ванной.
     
  14. alp69

    alp69 Форумчанин

  15. Pashtet

    Pashtet Нерд

    alp69 - Вы шутите! (даже без знака вопроса), там это, код для тех, кто 18+

    В общем, пока всё реализую без HTU21D, т.к. их пока не знаю как подключать и не знаю как и что писать в коде.
    Посмотрите пожалуйста схему и код, на сколько вероятно, что она будет работать? Graphic1.jpg

    Код (C++):
    #include "DHT.h"
    #define DHTPIN1 1     // датчик в ванной
    #define DHTPIN2 2     // датчик на кухне
    #define fan 4


    #define DHTTYPE DHT11   // DHT 11
    //#define DHTTYPE DHT22   // DHT 22  (AM2302)
    //#define DHTTYPE DHT21   // DHT 21 (AM2301)

    DHT dht1(DHTPIN1, DHTTYPE);
    DHT dht2(DHTPIN2, DHTTYPE);

    void setup() {
    pinMode(fan, OUTPUT);
    Serial.begin(9600);
    Serial.println("test!");
    dht1.begin();
    dht2.begin();

    }

    void loop() {
    delay(2000);
    float h1 = dht1.readHumidity();
    float h2 = dht2.readHumidity();

    }
    // если влажность ванной + 10 (сюда включена заводская погрешность двух DHT между собой
    //и лишняя влажность, которую убираем) больше влажности на кухне включаем вентилятор
    if(h1+10 > h2) {    
    digitalWrite(fan, HIGH);
    } else {
    digitalWrite(fan, LOW);
    }

    // блок вывода на "экран"
    Serial.print(h1);
    Serial.print("  sensor 2, ");
    Serial.print(h2);
    Serial.print("  sensor 3, ");
    }
     
    Последнее редактирование: 19 сен 2016