0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Светодиодный куб 4x4x4

Светодиодный куб 4x4x4

Представляю проект 3D светодиодного куба (LED Cube) с матрицей 4х4х4.

64 светодиода образуют куб со сторонами 4х4х4, который управляется микроконтроллером Atmel Atmega16. Каждый светодиод имеет свой виртуальный адрес и может управляться с микроконтроллера индивидуально, позволяя таким образом добиваться потрясающих эффектов.

Видео работы куба смотрите ниже:

Шаг 1. Что нам понадобится?

Первое, это терпение спаять все 64 светодиода вместе 😉

Знания, которые вам понадобятся:
— основы электроники
— умение хорошо паять
— знание программирования микроконтроллеров (если не уверены, то смотрите видеокурс по микроконтроллерам)

Список радиодеталей:
Макетная плата (ну или вытравленная печатная)
Микроконтроллер Atmel AVR Atmega16
Программатор Atmega16
64 светодиода
2 светодиода состояния. Я использовал красный и зеленый. (опционально)
Микросхема Max232 rs-232 или подобная
16х резисторов для светодиодов. (100-400 Ом)
2x резистора по 470 Ом для светодиодов состояния
1x резистор 10кОм
4x резистор 2.2кОм
4x NPN транзистора BC338 (отеч. аналоги КТ645, КТ646, КТ660Б) или другой выдерживающий ток до 250 мА
1x 10мкФ конденсатор
1x 1000мкФ конденсатор
6x 0.1мкФ керамический конденсатор
2x 22пФ керамический конденсатор
1x кварц 14.7456 MHz
2x кнопки
Выключатель питания
Разъем питания 12В
Разъем питания 5В

Шаг 2. Мультиплексирование

Как управлять 64 светодиодами, если нет столько выводов управления? Мультиплексирование!

Если к аноду каждого светодиода присоединить вывод управления, то это будет непрактично, да и выглядеть будет не очень красиво. Один из способов побороть эту проблему — это разделить куб на 4 слоя, в каждом из которых будет 4х4=16 светодиодов.

У светодиодов в вертикальных колонках общий анод (+)
У светодиодов в горизонтальных плоскостях общий катод (-)

Теперь, если нужно засветить светодиод в верхнем левом углу сзади (0,0,3), необходимо подать GND(-) к верхнему слою и Vcc(+) к колонке в левом углу куба.

Если нужно засветить один светодиод или полностью весь слой, то это работает отлично.

Однако, если нужно засветить нижний правый угол спереди (3,3,0), возникают проблемы. Когда я подал GND на нижний слой и Vcc к передней левой колонке, я также засветил верхний правый светодиод спереди (3,3,3) и нижний левый светодиод сзади (0,0,0). Эта проблему казалось бы не побороть, без использования 64 индивидуальных линий управления светодиодами.

Но можно одновременно засвечивать только один слой и делать это очень быстро, чтобы глаз не успел разглядеть время переключения между слоями. Этот эффект называется Persistence Of Vision

Каждый слой — это изображение из 4х4=16 точек (светодиодов) и если мы будем быстро переключать слои, то мы получим 4х4х4 3D куб!

Шаг 3. Конструирование шаблона для куба

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

Для начала, изготовим шаблон 4х4 из дерева.

Т.к. я не хотел сильно замарачиваться с решеткой куба, то решил по возможности использовать выводы светодиодов как основу решетки куба. Дистанция линий на сетке шаблона была выбрана исходя из длины ножек светодиодов. У меня получилось 25мм. Т.о. при такой сетке, нет необходимости что-либо наращивать или обрезать.

Итак, последовательность действий:
— найти и вырезать кусок фанеры
— нарисовать на ней решетку 4х4
— сделать углубления на всех пересечениях шилом или другим инструментом
— найти сверло, чтобы светодиод уверенно стоял в отверстии, и в то же время в последствии вы его могли легко вытащить
— просверлить 16 отверстий в шаблоне

Читать еще:  Делаем складной стол для пикника

Шаблон для куба готов!

Шаг 4. Конструирование светодиодных слоев

Итак, нам необходимо спаять 4 слоя светодиодов по 16 в каждом, а затем все 4 слоя спаять в один обьемный куб.

Процесс изготовления одного слоя (4х4) из светодиодов следующий:
— вставьте светодиоды в отверстия по 2-м дальним сторонам от вас и спаяйте их между собой
— вставьте светодиоды для следующего ряда, и также их спаяйте
— заполните так всю матрицу из 16 шт
— спереди, где нет соединения, добавьте связующие пересечения
— повторить процедуру 3 раза для оставшихся слоев.

Шаг 5. Конструирование куба

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

Положите первый слой на шаблон вниз головой. Это будет верхний слой куба.

Поместите второй слой на первый и очень точно совместите их. Также соблюдите расстояние между слоями 25мм, чтобы у вас получился идеальный куб. Это расстояние между катодами.
После того, как все выставили (воспользуйтесь приспособлением «третья рука»), припаяйте угловой анод первого слоя к угловому аноду второго слоя. И так все 4 угла.

Еще раз проверьте, чтобы все слои были выравнены относительно друг друга во всех измерениях. Если это не так, то подогните или перепаяйте. После этого, спаяйте 12 оставшихся светодиодов.

Повторите процедуру для оставшихся 2-х слоев.

Шаг 6. Подбор токоограничивающих резисторов

Ток микроконтроллера AVR в сумме не может превышать 200 мА. Т.о. 200/16 дает нам 12 мА на один светодиод.

Я использовал резисторы номиналом 220 Ом. Получилось как раз 12 мА на один светодиод.

Шаг 7. Схемотехника

Схема контроллера для управления кубом, показана на рисунке выше.

RS-232 опционален и может быть опущен (микросхема IC2).

Шаг 8. Присоединение МК к светодиодному кубу

Обьяснять я думаю не надо, все показано на картинках.

Шаг 9. Программа, компиляция и прошивка МК

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

Если вы захотите использовать ATMega32 вместо ATMega16, то необходимо будет поменять настройки в makefile и перекомпилировать.

Для прошивки МК я использовал avrdude и программатор USBTinyISP.

Я работаю под Ubuntu. Подробнее о прошивки микроконтроллеров под эту ОС вы можете почитать в этих статьях: программирование МК AVR в ОС Ubuntu и программирование МК AVR в ОС Ubuntu. Часть 2 (GUI)

Итак, сперва нужно соединение программатора с микроконтроллером. Подсоедините программатор к плате куба и ПК.
Команда: avrdude -c usbtiny -p m16

Далее, заливаем прошивку командой: avrdude -c usbtiny -p m16 -U flash:w:main.hex

Наш куб должен будет перезапуститься и стартовать. МК запуститься на очень низкой частоте 1 МГц используя встроенный тактовый генератор. Некоторые LED работать не будут, потому что порты GPIO заняты под JTAG.

Чтобы подключить внешний тактовый генератор и выключить JTAG, нужно перезаписать фьюзы:
введите: avrdude -c usbtiny -p m16 -U lfuse:w:0xef:m
затем: avrdude -c usbtiny -p m16 -U hfuse:w:0xc9:m

Все, после этого, наш светодиодный куб должен запуститься в нормальном режиме!

Ниже вы можете скачать прошивку, исходники и печатную плату в формате LAY

Шаг 1: Материалы для куба

64 x светодиода RGB SMD

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

Ардуино

Я использовал клон Ардуино Нано. Большинство Ардуино с 16 или более входамивыходами должны подойти. Если вам непривычно модифицировать PORT-команды, то лучше используйте настоящий Ардуино, основанный на ATMega (не используйте ESP8266, Arduino M0, Arduino Due, и т.д.)

Кастомная печатная плата

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

Как соединять светодиоды?

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

Поэтому мы пойдём другим путём и объединим светодиоды в строки и столбцы, таким образом мы получим двухмерную матрицу. Лед куб же занимает все три оси. Доработав идею объединения светодиодного куба 8x8x8 у которого светодиоды объединены в группы, можно прийти к такому выводу:

Объединить слои светодиодов (этажи) в схемы с общим анодом (катодом), а столбцы в схемы с общим катодом (или анодом, если на этажах объединяли катоды).

Чтобы управлять такой конструкцией нужно 8 x 8 = 16 управляющих пинов на колонки, и по одной на каждый этаж, всего этажей тоже 8. Итого вам нужно 24 управляющих канала.

Читать еще:  Делаем самостоятельно недорогой 3D-принтер

На колодку input подаются сигнал с трех ножек микроконтроллера.

Чтобы зажечь необходимый светодиод, например, расположенный на первом этаже, в первой строке третий по счету, вам нужно подать минус на столбец номер 3, а плюс на этаж номер 1. Это справедливо если вы собрали этажи с общим анодом, а столбцы – катодом. Если наоборот, соответственно и управляющие напряжения должны быть инвертированы.

Часть 1

Основные шаги для создания одного слоя:

  1. Подготовить 8 светодиодов с обрезанными катодными ножками до 10 мм;
  2. Заполнить все отверстия базы светодиодами;
  3. Согнуть и спаять катодные ножки;
  4. Согнуть и спаять анодные ножки;
  5. Припаять провода к катодным ножкам и закрепить их.

Данную процедуру необходимо повторить 8 раз.

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

Часть 2

  1. Подготовить 15 перемычек;
  2. Припаять перемычки на печатную плату;
  3. Припаять электронные компоненты к плате;
  4. Припаять 5-контактный угловой коннектор для первого слоя;
  5. Обрезать пятый анодный контакт;
  6. Вставить и припаять все анодные ножки к отверстиям G, F, E, D, C, B, A и DP;
  7. Вставить и припаять катодные провода в отверстия D0, D1, D2, D3, D4, D5, D6 и D7;
  8. Обрезать провода и ножки с обратной стороны платы.

Вторая часть сборки на видео:

Собираем все в единое целое

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

Минус

Если посмотреть на крышку изнутри, то перед нами будет квадрат из 16 точек со сторонами 4х4, расположенными в местах выходов катодов. Для большей понятности разметим эту сетку как шахматную доску, где левый нижний угол А1, следующий в ряду Б1, а по вертикали А2 и в подобной последовательности аж до правого верхнего угла, который по логике получается Г4.

После разметки начинаем соединять контакты контроллера выходами минусов по такой схеме – А1 к контакту ТХ1, Б1 к D5, В1 – D9, Г1 – D13. Следующий ряд – А2 на RX0, Б2 – D4, В2 – D8, Г2 – D12. Третий ряд – А3 к А5, Б3 – D3, В3 – D7, Г3 – D11. Последний – А4 сетки соединяем с А4 контроллера, Б4 – D2, В4 с D6 и Г4 с D10.

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

Теперь, припаиваем к этим точкам 4 отрезка провода, и через резисторы присоединяем их к следующим контактам микроконтроллера – верхний слой к А0, второй сверху к А1, третий к А2 и нижний к А3.

Последним шагом станет установка питания: плюс батареи соединяем с тумблером, а затем с контактом UIN; минус припаиваем к контакту GND. Прячем начинку в корпус, включаем и наслаждаемся игрой света…

Однако, если у вас нет времени на самостоятельное изготовление, вы всегда можете приобрести куб в магазине Лайтхаус!

Читать еще:  Пиратский корабль на детской площадке, делаем сами

Новый метод Draw, использующий постоянство видения

Прежде всего, новая процедура розыгрыша. Я создал 4 х 16 двумерный массив битов (истина или ложь) для буквального представления состояния светодиодного куба. Процедура отрисовки будет реализовывать постоянство видения, просто перебирая все это и сбрасывая каждый слой в куб на короткое время. Он будет продолжать рисовать себя в текущем состоянии, пока не истечет время обновления, после чего мы передадим управление обратно в главный цикл (). Я сохранил этот раздел кода в этом файле LED_cube_POV, так что если вы хотите просто заняться программированием своих собственных игр и так далее, то можете смело использовать его в качестве основы.

Шаг 6: Задыхайтесь в наших фото и читайте наши сноски

Примечания и советы:

  • Размер, указанный здесь, может быть расширен до 5x5x5 или 8x8x8 или 10x10x10 в зависимости от количества светодиодов и вашего терпения.
  • 74HC595 здесь избыточен, поскольку есть только 4 канала для выбора. Однако для большего количества светодиодов это становится необходимым.
  • Для светодиодов с общим катодом используйте 1 TLC5916 и 6 74HC595.

Программа

Библиотека LedControl не встроена в Arduino IDE, поэтому её нужно найти и установить на свой компьютер. Для этого в поисковую строку записывают «Библиотека LedControl, ZIP архив скачать» и устанавливают её после скачивания из Arduino IDE (рис. 8). Её название должно появиться внизу выпадающего списка.

Далее рассмотрим основные моменты использования библиотеки и функции применительно к скетчу для светодиодного куба. Строка #include «LedControl.h» в начале скетча указывает на необходимость использования данной библиотеки.

Строка LedControl LC = LedControl(12, 11, 10, 2); создаёт в программе объект класса для двух индикаторов — куба и плоской матрицы. Аргументы в скобках задают номера выходов платы и соответственно порядок подключения входов модуля. Первый — DIN, второй — CLKC, третий — CS. Четвёртый аргумент указывает число используемых индикаторов (в нашем примере их два).

Затем следует команда LC.shutdown (0, false);, которая выключает индикатор под номером 0 (нумерация начинается с 0 и заканчивается цифрой 7) из режима экономии энергии. Команда LC.setlntensity(0, 12); устанавливает яркость свечения в 12 единиц (яркость условно разбита на 16 уровней с нумерацией от 0 до 15 по возрастанию).

Команда LC. clearDis-play(O); очищает экран, гасит все пиксели матрицы под номером 0. Так происходят начальные установки для куба. Аналогичные процедуры реализуются для второго индикатора под номером 1.

Далее в основной части цикла, например, внутри фрагмента //построчное включение всех светодиодов//, происходит постоянный перебор элементов массива значений и включение соответствующих точек матрицы. Два счётчика j и і обеспечивают смену переключения по схеме «цикл в цикле».

Команда LC.setLed (О, i, j, 1); включает светодиод столбца под номером j и строки под номером і, индикатора под номером 0 (нумерация строк и столбцов также идёт от 0 до 7).

Аналогично команда LC.set Led(1, i, j, 1); включает светодиоды индикатора под номером 1. Такое состояние сохраняется в течение 100 мс (команда delay(100);), затем происходит переход к следующему светодиоду.

Рис. 8. Arduino IDE.

Внутри фрагмента //мигание светодиодами всего куба в пятикратно повторяемом цикле выполняется команда LC.shutdown-(0, true); LC.shutdown (1, true); delay(300); LC.shutdown(0, fa!se);LC.shutdown(1, false); delay(300);. Она интерпретируется так: включить экономичный режим индикаторов, сделать паузу, выключить экономичный режим, сделать паузу. В таком режиме все светодиоды куба будут мигать.

Вся программа переключений построена на использовании трёх основных функций: LC.setLed(); LC.shut-down(); LC.clearDisplay(); Это — включение/выключение заданного светодиода, включение/выключение индикатора с сохранением данных и очистка экрана с выключением всех светодиодов с потерей данных по их предыдущему состоянию.

После макетирования и программирования приступают к сборке устройства. В пластмассовом контейнере подходящих размеров (см. рис. 2) размещают платы Arduino и модуля МАХ7219.

В крышке, вдоль стоек, прорезают щели и пропускают в них соединительные провода к контактным разъёмам рядов и столбцов куба. Сверху щели закрывают пластмассовыми сьёмными пластинами с крепёжными прорезями под стойки.

Сам куб приклеивают к поверхности крышки через пластмассовые брусочки-переходники размерами 5x5x10 мм, приклеенные к основаниям четырёх крайних стоек. В боковой поверхности контейнера сверлят отверстие для кабеля источника питания.

Д. Мамичев, п. Шаталово Смоленской обл. Р-11-17.

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector