Оглавление:

Улучшение светодиодного куба настроения Arduino (простое) (видео включено): 4 шага
Улучшение светодиодного куба настроения Arduino (простое) (видео включено): 4 шага

Видео: Улучшение светодиодного куба настроения Arduino (простое) (видео включено): 4 шага

Видео: Улучшение светодиодного куба настроения Arduino (простое) (видео включено): 4 шага
Видео: 14 июня 2023 г. 2024, Июль
Anonim
Улучшение светодиодного куба настроения Arduino (простое) (видео включено)
Улучшение светодиодного куба настроения Arduino (простое) (видео включено)

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

Шаг 1: материалы

Материалы
Материалы
Материалы
Материалы

Вот некоторые материалы, которые вам понадобятся для изготовления этого куба настроения:

  • Макетная плата
  • Ардуино - (у меня здесь Леонардо)
  • Блок питания Arduino / USB-кабель
  • Макетная плата
  • Провода перемычки (их много, я использовал 29 проводов)
  • Красный светодиод x 2
  • Синий светодиод x 2
  • Зеленый светодиод x 2
  • Желтый светодиод x 2
  • Белый светодиод x 1
  • 9 резисторов
  • Коробка достаточно большая, чтобы уместить макет (я использовал коробку из-под обуви)
  • Универсальный нож
  • Бумага

Шаг 2: Код

Некоторое объяснение приведенного здесь кода:

Кредит кодов принадлежит первоисточнику моего проекта, поскольку редактор проекта создал эти коды. Я просто улучшил некоторые из них, сделав их более сложными. В некоторых кодах вы можете увидеть // 改 в конце. Это означает, что этот код редактируется мной, поэтому он отличается от моего исходного кода.

У меня также есть версия кода на Arduino Creator.

/ * Код для перекрестного затухания 3 светодиода, красный, зеленый и синий (RGB) Чтобы создать затухание, вам нужно сделать две вещи: 1. Описать цвета, которые вы хотите отобразить 2. Перечислить порядок, в котором вы хотите, чтобы они затухали

ОПИСАНИЕ ЦВЕТА:

Цвет - это просто набор из трех процентов, 0-100, управляющий красным, зеленым и синим светодиодами.

Красный - красный светодиод полностью, синий и зеленый - выключены.

int red = {100, 0, 0} Тусклый белый цвет - все три светодиода на 30% int dimWhite = {30, 30, 30} и т. д.

Некоторые распространенные цвета указаны ниже, или сделайте свой собственный

ПЕРЕЧЕНЬ ЗАКАЗА:

В основной части программы вам нужно указать порядок, в котором вы хотите, чтобы цвета отображались, например crossFade (красный); crossFade (зеленый); crossFade (синий);

Эти цвета появятся в указанном порядке, постепенно исчезая.

один цвет и в другой

Кроме того, вы можете настроить 5 дополнительных параметров:

1. Первоначальный цвет установлен на черный (так что первый цвет исчезает), но вы можете установить начальным цветом любой другой цвет. 2. Внутренний цикл выполняется для 1020 взаимодействий; переменная 'wait' устанавливает приблизительную продолжительность одного кроссфейда. Теоретически "ожидание" в 10 мс должно привести к переходу на ~ 10 секунд. На практике другие функции, которые выполняет код, на моей плате замедляют это до ~ 11 секунд. YMMV. 3. Если «повтор» установлен на 0, программа будет повторяться бесконечно. если он установлен на число, он будет повторять это количество раз, а затем остановится на последнем цвете в последовательности. (Установите 'return' в 1 и сделайте последний цвет черным, если вы хотите, чтобы он исчез в конце.) 4. Существует необязательная переменная 'hold', которая передает программе 'удерживать' миллисекунды, когда цвет завершено, но до начала следующего цвета. 5. Установите флаг DEBUG в 1, если вы хотите, чтобы выходные данные отладки отправлялись на монитор последовательного порта.

Внутренности программы несложные, но они

немного привередливы - внутренняя работа объясняется ниже основного цикла.

Апрель 2007, Клэй Ширки

*

/ Выход

int ylwPin = 5; // Желтый светодиод, подключенный к цифровому выводу 5 // 改 int redPin = 6; // Красный светодиод, подключенный к цифровому выводу 6 // 改 int grnPin = 7; // Зеленый светодиод, подключенный к цифровому выводу 7 // 改 int bluPin = 8; // Синий светодиод, подключенный к цифровому выводу 8 // 改 int whiPin = 9; // Белый светодиод, подключенный к цифровому выводу 9 // 改 int ylwPin2 = 10; // Желтый светодиод, подключенный к цифровому выводу 10 // 改 int redPin2 = 11; // Красный светодиод, подключенный к цифровому выводу 11 // 改 int grnPin2 = 12; // Зеленый светодиод, подключенный к цифровому выводу 12 // 改 int bluPin2 = 13; // Синий светодиод, подключенный к цифровому выводу 13 // 改

// Цветовые массивы

int black [9] = {0, 0, 0, 0, 0, 0, 0, 0, 0}; // 改 int white [9] = {100, 100, 100, 100, 100, 100, 100, 100, 100}; // 改 int red [9] = {0, 0, 100, 0, 0, 0, 100, 0, 0}; // 改 int green [9] = {0, 100, 0, 0, 0, 0, 0, 100, 0}; // 改 int blue [9] = {0, 0, 0, 100, 0, 0, 0, 0, 100}; // 改 int yellow [9] = {100, 0, 0, 0, 0, 100, 0, 0, 0}; // 改 int purple [9] = {0, 50, 0, 50, 0, 0, 50, 0, 50}; // 改 int orange [9] = {50, 50, 0, 0, 0, 50, 50, 0, 0}; // 改 int pink [9] = {0, 50, 0, 0, 50, 0, 0, 50, 0,}; // 改 // и т. Д.

// Устанавливаем начальный цвет

int redVal = черный [0]; int grnVal = черный [1]; int bluVal = черный [2]; int ylwVal = черный [3]; // 改 int whiVal = black [4]; // 改

интервал ожидания = 15; // внутренняя задержка CrossFade 10 мс; увеличение для более медленных затуханий // 改

int hold = 1; // Необязательное удержание, когда цвет завершен, перед следующим перекрестным затуханием // 改 int DEBUG = 1; // счетчик ОТЛАДКИ; если установлено в 1, значения будут записываться обратно через последовательный int loopCount = 60; // Как часто следует сообщать DEBUG? интервал повторения = 0; // Сколько раз мы должны зацикливаться перед остановкой? (0 без остановки) // 改 int j = 0; // Счетчик циклов для повтора

// Инициализируем переменные цвета

int prevR = redVal; int prevG = grnVal; int prevB = bluVal; int prevY = ylwVal; int prevW = whiVal; // 改

// Настраиваем выходы светодиодов

void setup () {pinMode (redPin, ВЫХОД); // устанавливает выводы как выходные pinMode (grnPin, OUTPUT); pinMode (bluPin, ВЫХОД); pinMode (ylwPin, ВЫХОД); // 改 pinMode (whiPin, OUTPUT); // 改 pinMode (grnPin2, OUTPUT); // 改 pinMode (bluPin2, OUTPUT); // 改 pinMode (ylwPin2, OUTPUT); // 改 pinMode (redPin2, OUTPUT); // 改

if (DEBUG) {// Если мы хотим увидеть значения для отладки…

Serial.begin (9600); //… настраиваем последовательный выход}}

// Основная программа: перечисляем порядок кроссфейдов

void loop () {crossFade (красный); crossFade (зеленый); crossFade (синий); crossFade (желтый); crossFade (белый); crossFade (розовый); crossFade (фиолетовый); crossFade (оранжевый);

if (repeat) {// Зацикливаемся ли мы конечное число раз?

j + = 1; if (j> = repeat) {// Мы уже на месте? выход (j); // Если да, остановимся. }}}

/ * НИЖЕ ЭТОЙ СТРОКИ ЯВЛЯЕТСЯ МАТЕМАТИЧЕСКИМ - ВАМ НЕ СЛЕДУЕТ МЕНЯТЬ ЭТО ДЛЯ ОСНОВ

Программа работает так:

Представьте себе перекрестное затухание, которое перемещает красный светодиод от 0 до 10, зеленый от 0 до 5 и синий от 10 до 7 за десять шагов. Мы бы хотели подсчитать 10 шагов и увеличивать или уменьшать значения цвета с равномерным шагом. Представьте, что знак «+» означает увеличение значения на 1, а «-» означает его уменьшение. Наше 10-ступенчатое затухание будет выглядеть так:

1 2 3 4 5 6 7 8 9 10

R + + + + + + + + + + G + + + + + B - - -

Красный возрастает от 0 до 10 за десять шагов, зеленый - от

0-5 за 5 шагов, а синий падает с 10 до 7 за три шага.

В реальной программе процентные значения цвета преобразуются в

0-255 значений, а есть 1020 шагов (255 * 4).

Чтобы выяснить, насколько большим должен быть шаг между одним подъемом или

При уменьшении одного из значений светодиода мы вызываем calculateStep (), который вычисляет абсолютный разрыв между начальным и конечным значениями, а затем делит этот промежуток на 1020, чтобы определить размер шага между корректировками значения. * /

int calculateStep (int prevValue, int endValue) {

int step = endValue - prevValue; // Каков общий разрыв? if (step) {// Если не ноль, step = 1020 / step; // делим на 1020} return step; }

/ * Следующая функция - calculateVal. Когда значение цикла, i, достигает размера шага, подходящего для одного из цветов, он увеличивает или уменьшает значение этого цвета на 1. (R, G и B рассчитываются отдельно.) * /

int calculateVal (int step, int val, int i) {

if ((step) && i% step == 0) {// Если step отличен от нуля и пора изменить значение, if (step> 0) {// увеличиваем значение, если step положительный… val + = 1; } else if (шаг 255) {val = 255; } иначе, если (значение <0) {значение = 0; } return val; }

/ * crossFade () преобразует процентные цвета в

0–255, затем выполняется цикл 1020 раз, проверяя, нужно ли обновлять значение каждый раз, а затем записывать значения цвета на правильные контакты. * /

void crossFade (int color ) {// 改

// Преобразовать в 0-255 int R = (color [0] * 255) / 100; int G = (цвет [1] * 255) / 100; int B = (цвет [2] * 255) / 100; int Y = (цвет [3] * 255) / 100; // 改 int W = (color [4] * 255) / 100; // 改

int stepR = CalculStep (prevR, R);

int stepG = CalculStep (prevG, G); int stepB = CalculStep (prevB, B); int stepY = calculateStep (предыдущий, Y); // 改 int stepW = calculateStep (prevW, W); // 改

для (int я = 0; я <= 1020; я ++) {redVal = calculateVal (stepR, redVal, i); grnVal = calculateVal (stepG, grnVal, i); bluVal = calculateVal (stepB, bluVal, i); ylwVal = calculateVal (stepY, ylwVal, i); // 改 whiVal = calculateVal (stepW, whiVal, i); // 改

analogWrite (redPin, redVal); // Записываем текущие значения на выводы светодиода

analogWrite (grnPin, grnVal); analogWrite (bluPin, bluVal); analogWrite (ylwPin, ylwVal); // 改 analogWrite (whiPin, whiVal); // 改 analogWrite (grnPin2, grnVal); // 改 analogWrite (bluPin2, bluVal); // 改 analogWrite (ylwPin2, ylwVal); // 改 analogWrite (redPin2, redVal); // 改

задержка (ждать); // Пауза на миллисекунды ожидания перед возобновлением цикла

if (DEBUG) {// Если нам нужен последовательный вывод, напечатайте его в

if (i == 0 или i% loopCount == 0) {// начало, и каждый цикл loopCount умножается на Serial.print ("Loop / RGBYW: #"); Serial.print (i); Serial.print ("|"); Serial.print (redVal); Serial.print ("/"); Serial.print (grnVal); Serial.print ("/"); Serial.println (bluVal); Serial.print ("/"); Serial.println (ylwVal); // 改 Serial.print ("/"); // 改 Serial.println (whiVal); // 改 Serial.print ("/"); // 改} DEBUG + = 1; }} // Обновляем текущие значения для следующего цикла prevR = redVal; prevG = grnVal; prevB = bluVal; prevY = ylwVal; // 改 prevW = whiVal; // 改 задержка (удерживать); // Пауза на необязательные миллисекунды ожидания перед возобновлением цикла}

Шаг 3. Настройка

Настраивать
Настраивать
Настраивать
Настраивать
Настраивать
Настраивать
  1. Получите макет.
  2. Демонстрация подключения проводов для включения светодиодной лампы:

    1. Поместите светодиод на макетную плату. Расположите более длинный конец слева, а более короткий - справа.
    2. Поместите один конец перемычки в точку, которая находится в одном ряду с более длинным концом светодиода. Другой конец вставьте в секцию цифрового ШИМ. В коде указано, что желтые светодиоды должны быть подключены к 10 и 5, красные - к 6 и 11, синие - к 8 и 13, зеленые - к 7 и 12 и, наконец, белый светодиод - к 9.
    3. Поместите один конец резистора в один ряд с более коротким концом светодиода. Другой конец разместите где-нибудь рядом.
    4. Поместите конец другой перемычки в том же ряду с концом резистора, который не находится в одном ряду с более коротким концом светодиода. Поместите другой конец провода в ряд отрицательного заряда.
    5. Поместите конец еще одной перемычки в ряд с отрицательным зарядом, а другой конец - на GND.
  3. Повторите шаг 2 8 раз, чтобы загорелись 9 светодиодов.
  4. Поместите макет в коробку. Несколько напоминаний здесь:

    1. Я использовал блок питания. Сделайте небольшое отверстие для проводов с помощью канцелярского ножа, чтобы пропустить его через коробку и подсоединить к макетной плате.
    2. Убедитесь, что коробка открыта с одной стороны. Одна сторона обувной коробки уже открыта. Если коробка полностью закрыта, отрежьте одну сторону коробки, чтобы освободить место.
    3. Боковую сторону ничем не накройте бумагой. Это для того, чтобы светодиодные фонари светили сквозь бумагу.

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