Увлажнитель я купил раньше, чем понял, что спать будет мешать он сам: мягкое шипение ещё переживалось, но каждый долив бака он подтверждал писком, а подсветка экрана горела как ночник. Спальня — место, где прибор должен молчать и не светить. При этом климат там важнее, чем где-либо в доме: восемь часов дыхания в закрытой комнате вырабатывают литры влаги, и окно, прикрытое на ночь, превращает спальню в маленький оранжерейный ящик с обратным знаком — не сырость, а духота. Вторая попытка вышла тише: обычный DHT, экран и светодиод, без единого динамика, — и именно эта версия пережила первую же неделю без семейного суда.
Рамки, на которые я опираюсь, простые: температура сна семнадцать-девятнадцать градусов, влажность сорок-шестьдесят процентов. Взрослым комфортнее в семнадцати-двадцати одном, у детской свои поправки, и их я разбирал в уроке про микроклимат детской. Коридор сорок-шестьдесят встречается и в рекомендациях ВОЗ: при суше пересыхают дыхательные пути, при сырости чувствуют себя вольнее клещи и плесень. Эти цифры — рамка для автоматики, а не приговор каждому отдельному вечеру.
В уроке — будильник наоборот: прибор, который днём подсказывает светодиодом и вердиктом на экране, а ночью гасит подсветку и молчит, что бы датчик ни показал. Кнопка на пине 3 переводит день и ночь, окно-проветривание читается через разницу с уличным датчиком. Экран как витрину я уже писал в уроке про термогигрометр на LCD, здесь экран — часть режима, а не центральная фигура.
Нормы сна и где врать не должно
Почему именно семнадцать-девятнадцать. Засыпанию помогает падение температуры тела, и прохладная комната его ускоряет: при двадцати четырёх и шестидесяти пяти процентах тело не может отдавать тепло — потение плохо работает во влажном воздухе, и утро встречает разбитой головой. При восемнадцати и сорока пяти то же одеяло ощущается легче, а сон глубже. Духота — не температура и не влажность по отдельности, а их пара: двадцать два при семидесяти душнее, чем двадцать пять при сорока. Проверьте себя на прошлом жарком вечере: если засыпали с открытым окном при двадцати двух, тело голосовало за прохладу, а не за паспортные двадцать четыре.
Вторая половина точности — где стоит датчик. Полка над радиатором, подоконник в тридцати сантиметрах от батареи, тумбочка с тёплым полом — все эти точки показывают не комнату, а микроклимат своего угла: плюс два-три градуса к честной цифре и влажность ниже на десяток-полтора. Перенос на стену у изголовья, в метре от отопительного прибора и окна, на высоте лица спящего — и перекос съёживается до десятых, с которыми автоматика уже имеет дело. Раз в сезон я перепроверяю точку термометром из другой комнаты: стены добавляют свои десятые, если за штукатуркой идёт труба отопления, и лучшее место в комнате может тихо испортиться.
Доверие к самим цифрам проверяется эталоном: раз в сезон я кладу рядом промышленный гигрометр из другого помещения — механика сверки разобрана в уроке про калибровку DHT. Темп опроса в спальне некритичен: комната меняется медленно, и раз в минуту достаточно; в скетче оставил две секунды, чтобы симулятор отвечал живо, а на настоящей плате поставил бы минуту — частый опрос греет сенсор и добавляет ему дрейф, как и всякому DHT.
Ночной режим: тишина и погашенный экран
Ночной режим — это три молчания сразу. Первое: без зуммера — ночью некому реагировать на писк, а будить ради отклонения в пять процентов — вредительство; в окончательном скетче зуммера нет вовсе, дневные уведомления остаются светодиодом. Второе: подсветка LCD гаснет командой noBacklight() — экран перестаёт быть ночником, цифры остаются и читаются фонариком, если встали среди ночи. Третье: вердикты ночью не обновляются, прибор занят только сбором цифр до утра — в ночи нечему щёлкать и гудеть, увлажнитель и тёплый пол управляются руками.
Днём прибор честен: влажность ниже сорока — светодиод горит и на экране SUKHO, выше шестидесяти — SYRO, а температура вне спального окна перекрывает вердикт влажности, потому что её коридор уже. Языки светодиода — мигания, дыхание, разные ритмы — я разбирал в уроке про индикацию комфорта; здесь один честный свет, чтобы спальную автоматику можно было прочитать с порога. Кнопка на пине 3 переключает день-ночь: пин 2 занят датчиком, пины экрана — на шине I2C. Если решитесь на расписание, оставьте и кнопку поверх него: отпуск, ночёвка гостей и сдвинутый график — не те случаи, когда хочется править константы в скетче.
Автоматическое расписание — следующая ступень: по часам реального времени в двадцать три — noBacklight(), в семь — backlight(). Часы и их подключение разобраны в уроке про DS3231. Кнопку я оставил сознательно: расписание в спальне спорит с отпуском и выходными, а ручной переключатель не требует объяснений, когда вы легли в одиннадцать вечера в субботу.
#include <DHT.h>#include <LiquidCrystal_I2C.h> DHT dht(2, DHT11); // датчик на стене у изголовьяLiquidCrystal_I2C lcd(0x27, 16, 2); const int PIN_BTN = 3; // день/ночьconst int PIN_LED = 12; // дневные уведомления const float T_MIN = 17.0; // спальное окно температурыconst float T_MAX = 19.0;const float RH_MIN = 40.0; // коридор влажностиconst float RH_MAX = 60.0; bool night = false;int lastBtn = 1;unsigned long lastPoll = 0; void setup() { Serial.begin(9600); pinMode(PIN_BTN, INPUT_PULLUP); pinMode(PIN_LED, OUTPUT); dht.begin(); lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Spalnya: den");} void loop() { int now = digitalRead(PIN_BTN); if (lastBtn == 1 && now == 0) { // нажатие — смена режима night = !night; lcd.clear(); if (night) { lcd.noBacklight(); // экран не ночник digitalWrite(PIN_LED, LOW); // уведомления тоже спят } else { lcd.backlight(); } } lastBtn = now; if (millis() - lastPoll < 2000) return; // темп датчика lastPoll = millis(); float t = dht.readTemperature(); float h = dht.readHumidity(); if (isnan(t) || isnan(h)) return; lcd.setCursor(0, 0); lcd.print("T: "); lcd.print(t, 1); lcd.write(223); // глиф градуса в знакогенераторе lcd.print("C "); lcd.setCursor(0, 1); lcd.print("H: "); lcd.print(h, 0); lcd.print("% "); if (!night) { if (t < T_MIN) lcd.print("T NIZKO "); else if (t > T_MAX) lcd.print("T VYSOKO"); else if (h < RH_MIN) lcd.print("SUKHO "); else if (h > RH_MAX) lcd.print("SYRO "); else lcd.print("NORMA "); digitalWrite(PIN_LED, (t < T_MIN || t > T_MAX || h < RH_MIN || h > RH_MAX) ? HIGH : LOW); } else { lcd.print(" "); // без вердикта — только цифры digitalWrite(PIN_LED, LOW); }}В симуляторе кнопка — ваш пульт дня и ночи. Нажали — подсветка погасла, светодиод умер, цифры остались. Вернули день и утащили температуру за девятнадцать — вердикт сменится на T VYSOKO, хотя влажность в норме: температурный коридор в этом уроке главнее. Ползунок влажности вниз за сорок — SUKHO и свет диода. Обратите внимание на дрожь десятых: шум сенсора в полпроцента виден на экране, но вердикт от него не скачет — пороги шире дрожи. Дрожь заметна и в последней десятой температуры — это норма DHT11, а не повод менять датчик; решает вердикт, а не десятая.
Проветривание читается через улицу. Зимняя комната при минус десяти снаружи проветривается грубо: холодный воздух вошёл, нагрелся — и его относительная влажность упала втрое, от шестидесяти к двадцати. Через десять минут после окна скетч покажет SUKHO, и это не поломка, а физика. Второй датчик за окном из урока про датчик за окном подсказывает, есть ли смысл открывать: если уличный воздух после нагрева до комнатной температуры остаётся суше спальни — окно сушит, если наоборот — на улице сырее, и проветривание только добавит влаги.
| Днём на экране | Светодиод | Вечернее решение |
|---|---|---|
| 18,2 °C, 47 % — NORMA | не горит | ничего не трогаем |
| 24,1 °C, 63 % — T VYSOKO | горит | проветрить за полчаса до сна: уйдут и жар, и сырость |
| 18,5 °C, 31 % — SUKHO | горит | увлажнитель на день; ночью он всё равно молчит |
| 16,0 °C, 55 % — T NIZKO | горит | прикрыть форточку, добавить одеяло — комнату греем |
Тишина как функция
Тишина — тоже функция, и защищать её стоит так же ревниво, как пороги. В моей спальне нет зуммера вовсе: сигнал тревоги для жилой комнаты — чужой звук среди ночи, и вреда от него больше, чем от сырости на банке варенья. Если приборов в доме несколько, различайте голоса по помещению: шкафчик в кладовке может пищать, спальня — светить. Ритмы и частоты зуммеров, которые я сюда сознательно не пустил, — отдельная тема со своими правилами: там, где звук уместен, он спасает больше, чем свет в пустой комнате.
Комнатная автоматика вырастает в проект: экран над комодом, журнал по дням, датчик за окном и третий в ванной. Полную сборку с порогами, экраном и решениями по каждой точке я собирал в уроке про климат-контроль комнаты — там же про то, как не раздробить квартиру на независимые приборы, которые дерутся между собой.
Рамка, с которой я живу: семнадцать-девятнадцать ночью, сорок-шестьдесят днём, тишина после двадцати трёх, светодиод вместо сирены. Всё сверх этой рамки — украшения. И пусть прибор останется некрасивым: коробочка на стене, которая молчит и иногда светит, переживёт в спальне любой красивый гаджет с колонкой. А начните с самого дешёвого шага: переставьте датчик с подоконника на стену — и посмотрите, сколько климатических проблем исчезнет вместе с двумя лишними градусами.
- 1. Какая пара значений соответствует норме сна из урока?
- 2. Датчик стоит в 30 см от батареи и показывает 24,3 °C при 21,5 в центре. Что делать?
- 3. Ночь, влажность 68 %. Что делает скетч урока?
- 4. Зачем гасить подсветку ночью, если цифры всё равно остаются на экране?
- 5. Улица +3 °C и сырая, в спальне 19 °C и 45 %. Стоит ли проветривать перед сном?
- Норма сна: 17-19 °C и 40-60 % RH; температура в вердикте первее — её окно уже.
- Датчик у батареи врёт на +2-3 °C и занижает RH на 10-15 % — стена у изголовья, метр от приборов.
- Ночной режим: noBacklight(), без зуммера, без светодиода; цифры на экране остаются.
- Днём — один честный светодиод и вердикт на LCD; пороги шире шума в полпроцента.
- Проветривание читается через уличный датчик: что сделает холодный воздух с влажностью после нагрева.
Частые вопросы по теме урока
- Какая пара значений соответствует норме сна из урока?
- Спальное окно — 17-19 °C и 40-60 % RH. Двадцать два при семидесяти душнее, чем двадцать пять при сорока: духота — это пара температура плюс влажность. 18 °C и 50 %
- Датчик стоит в 30 см от батареи и показывает 24,3 °C при 21,5 в центре. Что делать?
- Над радиатором датчик живёт в чужом микроклимате: плюс два-три градуса и заниженная на 10-15 % влажность. Перенос лечит причину, компенсация в коде — симптом. Перенести на стену у изголовья, в метре от отопительных приборов
- Ночь, влажность 68 %. Что делает скетч урока?
- Ночью прибор занят только сбором цифр: подсветка погашена, светодиод выключен, зуммера в спальне нет вообще. Реакция — утром, светодиодом и вердиктом. Молчит: ни звука, ни светодиода, вердикт не обновляется
- Зачем гасить подсветку ночью, если цифры всё равно остаются на экране?
- Мешает именно свет, а не сам экран: noBacklight() гасит подсветку, сетка символов остаётся. Это главное отличие ночного режима от просто выключенного прибора. Подсветка светит в темноте и мешает спать; цифры читаются фонариком
- Улица +3 °C и сырая, в спальне 19 °C и 45 %. Стоит ли проветривать перед сном?
- Холодный уличный воздух, нагревшись до комнатной, отдаёт влаге меньше процентов, чем имел на морозе: проветривание охлаждает спальню к норме сна и почти не добавляет абсолютной сырости. Да: прохладный воздух охладит комнату к норме, а сырость с улицы после нагрева ослабнет