Три года назад сделал для банки слива воды кондиционера датчик, который предупреждал бы о том, что пора воду слить. И почему-то только сейчас дошли руки его опубликовать. Проект получился очень простой, на основе платки AVR-USB162 [1].
При разработке акцент был сделан на то, чтобы микроконтроллер потреблял как можно меньше энергии, и работал максимально долго от Li-Ion аккумулятора. Результат меня вполне удовлетворил - вот уже 3 года не было необходимости подзарядки. Использовался датчик только летом, когда было жарко, в течение пары месяцев, и аккумулятор подключался только на это время.
Как все работает: если макрос DEBUG_CDC_OUTPUT закомментирован, то после сброса/включения питания активируется WDT на 8 секунд, зажигается на 1 мс светодиод, проверяется компаратор. Если компаратор показывает контакт с водой, то на 1 секунду включается пищалка. Далее активируется режим Power Down с током потребления 40 мкА. Через 8 секунд срабатывает WDT, сбрасывает микроконтроллер, и цикл повторяется. Работает это все так, чтобы устройство пищало раз в 8 секунд, если контакты, подключенные к компаратору, показали наличие воды.
Если макрос DEBUG_CDC_OUTPUT раскомментирован, то программа работает как виртуальный COM-порт, декодируя команды, вводимые в консоли, и может выводить в консоль отладочные сообщения. Этот режим оставлен исключительно для отладки.
Схема подключения к компаратору микроконтроллера AT90USB162:
VCC VCC | К контактам воды | | PD2 PD1 | - +-----AIN1 AIN0 - | | | | | | 1M | |--- | | | 10M | | | | | - | - | | | | +-------+ ===
Подстроечником 1M устанавливается напряжение на AIN1 порядка VCC/5. Резистор 10M может быть и поменьше, наверное 1M.
Исходный код проекта и указания как компилировать см. в архиве [2].
[Ссылки]
1. Макетная плата AVR-USB162. 2. 210720water-detect-files.zip - исходный код, библиотека LUFA, документация. |