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

Вентилятор для ванной комнаты

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

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

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

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

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

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

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

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

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

Внимание!!!

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

[Свернуть]

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

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

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

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

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

Нежданчик...

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

[Свернуть]

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

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

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

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

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

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

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

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

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

Печатная плата контроллера вытяжного вентилятора. 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)

Ах, да, забыл файлики приложить…
Исправляюсь.

СКАЧАТЬ

venilator_v1.zip — проект в EagleCad с AtTiny13

venilator_v3.zip — проект в EagleCad с AtMega8

ventilator4.zip — последняя версия проекта (исходник и откомпилированная прошивка). Это копия папки с проектом для Eclipse IDE  (да, для AVR пишу в Eclipse, ну не нравятся мне студии от Atmel).

[Свернуть]

 

Вливайтесь в обсуждение

  20 комментариев

  • lexresident

    10 лет назад

    Собрал на макетке, зашил, включается как положено через 15 секунд, а вот выключается только через 15 минут. Чёт не догоняю короче…

    • Все дела в датчике. Он у вас получается все время показывает наличие света. Применение светодиодов в качестве датчика света — тот еще геморрой…

  • Владимир

    10 лет назад

    AtTiny13 прекрасно прошивается USBasp в avrdudeprog33
    http://www.yourdevice.net/downloads/avrdudeprog33.rar

  • нашел эту статью. схема очень понравилась, её и искал. только не разберусь, где прошивка на тини13, где фьюзы? скачал внизу файл ни хрена не открывается. я как понял это просто макет платы в программе EagleCad, а где сама прошивка и как выставлять фьюзы?

    • Я же написал в статье, что с Tiny13 у меня не пошло, я переделал все на ATMega8. Поэтому и прошивки на Tiny нет.

      Но я привел исходник прошивки на Си. Ее можно откомпилировать как под ATMega8, так и под Tiny13 с небольшими изменениями. Модификации незначительные. Фьюзы по умолчанию.

      Я об этом в статье говорил:

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

      • Слишком «жирно» мега8 для такой конструкции.)))) Чесно сказать контроллерами занялся недавно. Сложно написать программу самому для тини13 что бы вытяжка включалась на час потом столько же «отдыхала» и так циклично? У меня общая вытяжка на частный дом, такой режим просто идеален. Программа то наверное не сложная? Радиотехникой то занимаюсь давно уже лет двадцать пять, а вот контроллеры как то обходил. Сейчас то уже собираю во всю, только вот использую программы которые идут с проектами. Но надо же с чего то начинать………..

        • Слишком «жирно» мега8 для такой конструкции.)))

          Ну да, жирно. Но у меня с Тини13 не пошло и они у меня кончились. А Мега8 у меня кучка есть. Поэтому применил то, что было.

          Сложно написать программу самому для тини13 что бы вытяжка включалась на час потом столько же «отдыхала» и так циклично?

          Это вообще просто. Десяток строк.

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

          Да, начинать с чего то надо. Можно с этого проекта и начать. 🙂

  • а вместо светодиода(датчика освещённости) нельзя обычный фотодиод или фоторезистор поставить?

  • Подскажите, пожалуйста, начинающему. Меряя напряжение между GND и VCC мултиметр выдает 220В, это нормально? А то, что-то боязно подключать ATMeg-у к такому напряжению.

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

      Здесь применен бестрансформаторный блок питания с гасящим конденсатором БЕЗ ГАЛЬВАНИЧЕСКОЙ РАЗВЯЗКИ от сети 220В. Для микроконтроллера относительно его «земли» будет подаваться 5В. Если вы коснетесь этих 5В, то относительно вашей «земли» на контакте будет 220В.

  • А можно прошивку для тини13 выложить в нех файле?и какой светодиод надо применять?можно его маркировку.

  • И можно ли прошивку на тини 13 подогнать под фоторезистор?просто их в наличии хватает

  • Сергей Белицкий

    8 лет назад

    тема живая ещё?
    есть пару вопросов

  • Привет всем! Автор по поводу программирования Тини. Я понимаю у вас USBBASP. Прикол в том, что в этом чипе с завода идет выставленный ФЬЮЗ CKDIV8. По дефалту 9,6 МГц/8 = 1,2МГц. У меня как — то была похожая ситуация, когда стоял фьюз делителя и частота RC 128КГц. 128 000/8 = 16 КГц… И программатор не видит. Я установил на USBASP перемычку SLOW Programming и в Khazama выставил минимальную скорость SPI — чип считался и перепрограммировался. Идея класс, взял за основу своего девайса. ПС: Семистор не греется?

    • Я понимаю у вас USBBASP.

      Да, именно он.

      Прикол в том, что в этом чипе с завода идет выставленный ФЬЮЗ CKDIV8. По дефалту 9,6 МГц/8 = 1,2МГц.

      Похоже, что и у меня так. Проверить пока не могу, далеко от него нахожусь.

      Я установил на USBASP перемычку SLOW Programming и в Khazama выставил минимальную скорость SPI — чип считался и перепрограммировался.

      Спасибо за информацию, как только вернусь, попробую тоже так сделать.

      ПС: Семистор не греется?

      Абсолютно холодный.

  • Можете скинуть сорс с Attiny13 на digital_inventor(ав-ав)mail.ru? Хочу посмотреть, как таймер организовали.

    • Извините, но исходников не осталось… 🙁 Они умерли вместе с фотками в той папке, которую я случайно удалил. И резервных копий нет.

Добавить комментарий

Отправляя комментарий, вы автоматически принимаете правила комментирования на сайте.

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

  1. Не следует писать исключительно заглавными буквами. Это дурной тон.
  2. Запрещены комментарии не относящиеся к тематике сайта и самой статье.
  3. Запрещены реплики оскорбляющие других участников проекта. Давайте будем взаимовежливы.
  4. Запрещены нецензурные слова, идиоматические выражения, призывы к межнациональной и межконфессиональной розни.
  5. Запрещено обсуждение наркотических веществ и способов их применения.
  6. Запрещены комментарии с призывами к нарушению действующего законодательства РФ (Уголовного и Административного кодекса).
  7. Запрещены ссылки на сторонние ресурсы без согласования с владельцем сайта.
  8. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова.

Следует учитывать следующее - все комментарии проверяются на предмет отсутствия спама. При обнаружении признаков спама, в оставленном Вами комментарии, сам комментарий будет незамедлительно удален, а Ваш IP-адрес будет добавлен в черный список без предупреждения!

Учетные записи пользователей, рассылающих спам, блокируются/удаляются без права последующего восстановления.