Регулятор силы света (диммер) на Arduino и симисторе


В современных домохозяйствах большинство устройств (лампочки, телевизоры, кондиционеры и т.д.) запитываются от напряжения переменного тока. Мы можем управлять включением и выключением этих устройств с помощью платы Arduino и реле, эти способы управления домашними электронными устройствами рассматривались на нашем сайте в проектах автоматизации дома. Но если нам нужно не просто управлять процессами включения/выключения устройств, а нужно еще, к примеру, регулировать яркость свечения лампы или частоту вращения вентилятора, то здесь нам необходимо использовать методы управления фазами и статические переключатели наподобие симисторов (TRIAC) для управления фазами напряжение переменного тока.

Внешний вид регулятора силы света на Arduino и симисторе

В данной статье мы рассмотрим создание регулятора силы света (диммера, dimmer) лампы переменного тока на основе платы Arduino и симистора. Для переключения режимов лампы переменного тока мы будем использовать симистор (TRIAC) – быстродействующий электронный переключатель, наиболее хорошо подходящий для проектов подобного вида.

На нашем сайте вы можете также посмотреть проекты, в которых использовалась регулировка силы света:

Необходимые компоненты

  1. Плата Arduino Uno (купить на AliExpress).
  2. Оптопара MCT2E (купить на AliExpress).
  3. Оптопара MOC3021 (купить на AliExpress).
  4. Симистор (TRIAC) BT136 (купить на AliExpress).
  5. Понижающий трансформатор (12-0V, 500mA) (купить на AliExpress).
  6. Резисторы 1 кОм, 10 кОм, 330 Ом (купить на AliExpress).
  7. Потенциометр 10 кОм (купить на AliExpress).
  8. Лампа переменного тока с держателем (патроном).
  9. Соединительные провода.

Методика обнаружения перехода через ноль

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

Момент перехода через ноль сигнала переменного тока

Принцип работы симистора

Симистор (симметричный триодный тиристор, в англ. TRIAC) представляет собой переключатель переменного тока с тремя выводами, который можно переключить при помощи подачи отпирающего импульса на его управляющий вывод (затвор). Но в отличие от других подобных переключателей, которые проводят ток в одном направлении, симистор может управлять током в обоих направлениях. В нашем проекте мы будем использовать симистор BT136.

Внешний вид, обозначение на схемах и распиновка симистора BT136

Принцип управления симистора переменным током показан на следующем рисунке.

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

Как показано на рисунке, мы можем переключать, к примеру, симистор на угле 90 градусов при помощи подачи отпирающего импульса на его управляющий вывод. В этом случае мы будем подавать ток на лампу только в половине времени положительной полуволны сигнала (на графике время t1), соответственно, лампа будет гореть вполовину мощности. Уменьшая или увеличивая это время мы можем заставить лампу гореть ярче или тусклее.

Частота сигнала переменного тока в нашей сети составляет 50 Гц, соответственно, период сигнала равен 1/f =20 миллисекунд. Значит, половина периода будет равна 10 мс. Поэтому мы можем изменять время t1 на приведенном графике для управления яркостью свечения лампы переменного тока в диапазоне от 0 до 10 мс (10000 мкс).

Оптопара

Внешний вид оптопары MOC3021

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

Схема проекта

Схема регулятора силы света (диммера) на Arduino и симисторе представлена на следующем рисунке.

Схема регулятора силы света (диммера) на Arduino и симисторе

Схема соединения симистора и оптопары показана на следующем рисунке.

Схема соединения симистора и оптопары

Эту схему мы собрали на перфорированной плате, у нас получилась конструкция следующего вида:

Соединение симистора и оптопары на перфорированной плате

Оптопару MCT2E и соединения с ней мы также разместили на перфорированной плате и подсоединили ее к понижающему трансформатору.

Оптопара MCT2E и соединения с ней на перфорированной плате

Конструкция всего проекта в сборе выглядит следующим образом:

Конструкция всего проекта в сборе

Объяснение программы для Arduino

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

В самом начале программы нам необходимо объявить используемые глобальные переменные. Симистор у нас подключен к контакту 4 платы Arduino. В переменной dim_val мы будем хранить значение шага диммирования (регулирования силы света), который мы далее будем использовать в программе.

Далее, в функции void setup() для контакта, к которому подключен симистор, мы зададим режим работы на вывод данных. Затем мы используем функцию attachInterrupt чтобы сконфигурировать контакт 2 на обработку внешнего прерывания. При срабатывании этого прерывания будет вызываться функция обработки прерывания zero_cross.

Внутри функции void loop() мы будем считывать аналоговое значение с потенциометра, подключенного к контакту A0 платы Arduino. Затем мы будем конвертировать это значение в диапазон 10-49. Чтобы вычислить этот диапазон нам пришлось сделать некоторые вычисления. Ранее мы говорили, что каждая половина цикла (периода) волны переменного тока в сети составляет 10 000 микросекунд. К примеру, мы хотим управлять регулировкой силы света с помощью 50 шагов (это значение является произвольным, его вы можете изменить по своему усмотрению). В этом случае мы использовали минимальный шаг, равный 10 (значения от до 9 не рекомендуются в силу ряда физических процессов). А в качестве максимального значения шага мы использовали значение 49.

Время каждого шага можно рассчитать следующим образом: 10000/50=200 микросекунд. В результате этих вычислений мы и написали следующий фрагмент кода:

Теперь все, что нам нужно сделать, это запрограммировать функцию обработки прерывания zero_cross. В ней мы время регулировки (dimming_time) рассчитываем при помощи умножения индивидуального времени шага на число шагов. Далее мы делаем задержку в программе на рассчитанное время и после этой задержки переключаем симистор с помощью небольшого импульса длительностью 10 микросекунд.

Тестирование работы проекта

На следующих трех рисунках показаны 3 степени регулировки яркости лампы переменного тока.

1. Маленький шаг регулировки.

Работа проекта при маленьком шаге регулировки

2. Средний шаг регулировки.

Работа проекта при среднем шаге регулировки

3. Максимальный шаг регулировки.

Работа проекта при максимальном шаге регулировки

Исходный код программы (скетча)

Видео, демонстрирующее работу схемы

(Проголосуй первым!)
Загрузка...
6 749 просмотров

Комментарии

Регулятор силы света (диммер) на Arduino и симисторе — 22 комментария

  1. Вопрос! На Ардуино Уно уже работает скеч Рассвет- Закат с плавным включением светодиода(10 пин) от 0-255 и затуханием 255-0. Возможно ли вместо светодиода (и как?) подключить лампу на 220в по этой схеме или как то иначе? Я новичок в этом пока что, помогите разобраться люди добрые.

    • Да, можно. Только в вашем случае в переменную data в приведенном скетче вам нужно будет записывать не значение с выхода потенциометра, а значение для яркости светодиода и потом преобразовывать его в нужный диапазон с помощью функции map

    • Будет что? Не совсем понял вопрос. Да, конечно, подобный проект можно собрать и на микроконтроллере AVR, не используя плату Ардуино, в этом случае вам может пригодиться программа Atmel Studio ATmega16

      • Пробовал в Студии, или горит, или не горит, или напряжение плавает.

        • А вы обработку прерывания правильно для микроконтроллера AVR настроили? Для Ардуино это легко сделать, а для отдельно микроконтроллера уже посложнее. И в таких случаях обычно тестирование схемы и программы по частям помогает найти ошибку

  2. Я использовал вместо понижающего трансформатора резистор на 100 kOm (0.5 Вт) диод и оптопару pc817.

  3. Что-то я не понял, а для чего нам нужны трансформатор и оптопара MCT2E? Какую они выполняют функцию?

      • Если у меня ардуинка запитана от адаптера, то можно и без MCT2E с трансформатором обойтись? Они больше никаких функций не выполняют? Я думал, что они как-то ардуинке дают понять, когда начался полупериод) Спасибо за пояснения)

        • Интересует вопрос, как ардуинка понимает, когда начинается полупериод? А то ведь есть разница, когда включать симистор, вначале или в середине полупериода или я ошибаюсь?

        • Хотя нет, извините, я не совсем точно вам ответил. Благодаря трансформатору и оптопаре MCT2E сигнал подается на контакт 2 платы Ардуино, на котором программно сконфигурировано обработка прерывания и благодаря этому плата Ардуино понимает когда начался полупериод.

          • Вот это больше похоже на правду) И у меня ещё назрел вопросик) С 12-вольтового трансформатора, судя по рисунку, мы подаём все 12 вольт на светодиод оптопары MCT2E. А в даташите этой оптопары написано, что максимальное напряжение на диоде 1.5 вольта и ток 20мА. А на рисунке нет токоограничевающего резистора. Не уверен, что оптопара не перегорит при сборке по предложенному вами варианту. Собственно вопрос: Это точно будет работать?)

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

  4. Сопротивление потенциометра каким образом определяется микроконтроллером? Не без разницы же потенциометр на 10кОм или на 470кОм ставить? Я в просто не понял этот момент.

    • Да, сопротивление потенциометра платой Ардуино здесь никак не определяется и не измеряется, но плата Ардуино считывает значение напряжения со средней точки потенциометра, поэтому она может определить в каком положении находится ручка потенциометра. Подключение потенциометра подобным образом (как в этом проекте) - это самый распространенный способ сделать так, чтобы с помощью вращения ручки потенциометра управлять какими-нибудь процессами с помощью платы Arduino. Сопротивление потенциометра особой роли не играет, но есть пределы по минимальному и максимальному току контактов Ардуино - исходя из этого и можно определить допустимые границы сопротивления этого потенциометра. Но в большинстве случаев, которые я видел, ставят на это место потенциометр сопротивлением 10 кОм.

      • Спасибо за ответ! А если касательно просто микроконтроллера, а не Ардуино, также эти условия действуют для него или нет?

        • Ну если микроконтроллер со входами АЦП, то да - действуют. К примеру, можете посмотреть эту статью про АЦП в микроконтроллере AVR - там потенциометр подключен к одному из контактов АЦП микроконтроллера и работает по такому же принципу, как и в данной статье по Ардуино

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *