Оглавление:

Холи-галстук: 8 шагов (с иллюстрациями)
Холи-галстук: 8 шагов (с иллюстрациями)

Видео: Холи-галстук: 8 шагов (с иллюстрациями)

Видео: Холи-галстук: 8 шагов (с иллюстрациями)
Видео: ЗМІШАЛА🇷🇺Як назвемо колір в кінці? 2024, Июль
Anonim
Image
Image

От 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

Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels
Присоединение NeoPixels

В основном мы делаем свою светодиодную ленту. Мы просто устанавливаем светодиоды на соединительную жилу, а затем соединяем их друг с другом.

Шаг 1. Приклейте NeoPixels к основному соединению

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

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

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

Шаг 3: припаиваем NeoPixels друг к другу

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

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

Шаг 4. Проверьте подключение

Используйте мультиметр, чтобы проверить возможность подключения:

  1. Положительные связи. Связь должна быть от кончика до хвоста. Убедитесь, что соединение проверено на контактных площадках, а не на проводе.
  2. Заземляющие соединения. Выполните тот же тест, но с заземляющими контактами.
  3. Каждая строка данных. От одной панели данных к другой убедитесь, что есть возможность подключения.

Шаг 4: Присоединение Circuit Playground Express

Присоединение Circuit Playground Express
Присоединение Circuit Playground Express

Circuit Playground Express (CPX) - это сердце системы. У Adafruit есть множество руководств по этому контроллеру. Позже в этом руководстве я выделю несколько функций MCU.

Шаг 1: Припаяйте CPX к нижнему наконечнику NeoPixel

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

Затем переверните стяжку и поместите CPX в желаемое положение. Подайте провод питания к контактной площадке VOUT, провод заземления - к любой контактной площадке заземления, а провод данных - к любой контактной площадке ввода-вывода, кроме A0. Код, который я написал, использует A3.

Проверьте подключение.

Шаг 2: привяжите CPX

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

Шаг 5: Включение CPX

Питание CPX
Питание CPX
Питание CPX
Питание CPX
Питание CPX
Питание 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 доступен. Он понадобится вам при замене батареи или изменении кода.

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