Оглавление:

Мост мерцающих свечей: 6 шагов (с изображениями)
Мост мерцающих свечей: 6 шагов (с изображениями)

Видео: Мост мерцающих свечей: 6 шагов (с изображениями)

Видео: Мост мерцающих свечей: 6 шагов (с изображениями)
Видео: Как же попасть мне на небеса - Леон (2 годика) 2024, Ноябрь
Anonim
Image
Image

В этом руководстве показано, как превратить простой свечной мост со статическим светом в красивый светящийся свет настроения с бесконечными вариациями мерцающих огней, мерцания, волновых узоров и многого другого. Я купил в «После Рождества» мост для свечей за 8 евро. Он имеет 7 светодиодных фонарей и настенный адаптер на 33 В и 3 Вт. Он светится ярким и теплым белым цветом и идеально подходит для этого проекта, где я поставлю Arduino, чтобы свечи мерцали. Самая популярная Arduino - это Arduino Uno. В этом проекте я буду использовать Arduino Mega 2560.

Я собираюсь отказаться от источника питания на 30 В и буду использовать в качестве источника питания простой блок питания на 5 В, предназначенный для мобильных телефонов.

Хорошая вещь, которую нужно знать о пауэрбанках, заключается в том, что у них есть внутренняя схема, которая преобразует батарею с 3,7 В до 5 В. Поскольку в процессе используется некоторая мощность, банк питания закрывается, если он не используется. Если блок питания используется для гаджетов DIY на базе Arduino, гаджет не может просто перейти в энергосберегающий режим сна и снова запуститься через несколько минут. Это отключит внешний аккумулятор. У этого мерцающего свечного моста нет спящего режима. Он постоянно использует питание, поддерживая активный блок питания, пока кабель питания не будет отключен.

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

  • 4 разных мерцающих огонька, имитирующих настоящие свечи
  • 2 разных мерцания (случайное мигание статичных огней)
  • 2 разных волновых режима
  • простой статический свет

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

Запасы

  • 1 светодиодный свечной мост с 7 лампочками. Убедитесь, что это модель с низким напряжением постоянного тока, либо с батареями, либо с настенным источником питания, который преобразует смертоносные 110–240 В переменного тока в примерно 6–30 В постоянного тока. Так что взломать свечной мост совершенно безопасно.
  • 1 Arduino Mega (подойдет любой другой микроконтроллер, просто убедитесь, что вы можете его запрограммировать)
  • 1 макетная плата
  • перемычки и другие провода
  • паяльный инструмент
  • мультиметр
  • 7 резисторов, 120 Ом
  • 1 кнопка (я покажу, как вы можете вместо этого использовать встроенную кнопку на Arduino)
  • Микросхема транзистора Дарлингтона на 7 транзисторов, ULN2803AP, подойдет (если вы используете Arduino Uno или Meaga, вам это действительно не нужно)
  • Блок питания на 5 В для мобильных телефонов

Шаг 1. Изучите, что у вас есть

Изучите, что у вас есть
Изучите, что у вас есть
Изучите, что у вас есть
Изучите, что у вас есть

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

  1. Откройте нижнюю часть свечного моста. Найдите два провода, идущие к одной свече.
  2. Снимите изоляцию с кабелей, обнажающую медные провода, не разрезая медные провода.
  3. Включите свет (расслабьтесь, это всего несколько вольт) и измерьте напряжение на обнаруженных медных проводах.
  4. Обрежьте кабель в одной из точек измерения (при этом, конечно, погаснет свет), снимите изоляцию (3-4 мм) с обоих концов. Измерьте проходящий ток. Что вы делаете, так это повторно подключаете отрезанный кабель к мультиметру, пропуская весь ток через мультиметр, который теперь сообщает вам величину тока.

Мои чтения

Напряжение на одной свече (шаг 3): 3,1 В

Обратите внимание, что источник питания свечного моста был 33 В. Таким образом, семь умножить на 3,1 В составляет всего 21,7 В. На некоторых свечах должен быть дополнительный резистор. Если бы я измерил это напряжение на свече, оно должно было быть около 11 В.

Ток, протекающий при свечах (шаг 4): 19 мА

Я собираюсь запитать все от аккумуляторной батареи 5 В 2 А. Для свечей мне нужно понизить напряжение с 5 В до 3 В. Мне нужен резистор, который снизит напряжение на 2 В при токе 19 мА.

2 В / 0,019 А = 105 Ом

Рассеиваемая мощность:

2 В * 19 мА = 38 мВт

Это ничтожно мало. Еще больше может вывести из строя сам резистор. Тем не менее, без резистора 105 Ом я мог бы перегореть светодиод. У меня резисторы 100 Ом и 120 Ом. Я использую 120 Ом. Это дает больше защиты.

Тестирование всех 7 свечей с напряжением 3 В дало яркий свет, за исключением одной свечи, которая имела очень тусклый свет, и через нее проходило всего около 0,8 мА. Это была моя свеча с дополнительным резистором. Оказалось, что у других свечей резисторов нет вообще. Светодиодные светильники, используемые в люстре, рассчитаны просто на 3 В! Свечу с дополнительным резистором пришлось открыть с легкостью, но ничего не сломалось. Резистор был найден прямо под крошечным светодиодом внутри пластиковой колбы свечи. Пришлось распаять его и перепаять провода. Было немного грязно, так как паяльник нагрел немного горячего клея, который использовался при сборке.

Итак, теперь я знаю, что какой бы источник питания я ни использовал, независимо от напряжения, я должен снизить напряжение до 3 В, чтобы пройти 19 мА.

Если бы я был более знаком со светодиодной технологией, я бы узнал тип используемого светодиода, и я бы знал, что он требует 3 В.

Шаг 2: пайка

Некоторая пайка
Некоторая пайка
Некоторая пайка
Некоторая пайка

На этом этапе я подключаю все положительные (+) провода от 5 свечей к одному проводу. Затем я добавляю отдельный отрицательный (-) провод для каждой свечи. Светодиод загорается только тогда, когда "+" и "-" идут вправо. Поскольку у вас есть только два одинаковых конца кабеля от каждой свечи, вы должны проверить, какой из них - «+», а какой - «-». Для этого вам понадобится источник питания 3 В. У меня был небольшой комплект батарей, в который входили две батарейки ААА. Плоская батарейка на 3 В тоже отлично подходит для тестирования.

Свечному мосту требуется 8 кабелей для прокладки между Arduino и мостом. Если вы найдете кабель с 8 изолированными проводами, это будет здорово. Один провод должен выдерживать 120 мА, остальные - не более 20 мА. Я выбрал четырехжильный двухжильный кабель, который у меня оказался.

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

На втором изображении показаны провода со знаком «-», которые нужны каждой свече. Общий провод «+» идет прямо на вывод 5 В Arduino (или, возможно, через макетную плату). Каждый «-» провод идет к своему собственному выводу транзисторной ИС (опять же, вероятно, через макетную плату).

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

Шаг 3: Подключения

Связи
Связи
Связи
Связи
Связи
Связи
Связи
Связи

Об Arduinos, взятых с этой страницы:

  • Общий максимальный ток на вход / выход: 40 мА
  • Сумма токов на всех входах / выходах вместе взятых: 200 мА

Мои свечи потребляют 19 мА при питании от 3 В. Их семь, что составляет 133 мА. Так что я мог запитать их прямо от выходных контактов. Однако у меня есть запасные микросхемы транзисторов Дарлингтона. Я подумал, а почему бы и нет. Моя схема работает правильно: выводы данных предназначены только для сигналов, а не для питания. Вместо этого я использую вывод 5 В на Arduino для питания светодиодов. Во время тестирования мой ноутбук подключен к Arduino. Все питается от USB-порта ноутбука, который дает 5 В. Arduino Mega имеет собственный предохранитель, который перегорает при токе 500 мА для защиты компьютера. Мои свечи потребляют не более 133 мА. Ардуино, вероятно, намного меньше. При питании от ноутбука все работает нормально, поэтому можно использовать аккумуляторную батарею 5 В, подключенную к USB-порту Arduino.

Контакты данных D3 - D9 идут на IC ULN2803APGCN. Светодиоды работают от 3 В. Каждая лампочка подключена к источнику 5 В, а затем к резистору 120 Ом. Далее к одному каналу ИС, который, наконец, соединяет цепь с землей через транзистор Дарлингтона в ИС.

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

Кнопка в цепи подключена к RESET и GND. Именно это и делает встроенная кнопка сброса. Поскольку я не помещаю все в пластиковый корпус, я использую кнопку сброса на Arduino для управления программой. Добавление кнопки в соответствии с изображением будет работать точно так же, как кнопка сброса платы. Программа работает, запоминая, какая световая программа использовалась при последнем запуске программы. Таким образом, каждый сброс будет переходить к следующей световой программе.

На фотографиях показано, как новые кабели выходят из моста, как я уложил транзисторную ИС и резисторы на макетную плату и как перемычки подключаются к Arduino Mega. Я разрезал 4 перемычки «папа-папа» на 8 половинных проводов, которые припаял к 8 кабелям, выходящим из перемычки свечи. Таким образом, я могу просто вставить кабели в макетную плату.

Альтернатива без транзисторов

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

Подключение '-' проводов непосредственно к выводам данных Arduino тоже подойдет, но всегда помните, какой ток могут выдерживать выводы данных! Этот подход потребует изменения в моей программе. Для включения свечей потребуется, чтобы контакты данных опустились на минимум. Чтобы использовать мою программу как она есть, вам нужно поменять местами «+» и «-» в свечах. Имейте общий провод для свечей, который идет на GND на Arduino. И отдельные провода проходят между проводом «+» свечи и выводом данных Arduino.

Шаг 4: световые программы

Моя программа, которую я представляю на следующем этапе, включает 9 световых программ. При нажатии кнопки свет погаснет на секунду, затем начнется следующая световая программа. Программы следующие:

  1. Сильное мерцание. Свечи мерцают случайным образом. Это выглядит очень раздражающе, когда вы смотрите на них с близкого расстояния, но может хорошо выглядеть на расстоянии и, возможно, за морозным чердачным окном. Хотя сосед может вызвать пожарную команду.
  2. Мягкое мерцание. Выглядит очень хорошо. Как настоящие свечи в комнате без сквозняка.
  3. Различное мерцание. Свечи плавно чередуются между сильным и мягким мерцанием примерно с 30-секундными интервалами.
  4. Различное мерцание. То же, что и № 3, но каждая свеча меняется в собственном темпе от 30 до 60 с.
  5. Быстрое мерцание. Свечи светятся на статическом приглушенном уровне и случайным образом мерцают. В среднем каждую секунду раздается один миг.
  6. Медленное мерцание. Как №5, но гораздо медленнее.
  7. Быстрая волна от средней верхней свечи к нижним.
  8. Медленная волна от средней верхней свечи к нижним.
  9. Статический яркий свет. Мне пришлось включить это, я не хотел избавляться от исходной функции.

Шаг 5: Код

