Недавно столкнулся с тривиальной задачей — управление вытяжным вентилятором дома в ванной комнате.
Казалось бы чего проще, подключил его к выключателю света и готово. Но, время работы света непостоянно и может быть недостаточно для уменьшения влажности, хотя данную проблему можно решить установкой таймера. К тому же, моим близким очень не нравится работающий вентилятор при принятии водных процедур, так как он «создает холодный ветер».
Вторым очевидным решением было просто посадить вентилятор на отдельный выключатель и предоставить управление человеку. Но человеческий фактор таков, что вентилятор постоянно забывали включать, а если включали, то выключать. Эффективность работы вентилятора быстро стремилась к нулю.
Пришлось подключить к делу свое увлечение Arduino и несложными микроконтроллерами.
Пораскинув мозгами сформулировал
Требования к устройству управления
- устройство управления должно работать в автоматическом режиме;
- вентилятор должен включаться от повышения влажности;
- включение вентилятора не должно зависеть от текущего уровня влажности в квартире;
- вентилятор должен работать, когда в ванной комнате никого нет;
- устройство управление должно быть максимально простым и дешевым;
Выбор элементной базы
Прототип данного устройства создавался на отладочной плате Arduino Uno китайского производства:
Потом все переносилось в микроконтроллер Atmega328, прошитый стандартным ардуиновским загрузчиком.
Конечное устройство создавалось по принципу «я тебя слепила из того что было». Все элементы были приобретены ранее на просторах интернета под различные проектики или выдраны из неработающих устройств:
- микроконтроллер Atmega328P-PU с панелькой;
- макетная плата;
- датчик температуры и влажности DHT11;
- двухразрядный семисегментый индикатор CPS03621BR от неработающих часов;
- фоторезистор из коробочики с радиолюбительским хламом;
- стабилизатор напряжения на LM2596;
- симистор BT137;
- оптосимистор MOC3061 для гальванической развязки;
- кнопка и несколько резисторов
В качестве источника питания подошел LED driver 3×1вт от светильника, который вполне справился с питанием импульсного стабилизатора LM2596.
В качестве корпуса была применена кроссовая коробочка от старой АТС.
Схема устройства
На индикатор CPS03621BR даташит найден не был, поэтому выводы находились при помощи батарейки методом тыка. Индикатор оказался с общим анодом. Схема расположения катодов:
Вентилятор управляется при помощи симистора BT137.
Схему подключения взял с сайта avr.ru
Если кто-то вздумает повторять — ОСТОРОЖНО, на корпусе симистора напряжение 220В.
Алгоритм работы
Микроконтроллер с периодичностью раз в 10 секунд меряет влажность и температуру.
Влажность циклически накапливается в архиве из 6 значений. Если текущая влажность выше первой из архива более чем на 3% либо абсолютное значение влажности выше 85%, значит нужно включать вентилятор.
Вентилятор включается на 20 минут при отсутствии света на фоторезисторе.
Кнопка принудительно включает вентилятор на 20 минут (если он не работает) или выключает (если работает).
Все константы в алгоритме подбирались эксперементальным путем.
Индикатор циклически показывает текущую температуру, влажность и таймер обратного отчета.
Точка второго разряда горит, если требуется понижение влажности и мигает, если подана команда на включения вентилятора.
Полностью логику работы прибора можно описать конечным детерменированным автоматом.
Входной алфавит автомата состоит из следующих событий (в порядке приоритетов):
- нажата кнопка ручного режима;
- сработал датчик влажности;
- горит свет;
- не горит свет;
- сработал таймер работы вентилятора.
Множество состояний:
- режим ожидания, вентилятор не работает, тайме отключен;
- требуется включение вентилятора, вентилятор не работает, таймер (при)остановлен;
- вентилятор работает в автоматическом режиме, таймер включен;
- вентилятор работает в ручном режиме, таймер включен;
Ну и таблица переходов состояний автомата:
Программирование
AVR-studio и прочих монстров я устанавливать не стал, а обошелся опять же тем, что было — IDE Arduino.
Как подготовить контроллер для работы в среде ARDUINO IDE описано в этой статье
Контроллер прошил на 8МГц с внутренним резонатором и отключенным контролем напряжения питания.
Скетч и библиотеки, использованные в проекте
- Arduino DHT library для работы с датчиком DHT11
- Seven Segment Display для работы с семисегментным индикатором.
- Скетч контроллера управления влажностью
Проблемы
Первой проблемой, с которой столкнулся в реализации — не работал датчик DHT11. На Arduino UNO все нормально, а на голом микроконтроллер не работает. Проблема оказалась в частоте работы контроллера и таймингам протокола опроса DHT.
В контроллерах, работающих на частоте 8МГц в библиотеке DHT нужно обязательно указывать задержку «3» (третий параметр в конструкторе класса) DHT dht(dhtPIN, DHT11, 3);
Второй проблемой стало произвольное срабатывание ресет и кнопки ручного режима. Виной всему были наводки с силовых проводов, проходящих недалеко от данных выводов. Сперва встроенный подтягивающий резистор микроконтроллера на соответствующих выводах был заменен на внешний 10К. Помеха уменьшилась, но не исчезла совсем. Контроллер периодически жил своей жизнью самостоятельно включая/выключая вентилятор.
Тогда я реализовал программное подавление помехи — кнопка опрашивалась подряд 10 раз с задержкой 10мс и только при наличии всех 10 срабатываний признавалось нажатие кнопки.
Готовое устройство выглядит так:
Супруга посмотрела на унылую коробочку непонятного цвета и сделала ей «декупаж»
Два месяца эксплуатации контроллера прошло нормально и особо переделывать ничего не хочется.
Спустя два года эксплуатации разработана новая версия контроллера на ESP8266:
- Контроллер управления вентилятором 2. Теперь с WiFi
- Программирование и настройка контроллера управления вентилятором
Список полезных ссылок:
- Статья про использование Atmega 328 в среде Arduino
- Техническое описание микроконтроллера Atmega328P
- Управление силовой нагрузкой с микроконтроллера
- Заливка загрузчика в микроконтроллер
- Duino на внутреннем резонаторе
- Конфигурация FUSE бит
Главный помощник устал.
Возможно ли как нибудь реализовать такой прибор
http://noo.com.ru/magazin/product/taymer-storozh-bzt-300-st-1
не могу у себя в городе купить, а функционала на вытяжку такого прибора мне достаточно.
Вам подойдет любое реле времени с задержкой до 5 мин
http://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BB%D0%B5_%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%B8
Поискать момжно по ключевым словам realay delay
http://www.aliexpress.com/premium/delay-relay-220v.html?ltype=wholesale&SearchText=delay+relay+220v
Подскажите, пожайлуста, маркировку фоторезистора?
И ссылка на обсуждение ведет на самогонный аппарат!?
Ссылку поправил
Фоторезистор GL5537
Подойдет любой при подборе дополнительного резистора и калибровки освещенности
спасибо
Очень заинтересовал этот проект, хотелось бы собрать себе такой же, но на базе ардуино (как на первом варианте). Но неясен ряд вещей, так например что за вторая плата подключена к ардуино на изображении, никак не разберу. Если здесь проблемно отвечать, то подскажите где с вами можно связаться и проконсультироваться по этому вопросу. Премного благодарен.
Проект полностью совместим с Arfuino Uno?Nano/Mini
Вторая плата — внегний импульсный DC/DC преобразователь, стабилизирующий напряжение питания (в плате Ардуино он встроенный)
Симистор проще заменить реле, если повесить на тот же выход, то даже программу не нужно переписывать
Повторил данный проект. У меня есть одна проблема. Когда фоторезистор закрыт, работает вентиляция по таймеру. Таймер доходит до нуля и цикл повторяется снова и снова. Ощущение такое, что высокая влажность, хотя датчик не показывает изменение влажности более 3%. Значение 56. Точка второго разряда все время горит, когда работает вентилятор мигает. Датчик использовал dht21. Не пойму в чем проблема.
Нужно в отладке на экран все прогнать.
Объявили DHT21 как нужно? Там в коде объявление как DHT11
Может значение влажности нестабильное и постоянно взводится флаг, что влажность повысилась.
Dht21 обьявлен правильно, иначе не отображалась бы влажность и температура. Скорее всего влажность не стабильна. А включение происходит только при повышении влажности или и при понижении?
Только при повышении или достижении порога 85%
У меня Алексей работает все время пока горит свет. Таймер отсчитывает 20 минут и по кругу опять включается. Такая работа как при высокой влажности так и при низкой. Например влажность 93 и понижается до 54. Таймер 20 мин проработал и уже при влажности 54 запустился снова. Так пока не выключишь свет. Если при шести циклах работы таймера влажность не повышается более чем на 3%, то команды на запуск вентилятора не должно быть? Это и есть архив из шести значений?
Еще забыл написать, что у меня контроллер прошит под 16мгц.
Повторил вашу работу. У вас в коде ошибка.
В цикле 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/.
Устройство хорошее и многие повторяют его.
Спасибо. Исправил.
Думаю, скоро версия на ESP8266 появится.
Доброго времени суток! Хочу повторить Вашу разработку, но есть одна проблема : семисегментники у меня С общим катодом… Что нужно поменять в программе?
Разницы особо нету. Нужно пины объявить по другому.
Я сейчас на другую библиотеку перешел.
В этом проекте четырехсегментный с общим катодом исполльзуется
И еще раз доброго времени суток! На схеме нажатие кнопки приводит к появлению 1 на входе(а там и так 1). Пока не перецепил на «-» нажатия не было… Возможно у Вас ошибка? Но у меня другая проблема: во первых не уверен во fuses (схема не работает от 3,3 в), и датчик DHt11 (схема работает только от +5)через последовательный порт и на семисегментники посылает нули….
С кнопкой согласен.
Сейчас все устройства я по другому — вывод через сопротивление 10к подтянут к VCC, а кнопка замыкает вывод на землю. Только действие кнопки должно в программе инвертироваться.
Хотя данная схема у меня работает уже два года и поэтому переделывать пока смысла нет. Думаю, сразу на ESP8266 перейти с выводом в архив параметров. Можно будет потом делать анализ влажности и эффективности вентилятора.
Фьюзы для 3.3 нужно устанавливать BOD disabled
На 3.3 может быть другая проблема — может контроллер глючить и ему еще больше потребуется снижение частоты. Хотя лично пока не встречал. Все Atmega328 и Arduino Pro Mini нормально работают на 3.3В
DHT11 по даташиту должен работаеть от 3В до 5.5В. У меня нормально работает с ESP8266 у которой 3.3 питание.
Да, вот еще обнаружил, что цепляется к ком порту только на скорости 4800.
Решил проблему перепрошивкой фьюзов на работу от внешнего кварца, и собственно установкой оного в схему, с соответствующей корректировкой программы(частота кварца 16мгц)
Кстати, работа DHT от тактовой частоты зависит.
Может в этом была проблема?
Очень может быть… Собрал еще одну плату начисто, появилась интересная неисправность: при старте загораются нули(все сегменты работают), но когда начинает идти инфа о температуре, влажности и таймере, часть сегментов в цифрах не загорается!
1. Проверяйте аноды/катоды
2. Попробуйте более прогрессивную библиотеку SevSeg
3. Перейдите наконец на индикаторы с драйверами TM1637 или MAX7219
Виноват , как оказалось, сам… Перепутал сегменты А и Б…
Кто подскажет, на какой оптимальной высоте нужно устанавливать DHT.
Если учесть, что изменение температуры с изменением высоты составляет 0.5С на 100м, то при точности DHT это не принципиально
Понял. Тогда другой вопрос. В каком лучше месте установить датчик, около вытяжки, у двери, над ванной и т.д.
Датчик лучше делать над душем или на стене вблизи душа, где сильнее запотевает от горячей воды. Контроллер наоборот, чтобы воздействия влаги было на него минимальным.
У меня стоит контроллер с датчиком на стене, на которой дверь расположена на высоте около 2-х метров.
Понял. Спасибо за совет.
Заканчиваю отладку новой версии контроллера, только с WiFi на модуле ESP8266
Где-нибудь через недельку статью напишу по этому поводу
Ооо. Это будет очень интересно. Будем ждать.
Контроллер управления вентилятором 2. Теперь с WiFi
Программирование и настройка контроллера управления вентилятором
Какой из них подойдёт http://chip-nn.ru/find.php?f=ESP8266
ESP07 и ESP12 подойдет
Лучше 07, у него можно внешнюю антенну установить
ESP01 не выведены все GPIO и иналоговый вход. их нужно прямо с микросхемы брать
Понял. Буду заказывать.
Как насчёт создать дистанционный выключатель для комнатной люстры ? Чтобы на расстоянии замыкать провода в старом выключателе или включать блок управления в светильнике . Было бы отлично и с таким же подробным описанием.
Есть готовое решение
http://samopal.pro/haile1/
Можно к WiFi
http://samopal.pro/esp8266-1/
Нужно ,чтобы выключатель питался от батарейки
Доброго времени, Alexey.
Можно ли с Вами как-нибудь в личке поговорить об некоторых изменениях в этом Вашем проекте.
Сам в программировании еще не силен. Небольшие переделки еще сам не осилю…
Добрый день,Alexey!
Написал вам сообщение с просьбой на сайте arduino (там и фото есть).
http://arduino.ru/forum/proekty/kontroller-upravleniya-vytyazhnym-ventilyatorom-v-vannoi#comment-459998
Ответьте пожалуйста.
Таки не отозвались на мою просьбу, ну да ладно. У меня вопрос!
Не собираетесь ли вы сделать контроллер кухонной вытяжки по такому же алгоритму?
Использовать только индикатор,ds18b20 и кнопку принудительного включения? С температурой к примеру 45 градусов?
Я повторял проект http://cxem.net/house/1-372.php . Работает чётко но два датчика надо располагать на расстоянии (где то штробить стену, да и сам контроллер расспологать много проводов). Вообщем так соплёй и висит год.
В принципе можно делать датчики температуры беспроводные на батарейке
Контроллер пока не планирую. Другими проектами занимаюсь
Нет ли у кого этой прошивки в HEX , а то скетч у меня компиляцию не проходит?прошу скинуть