
Оглавление:
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-23 15:05


От gwfongMonkey PatchingFollow Ещё от автора:





О себе: Просто парень, который хочет делать крутые вещи. Подробнее о gwfong »
Это Holi-Tie, праздничный галстук, который нужно носить во время праздников. Вольно основанный на Ampli-Tie Бекки Стерн, который использует плату Flora, Holi-Tie использует микроконтроллер Circuit Python Express (CPX) для управления анимацией и музыкой NeoPixel. Кнопка переключает между двумя разными анимациями NeoPixel. Емкостные сенсорные панели меняют цвета NeoPixel и скорость анимации. Другая кнопка переключает между светодиодной анимацией и музыкой. Встроенный микрофон используется для измерения окружающего шума для анимации VU-метра. А динамик CPX воспроизводит праздничные чип-мелодии.
Все кодируется с использованием языка программирования Python, работающего поверх системы CircuitPython. Он питается от LiPo-аккумулятора 3,7 В, 500 мАч, который был модифицирован для включения / выключения.
Есть два видеоклипа, которые показывают Холи-галстук:
- Завершенный Холи-Галстук
- Внутри Holi-Tie
Шаг 1. Детали и инструменты
Запчасти
- Circuit Playground Express
- 15x Флора Неопикселей
- Магнитный провод
- Клейкая лента на липучке
- Липо аккумулятор 500 мАч с разъемом JST
- Галстук Candy Cane
- Мини-ползунковый переключатель, SPDT
- Термоусадочные трубки
При поиске запчастей было бы разумно купить дополнительные. У меня было всего 20 NeoPixels, один из которых был сломан с самого начала, а другой испортил я. Галстук Candy Cane был настолько дешев, что я купил второй на всякий случай, если испортил первый.
Инструменты
- Пистолет для горячего клея
- Паяльная станция
- Кусачки
- Маленький нож
- Мультиметр
- Компьютер
- Зажигалка или тепловая пушка
- Нить и игла
Шаг 2: приготовление галстука



Основная цель - получить доступ к внутренней стяжке и разграничить линии, указывающие, где должны быть расположены светодиоды.
Шаг 1. Завяжите галстук
Когда электроника будет на месте, завязать галстук будет сложно. Поэтому завяжите галстук, чтобы он хорошо смотрелся, а узел был достаточно крепким и не распускался. Затем осторожно потяните за маленький конец галстука, чтобы открыть отверстие и натянуть галстук на голову. Это позиция, над которой будет работать галстук.
Есть самые разные узлы для галстуков. Я знаю только ту, которую выучил в детстве, Виндзор. Неважно, какой узел используется.
Шаг 2: расстегните заднюю часть галстука
Разорвите швы на одной стороне петли для галстука и логотипа, а затем по центру галстука. Будьте осторожны, потому что в конце его нужно снова зашить.
Шаг 3: нарисуйте линии, где должны быть размещены светодиоды
Чтобы светодиоды появлялись на участках с белыми полосками галстука, проще найти центральную линию для каждого участка с белыми полосами на задней стороне сердечника галстука, а затем сопоставить его с передней частью сердечника галстука. Проверьте и еще раз убедитесь, что центральная линия 1) расположена по центру и 2) параллельна полосе. Точная настройка положения светодиодов возможна, если они немного погашены. Но лучше получить его как можно ближе к точному сейчас, чем позже.
Проверьте центрированность линий, поместив светодиоды на линии и положив полосу ткани сверху. При необходимости отрегулируйте.
Шаг 3: Присоединение NeoPixels




В основном мы делаем свою светодиодную ленту. Мы просто устанавливаем светодиоды на соединительную жилу, а затем соединяем их друг с другом.
Шаг 1. Приклейте NeoPixels к основному соединению
Нанесите немного горячего клея на заднюю часть NeoPixel и поместите его на центральные линии. Для секций с 3 NeoPixel, выровняйте по вертикали центр NeoPixel и сначала приклейте их. Это упростит позиционирование левого и правого NeoPixel по отношению к центру, особенно с учетом того, что ширина галстука увеличивается сверху вниз.
Обязательно сориентируйте все NeoPixels в одном направлении, начиная с левого нижнего угла в правый верхний. Если это не так, полоска работать не будет.
Замечание о горячем клее. Достаточно, чтобы проект был завершен. А продлится ли он долгие годы, нужно только посмотреть.
Шаг 3: припаиваем NeoPixels друг к другу
Поскольку я решил спаять NeoPixel вместе вместо использования токопроводящей нити, отверстие в контактных площадках NeoPixel работает против нас. Просто найдите подходящее место на контактной площадке, чтобы припаять к нему провод. Не пытайтесь заполнить отверстие припоем, но если это произойдет, все будет в порядке.
Магнитный провод имеет тонкий слой изоляции вокруг медного сердечника. Ножом соскоблите изоляцию только с тех концов, где они будут припаяны. Лучше всего очистить проволоку по всей окружности.
Шаг 4. Проверьте подключение
Используйте мультиметр, чтобы проверить возможность подключения:
- Положительные связи. Связь должна быть от кончика до хвоста. Убедитесь, что соединение проверено на контактных площадках, а не на проводе.
- Заземляющие соединения. Выполните тот же тест, но с заземляющими контактами.
- Каждая строка данных. От одной панели данных к другой убедитесь, что есть возможность подключения.
Шаг 4: Присоединение Circuit Playground Express

Circuit Playground Express (CPX) - это сердце системы. У Adafruit есть множество руководств по этому контроллеру. Позже в этом руководстве я выделю несколько функций MCU.
Шаг 1: Припаяйте CPX к нижнему наконечнику NeoPixel
Отрежьте магнитный провод соответствующей длины для питания, заземления и данных. Протолкните их через ткань связующего сердечника так, чтобы они касались контактных площадок NeoPixel для питания, заземления и данных. Припаяйте их, убедившись, что существующие провода на контактных площадках по-прежнему обеспечивают хорошее соединение.
Затем переверните стяжку и поместите CPX в желаемое положение. Подайте провод питания к контактной площадке VOUT, провод заземления - к любой контактной площадке заземления, а провод данных - к любой контактной площадке ввода-вывода, кроме A0. Код, который я написал, использует A3.
Проверьте подключение.
Шаг 2: привяжите CPX
Используя нитку и иглу, возьмите любые четыре равноотстоящих подкладки и пришейте их к стержню для галстука.
Шаг 5: Включение CPX



CPX не имеет переключателя включения / выключения. Это означает, что как только аккумулятор будет вставлен в розетку, галстук включится. Это также означает, что единственный способ выключить его - отсоединить аккумулятор, что является серьезной проблемой. Простое решение - поставить на аккумулятор выключатель.
Шаг 1: Отрежьте 3-й штифт на переключателе
Один из нецентральных штифтов не нужен. Отрежьте его заподлицо с корпусом переключателя.
Шаг 2. Припаяйте выключатель к проводу аккумулятора
Обрежьте провод заземления аккумулятора где-нибудь посередине. Наденьте термоусадочную трубку на каждый заземляющий провод. Припаяйте один провод заземления к одному из контактов, а другой провод заземления к другому контакту. Следите за тем, чтобы они не касались друг друга или припой не касался металлического корпуса.
Убедитесь, что они не подключены с помощью мультиметра. Наденьте трубку на паяные соединения и усадите. Добавьте немного изоленты к любой части, которая может выйти из строя из-за усталости при изгибе.
Шаг 3. Убедитесь, что аккумулятор работает
На этом этапе аккумулятор можно подключить к CPX. Если все прошло хорошо, переключатель должен иметь возможность включать и выключать CPX.
Шаг 4: Установите аккумулятор
Оберните липкую ленту с липучкой и липкой лентой на задней стороне аккумулятора и на сердечнике стяжки. Это будет удерживать его на месте, если за галстук не тратить слишком много усилий.
Шаг 6: Настройка Circuit Playground Express
Я не буду вдаваться в подробности настройки CPX. Adafruit делает то же самое, а потом еще кое-что. Я дам несколько советов по вопросам, с которыми я сталкивался довольно часто.
CPX зависает
Вероятно, из-за проблем с оперативной памятью CPX довольно часто зависал. Быстрое решение - стереть и перепрошить. Ищите "Old Way" в этих инструкциях. По сути, это пара нажатий кнопок, перетаскивание для стирания, а затем перетаскивание для повторной вспышки.
Предупреждение: это стирает все. Весь код на CPX будет утерян.
Сохранение изменений в CPX может вызвать проблемы
Я обнаружил, что иногда после сохранения файла на CPX среда выполнения python находится в плохом состоянии. Исправление заключалось в перезапуске среды выполнения Python, нажав кнопку сброса. Нажмите только один раз. Двойное нажатие запустит процесс повторной прошивки.
Сохранение непосредственно на CPX рискованно
Из-за возможности повторной прошивки CPX есть риск потерять весь их код. После того, как я дважды потерял свой код, я придумал простой рабочий процесс. Я бы сохранил свой код на локальном жестком диске. Когда он был готов к тестированию на CPX, я просто скопировал его, запустив простой сценарий развертывания.
Шаг 7: Кодирование Circuit Playground Express
На данный момент CPX и NeoPixels в значительной степени завершены. С ними не требуется выполнять никаких других механических или электрических работ. Остальное все программное обеспечение.
Код можно найти в моей учетной записи github. Основной код Python должен работать без каких-либо изменений для всех операционных систем. Не устанавливайте внешние библиотеки Adafruit CircuitPython. Они не используются.
Вот краткое изложение того, что происходит в коде.
Что вводит что?
- Кнопка A: циклическое переключение светодиодной анимации.
- Кнопка B: циклическое переключение песен
- Емкостная сенсорная панель A1: изменяет цвета светодиодной анимации.
- Емкостная сенсорная панель A6: изменяет скорость светодиодной анимации.
Есть 3 анимации, но действуют только 2
code.py
импорт пикселей
#import vumeter импорт лестницы import twinkle… led_animations = [Pixelsoff. PixelsOff (пикселей), # vumeter. VuMeter (пикселей, 100, 400) лестниц. Stairs (пикселей), twinkle. Twinkle (пикселей)]
Я портировал код стиля измерителя Ampli-Tie VU. Он использует микрофон CPX для улавливания звука и подсветки NeoPixels в зависимости от амплитуды звука. Однако мне хотелось больше анимации. Из-за ограничений оперативной памяти мне пришлось выбирать, какие анимации мне нужны. Таким образом, по умолчанию два других, Stairs и Twinkle, будут работать без внесения изменений в код. Чтобы запустить анимацию VU-метра, необходимо закомментировать одну или обе другие анимации, а VU-метр - раскомментировать.
Менеджер музыки и автономное кодирование
frosty_the_snowman.py
импортировать music_notes как mn
# Frosty the Snowman # Песня Уолтера Э. Роллинза = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (мн. C5, млн. HLF),…
convert_to_binary.py
песни = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] для песни в песнях: data = song [0] file = song [1] с открытым (file, "wb") как bin_file: для ввода в data: print ("writing:" + str (entry)) note = entry [0] dur = entry [1] bin_file.write (struct.pack ("<HH", note, dur))
Хотелось праздничной музыки. CPX поддерживает как WAV, так и тональные сигналы. Файлы WAV оказались слишком большими с точки зрения размера файла и оперативной памяти. Использование структур данных Python для удержания тонов и их продолжительности также привело к использованию слишком большого объема оперативной памяти. Поэтому я изменил код Holi-Tie, чтобы читать сжатый двоичный файл, который содержал только необходимые данные песни в сжатом двоичном формате. Я написал сценарий, который читает песню, содержащуюся в структуре данных Python, и записывает ее в двоичный формат. Кодирование песни в виде двоичных данных в файле делает песню маленькой и динамичной. Как только песня закончится, память будет освобождена.
Добавить больше песен - тривиальная задача. Подробнее см. README.md в песнях.
Кнопка A оживляет NeoPixels, B воспроизводит музыку, но не одновременно
code.py
def button_a_pressed ():
if music.is_playing (): # Остановить музыку при воспроизведении music.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Запустить анимацию без операции next_led_animation (0) if music.is_playing (): # Переключить включение или выключение музыки music.stop () else: music.play ()
Даже с более эффективной системой управления музыкой я не мог удерживать в оперативной памяти 2 анимации при воспроизведении 1 из них, а также воспроизводить песню одновременно. Поскольку я уже решил вообще не иметь VU-метр в оперативной памяти, я не хотел сокращать количество анимаций до 1. Поэтому я написал код, чтобы либо воспроизводилась анимация, либо музыка воспроизводилась, но не оба. Другой вариант - уменьшить количество NeoPixels, но это потеряло бы некоторую крутость анимации.
Функциональность кода Python
Хотя я ветеран программного обеспечения, я никогда не писал Python. После того, как я освоился и начал применять хорошие методы кодирования, такие как инкапсуляция и модуляризация, я быстро обнаружил, что использую слишком много оперативной памяти. Так что есть немало не-СУХОГО кода. Мне также пришлось использовать некоторые методы MicroPython, такие как const (), чтобы еще больше уменьшить проблемы с памятью во время выполнения.
Скомпилированные модули
компилировать
#! / bin / bash
compiler = ~ / development / circuitpython / mpy-cross-3.x-windows.exe cd песни python3./convert_to_binary.py cd.. for f в *.py; делать, если
В начале проекта я последовал совету Adafruit и сохранил все библиотеки Adafruit CircuitPython на флэш-памяти. Однако это оставило мало места для моего проекта. Чтобы иметь возможность перенести свой код на CPX, я начал компилировать модули и размещать их на MCU. Оказывается, Holi-Tie не нуждается ни в каких внешних библиотеках. Существующих библиотек в UF2 было достаточно для этого проекта. Запуск файлов *.mpy немного эффективнее, поэтому я сохранил процесс развертывания скомпилированных модулей.
Как видно из приведенного выше сценария компиляции, я работаю на машине с Windows, но использую такие утилиты Unix, как bash и python3. Для этого я использую Cygwin. Этот сценарий можно легко перевести в пакетную версию DOS и встроенную реализацию Python3 для Windows.
Шаг 8: застегиваем галстук


Последний шаг - установить стержень для галстука на место, собрать галстук и снова зашить его. Убедитесь, что CPX доступен. Он понадобится вам при замене батареи или изменении кода.
Рекомендуемые:
Оригами 3D Бьющееся сердце: 6 шагов (с иллюстрациями)

Origami 3D Beating Heart: это трехмерное бумажное сердце, которое начинает мигать (светиться), когда кто-то держит его. Чтобы кого-то удивить, этот подарок - отличная идея, так как он выглядит как простое сердце оригами, но начинает мигать, как бьющееся сердце, когда кто-то прикасается к нему или держит его
Семь лебедей в плавании: 5 шагов (с иллюстрациями)

Seven Swans A-плавание: создайте семь плавающих лебедей из маленьких кусочков и переработанных материалов
Карта стоянки студентов кампуса университета: 7 шагов (с иллюстрациями)

Карта парковки студенческого городка университета: Многие студенты задаются вопросом, где они могут припарковаться на территории университетского городка. Чтобы решить эту проблему, я создал карту парковок с подсветкой главной территории кампуса Университета штата Юта. Карта предназначена для учащихся, чтобы быстро узнать, какие есть варианты парковки
Закон Ленца и правило правой руки: 8 шагов (с иллюстрациями)

Закон Ленца и правило правой руки: современный мир не существовал бы сегодня без электромагнитов; почти все, что мы используем сегодня, так или иначе работает на электромагнитах. Память жесткого диска в вашем компьютере, динамик в вашем радио, стартер в вашей машине, все используют электромагнит
Осветите пряничный домик: 9 шагов (с иллюстрациями)

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