Оглавление:

Как сделать укулеле с подсветкой !: 21 шаг
Как сделать укулеле с подсветкой !: 21 шаг

Видео: Как сделать укулеле с подсветкой !: 21 шаг

Видео: Как сделать укулеле с подсветкой !: 21 шаг
Видео: УКУЛЕЛЕ ЗА 5 МИНУТ! УРОК ПРОЩЕ НЕКУДА! 2024, Июль
Anonim
Image
Image
Составьте план
Составьте план

Я играю на укулеле. Довольно посредственно (если это слово), поэтому я подумал: «Если вы действительно хотите произвести впечатление на женщин, вам нужно средство, чтобы отвлечь их от катастрофы, которая разыгрывается на сцене». Так родилась "Укулеле с подсветкой".

В этом проекте используется комплект Concert Ukulele и добавлен светодиод, управляемый Arduino, на каждой струне и на каждой позиции лада. Он также добавляет модный OLED-дисплей и пользовательский интерфейс на основе поворотного энкодера для выбора режима и интенсивности светодиодной цепочки.

Завершенные аппаратные характеристики УКЭ:

  1. Arduino MICRO для взаимодействия со светодиодной цепочкой, дисплеем и устройством ввода.
  2. 48 индивидуально программируемых полноцветных светодиодов
  3. OLED-дисплей
  4. Поворотный энкодер для пользовательского ввода
  5. Интерфейс USB для внешнего питания и программирования Arduino

В программе uke есть:

  1. Базовые режимы управления освещением, при которых светодиоды проходят через свои шаги
  2. Отличный режим театрального шатра (очень удобно для выступлений!)
  3. Контроль яркости светодиода
  4. Полная библиотека аккордов всех аккордов для укулеле в первой позиции (значение аккорда и характер)
  5. Возможность отображать бегущий текст (вертикально) с использованием уникального набора символов 4 x 6 пикселей

Эта инструкция описывает законченный прототип. Полная сага о разработке доступна ЗДЕСЬ, включая некоторые образовательные (болезненные) ошибки и ценный урок о том, почему вы ДОЛЖНЫ довести свой первый дизайн до завершения (независимо от того, насколько уродливыми становятся вещи). Вы никогда не узнаете всего того, чего на самом деле не знаете, пока не дойдете до конца (а потом вы все еще не знаете!), Но вы намного лучше и намного умнее для следующего дизайна.

Я построил прототип на основе укулеле Grizzly Concert. Начало работы с комплектом избавляет от беспокойства о теле уке (ну, в основном) и устраняет большую часть настоящей работы, связанной с мастером. Эти комплекты довольно полные и не такие уж дорогие по большому счету (и менее болезненны, поскольку вы будете делать ошибки).

Шаг 1. Составьте план

Составьте план
Составьте план

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

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

Печатная плата светодиодов (PCB) представляет собой простую двухслойную плату. Это очень помогает при ручной сборке светодиодной струны и обеспечивает некоторую механическую прочность (это стекловолокно и эпоксидная смола) для шеи укулеле. Я начал компоновку в Eagle, но в итоге остановился на Altium Designer из-за ограничений по размеру платы. Файлы схемы и печатной платы Altium находятся здесь.

Гриф набора имел толщину всего 0,125 дюйма. Таким образом, если принять толщину печатной платы 0,062 дюйма и допустить дополнительные 0,062 дюйма для светодиодов, это означает, что нам придется вырезать много (как и все) грифа. Чтобы компенсировать это, мы можем либо частично вырезать карманы для светодиодов на грифе с соответствующим карманом на шее для печатной платы, либо мы можем заменить всю накладку грифа (вариант, который я выбрал) на более толстую версию от Luther Mercantile International (LMII)., которые начинаются с 0,25 дюйма.

НО, помните, что вам все равно придется обработать гриф, чтобы компенсировать увеличение толщины грифа. Другое преимущество, которое вы получаете, является косметическим, поскольку печатная плата теперь полностью встроена в гриф, что значительно упрощает отделку краев (и выглядит намного лучше!) И упрощает фрезеровку грифа.

Инженерное дело (игнорируйте, если хотите):

Кстати, жесткость шеи это не сильно ухудшает. Материал печатной платы намного жестче, чем исходная древесина грифа (модуль упругости красного дерева: 10,6 ГПа по сравнению с модулем упругости FR4: 24 ГПа), плюс, поскольку мы строим гавайскую гитару, нет большого натяжения струны, которое в противном случае могло бы исказить (скручивание) или деформировать) шею.

Одно очень интересное соображение (которое, вероятно, все же следует вычислить) - это то, что происходит при повышении температуры. Обычно для древесины, параллельно волокну, тепловой коэффициент расширения составляет примерно 3 x 10 ^ -6 / K, а для FR4 - 14 × 10 ^ -6 / K. Итак, разница довольно существенная. Проблема заключается в том, что при изменении температуры в шее создается напряжение, что, в свою очередь, расстраивает струны. Это то, что можно было бы компенсировать, нанеся аналогичный слой на противоположную сторону от нейтральной оси или поместив FR4 как можно ближе к нейтральной оси. Но это останется для 2.0… Что-то, что нужно смоделировать и оценить.

Электроника размещена в корпусе уке. В боковой стенке (но не на деке!) Прорезаны отверстия, чтобы освободить место для дисплея и поворотного энкодера, плюс пластина доступа для размещения Arduino Micro и доступа к интерфейсу USB. Конструкция и расположение пластины доступа / крепления, вероятно, можно было бы улучшить, чтобы USB-соединение находилось в более удобном месте, но в его нынешнем виде это не так уж и плохо, поскольку оно не мешает, когда вы играете.

Схема шагов следующая:

  1. Собирать материалы
  2. Получите необходимые инструменты
  3. Обрежьте гриф, чтобы он соответствовал более толстому гриву.
  4. Отшлифуйте гриф, чтобы проделать отверстия в нужных местах и сделать карманы для платы и светодиодов.
  5. Получите и сконструируйте печатную плату, на которой крепятся светодиоды.
  6. Фрезерование отверстий в корпусе укулеле для OLED-дисплея, поворотного энкодера и панели доступа
  7. Сделайте накладки
  8. Присоедините провода к плате; подключить и проверить электронику
  9. Присоедините шею к корпусу укулеле.
  10. Просверлите отверстие для доступа, чтобы пропустить провода печатной платы в корпус.
  11. Выровняйте и приклейте печатную плату и гриф к шее.
  12. Выровняйте края грифа до шеи (удалите излишки материала).
  13. Установить ладовые тросы
  14. Нанесите маскировку и нанесите финиш на гавайскую гитару.
  15. Выровняйте и прикрепите мост
  16. Установите электронику и протестируйте.
  17. Установите тюнеры и натяните инструмент
  18. Запрограммируйте контроллер УКЭ
  19. Удивите мир великолепием своей гавайской гитары!

Шаг 2: Соберите материалы