/*

МЕРЦАЮЩАЯСЯ СВЕЧА МОСТ * / // Объявляем переменную режима для сохранения состояния // с помощью операции сброса _attribute _ ((section (". Noinit"))) unsigned int mode; // Когда программа запускается после сброса, этот фрагмент памяти // не инициализируется, но сохраняет значение, // имевшееся до сброса. При первом запуске программы // она содержит случайное значение. / * * Класс свечи содержит все необходимое * для расчета уровня освещенности * мерцающей свечи. * / класс свечи {частный: long maxtime; долгое время; длинный макслит; длинный минлит; длинный меллит; long origmaxtime; длинное оригинальное время; длинный оригмакслит; длинный ориминлит; длинный оригмеанлит; долгое время deltamaxtime; долгое дельтаминское время; длинный дельтамакслит; длинный дельтаминлит; длинный дельтамеанлит; длинная лопастная; долгий вечер; долгий старт; длинная цель; float phactor; долгое целевое время; долгое время старта; долгая дельтатимия; void newtarget (недействительно); long onetarget (void); публичные: свеча (длинный коврик, длинный мит, длинный мал, длинный мил, длинный мел, длинный эо); long levelnow (пусто); void initlfo (длинный дельтамат, длинный дельтамит, длинный дельтамил, длинный дельтамил, длинный дельтамин, длинный курс); void setlfo (недействительно); }; свеча:: свеча (long mat, long mit, long mal, long mil, long mel, long eo): maxtime (mat), mintime (mit), maxlite (mal), minlite (mil), meanlite (mel), evenout (eo), origmaxtime (mat), origmintime (mit), origmaxlite (mal), origminlite (mil), origmeanlite (mel) {target = meanlite; newtarget (); } / * * levelnow () возвращает уровень света, который должна быть у свечи прямо сейчас. * Функция определяет новый случайный уровень освещенности и * время, необходимое для достижения этого уровня. Изменение не является линейным *, а следует сигмовидной кривой. Когда не время определять новый * уровень, функция просто возвращает уровень освещенности. * / long свеча:: levelnow (void) {длинная справка, сейчас; float t1, t2; now = millis (); если (сейчас> = targettime) {help = target; newtarget (); вернуть помощь; } else {// help = target * (millis () - starttime) / deltatime + start * (targettime - millis ()) / deltatime; t1 = float (targettime - сейчас) / deltatime; t2 = 1. - t1; // Это сигмоидный расчет help = t1 * t1 * t1 * start + t1 * t1 * t2 * start * 3 + t1 * t2 * t2 * target * 3 + t2 * t2 * t2 * target; вернуть помощь; }} недействительная свеча:: newtarget (void) {long sum; сумма = 0; for (long i = 0; i <evenout; i ++) sum + = onetarget (); start = target; цель = сумма / доход; время начала = миллис (); targettime = время начала + случайное (минимальное время, максимальное время); deltatime = targettime - время начала; } длинная свеча:: onetarget (void) {if (random (0, 10) lastcheck + 100) {lastcheck = now; / * * Алгоритм мерцания «после частоты в миллисекундах»: * Начать проверку после скорости / 2 миллисекунды * В течение периода скорости / 2 миллисекунды сделать * вероятность мерцания равной 50%. * Если скорость 10000 мс, то за 5000 мс монета * подбрасывается 50 раз. * 1/50 = 0,02 * if random (10000) starttime + rate / 2) {if (random (rate) targettime) вернуть lowlite; return (start - lowlite) * (targettime - сейчас) / (targettime - время начала) + lowlite; } void twinkler:: twink (void) {starttime = millis (); targettime = random (mintime, maxtime) + время начала; start = random (minlite, maxlite); } void setup () {int led; // Считываем переменную магического режима, // которая должна сообщать, какая программа освещения была запущена в прошлый раз, увеличиваем ее // и сбрасываем на ноль в случае переполнения. режим ++; режим% = 9; // Это заботится о том, какое // значение было // при первом запуске этой программы на Arduino. / * * ВАЖНОЕ ПРИМЕЧАНИЕ * ============== * * Существенное, что делает эта программа, - выводит сигналы ШИМ * на светодиоды. Здесь я установил контакты с 3 по 9 в режим вывода *. На Arduino Mega2560 эти контакты выводят * красивые ШИМ-сигналы. Если у вас есть другой Arduino, проверьте, * какие контакты (и сколько) вы можете использовать. Вы всегда можете * переписать код, чтобы использовать программный ШИМ, если ваш Arduino * не может обеспечить достаточное количество аппаратных выводов ШИМ. * * / pinMode (3, ВЫХОД); pinMode (4, ВЫХОД); pinMode (5, ВЫХОД); pinMode (6, ВЫХОД); pinMode (7, ВЫХОД); pinMode (8, ВЫХОД); pinMode (9, ВЫХОД); pinMode (LED_BUILTIN, ВЫХОД); analogWrite (LED_BUILTIN, 0); // Просто выключите раздражающий красный светодиод на свече Arduino * can [7]; // готовимся к использованию мерцающих свечей, независимо от того, используете вы их или нет twinkler * twink [7]; // готовимся к использованию мерцающих свечей… if (mode == 8) {for (int i = 3; i <10; i ++) analogWrite (i, 255); в то время как (правда); // Каждый раз, когда запускается эта программа, она переходит // в бесконечный цикл, // пока не будет нажата кнопка сброса. } if (mode <2) // мерцание {long maxtime_; long mintime_; long maxlite_; long minlite_; long meanlite_; длинные even_; если (режим == 0) {maxtime_ = 250; mintime_ = 50; maxlite_ = 256; minlite_ = 0; meanlite_ = 128; even_ = 1; } если (режим == 1) {maxtime_ = 400; mintime_ = 150; maxlite_ = 256; minlite_ = 100; meanlite_ = 200; even_ = 1; } for (int i = 0; i <7; i ++) {can = новая свеча (maxtime_, mintime_, maxlite_, minlite_, meanlite_, even_); } while (true) // Бесконечный цикл мерцающих свечей {for (int i = 0; i levelnow ()); }} if (mode <4) // lfo добавлено к мерцающему {if (mode == 2) // одинаковое lfo (30 с) для всех свечей {for (int i = 0; i initlfo (75, 50, 0, 50, 36, 30000);}} if (mode == 3) // изменение lfo: s для свечей {for (int i = 0; i initlfo (75, 50, 0, 50, 36, 20000); can [1] -> initlfo (75, 50, 0, 50, 36, 25000); can [2] -> initlfo (75, 50, 0, 50, 36, 30000); can [3] -> initlfo (75, 50, 0, 50, 36, 35000); can [4] -> initlfo (75, 40, 0, 50, 36, 40000); can [5] -> initlfo (75, 30, 0, 50, 26, 45000); can [6] -> initlfo (75, 20, 0, 50, 16, 50000); can [7] -> initlfo (75, 10, 0, 50, 6, 55000);} while (true) // Бесконечный цикл для мерцающих свечей с lfo {long lastclock = 0; for (int i = 0; i levelnow ()); if (millis ()> lastclock + 4000) {lastclock = millis (); for (int i = 0; i setlfo ();}}} if (mode <6) // мерцающие свечи {int speedo; if (mode == 4) speedo = 6000; else speedo = 22000; for (int i = 0; i <7; i ++) twink = новый twinkler (300, 295, 255, 250, спидометр); while (true) {for (int i = 0; i levelnow ()); }} // Волны. // Этот раздел начинается с фигурных скобок, // чтобы убедиться, что нет конфликтующих имен переменных. // Нет необходимости в скобках, нет необходимости // проверять значение режима.{int lolite = 2; int hilite = 255; int означает; int amp; float fasedelta = 2,5; поплавок; инт удлиненный; float phactor; долгий период; среднее = (лолит + хилит) / 2; амп = хилит - среднее; if (mode == 6) период = 1500; иначе период = 3500; фактор = 6,28318530718 / период; while (истина) {fase = phactor * (millis ()% period); удлинение = среднее + амплитуда * sin (фаза); analogWrite (7, удлиненный); analogWrite (9, удлиненный); fase = фактор * ((миллис () + период / 4)% периода); удлинение = среднее + амплитуда * sin (фаза); analogWrite (3, удлиненный); analogWrite (8, удлиненный); fase = фактор * ((миллис () + период / 2)% периода); удлинение = среднее + амплитуда * sin (фаза); analogWrite (4, удлиненный); analogWrite (5, удлиненный); fase = фактор * ((миллис () + 3 * период / 4)% периода); удлинение = среднее + амплитуда * sin (фаза); analogWrite (6, удлиненный); } // При подключении свечных проводов к Arduino // Я перепутал их, и так и не получил их в порядке. // Порядок важен для создания волновых паттернов, // поэтому я просто написал для себя эту небольшую таблицу: // // Свеча # в мосте: 2 3 5 4 7 6 1 // Вывод данных на Arduino: 3 4 5 6 7 8 9}} void loop () {// Поскольку каждая световая программа - это отдельный бесконечный цикл, // я написал все циклы в разделе begin () // и ничего не оставил для этого раздела loop (). }

Шаг 6: о ШИМ

Светодиоды светятся ярко при питании от 3 В. При напряжении всего 1,5 В они вообще не загораются. Светодиодные фонари не тускнеют при уменьшении напряжения, как лампы накаливания. Вместо этого их нужно включить на полное напряжение, а затем выключить. Когда это происходит 50 раз в секунду, они красиво светятся с яркостью 50%, более или менее. Если им разрешено быть включенными только 5 мс и выключенными 15 мс, они могут светить с яркостью 25%. Этот метод делает светодиодный свет регулируемым. Этот метод называется широтно-импульсной модуляцией или ШИМ. Микроконтроллер, такой как Arduino, обычно имеет контакты для передачи данных, которые могут отправлять сигналы включения / выключения. Некоторые выводы данных имеют встроенные возможности для ШИМ. Но если не хватает выводов со встроенным ШИМ, обычно можно использовать специальные библиотеки программирования для создания «программных выводов ШИМ».

В своем проекте я использовал Arduino Mega2560, который имеет аппаратную ШИМ на контактах 3–9. Если вы используете Arduino UNO, у вас есть только шесть контактов ШИМ. В том случае, если вам нужна 7-я (или даже больше) свеча, я могу порекомендовать программную библиотеку PWM Бретта Хагмана, которую вы можете найти здесь.

Рекомендуемые: