Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega

Компоненты и материалы

Компонент Количество Примечание
Arduino Mega 2560 1
Синий светодиод 125
Транзистор NTE85 NPN 5
Провод медь оловянная 22 AWG 1 Для соединения слоёв и вывода катодов на основную плату
Резистор 180 Ом, 1/4 Вт 25
Монтажная плата 9х15 см 1
Резистор 330 Ом, 1/4 Вт 5
Блок питания 9 В (опционально) 1 USB-кабель отлично питает куб, но если нужен стационарный вариант — вот он

Необходимые инструменты

Приложения и онлайн-сервисы

О проекте

Введение

Большинство обожают LED-кубы, но крупные (8x8x8) требуют огромных усилий и по сборке, и по программированию. Малые (3x3x3 или 4x4x4) собрать просто — мало светодиодов, не нужны сдвиговые регистры и драйверы высокого уровня. Но они не дают того эффекта, что большой куб.

Моя цель — создать лёгкий в сборке куб и написать достаточно крутого софта, чтобы насладиться ощущением большого куба без мучительной работы. Это 5x5x5 куб, питаемый прямо от Arduino Mega без сдвиговых регистров и лишнего железа, кроме 5 транзисторов (они замыкают катоды целого слоя — 25 светодиодов — на землю). Зачем избегать сдвиговых регистров? Потому что их ручная пайка — ад (пробовал). Для их использования реально нужно проектировать и изготавливать печатную плату.

У меня есть большой опыт написания кода для крупных кубов, поэтому я адаптировал множество готовых анимаций под этот 5x5x5.

Важно: Я не первый, кто предложил 5x5x5 на Mega. MEGA DAS опубликовал похожий проект в 2017. Железо почти идентично. Я не видел его раньше, поэтому распиновка и номиналы резисторов отличаются, но суть та же. Публикую это в основном из-за своего софта — надеюсь, он убедит 몇몇 собрать куб, кто бы иначе не решился!

Видео выше демонстрирует синусоидальную волну: амплитуда по оси Z, время — горизонтальное расстояние от центра. Классика для большого куба, но и на 5x5x5 смотрится отлично!

Также прилагаю два видео с 14 анимациями. Кубы вживую выглядят гораздо круче, чем на видео!

Аппаратная часть

У Mega много цифровых пинов. 5 пинов управляют транзисторами, подтягивающими катоды каждого слоя к земле, ещё 25 — через резисторы 180 Ом подают высокий уровень на аноды 25 светодиодов в слое. Так Mega может даже 6x6x6 построить. Но есть ограничение по току: 40 мА на пин, 200 мА суммарно. Синие светодиоды — падение ~3 В, транзисторы — ещё 0.7 В. При 5 В и резисторе 180 Ом каждый светодиод потребляет 7.2 мА. 25 светодиодов/слой = 180 мА при одновременном включении. Мы включаем только один слой за раз, поэтому укладываемся в лимиты, используя NPN-транзисторы для замыкания катодов слоя на землю. Ток базы добавляет ~5 мА, итого ~185 мА — ниже 200 мА. Поэтому выбраны резисторы 180 Ом.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Схема подключения цифровых пинов Mega к кубу

Пины 22–26 — управление транзисторами катодов. Пины 27–51 — через резисторы 180 Ом к анодам 25 светодиодов слоя.

Распиновка может показаться запутанной. Мой софт использует прямой доступ к портам вместо digitalWrite для настройки анодов — это быстрее, светодиоды горят дольше. Пины сгруппированы для удобства работы с портами, а не по номерам. Подробнее в разделе софта.

Сборка куба

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

Сборка начинается с формирования выводов и пайки светодиодов в столбцы по 5 штук. Затем столбцы спаиваются в панели (по 5 столбцов), и наконец 5 панелей собираются в куб. Новички не осознают, как сложно сделать идеальный куб: малые ошибки в углах выводов накапливаются, даже небольшие различия в интервалах сразу бросаются в глаза. Формирование выводов — критичный этап. Если делать всё тщательно, идеальный куб не получится, но результат будет достойным.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Аноды (длинные выводы) загибаются вбок, чтобы вертикальные ряды можно было спаять вместе. Анод и катод должны быть под 90° друг к другу.

Я считаю формирование выводов утомительным и тяжелым для рук, поэтому формирую 25 светодиодов и сразу собираю панель. Нужен приспособление (джиг) и для столбцов, и для панелей. Использую Blue Tack — светодиоды вдавливаются в него и держатся при пайке. Вмятины позволяют повторять процесс с точностью. В первый раз всё измерял очень тщательно. Интервал 0.6 дюйма во всех трёх направлениях, чтобы готовый куб можно было вставить в плату с шагом отверстий 0.1 дюйма.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Сборка панели на Blue Tack
Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Готовая панель 5x5

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

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Проверка панели перед сборкой куба
Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Тестирование панели специальным скетчем

После сборки каждой панели — тест. В софте есть скетч для теста панели. Подключаем 5 анодных выводов через резисторы 330 Ом к пинам 40–44, 5 катодов — к пинам 22–26. Хорошая панель светится как на видео. (Пока без транзисторов: катоды тянем низко для включения. После установки транзисторов — наоборот, поднимаем катоды высоко, транзисторы замыкают их на землю.)

Когда 5 панелей готовы и протестированы, собираем куб, но сначала готовим основную плату: вставляем и соединяем все резисторы и транзисторы.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Резисторы 180 Ом рядом с анодными столбцами, транзисторы и базовые резисторы — между кубом и Mega. Шаг 0.6 дюйма = 5 пустых отверстий между анодными столбцами.

Теперь можно установить Arduino на плату. На стойках или просто на кусочке пластика с клеем (я приклеил Mega на 1/4 дюйма над платой).

Панели припаиваются к основной плате. Убедитесь, что каждый анодный столбец попал в правильное отверстие — ошибка даже в одно отверстие будет видна. Все панели должны быть ориентированы одинаково (катодные выводы с одной стороны).

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Панели припаяны к основной плате

Теперь соединяем панели между собой по слоям: все катоды данного слоя соединяем выпрямлённым оловянным проводом.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
Соединение пяти катодных линий в каждом слое

Далее выводим катоды каждого слоя на основную плату к коллекторам транзисторов (кружочки на фото). Тоже выпрямлённым оловянным проводом.

После подключения всех резисторов к Mega — финальный тест готового куба. В софте есть скетч: он по очереди кратко зажигает каждый светодиод. Так как панели уже тестировались, проблемы скорее всего в недавних катодных соединениях — может не работать целый слой или его часть. Снова, скорее всего, холодной паяной шов.

Программное обеспечение

Состояние каждого светодиода хранится в глобальном байтовом массиве cube[5][5][5]. 1 — включён, 0 — выключен. Все анимации создаются записью 1 и 0 в этот массив.

Сердце любого софта для куба — таймерный прерыватель, обновляющий куб. Моё прерывание запускается в setup() и находится в конце программы. Вызывается каждые 10 мс, обновление занимает ~6 мс. Остаётся 4 мс на выполнение кода в loop().

За одно обновление каждый слой включается на 1.2 мс. Частота обновления 100 Гц. Значит, включённый светодиод горит 120 мс в секунду — коэффициент заполнения 12%. 100 Гц достаточно для восприятия глазом как непрерывного света, а 12% даёт довольно яркое свечение, удивительно близкое к постоянному.

Чтобы минимизировать время цикла обновления и максимизировать время свечения, избегаем медленных digitalWrite и используем прямой доступ к портам. В прерывании 25 отдельных строк прямого доступа — выглядит некрасиво, но на порядки быстрее циклов с digitalWrite.

loop() просто вызывает анимации по очереди, затем начинает сначала. Каждая анимация в своей подпрограмме, некоторые вызывают другие. В коде есть комментарии. Есть утилиты: clearCube() — гасит все светодиоды, copyDown() — сдвигает содержимое каждого слоя вниз, очищая верхний.

Доступно три скетча: основной с 15 анимациями (видео), тест панели и тест куба — только для проверки при сборке.

Код

Корпус (опционально)

Если есть 3D-принтер и хочется корпус как в моих видео — вот модель.

Схемы

Основная схема связей между кубом и Mega.

Сборка потрясающего 5x5x5 LED-куба на Arduino Mega Сборка потрясающего 5x5x5 LED-куба на Arduino Mega

Производственный процесс

  1. Производство гладильных досок: дизайн, материалы и технологический процесс
  2. Кубик Рубика: от изобретения к современной головоломке
  3. Печатные платы: проектирование, производство и будущие тренды
  4. Конструкция и дизайн серфбордов: от полинезийских корней к современным инновациям
  5. Светодиоды (LED): от зарождения к 100-летнему ресурсу
  6. RasPiRobot Board V2: Расширьте Raspberry Pi в мощный робот-контроллер
  7. Слово-часы (Word Clock) на Arduino — DIY-часы с текстовой индикацией времени
  8. Проект Arduino: мелодия Coffin Dance — сборка и воспроизведение вирусного трека
  9. Умный сенсорный выключатель с мониторингом температуры для дома
  10. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид