» » » Контроллер управления влажностью на Atmega328

 

Контроллер управления влажностью на Atmega328

Автор: admin от 25-02-2014, 14:35, посмотрело: 2168

Недавно столкнулся с тривиальной задачей — управление вытяжным вентилятором дома в ванной комнате.

Казалось бы чего проще, подключил его к выключателю света и готово. Но, время работы света непостоянно и может быть недостаточно для уменьшения влажности, хотя данную проблему можно решить установкой таймера. К тому же, моим близким очень не нравится работающий вентилятор при принятии водных процедур, так как он «создает холодный ветер».

Вторым очевидным решением было просто посадить вентилятор на отдельный выключатель и предоставить управление человеку. Но человеческий фактор таков, что вентилятор постоянно забывали включать, а если включали, то выключать. Эффективность работы вентилятора быстро стремилась к нулю.

Пришлось подключить к делу свое увлечение Arduino и несложными микроконтроллерами.

Пораскинув мозгами сформулировал

Требования к устройству управления




  • устройство управления должно работать в автоматическом режиме;

  • вентилятор должен включаться от повышения влажности;

  • включение вентилятора не должно зависеть от текущего уровня влажности в квартире;

  • вентилятор должен работать, когда в ванной комнате никого нет;

  • устройство управление должно быть максимально простым и дешевым;



  • Выбор элементной базы


    Прототип данного устройства создавался на отладочной плате Arduino Uno китайского производства:
    Контроллер управления влажностью на Atmega328

    Потом все переносилось в микроконтроллер Atmega328, прошитый стандартным ардуиновским загрузчиком.

    Конечное устройство создавалось по принципу «я тебя слепила из того что было». Все элементы были приобретены ранее на просторах интернета под различные проектики или выдраны из неработающих устройств:



    В качестве источника питания подошел LED driver 3x1вт от светильника, который вполне справился с питанием импульсного стабилизатора LM2596.
    В качестве корпуса была применена кроссовая коробочка от старой АТС.

    Подключение


    В связи с тем, что было очень лень в устройстве применены нестандартные элементы, общую схему рисовать не стал. Привожу таблицу подключения элементов к микроконтроллеру:


    • Pin 1 (Reset) через резистор 10К к + (для избежания помех на этой ноге);

    • Pin 2 (D0) — не используется;

    • Pin 3 (D1) — не используется;

    • Pin 4 (D2) — катод «G» семисегментного индикатора;

    • Pin 5 (D3) — катод "." семисегментного индикатора;

    • Pin 6 (D4) — катод «A» семисегментного индикатора;

    • Pin 7 (+) — питание 3.5В;

    • Pin 8 (-) — земля;

    • Pin 9 (Clock) — не используется;

    • Pin 10 (Clock) — не используется;

    • Pin 11 (D5) — катод «F» семисегментного индикатора;

    • Pin 12 (D6) — катод «D» семисегментного индикатора;

    • Pin 13 (D7) — катод «E» семисегментного индикатора;

    • Pin 14 (D8) — катод «C» семисегментного индикатора;

    • Pin 15 (D9) — катод «B» семисегментного индикатора;

    • Pin 16 (D10) — не используется;

    • Pin 17 (D11) — не используется;

    • Pin 18 (D12) — не используется;

    • Pin 19 (D13) — управление схемой включения вентилятора;

    • Pin 20 (+) — питание 3.5В (дубль);

    • Pin 21 (Aref) — не используется;

    • Pin 22 (-) — земля (дубль);

    • Pin 23 (A0/D14) — фоторезистор с подтягивающим резистором 27К на землю;

    • Pin 24 (A1/D15) — вход с датчика DHT11;

    • Pin 25 (A2/D16) — общий анод 2-го разряда семисегментного индикатора через резистор 4.7К;

    • Pin 26 (A3/D17) — общий анод 1-го разряда семисегментного индикатора через резистор 4.7К;

    • Pin 27 (A4/D18) — кнопка с подтягивающим резистором 10К на +;

    • Pin 28 (A5/D19) — не используется;



    На индикатор CPS03621BR даташит найден не был, поэтому выводы находились при помощи батарейки методом тыка. Индикатор оказался с общим анодом. Схема расположения катодов:
    Контроллер управления влажностью на Atmega328

    Вентилятор управляется при помощи симистора BT137.
    Схему подключения взял с сайта avr.ru
    Контроллер управления влажностью на Atmega328
    Если кто-то вздумает повторять — ОСТОРОЖНО, на корпусе симистора напряжение 220В.

    Контроллер управления влажностью на Atmega328

    Алгоритм работы



    Микроконтроллер с периодичностью раз в 10 секунд меряет влажность и температуру.
    Влажность циклически накапливается в архиве из 6 значений. Если текущая влажность выше первой из архива более чем на 3% либо абсолютное значение влажности выше 85%, значит нужно включать вентилятор.
    Вентилятор включается на 20 минут при отсутствии света на фоторезисторе.
    Кнопка принудительно включает вентилятор на 20 минут (если он не работает) или выключает (если работает).
    Все константы в алгоритме подбирались эксперементальным путем.

    Индикатор циклически показывает текущую температуру, влажность и таймер обратного отчета.
    Точка второго разряда горит, если требуется понижение влажности и мигает, если подана команда на включения вентилятора.

    Полностью логику работы прибора можно описать конечным детерменированным автоматом.
    Входной алфавит автомата состоит из следующих событий (в порядке приоритетов):

    • нажата кнопка ручного режима;

    • сработал датчик влажности;

    • горит свет;

    • не горит свет;

    • сработал таймер работы вентилятора.



    Множество состояний:

  • режим ожидания, вентилятор не работает, тайме отключен;

  • требуется включение вентилятора, вентилятор не работает, таймер (при)остановлен;

  • вентилятор работает в автоматическом режиме, таймер включен;

  • вентилятор работает в ручном режиме, таймер включен;



  • Ну и таблица переходов состояний автомата:
    Контроллер управления влажностью на Atmega328

    Программирование


    AVR-studio и прочих монстров я устанавливать не стал, а обошелся опять же тем, что было — IDE Arduino.

    Создаю в файле board.txt новый контроллер, работающий на внутреннем кварце 8МГц:

    atmega328_8.name=Atmega328 (5V, 8 MHz internal)

    atmega328_8.upload.protocol=arduino
    atmega328_8.upload.maximum_size=30720
    atmega328_8.upload.speed=57600

    atmega328_8.bootloader.low_fuses=0xE2
    atmega328_8.bootloader.high_fuses=0xDE
    atmega328_8.bootloader.extended_fuses=0x05
    atmega328_8.bootloader.path=optiboot
    atmega328_8.bootloader.file=optiboot_atmega328.hex
    atmega328_8.bootloader.unlock_bits=0x3F
    atmega328_8.bootloader.lock_bits=0x0F

    atmega328_8.build.mcu=atmega328p
    atmega328_8.build.f_cpu=8000000L
    atmega328_8.build.core=arduino
    atmega328_8.build.variant=standard


    Подключаю дешевый программатор USBASP к ISCP разъему платы Arduino UNO и, вставив в панельку свой Atmega328P, прошиваю загрузчик.

    Теперь мой микроконтроллер можно отлаживать и программировать через стандартный загрузчик на плате UNO, выбрав в среде соответствующую плату.

    В данном проекте использовались готовые библиотеки для Arduino:





    Проблемы



    Первой проблемой, с которой столкнулся в реализации — не работал датчик DHT11. На Arduino UNO все нормально, а на голом микроконтроллер не работает. Проблема оказалась в частоте работы контроллера и таймингам протокола опроса DHT.
    В контроллерах, работающих на частоте 8МГц в библиотеке DHT нужно обязательно указывать задержку «3» (третий параметр в конструкторе класса) DHT dht(dhtPIN, DHT11, 3);

    Второй проблемой стало произвольное срабатывание ресет и кнопки ручного режима. Виной всему были наводки с силовых проводов, проходящих недалеко от данных выводов. Сперва встроенный подтягивающий резистор микроконтроллера на соответствующих выводах был заменен на внешний 10К. Помеха уменьшилась, но не исчезла совсем. Контроллер периодически жил своей жизнью самостоятельно включая/выключая вентилятор.
    Тогда я реализовал программное подавление помехи — кнопка опрашивалась подряд 10 раз с задержкой 10мс и только при наличии всех 10 срабатываний признавалось нажатие кнопки.

    Готовое устройство выглядит так:
    Контроллер управления влажностью на Atmega328

    Теперь контроллер управления вентилятором находится в опытной эксплуатации, а я обдумываю управление вентилятором на кухне: от включенной плиты, задымления и запаха газа.

    Список полезных ссылок:


    Источник: Хабрахабр

    Категория: Железо » Сделай Сам

    Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
    Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

    Добавление комментария

    Имя:*
    E-Mail:
    Комментарий:
    Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
    Введите два слова, показанных на изображении: *