Для начала немного теории. Наш куб будет состоять из 512
светодиодов, по восемь светодиодов на каждую грань, а вся конструкция
построена на деревянной основе. Что касается принципа работы куба, то
она основана на эффекте инерционности зрительного восприятия. Это
свойство человеческих глаз, которое создаёт иллюзию движения при
быстрой смене отдельных статичных картинок.

Принцип работы
При создании светодиодного куба нам пришлось использовать
инерционность зрительного восприятия, поскольку одновременное включение
всех светодиодов потребовало бы достаточно большого тока. К примеру,
потребляемый ток для ярких светодиодов составляет порядка 20
миллиампер, таким образом, на одновременное включение 512 штук нужно
10,24 А. Довольно сложно обеспечить такой ток, и тогда мы принили
решение включать по одному слою в каждый отдельно взятый момент
времени. Таким образом, потребление тока составит 1.28 A (по 20 мA на
64 светодиода). Такие характеристики обеспечить намного легче, и
хорошего трансформатора здесь будет вполне достаточно. Представим, что
нам необходимо осветить куб целиком. Для этого, мы будем включать
различные слои один за другим со скоростью большей, чем скорость
реакции человеческого глаза.

Для независимого контроля каждого светодиода было принято решение
поделить куб на вертикальные слои и горизонтальные колонки. Ко всем
светодиодам на каждом горизонтальном слое на катод подведен общий
«минус», а для вертикальных колонок общим является «плюс». Таким
образом, мы можем управлять 8 катодами по слоям и 64 анодами по
колонкам. Комбинация сигнала на колонку и слой даёт нам возможность
управлять каждым отдельно взятым светодиодом.
Сдвижные регистры реализованы при помощи однобитных ячеек памяти,
соединённых между собой. С каждым тактовым импульсом они сдвигают
приходящий бит на одну ячейку. Для данного проекта используются
регистры типа SIPO. Данные побитово подаются на входа и одновременно
снимаются с восьми выходов.
Что касается блока питания для проекта, то был использован БП с
выходным стабилизированным напряжением 5 В и номинальным током 2 А. Реализация
Приступим
непосредственно к построению куба. Для этого нам понадобится следующее
оборудование: паяльник, припой, пистолет для горячего склеивания,
лобзик. Также не лишним будет заранее запастись материалами: 512
светодиодов вашего любимого цвета, сорокапиновый шлейф (вполне подойдёт
шлейф от жёсткого диска IDE), 34 — х пиновый шлейф (от флоппи —
дисковода), фанера толщиной 8 мм (20 х20 см), электрические провода,
подходящие для паяния (тонкие, гибкие, с хорошим сопротивлением).

Для начала, на листе фанеры нарисуем квадратную сетку (7 х7) с
размером стороны 2,5 см. На пересечениях просверливаем 64 отверстия
размером, соответствующим размеру светодиода (примерно 5 мм). Эта доска
послужит основой для всех спаянных светодиодов. Благодаря твердой
основе светодиоды будут размещены и совмещены идеально. Вставляем
светодиоды в отверстия. Как уже говорилось, отрицательные контакты на
каждом уровне должны быть соединены, поэтому необходимо согнуть
отрицательную ножку светодиода таким образом, чтобы она совпала с
соединительной сеткой.

Как только будут готовы 8 слоёв необходимо соединить их вместе. Для
этого приготовим 64 провода длиной порядка 20 см. Помещаем верхний слой
на фанеру таким образом, чтобы светодиоды совпали с отверстиями.
Присоединяем приготовленные провода к отрицательным контактам
светодиодов. После того, как первый уровень готов, приступаем к
соединению контактов следующего уровня. В качестве прослоек можно
использовать 4 деревянные дощечки толщиной 1,5 см, которые поддержат
неприкреплённый слой пока ведётся пайка. Очень важно на данном этапе
убедиться в работоспособности каждого светодиода, так как в дальнейшем
заменить его будет сложно.

Как только слои будут соединены, необходимо привести все
отрицательные контакты к нижней части куба. Для этого в фанерной доске
просверливают 8 небольших отверстий для отрицательных проводов. Куб уже
почти готов, и остаётся только подсоединить управляющие провода к
клеммам светодиодов. Однако прежде необходимо определить распиновку
соединений между клеммами светодиодов и управляющим контуром.


Для создания управляющего контура необходимо: 8 восьмибитных
сдвижных регистров для включения — выключения каждой колонки куба, один
сдвижной регистр, подсоединённый к 8 NPN транзисторов для включения —
отключения слоёв, два разъёма под 40 и 34 пиновые шлейфы, один
двухпроводной разъём для соединения параллельного порта.
Напрашивается резонный вопрос, зачем подключать 8 NPN транзисторов к
сдвижным регистрам резисторов? Как известно, каждый слой имеет общий
«минус». Но проблема заключается в том, что на выходе сдвижных
регистров слоя сигнал имеет высокий уровень (логическая единица).
Поэтому необходим был компонент, который по сигналу логической единицы
включал бы токовый контур. Этим компонентом оказался транзистор. Он
работает как выключатель: если на базу подаётся логическая единица, то
через коллектор и эмиттер начинает протекать ток.

Прежде всего, необходимо разместить все компоненты, для оценки
занимаемого ими места. Компоненты следует располагать в следующей
последовательности: Разъёмы под сдвижные регистры, транзисторы,
разъёмы, сопротивления от 100 Ом до 1,5 кОм. Особое внимание требуется
уделять соединениям основных компонентов.

Теперь подсоединим провода к нашему кубу. Необходимо взять 40 и 34 —
пиновые шлейфы и обрезать разъёмы с одной стороны. С этой стороны
необходимо распустить шлейфы примерно на 10 сантиметров. Эти провода
будут присоединены к различным плюсовым и минусовым клеммам куба.
Каждая клемма на выходе сдвижного регистра будет подсоединена к целому
ряду соединительных разъёмов. Таким образом, первый регистр будет
контролировать первый ряд, второй регистр, соответственно, второй и т.д.

Из доступных нам 74 контактов (40+34), мы будем использовать только
72 (64 колонки и 8 уровней), два контакта останутся свободными. Если у
вас нет кабеля для подключения к параллельному порту, можно сделать его
самому. Вот его распиновка (необходимо использовать контакты от D0 до
D5):
- D0 —> входа сдвижных регистров колонок
- D1 —> сброс сдвижных регистров колонок
- D2 —> счетчик сдвижных регистров колонок
- D3 —> входа сдвижных регистров слоёв
- D4 —> сброс сдвижных регистров слоёв
- D5 —> счетчик сдвижных регистров слоёв
Внимание: при неправильном расключении прилагаемое ПО работать не будет.

Теперь примемся за основание куба, в которое будут спрятаны
управляющие элементы и кабели. Для этого нам понадобится одна
деревянная табличка размером 20x20 см, две таблички 20x6,8 см, две
таблички 21.6x7,6 см и примерно 25 шурупов или гвоздей. Собираем наши
таблички в форме короба и готовимся их соединить. Перед тем, как
вкручивать шурупы необходимо промазать рёбра клеем, для того, чтобы мы
могли в дальнейшем их выкрутить, не разбирая коробки. Верхом короба
будет служить наш куб. В принципе вместо шурупов можно использовать
маленькие гвозди, однако достать их в дальнейшем будет намного сложнее.
Как только высохнет клей, шурупы (или гвозди) можно удалить, а
отверстия замазать древесной шпаклёвкой.

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


Программная часть
Управляющая
программа разработана в среде Visual Basic. Кроме этого необходимо
поместить библиотеку inpout32.dll в каталог c:\windows\system32. Что
касается работы с параллельным портом, то неплохое пояснение по этому
поводу находится
здесь.
В каждый момент времени состояние куба записывается в матрицу
StatoCubo. Используя таймер новые события генерируются каждую
миллисекунду и состояние, записанное в матрицу, отображается на кубе.
Значения, записываемые в матрицу, каждый выбирает по своему усмотрению.
Конечно, можно использовать уже написанный код (ledcube.zip).
- Gestione led cube 0.5.3 — ручное управление кубом
- level meter con monoton — MP3 проигрыватель, контролирующий светодиодный куб (визуализация композиции отображается на кубе)
- inpout32.dll — библиотека для управления параллельным портом
Матрица StatoCubo — состоит из 8 столбцов и 64 элементов. Каждый
столбец отображает состояние отдельного слоя, а каждое значение в нём
показывает состояние отдельных светодиодов: 1 — включен, 0 — выключен.
- The ScriviCubo — эта функция вызывается по таймеру, для передачи данных с матрицы кубу.
- The
ClokkaLivello — эта функция передаёт сигнал счёта на сдвижные регистры
таким образом, чтобы бит включения перемещался с одного уровня на
другой.
- The ClearAll — эта функция включает сброс обоих сдвижных регистров. Куб при этом будет полностью потушен.
- The Aspetta — функция используется для задержки обновления состояния какого либо слоя.
Здесь представлен код программы:
Public Declare Function Inp Lib «inpout32.dll» Alias «Inp32» (ByVal PortAddress As Integer) As Integer
Public Declare Sub Out Lib «inpout32.dll» Alias «Out32» (ByVal PortAddress As Integer, ByVal Value As Integer)
'--------------------------COSTANT FOR LPT1 ADDRESS--------------------------------
Public Const IndirizzoData As String = «&H378» 'РЕГИСТРЫ ДАННЫХ: 8 bit
'-------------------------------------------------------GLOBAL VARIABLES----------------------------------------------------
Public StatoCubo(1 To 8, 1 To 64) As Integer 'переменная содержит данные о состоянии куба
---------------------------------------------------------FUNCTIONS--------------------------------------------------------
Public Function ScriviCubo(NumeroCicli As Integer) 'функция,
используемая для передачи состояния из матрицы StatoCubo
непосредственно кубу
Dim ByteLpt As Byte
Dim ContaLivelli As Integer
Dim ContaLed As Integer
Dim ContaCicli As Integer
For ContaCicli = 1 To NumeroCicli
For ContaLivelli = 1 To 8
clear pins (xx 01x _1_)
For ContaLed = 64 To 1 Step —1 'For ContaLed = 1 To 64
'СДВИЖНЫЕ РЕГИСТРЫ СЛОИ:
'MSB (D5) = 0 —-> отключение счётчика
'CENTRAL (D4) = 1 (valore=16)--> отключение счётчика
'LSB (D3) = не важно
'СДВИЖНЫЕ РЕГИСТРЫ СВЕТОДИОДЫ:
'MSB (D2) = 0 —-> отключение счётчика
'CENTRAL (D1) = 1 (valore=2)--> отключение счётчика
'LSB (D0) = StatoCubo(ContaLivelli, ContaLed)
ByteLpt = (0 + 16 + 0) + (0 + 2 + StatoCubo(ContaLivelli, ContaLed))
Call ClokkaLed(ByteLpt) 'передача значения функции, которая включает счётчик для сдвижных регистров колонок
Next ContaLed
'СДВИЖНЫЕ РЕГИСТРЫ СЛОИ:
'MSB (D5) = 0 —-> отключение счётчика
'CENTRAL (D4) = 1 (valore=16)--> отключение счётчика
'LSB (D3) = (if layer = 1--> 1(value=8); if layer <> 1--> 0) —-> устанавливает 1 только один раз
'СДВИЖНЫЕ РЕГИСТРЫ СВЕТОДИОДЫ:
'MSB (D2) = 0 —-> отключение счётчика
'CENTRAL (D1) = 1 (valore=2)--> сброс отключен
'LSB (D0) = не важно
If ContaLivelli = 1 Then 'если устанавливается 1 на первый слой
сдвижного регистра, то в дальнейшем будет передаваться только данные
счёта
ByteLpt = (0 + 16 + 8) + (0 + 2 + 0)
Else
ByteLpt = (0 + 16 + 0) + (0 + 2 + 0)
End If
Call ClokkaLivello(ByteLpt) 'передача данных функции передающей сигнал счётчика к сдвижным регистрам слоёв
Call Aspetta(60000) 'вызывается для задержки (куб останавливается и мигает от 60.000 до 70.000 циклов)
Next ContaLivelli 'перезапуск цикла для установки значений на следующий слой
Call ClearAll 'вызывается для сброса всех сдвижных регистров
Next ContaCicli
End Function
Public Function ClokkaLed(Valore As Byte)
Out Val(IndirizzoData), Val(Valore) 'счётчик ОТКЛЮЧЕН
Out Val(IndirizzoData), Val(Valore + 4) 'счётчик ВКЛЮЧЕН
End Function
Public Function ClokkaLivello(Valore As Byte)
Out Val(IndirizzoData), Val(Valore) ' счётчик ОТКЛЮЧЕН
Out Val(IndirizzoData), Val(Valore + 32) ' счётчик ВКЛЮЧЕН
End Function
Public Function ClearAll()
Dim ByteLpt As Byte
'сброс на всех сдвижных регистрах (значение=0) (xx x0x x0x)
ByteLpt = 0 '00 000 000
Out Val(IndirizzoData), Val(ByteLpt)
End Function
Public Function Aspetta(Ncicli As Long) 'используется для задержки цикла обновления на слое
Dim Contatore As Long
Dim Contato As Long
For Contatore = 0 To Ncicli
Contato = Contatore
Next Contatore
End Function Видео можно посмотреть Сдесь
|