Датчик CO на ATmega
Возникла у любимого тестя потребность в датчике CO.
Вводная
Вытяжка и котёл на одном вентиляционном канале, при определённых условиях вытяжка может задувать выхлоп котла обратно в квартиру. Этот процесс нужно мониторить и в случае чего котёл выключать (котёл для облегчения задачи имеет управляющий проводок аварийного отключения, что позволяет не лезть в его схему).
Поиск недорогого датчика привёл меня к сенсору MQ-7 за $5, который был благополучно куплен вот тут.
Датчик
Датчик этот требует довольно специфичного прогрева (смотрим даташит), а именно: в течение 60 секунд на нагревательный элемент надо подавать +1.4В, в течении следующих 90 секунд — +5В. И так в бесконечном цикле. Ну и естественно выход у него постоянно меняется в зависимости от стадии прогрева, так что производитель вообще рекомендует получать данные, усреднив два предыдущих цикла (5 минут время отклика — жуть).
Контроллер
Для управления этим процессом был схвачен с полки первый попавшийся контроллер, коим оказался ATmega324PA. По удачному стечению обстоятельств у меня валяется парочка плат, изготовленных ранее для проекта с радиоуправляемым тёплым полом, которые пришлись очень кстати.
Схема получилась простой как три копейки, даже обсуждать особо нечего: два потенциометра на установку порогов тревоги (один для абсолютного порога, второй для регистрации резкого выброса вне зависимости от абсолютных значений), полевик для задания ШИМ-ом искомых +1.4В и пара транзисторов для включения пищалки и реле. Ну и пара светодиодов.
Программа
С программной стороны всё это работает примерно так: Timer1 настроен на прерывания раз в секунду, в нём суммируются показания и принимается решение о соответствующей тревоге, Timer2 заведует ШИМ-ом прогрева датчика, а по Timer0 выполняются преобразования АЦП.
Производитель просит перед снятием показаний прогревать датчик не менее 48 часов… Практика показала, что действительно окончательно всё стабилизируется именно через 48 часов, но боль-мень приемлемые показания можно снимать уже через час. Пока датчик холодный он сильно завышает показания, поэтому в процессе прогрева все аварийные тревоги выключены (кроме светодиодов) и отдельный светодиод показывает, что датчик греется и поэтому сейчас ругаться не будет. А так как всё это было крайне неудобно отлаживать (с постоянным-то ожиданием по часу), то присутствует анализ причины reset. Задержка тревоги выставляется в час при reset по питанию и в 5 минут при reset по любой другой причине (такой как заливка новой прошивки, например).
Тревоги
1) Пиковый выброс. Формируется, если сумма показаний датчика за прошлые 16 секунд превышает аналогичную сумму в предыдущем цикле прогрева более чем на величину порога, установленную потенциометром «пик». Тревога заключается в мерзком писке в режиме секунда-через секунду в течении 5 секунд (т.е. 2 или 3 секунды писка — как таймер ляжет). После чего следуют 55 секунд тишины, и, если выброс еще не прошел, то повтор писка. Этот режим не несёт никакой особой нагрузки, кроме быстрой проверки работы датчика (поднёс зажигалку — пищит — всё ОК).
2) 25% от пика. Всё то же самое что и в первом случае, но реакция на 25% от установленного порога и вместо пищалки моргает светодиод красный. Тоже чисто справочный режим.
3) Превышение абсолютного порога. Раз в секунду пересчитываются данные в кольцевом буфере за крайних 150 секунд. Если среднее значение крайних 150 секунд превышает порог, установленный потенциометром «порог», включается тревога в виде громкого противного писка, который не прекратиться до тех пор, пока не проветрят помещение (ну или не повернут потенциометр дальше ). Если тревога длится более 20 секунд, то включается реле (не сразу чтобы избежать лишнего дёрганья котла).
UART
Раз в секунду датчик передаёт данные по UART-у, так что можно строить график загазованности помещения при желании.
При экспериментах с датчиком (который, кроме CO, реагирует ещё на множество всяческого непотребства в воздухе, что с точки зрения определения концентрации CO, конечно, минус, зато позволяет оценивать абстрактное «качество воздуха в квартире») получены любопытные данные (о которых ещё бабушка говорила) — максимально эффективно проветривается квартира в первых 10 минут этого процесса.
Итог
Ну вроде всё, собранное устройство я, к сожалению, сфоткать не успел, но прилагаю схему, прошивку, исходник (AVR studio), фото внутренностей и рендер корпуса (оно почти так и выглядит в реальности). Ну и приветствую любые вопросы дабы больше никто не наступал на мои грабли в процессе постройки сего чудо-датчика.