Каталог статей


Выбранная схема!!!


6114
Контроллер вытяжного вентилятора в ванной комнате

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

Итак, вдоволь наигравшись со светодиодом, как сенсором освещенности на плате MSP430 Launchpad, решил двигать дальше. Надо переводить это в действующее устройство. Так как у меня есть в наличии только микроконтроллеры AVR (не считая MSP430, которые шли в комплекте с платой), то и устройство будет на AVR. Соответственно, разработаем и вытравим под это дело печатную плату. Итак, поехали…

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

  1. При включении света в ванной, ждем 2 мин, не включая вентилятор.
  2. Если 2 минуты истекли, а свет еще включен, запускаем вентилятор.
  3. Если свет был включен менее 3 мин и выключили свет, то выключаем и вентилятор.
  4. Если свет был включен более 3 минут, то после выключения света в ванной вентилятор работает пропорционально времени, пока был включен свет (например, за каждые 5 мин включенного света, +3 мин работы вентилятора)
  5. В любом случае через 30 мин выключаем вентилятор

Алгоритм работы, по прикидкам, довольно простой. Особых требований к «железу» микроконтроллера нет. Требования к схеме контроллера — минимальное количество деталей.

После того, как в голове сформировалось представление того, как должен работать контроллер вытяжного вентилятора, приступил к обдумыванию схемы будущего устройства.  В качестве датчика света используем светодиод, как я говорил ранее. Микроконтроллер — ATtiny13. Я думаю, его хватит. Для его питания, что бы минимизировать количество деталей и что бы все уместилось в корпус вентилятора, применим конденсаторное питание. Итого, вот примерно то, что получилось:

Схема контроллера вытяжного вентилятора в ванную комнату.

Описывать особо нечего. Для питания микроконтроллера используется блок питания с гасящим конденсатором (C1) . При указанных номиналах на выходе блока питания (R2, C1, D2, D3, C2, D1, C3, C4) получаем около 5 вольт. Можно было бы применить интегральный линейный стабилизатор, типа LM7805, но у нас задача — минимальное количество деталей. В принципе, того блока питания, что есть, для питания микроконтроллера вполне достаточно.

ВНИМАНИЕ!!!
При сборке и наладке устройства соблюдайте повышенную осторожность! Схема не имеет гальванической развязки от электрической сети! 5 вольт на микроконтроллер подается относительно самой схемы. Относительно вас там действует 220 вольт. Если вы коснетесь проводников платы во включенном устройстве, то можете получить поражение электрическим током! Ни в коем случае не программируйте микроконтроллер при включенном устройстве, если только ваш программатор не имеет гальванической развязки от сети. Соблюдайте осторожность! Я вас предупредил.

Для управления нагрузкой применяется симистор (триак) BT136. Это довольно мощный симистор ( вентилятор у нас потребляет всего 14ватт,  ток 0.085A), но других у меня нет. Опять же, для минимизации количества деталей, симистор включен не как рекомендуют в даташите, а напрямую к ноге микроконтроллера. Даташит же рекомендует включать симистор через оптопару по типу MOC3032 и иже с ним (с детектором нуля или без, в зависимости от решаемых задач).

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

Печатная плата контроллера вытяжного вентилятора

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

Здесь должна была быть куча фоток процесса разработки и изготовления устройства. Заготовил много фото. Честно. Все было рассортировано/отобрано/разложено/обработано в отдельную папку на домашнем компьютере. Но по непредвиденным обстоятельствам, я эту папку (а там было и куча других проектов) случайно удалил. :( А когда обнаружил, что ее нет, было уже поздно что-либо восстанавливать. Поэтому фотографий практически нет. И часть статьи пришлось поэтому покоцать.

В процессе изготовления контроллера постоянно вылезали косяки. То сначала отзеркалил плату. Вытравил, залудил. А когда начал собирать, тут то до меня и дошло, что накосячил… Вторую плату вытравил нормально, но когда запаивал, то перегрел дорожки под Тинькой и две дорожки отвалились. Тьфу ты блин. Начал травить третью плату. Вытравил, запаял. Все вроде бы хорошо. Подключаю программатор — мля, не видит Тиню13. Да что ж за беда-то…

Программатор я использую купленный на Ebay у кЕтайцев. USBasp. Вот такой:

Китайский программатор USBasp

Ну не хочет он с Тини13 работать. Хоть ты убей. До этого я раньше программил ATMega8, Attiny2313 и т.д., более старшие контроллеры. Все было нормально и без проблем. Здесь же с Тини13 не заработал. Причем, когда выпаиваешь стабилитрон, то программатор пытается что то увидеть, а когда стабилитрон стоит, то программатор вообще ничего не видит. Несколько раз попробовал зашить тестовую прошивку, после чего Тиня вообще перестала реагировать. И со стабилитроном, и без него. Перепаял другую Тиню13. Та же история. После нескольких попыток и она перестала реагировать. Третью Attiny13  постигла та же участь ( :( ). После этого они у меня закончились.

Гугление по данной проблеме с программатором особо ничего не дало. Проблема такая существует, но решения пока нет. Каждый крутится как может. Я тоже решил очередной раз все переделать. Для этого, так как Тинек у меня не осталось, решил перейти на ATMega8, которых несколько штук у меня валялось. Опять запустил Eagle CAD и перерисовал схему.

Схема контроллера вытяжного вентилятора в ванную комнату. Version 2

Ну и соответственно, печатная плата по этой схеме.

Печатная плата контроллера вытяжного вентилятора. Version 2

Протравил, запаял, включил программатор… Вау! Заработало! Программатор исправно определяет микроконтроллер, прошивает его, шьет фьюзы. Ну надо же, сколько времени на это ушло…

[deleted] :(

Вот так выглядит собранное устройство, смонтированное в вентилятор.

Плата контроллера вентилятора установлена в сам вентилятор

 

Все, паяльник выключил убрал в сторону, пусть остывает. С ним работу закончил. Теперь достаем компьютер и приступаем к программированию быдлокодингу.

Для начала я накидал программульку, которая как «Hello world» для светодиода, только для вентилятора. Т.е. просто включает вентилятор, а через некоторое время выключает его. Что б проверить включение нагрузки. И тут меня ждал сюрприз.

Оказалось, что это если когда симистор включен по даташиту, через оптопару (с детектором «0», например MOC3062), то если на оптопару подается лог. «1», то пока она подается, нагрузка включена. Убрали единицу — нагрузка выключена. Удобно для меня в данном случае.

Но у меня же не по даташиту, у меня напрямую к ноге МК подключен симистор. А соответственно и управлять я им должен импульсами самостоятельно. Из плюсов — можно регулировать мощность, отдаваемую в нагрузку, т.е. регулировать скорость вращения вентилятора. Красота! Загорелся я идеей. Но не тут то было. Что бы регулировать мощность, нужно определять момент перехода напряжения в нагрузке через «ноль», а потом, в зависимости от необходимой мощности, через определенное время выдавать импульс на открытие симистора. Но у меня нет схемы детектирования нуля! Все уже собрано. А переделывать очередной раз схему и плату ой как не хочется…

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

Достал паяльник, включил, повесил резистор на ИНТ1. Выключил паяльник, убрал.

Но вот же непруха…. Так у меня эта схема и не заработала. Я не смог определять переход через «ноль». Блин!… Я даже не знаю, какой формы там сигнал… :( Как же плохо без осциллографа. Серьезно задумался о его покупке.

Надо было что то делать. И я решил отказаться от идеи регулировать обороты вентилятора. Нужно заставить просто работать вентилятор. Поэкспериментировав, понял, что если подавать на управляющий вход симистора импульсы раз в 500 микросекунд, то это обеспечит надежное включение и работу вентилятора. Если подавать импульсы раз в 1000 мкс, то вентилятор работает рывками, а напряжение на нем колеблется вольт по 20 в стороны от примерно уровня 146 вольт. Поэтому, оставил импульсы в 500 мкс.

Но в ручную считать задержки и т.д. не наш метод. Пусть это делает сам микроконтроллер. А как считать задержки? Правильно, с помощью таймера. Требования к таймеру и отсчитываемым им интервалам не критичны, поэтому нам хватит восьмибитного таймера 0. Ну что ж, сказано-сделано.

Так как в таймере 0 АТмеги8 нет режима сравнения, при котором вызывается прерывание по совпадению с числом, то поступим следующим образом. Будем загружать в счетчик заранее подготовленное значение, назовем его базой счетчика, и пусть счетчик считает дальше от этого числа до переполнения. Когда счетчик переполнится, будет вызвано прерывание по переполнению и мы можем в обработчике его обработать, в нашем случае, выдать импульс на симистор. Ну и заново загрузить в счетный регистр значение базы, что б он считал от базы счетчика а не от нуля, и чтоб у нас не поплыли интервалы.

Базу счетчика можно посчитать на калькуляторе, например, мне нравится «калькулятор для AVR» (см. в приложении). Если взять частоту микроконтроллера 2МГц, предделитель таймера 8, то база счетчика будет равна 8. Ошибка при этом будет равна нулю. Т.е. прерывание по переполнению счетчика будет происходить ровно каждые 500 микросекунд.

Для отсчета интервалов времени в задержках применим другой счетчик — таймер 2. Тоже восьмибитный. Его настроим аналогичным образом: прерывание по переполнению, перегрузка базы счетчика, обработка прерывания. Частоту настроим на 1мс, т.е. у нас будет происходить 1000 прерываний в секунду. Скажем так, приличная точность, хоть она такая и не требуется в этом проекте.

Так как для всех счетчиков AVR позволяет установить только один предделитель, то для того чтобы получить указанные параметры таймера 2 при частоте МК 2МГц и предделителе 8, нужно базу счетчика выставлять в 0x06.

В обработчике прерывания таймера 2 будем считать количество срабатываний прерывания. Для этого заведем глобальную 32-битную переменную uint32_t sys_time, которая будет у нас системным счетчиком времени (в микросекундах). Для наших нужд этого более чем достаточно. То есть, что бы узнать текущее системное время, мы читаем данные из sys_time. Вот примеры соответствия (для наглядности):
1000 — 1 сек.
3000 — 3 сек.
30000 — 30 сек.
60000 — 1 мин.
300000 — 5 мин.
1800000 — 30 мин.

[deleted] :(

В принципе, код прошивки хорошо и обильно прокомментирован. Разобраться в нем, я думаю, не составит особого труда. В том виде, который есть сейчас, откомпилированная прошивка занимает 1Кб. Т.е., если есть необходимость, то ее можно впихнуть в контроллеры Attiny13 и иже с ними.

Еще бы я кусок кода, который там есть:
if (sel_time>300000) load_timer = 180000; // если больше 5' то включить нагрузку на 3'
if (sel_time>600000) load_timer = 360000; // если больше 10' то включить нагрузку на 6'
if (sel_time>900000) load_timer = 540000; // если больше 15' то включить нагрузку на 9'
if (sel_time>1200000) load_timer = 720000; // если больше 20' то включить нагрузку на 12'
if (sel_time>1500000) load_timer = 900000; // если больше 25' то включить нагрузку на 15'

оптимизировал так:
load_timer = sel_time / 300000 * 180000;

[deleted] :(

To be continued… (May be)

АРХИВ:Скачать




Источник: http://digitalchip.ru/bath_fan_controller_1
Категория: Конструкции для дома | Добавил: brys99 (21.08.2015)
Просмотров: 7563 | Теги: комнате, ванной, вентилятора, контроллер, вытяжного | Рейтинг: 3.5/2


Всего комментариев: 0

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

ьте свои комментарии !!!!

Имя *:
Email:
Код *:

Copyright Zloy Soft (Company) © 2008 - 2024