На youtube.com можно найти достаточно много видеороликов, в которых демонстрируются красиво мигающие различные красочные светодиодные кубы, управляемые с помощью Arduino. Но доступ к технологии изготовления и программному коду этих устройств предлагается за деньги. Мы же в нашей статье рассмотрим создание простейшего подобного мигающего светодиодного куба 3х3х3 с простейшим алгоритмом мигания (проще для новичков), на основе которого вы потом можете запрограммировать свои образцы (паттерны) мигания (переключения) светодиодов этого куба. Причем все это будет для вас абсолютно бесплатно – наш сайт не требует никаких денег за чтение информации, размещенной на нем (если вы не собираетесь распространять ее потом где-нибудь – в этом случае это будет нарушение авторского права. Активные ссылки в интернете на статьи на нашем сайте разрешены).
Как показано на приведенном рисунке светодиодный куб 3*3*3 состоит из 27 светодиодов, упорядоченных по строкам и столбцам чтобы они образовывали форму куба.
Можно спроектировать много подобных кубов. Самым простым из них будет куб 3x3x3. Для проектирования куба 4*4*4 вам уже понадобится 64 светодиода. То есть с увеличением линейной размерности куба трудоемкость его изготовления возрастает многократно.
Светодиодный куб 3x3x3 является самым простым в изготовлении не только потому что в нем достаточно мало светодиодов, но еще и благодаря следующим условиям:
- при изготовлении такого куба нам не стоит беспокоиться об его энергопотреблении – он потребляет сравнительно мало энергии;
- не нужно никаких специальных переключающих устройств;
- логических выводов у этого куба сравнительно мало, поэтому контактов Arduino Uno хватит для управления им и у нас не будет необходимости в использовании регистров сдвига (или других подобных устройств) для увеличения количества логических контактов для управления кубом.
В большинстве случаев обычные светодиоды потребляют ток от 2 до 5 мА. Поэтому если мы используем светодиоды, потребляющие 2 мА, то управлять 9-ю такими светодиодами можно без проблем с одного контакта Arduino Uno, поскольку контакты Arduino Uno способны обеспечивать ток 20-30 мА.
В этом проекте были использованы белые светодиоды, однако вы можете использовать светодиоды любых цветов – с цветными светодиодами куб будет смотреться еще эффектнее.
Для управления этим кубом нам понадобится 12 контактов платы Arduino Uno.
Необходимые компоненты
Плата Arduino Uno, резистор 220 Ом (3 шт.), источник питания с напряжением 5 В.
Макетная плата, соединительные провода, 27 светодиодов.
Паяльник, припой и флюс (канифоль).
Батарейка SR2032, некоторые инструменты.
Пустая картонная коробка, карандаш, линейка и несколько перемычек (соединителей).
Конструирование светодиодного куба 3x3x3
Шаг 1.
Сначала необходимо с помощью батарейки SR2032 или мультиметра проверить светодиоды на исправность, потому что если потом выяснится что какой-то светодиод неисправен, то заменить его в уже собранном кубе будет не очень просто.
Шаг 2.
Затем необходимо с соединительных проводов удалить изоляцию как показано на рисунке. Для создания куба можно использовать любые соединительные провода, но стоит отметить, что провода для макетной платы для этой цели подойдут отлично. Затем полученные оголенные провода необходимо нарезать на отрезки длиной 7 см – всего необходимо 6 таких отрезков. Эти отрезки проводов будут использоваться для скрепления слоев светодиодов между собой.
Шаг 3.
На этом шаге необходимо взять пустую картонную коробку и наклеить на ее верх белую бумагу как показано на рисунке. Белая бумага нужна будет для точного позиционирования точек.
После этого возьмите карандаш и линейку и отметьте 9 точек на бумаге через каждые 2 см таким образом формируя структуру куба как показано на рисунке.
Мы здесь используем расстояние 2 см потому что длина отрицательных контактов светодиодов составляет 2.5 см. То есть в данном случае у нас будет 5 мм для припаивания одного светодиода к другому. Если мы выберем большее расстояние, то пайка может уже составить проблему, при меньшем расстоянии куб будет выглядеть несколько неуклюже. Поэтому 2 см будет в данном случае наиболее подходящим расстоянием.
После этого возьмите любой заостренный предмет, например ручку или карандаш и проделайте отверстие в каждой точке. Отверстия должны быть такого размера, чтобы в них достаточно устойчиво держался светодиод – они не должны быть слишком маленькими (светодиод не будет влезать в них или у нас не будет возможности покачивать его во время пайки) или слишком большими (светодиод будет проваливаться в них). Поэтому каждое сделанное отверстие проверяйте с помощью светодиода.
Шаг 4.
После этого поместите один светодиод в отверстие и согните его положительный контакт как показано на рисунке ниже.
После этого согните положительный контакт светодиода еще раз чтобы он сформировал форму буквы ‘L’. При близком рассмотрении на контакте светодиода можно рассмотреть небольшую выемку в том месте, где его следует сгибать в форму буквы ‘L’. После этого согните отрицательный контакт светодиода вправо как показано на следующем рисунке.
Шаг 5.
Затем повторите все эти шаги для остальных двух светодиодов и упорядочите эти 3 светодиода в форме ряда как показано на рисунке. Этот шаблон будет использован для всех остальных светодиодов куба. Можно даже сначала согнуть выводы у всех 27 светодиодов куба, а только потом упорядочить их и спаять их концы.
Но для начала повторим описанную процедуру для 9 светодиодов, которые упорядочим в форму матрицы как показано на рисунке.
Шаг 6.
После этого спаяйте все отрицательные выводы светодиодов как показано на рисунке. Три светодиода будут образовывать ряд.
После этого возьмите два оголенных проводника длиной по 7 см (их мы заготовили ранее), поместите их как показано на рисунке и припаяйте 6 концов этих светодиодов чтобы сформировать полную матрицу.
Теперь все отрицательные выводы 9 светодиодов соединены друг с другом, то есть мы будем иметь 9 положительных выводов (CP1-CP9) и один отрицательный вывод (CN1). После того как мы вынем эту структуру из отверстий в картоне и обрежем выступающие концы мы получим один слой нашего светодиодного куба как показано на следующем рисунке.
Шаг 7.
Аналогичную последовательность действий мы должны предпринять и для изготовления других двух слоев куба, внешний вид этих сконструированных двух слоев показан на следующем рисунке.
Шаг 8.
Теперь, когда у нас есть все 3 слоя куба, нам необходимо состыковать их вместе чтобы получить куб.
Сначала возьмем 1 и 2 слои и поместим один из них поверх другого. Спаяем все общие положительные выводы этих слоев как показано на рисунке ниже. К примеру, вывод CP1 первого слоя необходимо будет припаять к выводу CP1 второго слоя, вывод CP2 первого слоя - припаять к выводу CP2 второго слоя и т.д. Для удобства пайки желательно чтобы положительные выводы одного слоя "заходили" на положительные выводы другого слоя на расстояние примерно 5 мм.
После этого пристыкуем к получившейся структуре оставшийся 3-й слой и у нас получится полный куб. Припаивать 3-й слой будет немного сложнее чем 2-й к первому, поэтому старайтесь делать это осторожно чтобы не сломать структуру.
Во время пайки всей этой структуры имейте ввиду, что не следует паяльником нагревать (прикасаться) вывод светодиода более 5 секунд, иначе можете перегреть светодиод и он выйдет из строя – а заменить его в уже сделанной (хотя бы частично) структуре куба будет непросто.
Работа схемы
Когда куб будет закончен у нас в распоряжении будет его 12 контактов, из которых 9 будут общими положительными выводами (контактами), а остальные 3 – общими отрицательными выводами. Каждый общий положительный вывод соединяет положительные выводы 3-х светодиодов, а каждый общий отрицательный вывод соединяет отрицательные выводы 9-ти светодиодов. Таким образом, мы будем иметь 9 столбцов, представляющих 9 положительных выводов (CP1-CP9) и 3 слоя представляющих 3 отрицательных вывода (CN1-CN3). Эти выводы необходимо будет соединить со следующими контактами платы Arduino Uno:
PIN2 ------------------CP1 (Common Positive)
PIN3 ------------------CP2 (Common Positive)
PIN4 ------------------CP3 (Common Positive)
PIN5 ------------------CP4 (Common Positive)
PIN6 ------------------CP5 (Common Positive)
PIN7 ------------------CP6 (Common Positive)
PIN8 ------------------CP7 (Common Positive)
PIN9 ------------------CP8 (Common Positive)
PIN10 ----------------CP9 (Common Positive)
PIN A0 ------------------CN1 (Common Negative)
PIN A1 ------------------CN2 (Common Negative)
PIN A2 ------------------CN3 (Common Negative)
Полная схема устройства представлена на следующем рисунке.
Исходный код программы
В полученном кубе если мы хотим включить один светодиод, к примеру, светодиод во втором столбце первого слоя, нам будет необходимо запитать контакт CP2 и подать землю на контакт CN1. В соответствии со сделанными соединениями в схеме нам необходимо подать напряжение высокого уровня на контакт PIN3 платы Arduino (который подсоединен к CP2) и напряжение низкого уровня на контакт PIN A0 (который подсоединен к CN1).
Аналогичным образом мы можем зажечь любой другой светодиод. Далее в программе мы в бесконечном цикле будем зажигать поочередно все светодиоды в нашем кубе.
void setup()
{
for (int i=0;i<11;i++)
{
pinMode(i,OUTPUT); // контакты S0-10 устанавливаются в режим вывода данных
}
pinMode(A0,OUTPUT); //PIN A0 устанавливается на вывод данных
pinMode(A1,OUTPUT); // PIN A1 устанавливается на вывод данных
pinMode(A2,OUTPUT); // PIN A2 устанавливается на вывод данных
digitalWrite(A0,HIGH); //подаем логическую "1" на A0 pin
digitalWrite(A1,HIGH); // подаем логическую "1" на A1 pin
digitalWrite(A2,HIGH); // подаем логическую "1" на A2 pin
/* add setup code here, setup code runs once when the processor starts */
}
void loop()
{
digitalWrite(A0,LOW); // на слой 1 куба подана земля
for (int i=2;i<11;i++)
{
digitalWrite(i,HIGH); // поочередно включаем каждый светодиод в слое 1
delay(200);
delay(200);
delay(200);
digitalWrite(i,LOW);
}
digitalWrite(A0,HIGH); // на слой 1 куба подана логическая "1"
digitalWrite(A1,LOW); // на слой 2 куба подана земля
for (int i=2;i<11;i++)
{
digitalWrite(i,HIGH); // поочередно включаем каждый светодиод в слое 2
delay(200);
delay(200);
delay(200);
digitalWrite(i,LOW);
}
digitalWrite(A1,HIGH); // на слой 2 куба подана логическая "1"
digitalWrite(A2,LOW); // на слой 3 куба подана земля
for (int i=2;i<11;i++)
{
digitalWrite(i,HIGH); // поочередно включаем каждый светодиод в слое 3
delay(200);
delay(200);
delay(200);
digitalWrite(i,LOW);
}
digitalWrite(A2,HIGH); // на слой 3 куба подана логическая "1"
}
вааау майнкрафт