Arduino управляет винтажной елочной гирляндой. Продление срока службы ламп накаливания

Информация предоставлена исключительно в образовательных целях!
Администратор сайта не несет ответственности за возможные последствия использования предоставленной информации.

высокое напряжение

Описываемое устройство подключается к электросети и смертельно опасно при эксплуатации!

Плавный пуск и управление яркостью лампочек

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

Как же практически исключить их перегорание, а заодно и сделать работу гирлянды интереснее? В этом нам поможет микроконтроллер ATmega328P в удобном формате платы Arduino Nano 3.0 :-)

Схема устройства:

управление елочной гирляндой Arduino

AC - клеммы подключения к бытовой электросети
LOAD - клеммы подключения нагрузки (гирлянды)

Я использовал широтно-импульсную модуляцию (ШИМ, PWM) для задания среднего напряжения/тока лампочек гирлянды (а, соответственно, и температуры их нитей накала и яркости свечения).

Управляющий ШИМ-сигнал "аппаратно" генерирует Arduino Nano. Этот сигнал через балластный резистор R2 (2 кОм) и оптопару U1 PC817 поступает на затвор MOSFET Q1 IRF840N.
При "1" на выводе D3 Arduino выходной транзистор оптопары открывается и на затвор MOSFET поступает открывающее напряжение - через нагрузку протекает импульс тока.

Резистор R3 (2 кОм) шунтирует цепь "затвор - сток", обеспечивая возможность работы оптопары. Резистор R1 (200 Ом) служит для ограничения тока через оптопару при включении MOSFET.

MOSFET включен в диагональ выпрямительного моста D1 KBP307 по постоянному току. Последовательно с диагональю моста по переменному току включена нагрузка - новогодняя гирлянда. Гирлянда и диагональ подключены к сети переменного тока.

При включении выключателя SW1 на вывод VIN Arduino Nano подается напряжения питания 12 В и на выводе D3 появляется ШИМ-сигнал. Его начальная скважность равна 100 % и затем уменьшается до заданного минимума, обеспечивая требуемую яркость свечения лампочек (происходит плавный пуск лампочек гирлянды). 

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

После достижения максимума яркость гирлянды уменьшается до заданного минимума и затем опять увеличивается - цикл повторяется:


Видео работы устройства
:

Arduino ШИМ лампочки
https://youtu.be/0eVPhzsA-N0

В качестве источника постоянного напряжения я применил компактный блок питания с выходным напряжением 12 В, сняв его корпус:

В нашей винтажной гирлянде изначально были использованы миниатюрные лампочки накаливания 13,5 В × 0,16 А (2,2 Вт) с цоколем E10 (сопротивление холодной нити 7,2 Ом):

новогодняя гирлянда

лампочка 13,5 В 0,16 А

На этих лампочках вот такой логотип завода:
лампочки логотип

Такие лампочки сейчас найти весьма проблематично. Но в гирлянде можно применить и более доступные лампочки, например, 3,8 В × 0,3 А (1,1 Вт) (сопротивление холодной нити 1,0 Ом):

лампочка 3,8 В 0,3 А

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

Для гирлянды из 17 (изначально в гирлянде было 20 лампочек) последовательно включенных лампочек 3,8 В × 0,3 А я использовал такие параметры ШИМ (значение может изменяться от 0 (коэффициент заполнения 0 %) до 255 (коэффициент заполнения 100 %):

  • минимальное значение =  2
  • максимальное значение = 10
  • шаг = 1

Частота ШИМ при использовании вывода D3 составляется 488 Гц (используется таймер 2 Arduino).

При работе транзистор Q1 нагревается незначительно, но заметно греется маломощный трансформатор блока питания.

Исходный код (лицензия Unlicense):

/*
Lights control with Arduino v1.0

Author: Alexey "FoxyLab" Voronin
WWW: https://acdc.foxylab.com/lamp_arduino

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.

In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to <http://unlicense.org/>
*/

const unsigned long DELAY = 2000; //delay in msec between steps

const byte STEP = 1; //PWM step value
const byte MAX = 10; //maximum PWM value
const byte MIN = 2; //minimum PWM value

const byte OUT = 3; //PWM pin number

void setup() {

}

void loop() {
  byte bright;
  bright = 0; //brightness start value
  //loop
  while (true) {
    //brightness increase
    while (true) {
      analogWrite(OUT, bright);
      delay(DELAY);
      if (bright > (MAX - STEP)) {
        bright = MAX;
      }
      else {
        bright = bright + STEP;
      }
      if (bright == MAX) break;
    }
    //brightness decrease
    while (true) {
      analogWrite(OUT, bright);
      delay(DELAY);
      if (bright < (MIN + STEP)) {
        bright = MIN;
      }
      else {
        bright = bright - STEP;
      }
      if (bright == MIN) break;
    }
  }
}

Внешний вид устройства:

Arduino управление нагрузкой ШИМ

Использование балластного конденсатора

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

Напряжение на гирлянде при этом будет определяться выражением:

$ U_{г} = {\sqrt{U^2 - {U_c}^2}} $ ,

где $U$ - напряжение сети, $U_{c}$ - падение напряжения на конденсаторе.

Для этих целей хорошо подходят такие пусковые конденсаторы для электродвигателей как например, МБГП-1 и КБГ-МН емкостью в единицы микрофарад:
балластный конденсатор

МБГП-1  - металлобумажный герметизированный высоковольтный импульсный конденсатор; предназначен для работы в цепях постоянного и пульсирующего токов, формирования мощных импульсов тока разряда в нагрузке;
КБГ-МН - бумажный низковольтный низкочастотный конденсатор; предназначен для формирования мощных импульсов тока разряда в нагрузке.

Конденсатор шунтирован резистором 3 МОм для обеспечения его разряда при отключении от сети:
балластный конденсатор

Я использовал конденсатор емкостью 10 мкФ для гирлянды из 18 лампочек 12 В × 0,1 А . При включении в сеть с напряжением $ U = 232~{В} $ на конденсаторе падает напряжение $ {U_c} = 44~{В} $ . Таким образом, на гирлянде падает напряжение ${U_{г}} = {\sqrt{{232^2} - {44^2}}} = 228~В $  - снижение напряжения составило $U-{U_{г}} = 232 - 228 = 4~{В} $ (около 2 %).

Если применить конденсатор меньшей емкости, то снижение напряжения будет более заметно.

Яндекс.Метрика