Список наших материалов выглядит так:

  1. Комплект для укулеле - я использовал комплект для укулеле Grizzly Concert (Grizzly Uke Kit в Amazon), но, похоже, он больше не выпускается. Zimo делает аналогичную модель (Zimo Uke Kit @ Amazon), которая, похоже, справится со своей задачей.
  2. Гриф для укулеле, предварительно прорезанный (LMII Uke Fingerboards). Они вставят гриф под вашу гамму, что избавит вас от неприятностей.
  3. Эпоксидная - для приклеивания грифа к шее. Я выбрал эпоксидную смолу, поскольку она совместима с материалом печатной платы. Ищите что-нибудь, для чего требуется как минимум 60 минут работы. НЕ используйте 5-минутные типы, вам нужно время, чтобы внести изменения
  4. Проволока для ладов - также доступна в LMII
  5. Пользовательская плата - файлы Altium находятся здесь. Я выбрал обычный материал типа FR4. Гибкие (полиимидные) платы были бы интересной (хотя и более дорогой) альтернативой, поскольку они могут быть намного тоньше.
  6. 48-кратные светодиоды Neopixel (SK6812). Доступно в Adafruit и Digikey
  7. 48 колпачков 0,1 мкФ 0402 - можно больше, но нужно следить за размещением
  8. Монтажный провод - от 4 до 6 цветов, чтобы избежать путаницы, я использовал в основном провод 28 калибра. Наблюдайте за падением постоянного тока на соединениях питания светодиода (как VCC, так и ЗАЗЕМЛЕНИЕ … этот ток должен вернуться к источнику!)
  9. Энкодер - PEC16-4220F-S0024
  10. Необычная деревянная ручка - для энкодера (мне досталась моя от LMII)
  11. OLED-дисплей - из 4D-систем OLED-дисплеи
  12. Внешний аккумулятор USB - все время дешевле, плюс можно носить с собой запчасти!
  13. Ардуино МИКРО
  14. Листовая латунь - чтобы пластина удерживала ардуино и лицевую панель дисплея
  15. Разные расходные материалы, включая: наждачную бумагу, уретановую отделку, палочки для мороженого, резиновые ленты, припой, флюс, щетки, двусторонний скотч (мне нравится лента UHC от 3M) и маленькие латунные винты для дерева (для пластины)
  16. Дополнительные улучшения для укулеле - лучшие тюнеры, лучшие струны, лучшие гайка и седло, инкрустация, если вы хотите продемонстрировать свое мастерство мастера)

Шаг 3. Получите необходимые инструменты

Рано или поздно вам понадобится получить или получить к ним доступ:

В список наших инструментов входят:

  1. Фрезерный станок - предпочтительно ЧПУ, но вы можете даже обойтись фрезером и большой удачей. Я использовал комбинированный фрезерно-фрезерный станок с ЧПУ
  2. Фрезы - предпочтительно твердосплавные. Фрезы предпочитают концевые фрезы, так как мы обрабатываем дерево, а не металл
  3. Зажимы - их много. В основном нужен для удержания деталей во время склеивания
  4. Паяльник - маленькое жало для поверхностной пайки
  5. Микроскоп или лупа - вы можете попробовать паять только глазами, но я бы не рекомендовал это, минимум 10x
  6. Пинцет (для установки деталей на место)
  7. Инструменты для фреттинга (см. Подходящие инструменты на LMII здесь, но я использовал то, что у меня было дома и сделал; молотки, напильники и фрезы)
  8. Различные ручные инструменты, такие как стамески, отвертки, молоток для мягкого удара или кожевенный молоток (для фреттинга) и т. Д.
  9. Абразивы - наждачная бумага различной крупности

Наши программные инструменты включают (некоторые из них являются необязательными в зависимости от вашего бюджета / изобретательности):

  1. Программное обеспечение Arduino
  2. Исходный код укулеле (https://github.com/conrad26/Ukulele)
  3. Пакет компоновки печатной платы - я использовал Altium, потому что бесплатная версия Eagle не поддерживала размер платы, который мне нужен. Altium - это полнофункциональный пакет макетов, который не относится к ценовой категории для любителей. Я включил файлы Gerber на свой сайт для прототипа, но они определенно нуждаются в обновлении.
  4. Программное обеспечение для 3D-моделирования - я использовал SolidWorks, но одна бесплатная альтернатива - FreeCAD (https://www.freecadweb.org/)
  5. Программное обеспечение CAM, такое как FeatureCAM от Autodesk, для создания файла фрезерования с ЧПУ.

Комбинация экспорта 3D-файла шага из Altium вместе с 3D-моделью грифа устраняет большую часть трудностей, связанных с тем, чтобы убедиться, что все выровнено, но это не является обязательным требованием. Тщательная верстка позволит добиться того же результата.

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

Шаг 4: Обрежьте гриф, чтобы он соответствовал более толстому гриву

Обрежьте гриф, чтобы он соответствовал более толстому гриву
Обрежьте гриф, чтобы он соответствовал более толстому гриву

Перед фрезерованием обратите внимание, что НЕОБХОДИМО поддерживать исходную ровность монтажной поверхности грифа, иначе у вас будет скрученный гриф, что приведет к всевозможным проблемам с выравниванием ладов.

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

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

Шаг 5: Получите и сконструируйте печатную плату, на которой крепятся светодиоды

Получите и сконструируйте печатную плату, на которой крепятся светодиоды
Получите и сконструируйте печатную плату, на которой крепятся светодиоды
Получите и сконструируйте печатную плату, на которой крепятся светодиоды
Получите и сконструируйте печатную плату, на которой крепятся светодиоды

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

Дизайн грифа основан на светодиодах WS2812B. Я решил сделать только первую октаву грифа (48 светодиодов !!). Каждый светодиод можно рассматривать как один бит в регистре сдвига. Регистр сдвига работает на частоте 800 кГц. Я использовал библиотеку Adafruit (см. Раздел программирования), чтобы быстро наладить работу.

Я начал разработку в Eagle, но размер платы ограничен 4 x 5 дюймов, поэтому мне пришлось (или, вернее, я решил) перейти на Altium. Я использую Altium на работе, так что на самом деле это помогло мне ускорить работу. На моем сайте находятся проект Altium, файлы схемы и печатной платы (а также части библиотеки). Доска имеет трапециевидную форму и длину около 10 дюймов. Думаю, мне следовало попытаться немного сжать контур (следующий поворот!). Сборка была неплохой, но если вы можете себе это позволить, я действительно рекомендую приличный паяльник (паяльники JBC) и хороший микроскоп. Да, я избалован и нет, у меня в домашней лаборатории нет таких вещей. Я дешевка.

У меня были доски, сделанные в Sunstone. 129 долларов за две доски. Гарантированная недельная очередь. Однако не экономьте на доставке. Я не заметил, что я использовал землю UPS, и в итоге я ждал дополнительную неделю, пока прибудут мои платы. Общее время сборки составило около 2 часов (98 деталей).

Шаг 6: фрезерование грифа

Image
Image
Отверстия для доступа к фрезеровке в корпусе укулеле
Отверстия для доступа к фрезеровке в корпусе укулеле

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

Я создал 3D-модель готового грифа в Solidworks и создал процедуру фрезерования с ЧПУ с помощью FeatureCAM.

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

Оглядываясь назад, я должен был отрезать неиспользуемые части грифа, чтобы он лучше подходил к фрезу (моя дешевая фреза имела только ход по оси X 12 дюймов). фрезерование карманов, что должно привести к меньшему количеству пробоев между карманами.

При необходимости сделайте ручную регулировку, чтобы добавить место для проводки. Следует отметить одну важную вещь: в некоторых карманах я пробил прорезь, в которой будет проходить лада. Учитывая, что это проводник, убедитесь, что он не закорочит что-нибудь важное. Это также снижает прочность материала, удерживающего лад. Дизайн должен быть изменен, чтобы он никогда не пересекался с прорезью ладов.

Шаг 7: фрезерование отверстий для доступа в корпусе укулеле

Отверстия для доступа к фрезеровке в корпусе укулеле
Отверстия для доступа к фрезеровке в корпусе укулеле

Отфрезеровал вручную отверстия доступа в корпусе. Самая трудная часть - найти самую «плоскую» часть очень изогнутой поверхности. Отметьте контур карандашом и постепенно измельчите материал, пока не получите плотное прилегание к OLED-дисплею. Я получил обработанную латунную рамку и прикрепил ее с помощью клейкой ленты 3M VHB.

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

Шаг 8: сделайте накладки

Сделайте накладки
Сделайте накладки
Сделайте накладки
Сделайте накладки
Сделайте накладки
Сделайте накладки

Вам также необходимо изготовить заглушки для лицевой панели дисплея и панели доступа. На съемной панели требуется отверстие (прямоугольное) для разъема USB (микро). Просто используйте существующий разъем на Arduino, поскольку для micro USB не так много вариантов панельного монтажа. (хотя, если бы я проектировал с нуля, я бы посмотрел на один из них)

Чтобы удерживать плату на месте, вылепите L-образные кронштейны из латуни и припаяйте их к задней части пластины доступа. Это дает вам некоторую свободу в позиционировании. Для правильного позиционирования сначала создайте монтажную плату (с монтажными отверстиями) для Arduino MICRO и прикрепите к ней L-образные кронштейны с помощью 2-56 крепежных винтов. Затем вы можете настроить расположение, чтобы выровнять USB-порт и точно отметить места для кронштейнов на пластине. Снимите скобы с монтажной платы и припаяйте их на место. Наконец, установите монтажную плату.

Я использовал четыре небольших латунных шурупа для дерева, чтобы удерживать латунную панель доступа на месте.

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

Шаг 9: прикрепите провода к печатной плате; Подключите и проверьте электронику

Image
Image
Присоедините шею к корпусу укулеле
Присоедините шею к корпусу укулеле

Пока не подключайте электронику навсегда. Присоедините провода к печатной плате, убедившись, что у вас достаточно провисания, чтобы вывести отверстие для доступа. В конечном итоге их необходимо постоянно прикрепить к плате Arduino MICRO (на фотографиях показана Arduino UNO, которую я использовал для разработки кода).

Шаг 10: прикрепите шею к корпусу укулеле

Присоедините шею к корпусу укулеле, следуя инструкциям, прилагаемым к комплекту укулеле. Особо следите за выравниванием поверхности грифа относительно корпуса уке.

Шаг 11: Просверлите отверстие для доступа, чтобы пропустить провода печатной платы в корпус

Просверлите отверстие для доступа, чтобы пропустить провода печатной платы в корпус
Просверлите отверстие для доступа, чтобы пропустить провода печатной платы в корпус

Когда клей высохнет, просверлите отверстие ~ 1/4 дюйма (10 мм) под углом, чтобы провода от печатной платы могли проходить в корпус укулеле. Будьте осторожны, чтобы не повредить деку.

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

На этом этапе не помешало бы еще одно испытание.

Шаг 12: Совместите и приклейте печатную плату и гриф к шее

Выровняйте и приклейте печатную плату и гриф к шее
Выровняйте и приклейте печатную плату и гриф к шее

Предлагаю продумать зажим (и опробовать!) Перед приклеиванием. Вы можете сделать блок, имеющий форму нижней части шеи, чтобы получить плоскую зажимную поверхность. Гриф на этом этапе больше, чем гриф, поэтому вам нужно это учитывать.

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

Используйте эпоксидную смолу с минимальным сроком службы 60 минут… вам понадобится все.

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

Выровняйте и приклейте гриф к шее. Будьте осторожны, чтобы не оставить карманов, которые впоследствии могут стать резонансными (гудение!). Также будьте осторожны, чтобы не допустить попадания клея на поверхности светодиодов.

Как только клей высохнет, вы можете еще раз подсоединить провод и проверить электронику. Один плохой светодиод заставит возненавидеть жизнь. У меня был один неисправный светодиод (первый!) На прототипе, и мне пришлось немного поработать с деревом, чтобы получить доступ к неисправному светодиоду и аккуратно исправить его.

Шаг 13: выровняйте края грифа до грифа и добавьте лада проволоки

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

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

Вам нужно следить за тем, чтобы сломать тонкую поверхность светодиодного кармана. На прототипе я позволил некоторым карманам для светодиодов (около 12-го лада, где места становится мало) переходить в прорезь для ладов. Это плохая идея, так как это создает слабое место, которое может (и треснуло) потрескаться после того, как будет вставлена проволока лада.

Шаг 14: нанесите маскировку и нанесите финиш на гавайскую гитару

Замаскируйте гриф (он не покрывается финишем) и область приклеивания бриджа и приступайте к нанесению финиша.

При маскировке области перемычки прочтите инструкции к вашему комплекту, а затем дважды проверьте длину шкалы, чтобы быть уверенным. В комплекте, который я использовал для прототипа, использовалась неправильная длина шкалы и, следовательно, были указаны неправильные размеры для размещения моста (но в нем была заметка, чтобы проверить веб-сайт для получения последних инструкций!). Мое чутье подсказывало мне, что это неправильно, но я слепо принимал авторитет.

Всегда лучше понять, ПОЧЕМУ вы что-то делаете, чем слепо следовать инструкциям.

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

Я, конечно, этого не делал, поэтому в итоге я использовал неправильный герметик, в результате чего поверхность стала очень зернистой. Не делай этого.

Делай свою домашнюю работу.

Шаг 15: выровняйте и прикрепите мост

Выровняйте и прикрепите мост
Выровняйте и прикрепите мост

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

Шаг 16: Установите электронику и проверьте

Установите электронику и проверьте
Установите электронику и проверьте

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

Код Arduino можно обновить через USB-порт, поэтому нет необходимости разбирать его, если вы не хотите возиться.

Шаг 17: Установите тюнеры и натяните инструмент

Image
Image
Программирование УКЭ
Программирование УКЭ

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

Я обновил тюнеры и использовал красивые струны Aquila, которые никак не улучшили звук. Так что имейте это в виду, когда вы вкладываете деньги в проект укулеле …

Шаг 18: Программирование УКЭ

Окончательный код Arduino находится на Github. В коде есть несколько строк для поддержки будущих улучшений (например, функция метронома и «ползунки» для отображения (элемент пользовательского интерфейса, который выглядит как ползунок).

Этот код использует библиотеку поворотного кодировщика (библиотека поворотного кодировщика Arduino) для обработки пользовательского ввода с поворотного кодировщика.

Он также использует библиотеку Adafruit Neopixel и пример кода, размещенный здесь. Режимы театра и радуги взяты из примеров, поставляемых с библиотекой. (см. strandtest.ino).

Драйвер дисплея предоставляется 4D-системами и находится здесь на Github.

В проекте «Укулеле» реализованы две уникальные функции. Первый реализует библиотеку аккордов, а второй отображает текстовое сообщение с прокруткой с использованием настраиваемого набора символов.

На прилагаемой схеме показано расположение светодиодов на грифе и их подключение. Светодиод 0 расположен в верхнем правом углу.

Шаг 19: Как отобразить аккорд

Как отобразить аккорд
Как отобразить аккорд

Функция displayChord отображает положение пальцев (пока только первая позиция) для каждого аккорда. Аккорды, выбранные пользователем (основная нота и качество), сохраняются в виде пары индексов. Они, в свою очередь, используются для поиска аппликатуры каждого аккорда.

Я использовал обозначение «GCEA» для хранения аккордов (например, «A» - это «2100»). Аккорды предварительно рассчитываются для каждой основной ноты и сохраняются в переменной, соответствующей качеству аккорда. (так, A major сохраняется в первом месте массива «majorChords», соответствующем «2100»).

char * majorChords = {"2100 / n", "3211 / n", "4322 / n", "0003 / n", "1114 / n", "2220 / n", "3331 / n", " 4442 / n "," 2010 / n "," 3121 / n "," 0232 / n "," 5343 / n "};

Обратите внимание, что, поскольку это текстовая строка, каждая цифра может также представлять шестнадцатеричное значение для учета позиций ладов больше 9. То есть, A и B будут представлять светодиоды 10 и 11. Для аккордов первой позиции это не было проблемой).

Светодиодная струна проложена вдоль каждой струны рядами по 12 (октава) (начиная со струны А), последующая серия из 12 начинается с первого лада следующей струны (см. Диаграмму на шаге 18). Это важно для алгоритма, чтобы определить, какие огни включать для данного аккорда. Это означает, что пиксели с 0 по 11 являются светодиодами строки A, с 12 по 23 - светодиодами строки E и так далее. При синтаксическом анализе A = "2100" (хранящегося в виде строки, в коде также есть нулевой терминатор "\ n") мы интерпретируем это как: ни один пиксель в строке A не светится, ни в строке E, пиксель 0 (лад 1) на струне C горит и пиксель 1 (лад 2) на струне G. Обратите внимание, что «0» не горит, а не первый светодиод. Исходя из схемы подключения, мы хотим зажечь светодиоды 24 и 37. Код для отображения аккорда показан ниже.

for (int i = 0; i <4; i ++) {if (int (chord - '0')) {// алгоритм для анализа строки аккорда int ledNumber = int (chord - '0') + (3 - i) * 12 - 1; // см. обсуждение выше, (3-i) - это перевернуть полосу индекса. setPixelColor (ledNumber, 0, 125, 125); // setPixelColor (ledNumber, красное значение, зеленое значение, синее значение)}}

Оператор if проверяет, не горит ли светодиод. Если это не так, он берет значение ascii символа, chord , и вычитает значение ascii для '0', чтобы загорелся ledNumber.

strip - это экземпляр класса Adafruit_NeoPixel. Функция setPixelColor устанавливает цвет для вычисленного пикселя (в данном случае фиксированный на (0, 125, 125).

Шаг 20: Как отобразить прокручивающееся сообщение

Как отобразить прокручивающееся сообщение
Как отобразить прокручивающееся сообщение

Итак, у нас есть матрица светодиодов 12 x 4… почему бы не сделать так, чтобы она отображала что-то иное, кроме довольно случайных световых узоров!

Первая проблема заключается в том, что высота дисплея (4) довольно ограничена из-за количества строк на уке. Горизонтальная прокрутка будет в основном неразборчивой, но в вертикальной ориентации мы можем поддерживать вертикальные символы 4 x 5.

Организация символов в виде пяти «вертикальных» рядов означает, что два символа могут отображаться одновременно с интервалом в одну строку между каждым символом.

Сложность заключалась в том, что не существовало стандартного набора символов 4 x 5. Я сделал свой, используя прилагаемую таблицу. Я присвоил каждой строке одно шестнадцатеричное значение (4 бита, представляющие, какой пиксель включен или выключен). Комбинация пяти шестнадцатеричных значений составляет символ (например, «0» - это 0x69996).

Значения для каждого символа хранятся в массиве в порядке ASCII. Набор символов делает некоторые компромиссы с некоторыми буквами, но большинство из них достаточно четкие. (каракули внизу таблицы - это идеи, с которыми я играл, поскольку у нас есть цвет как опция, мы можем добавить «глубину» персонажу и, возможно, получить дополнительное разрешение.

Отображаемая строка содержится в строковой переменной message.

Буфер создается для представления символьного отображения. Думаю, я мог бы просто создать большой буфер со всей переведенной последовательностью сообщений, тем более, что большинство сообщений будет меньше 20 символов или около того. Однако я предпочел создать фиксированный трехсимвольный (18 байт) буфер. Активно отображаются только два символа, а третий - взгляд вперед, где загружается следующий символ. Строка светодиодов (представьте ее как большой регистр сдвига) загружается 48 битами строки. Я потратил немного места в памяти, чтобы упростить понимание. Каждый полубайт получает свое собственное место в памяти, что удваивает потребность в памяти, но это не так много, учитывая размер буфера.

Буфер загружается следующим символом, когда выходной индекс (указатель) достигает границы символа (outputPointer на 5, 11 или 17).

Чтобы загрузить буфер, мы берем первый символ в «сообщении» как значение ASCII и вычитаем 48, чтобы получить индекс в массиве asciiFont. Значение этого индекса сохраняется в codedChar.

Первая часть выдвинутого сообщения соответствует светодиодам 47, 35, 23 и 11 (нижняя часть дисплея). Таким образом, для нулевого числа 0x0F999F буква F (левая) сдвигается на первую, 9 секунд и так далее.

Следующий символ загружается путем маскировки каждого полубайта и смещения его вправо. В приведенном выше примере алгоритм дает (0x0F999F & 0xF00000) >> 20, затем (0x0F999F & 0x0F0000) >> 16 и т. Д.

int index; если (outputPointer == 17 || outputPointer == 5 || outputPointer == 11) {char displayChar = message.charAt (messagePointer); // захватываем первый символ сообщения long codedChar = asciiFont [displayChar - 48]; если (displayChar == 32) codedChar = 0x000000; messageBuffer [bytePointer + 5] = байт ((codedChar & 0xF00000) >> 20); // маскировать все, кроме последнего полубайта, и сдвигать его на 20 (и т. д.) messageBuffer [bytePointer + 4] = byte ((codedChar & 0x0F0000) >> 16); // это должно поместить один полубайт на каждую ячейку памяти messageBuffer [bytePointer + 3] = byte ((codedChar & 0x00F000) >> 12); // все шесть представляют собой символьный буфер messageBuffer [bytePointer + 2] = byte ((codedChar & 0x000F00) >> 8); messageBuffer [bytePointer + 1] = байт ((codedChar & 0x0000F0) >> 4); messageBuffer [bytePointer] = байт ((codedChar & 0x00000F)); if (bytePointer == 0) {// обрабатываем цикл вокруг bytePointer bytePointer = 12; } еще {bytePointer - = 6; // заполняем снизу вверх; ПРИМЕЧАНИЕ: нужно посмотреть, как это изменить, чтобы увидеть, упростит ли это} if (messagePointer == message.length () - 1) {// обрабатываем цикл вокруг сообщения messagePointer = 0; } еще {messagePointer + = 1; // переход к следующему символу}}

Как только буфер загружен, нужно отслеживать, где находится выходной указатель, и загружать в светодиодную строку правильные 48 бит (текущие 4 и предыдущие 44). Как упоминалось ранее, strip является экземпляром класса NeoPixel, а setPixelColor устанавливает цвет (RGB) каждого пикселя. Функция show () сдвигает отображаемые значения на светодиодную строку.

// цикл для постоянного сдвига буфера

// хотим записывать всю полосу при каждом проходе цикла, изменяется только начальная позиция для (int row = 12; row> 0; row--) {index = outputPointer + (12-row); если (индекс> 17) индекс = outputPointer + (12-рядный) -18; // цикл, если больше 17 for (int column = 4; column> 0; column--) {strip.setPixelColor (uint16_t (12 * (column-1) + (row-1)), uint8_t (RedLED * (bitRead (messageBuffer [index], column-1))), uint8_t (GreenLED * (bitRead (messageBuffer [index], column-1))), uint8_t (BlueLED * (bitRead (messageBuffer [index], column-1)))); // в каждом месте загорается светодиод, если бит равен единице}} // outputPointer указывает на текущий младший байт в строке отображения if (outputPointer == 0) outputPointer = 17; иначе outputPointer - = 1; strip.show (); }

Шаг 21: удивите мир своей укулеле

Image
Image

На создание последнего прототипа укулеле потребовалось около 6 месяцев пусков и остановок.

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

Что делать в следующей версии?

  1. Избавьтесь от дисплея и поворотного энкодера. Замените их модулем Bluetooth, подключенным к Arduino. Управляйте им удаленно с телефона или планшета. С Bluetooth все лучше.
  2. Дистанционное обновление паттернов аккордов в режиме реального времени. Что-то лучшее осталось приложению.
  3. Светодиодные крышки. Текущая версия ничего не делает для предотвращения попадания мусора в отверстия светодиодов. Мой друг сделал кучу маленьких линз, но я так и не смог придумать, как заставить их оставаться на месте должным образом.
  4. Альтернативные материалы грифа, может быть, что-нибудь прозрачное, пока лады держатся.
  5. Больше огней! Устраните ограничение на текст, добавив больше «строк». Это действительно ограничение, вызванное размером грифа и корпусов светодиодов.

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

Большое спасибо за то, что зашли так далеко! Махало!

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