Контроллер управления вытяжным вентилятором в ванной

Контроллер управления влажностьюНедавно столкнулся с тривиальной задачей — управление вытяжным вентилятором дома в ванной комнате. 

Казалось бы чего проще, подключил его к выключателю света и готово. Но, время работы света непостоянно и может быть недостаточно для уменьшения влажности, хотя данную проблему можно решить установкой таймера. К тому же, моим близким очень не нравится работающий вентилятор при принятии водных процедур, так как он «создает холодный ветер». 

Вторым очевидным решением было просто посадить вентилятор на отдельный выключатель и предоставить управление человеку. Но человеческий фактор таков, что вентилятор постоянно забывали включать, а если включали, то выключать. Эффективность работы вентилятора быстро стремилась к нулю.

Пришлось подключить к делу свое увлечение Arduino и несложными микроконтроллерами. 

Пораскинув мозгами сформулировал

Требования к устройству управления

  1. устройство управления должно работать в автоматическом режиме;
  2. вентилятор должен включаться от повышения влажности;
  3. включение вентилятора не должно зависеть от текущего уровня влажности в квартире;
  4. вентилятор должен работать, когда в ванной комнате никого нет;
  5. устройство управление должно быть максимально простым и дешевым;

Выбор элементной базы

Прототип данного устройства создавался на отладочной плате Arduino Uno китайского производства:
Макет контроллера на Arduino UNO

Потом все переносилось в микроконтроллер Atmega328, прошитый стандартным ардуиновским загрузчиком.

Конечное устройство создавалось по принципу «я тебя слепила из того что было». Все элементы были приобретены ранее на просторах интернета под различные проектики или выдраны из неработающих устройств:

В качестве источника питания подошел LED driver 3×1вт от светильника, который вполне справился с питанием импульсного стабилизатора LM2596.
В качестве корпуса была применена кроссовая коробочка от старой АТС.

Схема устройства

Схема контроллера управления влажностью


На индикатор CPS03621BR даташит найден не был, поэтому выводы находились при помощи батарейки методом тыка. Индикатор оказался с общим анодом. Схема расположения катодов:
Расположение кадодов 7-ми сегментного индикатора

Вентилятор управляется при помощи симистора BT137.
Схему подключения взял с сайта avr.ru

Если кто-то вздумает повторять — ОСТОРОЖНО, на корпусе симистора напряжение 220В.

Контроллер управления влажностью. Вид изнутри

Контроллер управления влажностью. Вид изнутри крупно

Контроллер управления влажностью. Вид изнутри


Алгоритм работы

Микроконтроллер с периодичностью раз в 10 секунд меряет влажность и температуру.
Влажность циклически накапливается в архиве из 6 значений. Если текущая влажность выше первой из архива более чем на 3% либо абсолютное значение влажности выше 85%, значит нужно включать вентилятор. 
Вентилятор включается на 20 минут при отсутствии света на фоторезисторе.
Кнопка принудительно включает вентилятор на 20 минут (если он не работает) или выключает (если работает).
Все константы в алгоритме подбирались эксперементальным путем.

Индикатор циклически показывает текущую температуру, влажность и таймер обратного отчета.
Точка второго разряда горит, если требуется понижение влажности и мигает, если подана команда на включения вентилятора.

Полностью логику работы прибора можно описать конечным детерменированным автоматом.
Входной алфавит автомата состоит из следующих событий (в порядке приоритетов):

  • нажата кнопка ручного режима;
  • сработал датчик влажности;
  • горит свет;
  • не горит свет;
  • сработал таймер работы вентилятора.

Множество состояний:

  1. режим ожидания, вентилятор не работает, тайме отключен;
  2. требуется включение вентилятора, вентилятор не работает, таймер (при)остановлен;
  3. вентилятор работает в автоматическом режиме, таймер включен;
  4. вентилятор работает в ручном режиме, таймер включен;

Ну и таблица переходов состояний автомата:
Контроллер управления влажностью. Таблица переходов автомата состояния
Программирование


AVR-studio и прочих монстров я устанавливать не стал, а обошелся опять же тем, что было — IDE Arduino. 

Как подготовить контроллер для работы в среде ARDUINO IDE описано в этой статье
Контроллер прошил на 8МГц с внутренним резонатором и отключенным контролем напряжения питания.

Скетч и библиотеки, использованные в проекте

Проблемы

Первой проблемой, с которой столкнулся в реализации — не работал датчик DHT11. На Arduino UNO все нормально, а на голом микроконтроллер не работает. Проблема оказалась в частоте работы контроллера и таймингам протокола опроса DHT.
В контроллерах, работающих на частоте 8МГц в библиотеке DHT нужно обязательно указывать задержку «3» (третий параметр в конструкторе класса) DHT dht(dhtPIN, DHT11, 3);

Второй проблемой стало произвольное срабатывание ресет и кнопки ручного режима. Виной всему были наводки с силовых проводов, проходящих недалеко от данных выводов. Сперва встроенный подтягивающий резистор микроконтроллера на соответствующих выводах был заменен на внешний 10К. Помеха уменьшилась, но не исчезла совсем. Контроллер периодически жил своей жизнью самостоятельно включая/выключая вентилятор. 
Тогда я реализовал программное подавление помехи — кнопка опрашивалась подряд 10 раз с задержкой 10мс и только при наличии всех 10 срабатываний признавалось нажатие кнопки. 

Готовое устройство выглядит так:

Контроллер управления влажностью. Общий вид

Супруга посмотрела на унылую коробочку непонятного цвета и сделала ей «декупаж»

Контроллер управления влажностью. Декупаж

Два месяца эксплуатации контроллера прошло нормально и особо переделывать ничего не хочется.

Спустя два года эксплуатации разработана новая версия контроллера на ESP8266:

Список полезных ссылок:

Главный помощник устал.

Контроллер управления влажностью. Главный помощник

 

Ветка на форуме с обсуждением данного проекта

Скетч контроллера управления влажностью
7.8 KiB
4085 Downloads
Детали
Вы можете оставить отзыв или трекбек со своего сайта.

44 комментария на «Контроллер управления вытяжным вентилятором в ванной»

  1. Сергей:

    Возможно ли как нибудь реализовать такой прибор
    http://noo.com.ru/magazin/product/taymer-storozh-bzt-300-st-1
    не могу у себя в городе купить, а функционала на вытяжку такого прибора мне достаточно.

  2. Олег:

    Подскажите, пожайлуста, маркировку фоторезистора?
    И ссылка на обсуждение ведет на самогонный аппарат!?

  3. Вадим:

    Очень заинтересовал этот проект, хотелось бы собрать себе такой же, но на базе ардуино (как на первом варианте). Но неясен ряд вещей, так например что за вторая плата подключена к ардуино на изображении, никак не разберу. Если здесь проблемно отвечать, то подскажите где с вами можно связаться и проконсультироваться по этому вопросу. Премного благодарен.

    • Alexey:

      Проект полностью совместим с Arfuino Uno?Nano/Mini
      Вторая плата — внегний импульсный DC/DC преобразователь, стабилизирующий напряжение питания (в плате Ардуино он встроенный)
      Симистор проще заменить реле, если повесить на тот же выход, то даже программу не нужно переписывать

  4. Валерий:

    Повторил данный проект. У меня есть одна проблема. Когда фоторезистор закрыт, работает вентиляция по таймеру. Таймер доходит до нуля и цикл повторяется снова и снова. Ощущение такое, что высокая влажность, хотя датчик не показывает изменение влажности более 3%. Значение 56. Точка второго разряда все время горит, когда работает вентилятор мигает. Датчик использовал dht21. Не пойму в чем проблема.

    • Alexey:

      Нужно в отладке на экран все прогнать.
      Объявили DHT21 как нужно? Там в коде объявление как DHT11
      Может значение влажности нестабильное и постоянно взводится флаг, что влажность повысилась.

  5. Валерий:

    Dht21 обьявлен правильно, иначе не отображалась бы влажность и температура. Скорее всего влажность не стабильна. А включение происходит только при повышении влажности или и при понижении?

  6. Валерий:

    У меня Алексей работает все время пока горит свет. Таймер отсчитывает 20 минут и по кругу опять включается. Такая работа как при высокой влажности так и при низкой. Например влажность 93 и понижается до 54. Таймер 20 мин проработал и уже при влажности 54 запустился снова. Так пока не выключишь свет. Если при шести циклах работы таймера влажность не повышается более чем на 3%, то команды на запуск вентилятора не должно быть? Это и есть архив из шести значений?

  7. Валерий:

    Еще забыл написать, что у меня контроллер прошит под 16мгц.

  8. Алексей:

    Повторил вашу работу. У вас в коде ошибка.
    В цикле for( int i=5; i>0; i—)h_arr[i-1] = h_arr[i];
    Пятое значение массива вечно переписывается во все ячейки по кругу.
    Для сдвига ячейки нужно заменить на h_arr[i] = h_arr[i-1];

    Исправьте пожалуйста и на Хабре http://geektimes.ru/post/258414/.
    Устройство хорошее и многие повторяют его.

  9. Доброго времени суток! Хочу повторить Вашу разработку, но есть одна проблема : семисегментники у меня С общим катодом… Что нужно поменять в программе?

  10. И еще раз доброго времени суток! На схеме нажатие кнопки приводит к появлению 1 на входе(а там и так 1). Пока не перецепил на «-» нажатия не было… Возможно у Вас ошибка? Но у меня другая проблема: во первых не уверен во fuses (схема не работает от 3,3 в), и датчик DHt11 (схема работает только от +5)через последовательный порт и на семисегментники посылает нули….

    • Alexey:

      С кнопкой согласен.
      Сейчас все устройства я по другому — вывод через сопротивление 10к подтянут к VCC, а кнопка замыкает вывод на землю. Только действие кнопки должно в программе инвертироваться.
      Хотя данная схема у меня работает уже два года и поэтому переделывать пока смысла нет. Думаю, сразу на ESP8266 перейти с выводом в архив параметров. Можно будет потом делать анализ влажности и эффективности вентилятора.

      Фьюзы для 3.3 нужно устанавливать BOD disabled
      На 3.3 может быть другая проблема — может контроллер глючить и ему еще больше потребуется снижение частоты. Хотя лично пока не встречал. Все Atmega328 и Arduino Pro Mini нормально работают на 3.3В

      DHT11 по даташиту должен работаеть от 3В до 5.5В. У меня нормально работает с ESP8266 у которой 3.3 питание.

  11. Да, вот еще обнаружил, что цепляется к ком порту только на скорости 4800.

  12. Решил проблему перепрошивкой фьюзов на работу от внешнего кварца, и собственно установкой оного в схему, с соответствующей корректировкой программы(частота кварца 16мгц)

  13. Очень может быть… Собрал еще одну плату начисто, появилась интересная неисправность: при старте загораются нули(все сегменты работают), но когда начинает идти инфа о температуре, влажности и таймере, часть сегментов в цифрах не загорается!

  14. Виноват , как оказалось, сам… Перепутал сегменты А и Б…

  15. Сергей:

    Кто подскажет, на какой оптимальной высоте нужно устанавливать DHT.

    • Alexey:

      Если учесть, что изменение температуры с изменением высоты составляет 0.5С на 100м, то при точности DHT это не принципиально

      • Сергей:

        Понял. Тогда другой вопрос. В каком лучше месте установить датчик, около вытяжки, у двери, над ванной и т.д.

        • Alexey:

          Датчик лучше делать над душем или на стене вблизи душа, где сильнее запотевает от горячей воды. Контроллер наоборот, чтобы воздействия влаги было на него минимальным.
          У меня стоит контроллер с датчиком на стене, на которой дверь расположена на высоте около 2-х метров.

          • Сергей:

            Понял. Спасибо за совет.

          • Alexey:

            Заканчиваю отладку новой версии контроллера, только с WiFi на модуле ESP8266
            Где-нибудь через недельку статью напишу по этому поводу

  16. Сергей:

    Ооо. Это будет очень интересно. Будем ждать.

    • Alexey:

      ESP07 и ESP12 подойдет
      Лучше 07, у него можно внешнюю антенну установить
      ESP01 не выведены все GPIO и иналоговый вход. их нужно прямо с микросхемы брать

  17. Сергей:

    Понял. Буду заказывать.

  18. Вальдемар:

    Как насчёт создать дистанционный выключатель для комнатной люстры ? Чтобы на расстоянии замыкать провода в старом выключателе или включать блок управления в светильнике . Было бы отлично и с таким же подробным описанием.

  19. Вальдемар:

    Нужно ,чтобы выключатель питался от батарейки

  20. HaOS:

    Доброго времени, Alexey.

    Можно ли с Вами как-нибудь в личке поговорить об некоторых изменениях в этом Вашем проекте.

    Сам в программировании еще не силен. Небольшие переделки еще сам не осилю…

  21. николай:

    Добрый день,Alexey!
    Написал вам сообщение с просьбой на сайте arduino (там и фото есть).
    http://arduino.ru/forum/proekty/kontroller-upravleniya-vytyazhnym-ventilyatorom-v-vannoi#comment-459998
    Ответьте пожалуйста.

  22. николай:

    Таки не отозвались на мою просьбу, ну да ладно. У меня вопрос!
    Не собираетесь ли вы сделать контроллер кухонной вытяжки по такому же алгоритму?
    Использовать только индикатор,ds18b20 и кнопку принудительного включения? С температурой к примеру 45 градусов?
    Я повторял проект http://cxem.net/house/1-372.php . Работает чётко но два датчика надо располагать на расстоянии (где то штробить стену, да и сам контроллер расспологать много проводов). Вообщем так соплёй и висит год.

    • Alexey:

      В принципе можно делать датчики температуры беспроводные на батарейке
      Контроллер пока не планирую. Другими проектами занимаюсь

  23. AL:

    Нет ли у кого этой прошивки в HEX , а то скетч у меня компиляцию не проходит?прошу скинуть

Ваш отзыв

Вы должны войти, чтобы оставлять комментарии.