Уровень углекислого газа (CO2) один из важных показателей качества воздуха в помещении. Еще его уровень очень удобно использовать для управления вентиляцией.
В статье расскажу о доработке проветривателя и дистанционном управлении вентиляторами посредством микроконтроллеров и датчика CO2.
Также, при желании, после небольшой доработки эту же схему можно применить и для управление приточной-вытяжной системой.
Среднестатистическая квартира обычно рассчитана на естественную вентиляцию. Это когда воздух поступает через щели в окнах и выходит через вытяжное отверстие где-то в районе кухни, туалете и т.п.
В квартире с установленными пластиковыми окна щелей, как правило, не бывает и, чтобы вентиляция работала, приходится приоткрывать окна или форточки, что улучшает ситуацию с воздухом при нормально работающей вытяжке.
Но таким образом мы добавляем уличный шум.
Получить свежий воздух в помещении без шума можно установкой:
- Приточной системы
- Проветривателей, подающие воздух с улицы через дырку в капитальной стене
Первый вариант решает все проблемы, но дорог и требует места под оборудование, вентиляционные каналы.
Второй вариант попроще, но так как сам блок проветривателя ограниченного размера, то шумность будет зависеть от его режима работы.
Вот этот вариант и рассмотрим.
Приведу здесь таблицу уровней углекислого газа и влияния его на здоровье, чтобы знать к чему стремиться:
Таким образом, будем считать уровень CO2 равный 450-1000 ppm оптимальным для помещения.
Про своему опыту скажу, что при закрытых окнах и дверях, включенном на минимуме проветривателе и при нахождении в комнате двух человек, к утру получается где-то 1200-1500 ppm, что многовато.
Алгоритм работы
Примененный алгоритм для управлении производительностью вентиляции достаточно простой, но при желании можно и усложнить:
- Берется средний уровень CO2, полученный с датчика, за некоторое время.
- Есть 6 пороговых значений и в зависимости от этого выбирается скорость вентиляторов, которая передается по радиоканалу на микроконтроллеры, управляющие вентиляторами.
- При понижении уровня CO2 есть некоторый порог, только после которого происходит уменьшение скорости.
- Ночью максимальная скорость вентиляторов ограничена, чтобы уменьшить шум.
- По командам с пульта можно увеличивать или уменьшать общую производительность вентиляции и конкретно каждого вентилятора.
В качестве датчика углекислого газа использован не дорогой бытовой CO2 монитор MIC 98130.
Подача воздуха идет через проветриватель Aeropac 90A.
Вытяжка усилена канальным вентилятором SystemАir IF 150.
Для управления используются микроконтроллеры Atmel AVR ATtiny44A.
Данные передаются от контроллера, подключенного к монитору CO2, на контроллеры, управляющими вентиляторами, с помощью модулей на трансивере NRF24L01+.
Установка режима работы и настройка возможны с помощью любого ИК пульта, либо магнита или кнопки.
Доработка монитора CO2
Монитор СO2, заказанный на ebay, как оказалось, имеет внутри инфракрасный газовый анализатор SenseAir K22 с достаточно хорошей точностью.
А самое главное — имеет специальный выход с уровнем CO2 (на картинке белый разъем с четырьмя контактами).
На этом разъеме слева-направо:
- питание +9В
- общий
- выход уровня CO2 в ШИМ от 350 до 2000 ppm
Свободного места внутри не много, поэтому для доработки использована мини плата с трансивером NRF24L01+ и на нее же запаян микроконтроллер в SOP14 корпусе c обвязкой. Перед запайкой был включен фьюз DWEN для программирования и отладки по протоколу debugWIRE.
По радио-модулям есть одно замечание — дальность передачи не достаточно велика.
Тем более если есть стены, двери между передатчиком и приемником. Так что лучше выбирать модули с внешней антенной или стараться чтобы между передатчиком и приемником было как можно меньше препятствий.
Существует совместимый с nRF24L01+ китайский чип с повышенной мощностью передачи — SI24R01.
Модули с ним обычно стоят дешевле, так что лучше брать с ним.
Я, правда, не нашел вменяемые мини модули с этим чипом и в проекте еще используются модули и с родным nRF24L01+ чипом.
Для включения повышенной мощности передачи у SI24R01 используется бит 0 регистра RF_SETUP.
На резисторах R1, R2 собран делитель для уменьшения напряжения, получаемого с датчика.
Величина CO2 получается при вычислении времени между сменой уровня на ноге контроллера. Время берется из счетчика 16 битного таймера.
Чтобы меньше проводить вычислений микроконтроллер работает на частоте 8.192МГц, а делитель таймера установлен в 1024.
Таким образом счетчик таймера TCNT1 увеличивается каждые 0.125мс.
Получается для того, чтобы вычислить уровень CO2 — нужно счетчик таймера разделить на 4 и вычесть 4.
ШИМ сигнал на выходе датчика:
Фоторезистор LDR1 используется для определения порога темноты, кнопка — для первоначального запоминания команд ИК пульта. Светодиод информирует об ошибках передачи, а так же используется для настройки.
Для управления и настройки решил использовать обычный ИК пульт, команды которого нужно сначала прописать в микроконтроллер.
Вход в режим программирования — нажать и удерживать кнопку более 3 секунд. Затем по порядку облучить ИК приемник, нажимая на кнопки пульта.
ИК команды:
- вверх,
- вниз,
- выбор,
- установка корректировки скорости каждого вентилятора.
В обычном режиме команды «вверх» и «вниз» увеличивают или уменьшают скорости всех вентиляторов на одну ступень.
Команда «выбор» — сброс.
С помощью команды 4 происходит вход в режим установки смещения скорости каждого вентилятора. Сначала выбирается номер вентилятора, затем после выбора вводится смещение. Светодиод в этому режиме промигивает текущий выбор.
Команды идентифицируются микроконтроллером таким образом:
- с помощью таймера 0 получаем время от предыдущего фронта сигнала (прерывание PCINT1)
- если это первый импульс, то проверяем его длительность, чтобы сразу исключить ложное срабатывание
- если произошло изменение длительности в 1.5 раза по сравнению с предыдущем значением, то добавляем в битовый массив 1, иначе 0.
- вычислям хеш (2 байта) битового массива и используем его для идентификации команды
Используется простая хеш функция, для уменьшения нагрузки на контроллер,
if(IRSignalTimer > IRSignalTimerLast) // bit = a / b > 1.5
bit = (uint8_t)(IRSignalTimer - IRSignalTimerLast) > IRSignalTimerLast / 2;
else
bit = (uint8_t)(IRSignalTimerLast - IRSignalTimer) > IRSignalTimer / 2;
IRReadedByte = (IRReadedByte << 1) | bit;
if(++IRArrayBit > 7) {
IRArrayBit = 0;
IRHash = ((IRHash << 4) + IRHash) + IRReadedByte; // * 17
IRReadedByte = 0;
}
По работе с радио-модулями NRF24L01 написано много статей, по этому углубляться в эту тему не буду.
Скажу только, что настроены они на работу со скоростью 1Mbps, используется CRC и каждая передача должна быть подтверждена ACK пакетом.
Для общения контроллера и модуля используется хардварный USI интерфейс.
Вывод IRQ не используется, проверка подтверждения передачи пакета идет в цикле в функции NRF24_Transmit.
Передается на каждый вентилятор — уровень CO2, скорость вентилятора и признак ночи.
В текущем проекте контроллеры, управляющие вентиляторами, пока используют только скорость.
Доработка проветривателя
У меня установлены проветриватели Aeropac 90A фирмы SIEGENIA-AUBI — это достаточно древняя модель.
Работает уже не один год и, как показала практика, штука в общем-то полезная.
Воздух он гонит через 80 см отверстие в стене и имеет угольный фильтр.
Шумоизоляция от звуков с улицы очень хорошая.
Внутри установлен центробежный вентилятор Ebmpapst R2E133-BH96-19.
С шумностью самого вентилятора после стольких лет работы не все гладко. На низких оборотах может проявляться низкочастотный гул, а на высоких — некоторое подвывание.
Причем это проявляется индивидуально. Один вентилятор больше гудит на низких оборотах, другой посвистывает на высоких.
Решил эту проблему ограничением скорости.
В проветривателе очень интересно реализована схема регулировки оборотов двигателя — с низких оборотов до средних плавно, а затем включается сразу максимальная скорость.
Если на минимальной и средней скорости он работает достаточно тихо, то при максимальной скорости находиться в помещении не комфортно.
В новой модели — Aeropac SN, не смотря на цифровую ступенчатую регулировку, принцип регулировки оборотов остался прежним — c 1 по 6 скорости обороты регулируются где-то до середины, а потом сразу максимум.
На схеме электронный блок проветривателя обведен пунктирной линией:
Доработка заключается в перерезании дорожки, ведущей от среднего вывода переменного резистора RV1 к резисторам R6 и R7. В разрыв подключается оптопары U2 и U3, которые будут управлять оборотами вентилятора.
Управляющий ШИМ сигнал на оптопары подает микроконтроллер через интегрирующую RC цепочку.
Светодиод в оптопаре начинает проводить ток только с определенного напряжения, поэтому в программе есть настройка минимального значения ШИМ сигнала.
Переменный резистор остается, и им, при желании, можно ограничить максимальную скорость.
Если производительности на средней скорости не хватает, то ее возможно увеличить заменой конденсатора C9 на конденсатор большей емкости. На плате предусмотрительно есть отверстия под два размера конденсаторов — с расстоянием 27.5мм и 22мм между выводами.
Места внутри проветривателя достаточно — влезет и не одна плата.
Единственная проблема может возникнуть с радио модулями. Корпус двойной и сделан из толстого пластика.
С радио-модулем на родном чипе nRF24L01+ не было связи с соседней комнатой.
Выкрутился так — припаял одножильный медный провод к встроенной антенне, вывел его наружу через дырку для светодиода и расположил конец под крутилкой переменного резистора. С согласованием антенны не заморачивался.
Связь появилась.
Для настройки вместо кнопки используется геркон (SW1), чтобы не портить внешний вид и не нарушать звукоизоляцию.
Магнита от жесткого диска вполне хватает.
Вытяжка
Поступающий воздух должен в итоге куда-то выходить. Естественная вытяжка даже если как-то и справляется зимой, то уж летом ее скорее всего будет не достаточно.
В моем случае я использовал канальный вентилятор SystemАir IF 150 с однофазным двигателем. Внешний диаметр у него 15 см.
Регулировка его оборотов ступенчатая и сделана на конденсаторах. Опто-симисторы шунтируют конденсаторы, изменяя таким образом напряжение, подаваемое на двигатель вентилятора.
При двух конденсаторах получается 4 скорости.
Так как вытяжка установлена на кухне, решил заодно сделать дополнительное управление вентилятором от пульта.
Чтобы, если варится на плите что-то серьезное, нажатием одной кнопки включать вытяжку на максимум.
Скорость, полученная по радиоканалу при этом игнорируется.
Программа управления вентиляторами универсальная и, в зависимости от настроек в энергонезависимой памяти, может управлять вентиляторами как с помощью ШИМ, так и в дискретном режиме.
Подключен ли ИК приемник к контроллеру задается тоже в EEPROM.
В программу заложена возможность ретранслировать принятый пакет дальше — на другой вентилятор.
Таким образом, например, можно увеличить расстояние между датчиком CO2 и вентилятором вытяжки.
Исходник на C (для Atmel Studio 6.1): yadi.sk/d/cGpSoKqZEceQN
Автор: vad7