C приближением «каникул» стало побольше времени для доделки всяких мелочей, оставленных во время ремонта квартиры «на потом». Сегодня дошли руки до вытяжки в ванной.
Меня бесит, когда вытяжной вентилятор ставят в ту же цепь, что и потолочное освещение — он шумит и срабатывает даже тогда, когда в ванную зашли на секунду, помыть руки. К тому же вытяжка отключается сразу после того, как вы приняли душ и вышли — а осталась ли сырость в воздухе или нет, уже роли не играет.
Решил сделать «по уму». Решение с применением «ардуинства» — под катом.
Внимание — в обзоре описывается работа с сетевым напряжением 220 вольт. При недостаточной квалификации ошибки при работе могут привести к поражению током или к летальному исходу. Оценивайте свои умения реалистично, соблюдайте осторожность и чтите ПУЭ.
Сразу отвечаю на извечные возражения про принудительную вентиляцию
* Дом старый, дореволюционной постройки — у каждой квартиры свой индивидуальный вентканал на чердак. Ни к кому из соседей мой «выхлоп» не вылезет.
* Естественная тяга в вентканале есть и достаточная — проверялась анемометром, застопоренный вентилятор ей не мешает. Задача вентилятора — быстрое удаление влажности.
На просторах Али есть 2 типа датчиков влажности — DHT22 и DHT11. Второй тип подешевле, но к нему много нареканий, поэтому остановился на DHT22.
При ремонте параллельно к силовым кабелям проложил «витую пару» и озаботился распаячными коробками для размещения Ардуин. В какой-то момент планирую запитать все Ардуины по разным углам квартиры по PoE от единственного качественного БП, через лишнюю пару проводников, но сейчас ограничился раздербаниванием старого заслуженного зарядного устройства Nokia на 5V и 300mA. Чтобы оно поместилось в распаячную коробку, переставил его из родного корпуса в коробочку из-под телефонной розетки, напаял выводы и зафиксировал термоклеем. Нагрев проверен, при малых нагрузках устройство остаётся полностью холодным:
Извлекаю из рамки за натяжным потолком вентилятор (модель не помню — какая-то самая бюджетная из «Леруа Мерлен») и проложенную к нему слаботочку (именно там не хватило последних 3м от бухты «витой пары» в 300м и пришлось применить телефонный кабель на 4 жилы):
Берём героя нашего обзора, проклеиваем щель между платой и датчиком, чтобы держался не только на паяных выводах. Подбираем винт для крепления (подошёл М3):
Сверлим в боку вентилятора дырку 3мм и фиксируем внутри вентканала у лопастей датчик. На кончики телефонного кабеля наживляем DuPont'овские коннекторы и изолируем их термоусадкой. Помня о том, что на сборку будет влиять вибрация мотора, фиксируем коннекторы на «ножках» датчика DHT22 лаком, им же покрываем дорожки, не защищённые маску платы. Результат — датчик надёжно зафиксирован, отлично обдувается, минимально мешает току воздуха. Лишнюю четвёртую жилу срезаем под корень (заземлять её было лень).
[Update: в комментариях справедливо заметили, что датчик нужно обернуть для защиты от пыли. Салфетка из нетканого материала отлично подойдёт.]
Поскольку телефонный кабель на срез оказался позорным (позорнее чем многие дешёвые китайские USB-кабели — оказывается, такое возможно!) сначала тестируем, «видит» ли Ардуина датчик. Берём первую попавшуюся UNO из ящика стола, наживляем на провод коннекторы, втыкаем в Ардуину. Питание подключаем к VCC и GND, сигнальную линию — к любому цифровому пину. Провода обжимал
самым дешевым кримпером за 12 баксов — как бы не
стращал уважаемый коллега
yurok, результат получается достойный.
В Arduino версии 1.6.7 библиотека для работы с датчиком подключается из хранилища — её легко найти по ключевому слову «DHT22»:
После подключения в «Примерах» появляется новый, под названием «DHTester». Его и берём. Не забываем исправить номер пина в строчке
#define DHTPIN 2 // what digital pin we're connected to
на тот, в который воткнули сигнальный провод от датчика.
Загружаем пример в Ардуину, открываем Serial monitor и с облегчением видим, что данные с датчика идут, даже по трём метрам дерьмового провода.
Закрываем дверь в ванную, включаем душ. Опытным путём устанавливаем, что влажность более 72% — это тот «порог», от которого надо включать принудительную вытяжку. Тогда же обращаем внимание, что цифры пусть и незначительно, но скачут. Становится понятно, что надо брать подряд несколько замеров и вычислять по ним «скользящее среднее».
Начинаем собирать конструкцию так, чтобы уместилась в распайку. Для управления вытяжкой берём небольшое реле из старых запасов.
Я решил просто клеить компоненты на внутреннюю сторону крышки распаячной коробки «жидкими гвоздями». Так и надёжнее, и проще, и обеспечивается изоляция контактов реле на нижней стороне платы. Управление возложил на Arduino Mini — сторублёвую плату не жалко замуровать в стену.
Очень советую все контакты и прочую полезную информацию писать маркером там же, на изнанке крышки. Через год вы без этого не вспомните, что куда цеплялось и почему.
Подключаем сборку к сети, не забыв обесточить нужную зону в распред.щитке. Паяные контакты, которые я выполнил из обрезков витой пары, фиксирую теми же «жидкими гвоздями», т.к. одножильные провода из меди Cat5 очень любят переламываться. Все силовые соединения делаем на клеммниках Wago.
Ардуину Мини подключаем к компьютеру через адаптер USB-TTL. Мне было лень паять пятый провод к линии DTR, поэтому просто зажимаем кнопку Reset на Ардуине пальцем, жмём Upload и затем отпускаем Reset.
Код (не бейте тапком)
#define DEBUG 1 // Если поменять на "0", потребуется меньше памяти
#include "DHT.h" // Стандартная библиотека, подключается в меню "Скетч" -> "Подключить библиотеку" -> "Управлять..."
#define DHTTYPE DHT22 // Если используется не DHT22, надо поменять
#include <Average.h> // Источник - https://github.com/MajenkoLibraries/Average
#define relaypin 9 // Реле прицеплено к пину №9
#define dht22pin 5 // Датчик прицеплен к пину №5
DHT dht(dht22pin, DHTTYPE);
Average<float> ave(10); // Для усреднения последних значений с датчика создаём массив на 10 шт. float
float treshold = 72; // Процент влажности, по достижению которого включаем вентилятор
unsigned long runInterval = 300000; // Если включаем вентилятор, то не меньше, чем на 5 минут (5 * 60 * 1'000 миллисекунд = 300'000)
unsigned long idleInterval = 120000; // Какая бы ни была влажность, после выключения даём мотору 2 минуты передышки
// unsigned long previousMillis = 0;
const long interval = 1000; // Опрашиваем датчик с перерывами в одну секунду
unsigned int i = 0; // Счётчик
void setup() {
pinMode(relaypin, OUTPUT);
digitalWrite(relaypin, HIGH); // По умолчанию вентилятор не работает (подключён к "N.O." - "normally open" разъёму реле)
if (DEBUG == 1) {
Serial.begin(9600);
Serial.print("Starting, humidity treshold set to: ");
Serial.print(treshold);
Serial.println("%.");
}
dht.begin();
}
void loop() {
if (DEBUG == 1) {
Serial.print(i); i++;
Serial.print(": ");
}
float t = dht.readTemperature(); // Опрашиваем датчик
float h = dht.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor error!");
delay(interval);
return;
} else {
ave.push(h); // Кладём результат измерения влажности в массив. В массиве помещается 10 измерений, новоприбывшее выталкивает самое старое.
if (DEBUG == 1) {
Serial.print("Humidity: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Humidity running average: ");
Serial.print(ave.mean());
Serial.print(" %\t");
Serial.print("Temp.: ");
Serial.print(t);
Serial.println("C");
}
if (ave.mean() >= treshold) { // Вычисляем "скользящее среднее" по последним 10 замерам, сравниваем его с пороговым значением
digitalWrite(relaypin, LOW); // Если влажность высокая, врубаем вентилятор...
if (DEBUG == 1) {
Serial.println("Fan started.");
}
delay(runInterval);
digitalWrite(relaypin, HIGH); // ...а потом даём ему остыть, какая бы ни оставалась влажность.
if (DEBUG == 1) {
Serial.println("Fan will cool down.");
}
flushData(); // После того, как мы остудили мотор, надо "прочистить" массив с замерами влажности актуальными замерами. Иначе мотор будет врубаться снова и снова.
delay(idleInterval);
}
}
delay(interval);
}
void flushData() {
int k = 0;
if (DEBUG == 1) {
Serial.println("Flushing sensor readings.");
}
while (k < 10) {
float t = dht.readTemperature(); // Опрашиваем датчик
float h = dht.readHumidity();
if (isnan(h) || isnan(t)) {
Serial.println("Sensor error!");
delay(interval);
return;
} else {
ave.push(h); // Кладём результат измерения влажности в массив. В массиве помещается 10 измерений, новоприбывшее выталкивает самое старое.
}
k++;
delay(100);
}
}
Логика работы простая — Ардуина делает замеры влажности и вычисляет среднее из последних десяти. Если влажность превышает порог, заданный переменной «treshold», вентилятор врубается.
Чтобы не дёргать мотор часто, вентилятор врубается минимум на 5 минут. Затем, вне зависимости от того, какая влажность достигнута, мы даём вентилятору 2 минуты на то, чтобы остыть. Затем очередь из измерений прочищается, Ардуина делает новые замеры и цикл повторяется.
Для финального испытания, чтобы не устраивать «баню» лишний раз, ставим treshold в 30%. Включаем воду и убеждаемся, что всё работает как надо. Как видите по скриншоту, как только скользящее среднее превысило порог, вентилятор включился:
Возвращаем «рабочее» значение влажности в 72%, отцепляем USB-TTL адаптер и аккуратно закрываем крышку. Убеждаемся, что светодиоды не просвечивают наружу и конструкция не даёт нагрева.
Собираем всё, подметаем, радуемся:
P.S. В процессе написания кода стало понятно, что понадобится его дорабатывать летом. По скриншотам видно, что благодаря полотенцесушителю в ванной у меня под 28С. Во время летнего отключения воды температура в ванной упадёт и это повлияет на расчёт относительной влажности датчиком. Надо будет посмотреть и, возможно, переработать логику.
P.P.S. В цепь к вентилятору стоило бы поставить плавкий предохранитель, но под рукой не оказалось подходящего под такой случай крепления «на кабель». Позже куплю и поставлю.
(Всё барахло, упомянутое в обзоре, куплено в разное время на свои кровные, почему-то «халявы» даже после пары десятков тысяч, оставленных на АлиЭкспрессе, не предлагают :)
У меня ещё в эту же коробку выведены провода от счётчиков воды. Дойдут руки — поставлю туда Ethernet-модуль и та же самая Ардуина будет у меня учёт воды вести.
P.S. Вот, нашёл — mySKU.me/blog/china-stores/35177.html Камрад AleksPoroshin выбросил на ветер $4
WiFi многим хорош, одна закавыка — по нему питание не подведёшь. Да и нехорошо — диапазон 2,4ГГц засран так что мама не горюй — сеток 30-40 ловится. Лучше я по Ethernet — тут и питание (которое приводится к нужным 5V крохотным и грошовым адаптером), и связь.
Удачи в опытах с есп, сам жду модуль и реле, буду делать wifi розетку.
Даже вкрутили фоторезистор и RGB LED, чтобы было чем «поиграться» сразу.
Я не удержался и заказал :)
За рукожопство 5
за рациональность 2 )))
watchdog в проекте использовали ?))
коробки у вас конечно-же с пылевлагозащитой и плата залита кампаундом для водонепроницаемости?))
У OBI есть единственный вариант, но по факту его нет в продаже нигде: www.obi.ru/decom/product/%D0%92%D0%B5%D0%BD%D1%82%D0%B8%D0%BB%D1%8F%D1%82%D0%BE%D1%80_%D0%BE%D1%81%D0%B5%D0%B2%D0%BE%D0%B9_Dospel_PLAY_100_%D0%BC%D0%BC/3354321&position=1&pageNum=1&pageSize=72
Спасибо за «наводку». Заказал, завтра поеду забирать.
Завтра поеду, посмотрю…
Я думаю крупный магазин не станет писать фэйки в описании товара.
Я в начале года покупал на кухню Польскую вытяжку(над плитой) с двумя моторами, меня тоже цена смутила (дешевле в 1,5 раза брендов). Однако оказался отличный аппарат.
А я и не писал про фейки в описании товара. Купленный вентилятор как и было заявлено с датчиком влажности, только этот датчик не работает (Датчик меряет все что угодно но только не влажность).
Вы где брали?
Специально показал только название модели.
Во так наверное можно: yandex.ru/search/?lr=213&text=vq100th :)
Или за 2028 с претензией на дизайн — leroymerlin.ru/catalogue/elektrotovary/klimaticheskie_sistemy/ventilyatory_vytyagnye/14335400/
Правда оба намного более шумные, чем Вентс.
Или вывод о всех вентиляторах с датчиком влажности сделан по одному, вероятно бракованному, экземпляру?
Просто если бы вентиляторы с датчиком влажности выпускал только Вентс, можно было поверить в маркетинговый обман. Но выше дал ссылки и на польские модели.
И их же довольно много:
Blauberg Sileo 100 H бесшумный вентилятор с датчиком влажности, тамером и обратным клапаном
Soler & Palau SILENT-100 CHZ DESIGN вентилятор с таймером, датчиком влажности, обратным клапаном
Electrolux EAF-150TН бытовой вытяжной вентилятор с таймером и датчиком влажности.
а вот почему выключатель не встраивают в вентиляторы, может в определенное время я хочу эффект бани?
Обычный выключатель на нем не сделать — вентилятор же обычно под потолком.
Поэтому подключаете как нравится — хотите со светом, хотите отдельным выключателем, хотите с плавной регулировкой оборотов.
У меня потолки 2,5 метров, я рукой до вентиляции достаю, можно и выключатель врезать, видел модели со шнурковым выключателем но все 35 Дб, вот только будет ли комфортно принимать ванну при 35дб?
Датчик разместил под потолком, в метре от вентилятора. Ардуину спрятал под потолком. Питание 220 VAC вывел на выключатель снаружи ванной комнаты.
Программу сделал несколько другую. При включении выключателя происходит включение вентилятора на 2 минуты. Затем если влажность повышенная, то вентилятор не отключается. Для управления вентилятором при изменении влажности использовал гистерезис. Включение происходит при превышении максимальной уставки, выключение — при понижении до минимальной уставки. Использовал минимальное время операции — одну минуту.
Так же недавно поставил счетчики с импульсным выводом. В планах сделать передачу показаний в управляющую компанию через сайт, но нужно разбираться как это сделать. Пока купил GPRS Shield для arduino, реализую отправку показаний по SMS, благо такая возможность есть. Планирую сделать следующим образом: 25 числа arduino отправляет отчет на мой номер телефона с показаниями, потребленным объемом воды и стоимостью. После подтвержнения с моего телефона arduino отправляет показания счетчиков в управляющую компанию. Для обеспечения бесперебойной работы планирую использовать powerbank.
В планах добавить в arduino контроль протечек.
Впрочем, при цене Ардуин Мини в сто рублей споры «ардуина или тинька» стремительно теряют смысл. Что в ящике стола валяется, то и ставим.
Но я тоже за простоту при однократном выполнении.
Работаем с чем? С АЦП/процентами. Вполне себе конечные числа, всё прекрасно в них делается. Надо с точностью до десятых? Умножаем на 10, при выводе десятичную точку перед последним знаком вывести, главное смотреть дабы за -32768...+32767 для целых со знаком или за 0...+65535 для беззнаковых не вылезать. В крайнем случае можно до long расширится.
Но float на микроконтроллере? Это только от очень большой нужды может потребоваться.
Так вот, они показывают не влажность. Возможно, они показывают погоду на Марсе. Или настроение председателя компартии Китая, я не в курсе.
Разброс в 30% — это как с куста. Чего не скажешь о температуре, там довольно точно.
Для себя определился с методом: покупать их сразу штук пять и отбирать пару с более-менее совпадающими цифрами. И условно считать, что они показывают примерно правду. Хотя лучше смотреть всё-таки в сторону специализированных датчиков.
Но разрешающая способность DHT22 просто поражает. Легко чувствует дыхание стоящего рядом человека.
Единственно что, 90% для включения это over дофига, я бы начинал сушить при 75%. При таком сочетании температуры и влажности плесень будет расти буйным цветом.
Алгоритм мудреный на первый взгляд, но влажность отслеживает четко…
Может нужно кому…
А можно дополнить обзор, схемами подключения — подробными, что куда паять… Чтобы люди далекие от такого рукоблудия сами могли сделать?))) Я например… Давно уже тоже хочу такой в душ…
Есть реле, оно по команде замыкает силовой провод. Т.е. просто ставим его в разрыв цепи 220 вольт питания вентилятора.
На входе у реле 3 контакта — плюс, минус и управляющий. У датчика тоже 3 ноги — плюс, минус и сигнальный.
Плюсы и минусы реле, датчика и ардуины подключаем к адаптеру, переделанному из зарядника Нокии. Сигнальный провод от датчика припаиваем к контакту Ардуины номер пять. Сигнальный провод реле — к контакту номер девять.
Для того, чтобы залить программу в Ардуину, надо переходник и 4 провода. Но можно взять другую ардуину, чуть подороже — модель «Arduino Pro Micro (5 вольт 16 мегагерц)». У неё есть Micro USB, можно цеплять к компьютеру напрямую, без лишних проводков и адаптеров.
— не ставил датчик прямо в поток воздуха. Обычно в вентиляторах есть место для датчика под крышкой;
— защитил датчик от пыли, т.к. он обязательно забьётся ею и перестанет работать. Самое просто, обернуть чем-то, да хоть салфеткой;
— коммутацию вентилятора сделал на симисторе — тише, в разы меньше места занимает и не залипнут контакты.
Влияние температуры на точность измерения влажности не так велико как кажется, так что я бы не заморачивался этим.
Клацанья реле внутри распайки не слышно совсем, так что не проблема. Датчик, так уж и быть, оберну — но судя по чистоте вентилятора и сетки за полгода простоя — проблема преувеличена. Чисто у меня дома, ламинат, крашеные стены и наличие моющего пылесоса решают :)
Залипание контактов реле — не проблема. Вентилятор будет срабатывать раза три на день, т.е. в год имеем тысячу срабатываний. Мотор там на смешные 20Вт, так что скорее вентилятор умрёт, нежели реле.
Про влияние температуры — я понимаю, что датчик с термокомпенсацией. Я про то, что влажность при 28С и при 18С может восприниматься по-разному и может понадобиться корректировка.
Логика следующая: добавляем обычный выключатель на стену. Когда выключатель замкнут, питание подается на Вашу схему и она отслеживает влажность. Когда выключатель отключен, схема обесточена, вентилятор не включается. Но если надо принудительно включить вентилятор что бы проветрить ванную (накурили или еще чего), то просто выключателем (который у нас на стене рядом с выключателем освещения) выключаем и снова включаем.
Следующая мысль связана с датчиком освещенности. Как только включается свет в ванной/туалете стоит начать отсчет и через 3 минуты принудительно включить вентилятор пока свет не погаснет (с перерывами, если есть опасность перегрева вентилятора) + еще пара минут после выключения света.
Если будет ставить курильщик, то да — выносная кнопка понадобится.
2. Скорость я так понимаю одна? Лучше две.
Все никак не сделаю обзор, где 2 скорости и без всяких ардуин.
«Скоростей» у меня две — пассивная тяга отличная, вентилятор её просто разгонять поставлен изредка.
Вернее когда моешься, то влажность не успевает подняться до включения второй и не так шумит.
Да и пассивная тяга дело такое, сегодня аж гудит, а завтра вообще еле дует :(
Датчик не сеточка, его не помоешь.
Конечно же, это не руководство к действию.
адаптер (45 руб)
Реле лучше твердотельное (у меня было обычное) — 136 руб.
Зарядка от Нокии — 100 руб. на Авито. Провода, припой, клей, лак — на сдачу.
Вот такой вентилятор покупал в начале 2014 года, за 950 руб. Отрегулировал как мне надо влажность и таймер, работает почти 2 года. Вещь качественно сделана и не дорого (Польша). Очень советую и без всяких «колхозов» и самоделок.
Автору в любом случае большой плюс. Сам давно собирался делать нечто подобное тоже на Аурдино(досталась плесень от предыдущих владельцев квартиры), заказал компоненты, только у меня немного все сложнее: вытяжка идет сначала транзитом через туалет а потом уже в вент канал.
(план переставить лоток в ванную был, да не сложилось)
И тогда вам не нужно будет порог изменять летом, осенью и т.д.
Выключение происходит либо по времени, либо нужно запоминать изменение влажности до повышения.
Ну и датчик освещенности, как советовали выше.
Еще не помешает железная кнопка включить/выключить.
Посмотрите, здесь подобный проект делал.
Два года крутится, как часы
vents.ua/item/1101/BU-1-60/
Это готовый контроллер BU-1-60, у которого есть датчики влажности, присутствия (PIR), освещения, и он может настраиваться для работы по этим датчикам с регулировкой порогов. Купил в интернет-магазине.
За смысл 1
Кроме влажности вытяжка должна устранять ещё и запахи
Поэтому самый простой и эффективный вариант включение и выключение от веревочки и таймер
Все остальное ненужная и нерабочая ерунда
Имхо
Изю не надо нюхать, Изю надо учить ©У меня в ванной нет запахов. Пассивная тяга справляется.
Выглядят так (они продаются на лентах):
Обжималку брал тут — aliexpress.com/item/SN-28B-Pin-Crimping-Tool-2-54mm-3-96mm-28-18AWG-Crimper-0-1-1-0mm2/32383094433.html
С этими штуками можно аккуратные модульные самоделки лепить :)