Съдържание:

Holi-Tie: 8 стъпки (със снимки)
Holi-Tie: 8 стъпки (със снимки)

Видео: Holi-Tie: 8 стъпки (със снимки)

Видео: Holi-Tie: 8 стъпки (със снимки)
Видео: Тя е на 9 Години, но Нейният Стомах е Като Бременна 2024, Юли
Anonim
Image
Image

От gwfongMonkey Patching Следвайте още от автора:

Осветяваща рампа за кучета
Осветяваща рампа за кучета
Скулптура от стоманено сърце и стопено стъкло
Скулптура от стоманено сърце и стопено стъкло
Скулптура от стоманено сърце и стопено стъкло
Скулптура от стоманено сърце и стопено стъкло
Медна тел и стопено стъклено пеперуда
Медна тел и стопено стъклено пеперуда
Медна тел и стопено стъкло пеперуда
Медна тел и стопено стъкло пеперуда

За: Просто човек, който иска да направи готини неща Повече за gwfong »

Това е Holi-Tie, празнична вратовръзка, предназначена да се носи през празниците. Свободно базиран на Ampli-Tie на Becky Stern, който използва платка Flora, Holi-Tie използва микроконтролер Circuit Python Express (CPX) за управление на NeoPixel анимации и музика. Бутонът се променя между 2 различни NeoPixel анимации. Капацитивните сензорни подложки променят цветовете на NeoPixel и скоростта на анимация. Другият бутон превключва между LED анимации и музика. Вграденият микрофон се използва за измерване на околния шум за анимацията на VU метър. А CPX високоговорителят извежда мелодии за празнични чипове.

Всичко се кодира с помощта на езика за програмиране на Python, работещ върху системата CircuitPython. Захранва се от 3.7V, 500mAH LiPo батерия, която е модифицирана, за да има превключвател за включване/изключване.

Има два видеоклипа, които показват Holi-Tie:

  • Завършен Holi-Tie
  • Вътре в Holi-Tie

Стъпка 1: Части и инструменти

Части

  • Circuit Playground Express
  • 15x флора неопиксели
  • Магнитна жица
  • Залепваща лента с кука и контур
  • 500mAH липо батерия с JST конектор
  • Вратовръзка Candy Cane
  • Мини плъзгащ се превключвател, SPDT
  • Термосвиваеми тръби

Когато се снабдявате с части, би било разумно да си купите екстри. Имах общо 20 NeoPixels, един от които беше счупен от самото начало и един, който съсипах. Вратовръзката Candy Cane беше толкова евтина, че си купих втора, в случай, че съсипя първата.

Инструменти

  • Пистолет за горещо лепило
  • Станция за запояване
  • Резачки за тел
  • Малък нож
  • Мултиметър
  • Компютър
  • Запалка или термопистолет
  • Конец и игла

Стъпка 2: Подготовка на вратовръзката

Подготовка на вратовръзката
Подготовка на вратовръзката
Подготовка на вратовръзката
Подготовка на вратовръзката
Подготовка на вратовръзката
Подготовка на вратовръзката

Основната цел е да се получи достъп до вътрешната сърцевина на връзката и да се разграничат линиите, показващи къде трябва да бъдат позиционирани светодиодите.

Стъпка 1: Завържете вратовръзката на място

Ще бъде трудно да завържете вратовръзката, когато електрониката е на мястото си. Затова завържете вратовръзката, така че да изглежда добре, а възелът да е доста твърд и да не се разплита. След това внимателно издърпайте малкия край на вратовръзката, за да отворите дупката, за да пренесете вратовръзката над главата. Това е позицията, върху която ще се работи по равенството.

Има всякакви различни възли за вратовръзка. Познавам само този, който научих като дете, Уиндзор. Не трябва да има значение кой възел се използва.

Стъпка 2: Отворете задната част на вратовръзката

Разкъсайте шевовете от едната страна на контура за вратовръзка и логото и след това надолу по центъра на вратовръзката. Бъдете внимателни, защото тя трябва да бъде зашита обратно в края.

Стъпка 3: Начертайте линии, където трябва да се поставят светодиодите

За да се появят светодиодите в участъците с бели ивици на вратовръзката, е по -лесно да се намери централната линия за всяка секция с бяла ивица на гърба на сърцевината на вратовръзката и след това да се картографира това в предната част на сърцевината на вратовръзката. Проверете и проверете отново дали централната линия е 1) в центъра и 2) успоредна на ивицата. Фината настройка на позициите на светодиодите ще бъде възможна, ако те са малко изключени. Но най -добре е да го приближите максимално точно сега, а не по -късно.

Тествайте центрирането на линиите, като поставите светодиоди върху линиите и поставите тъканта с ивици отгоре. Регулирайте, където е необходимо.

Стъпка 3: Прикрепване на NeoPixels

Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels
Прикрепване на NeoPixels

По принцип правим собствена LED лента. Ние просто монтираме светодиодите върху връзката и след това ги свързваме един с друг.

Стъпка 1: Прикрепете NeoPixels към сърцевината на вратовръзката

Поставете парче горещо лепило на гърба на NeoPixel, поставете го върху централните линии. За секциите с 3 NeoPixel, подравнете вертикално централния NeoPixel и ги залепете първо надолу. Това ще улесни позиционирането на левия и десния NeoPixel спрямо центъра, особено като се има предвид, че ширината на вратовръзката се увеличава отгоре надолу.

Не забравяйте да ориентирате всички NeoPixels в една и съща посока, като се движите от долния ляв на горния десен ъгъл. Ако това не е правилно, лентата няма да работи.

Бележка за горещото лепило. Достатъчно е проектът да бъде завършен. Що се отнася до това дали това ще продължи години напред, просто трябва да се види.

Стъпка 3: Запоявайте NeoPixels един към друг

Тъй като реших да споя NeoPixels заедно, вместо да използвам проводима нишка, дупката в 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 подложката, заземителния проводник към всяка заземяваща подложка, а проводникът за данни към всяка I/O подложка, различна от A0. Кодът, който написах, използва A3.

Тествайте свързаността.

Стъпка 2: Завържете CPX

С помощта на конец и игла вземете всякакви четири равнопоставени подложки и ги зашийте върху сърцевината на вратовръзката.

Стъпка 5: Захранване на CPX

Захранване на CPX
Захранване на CPX
Захранване на CPX
Захранване на CPX
Захранване на CPX
Захранване на CPX

CPX няма превключвател за включване/изключване. Това означава, че в момента, в който батерията е включена, вратовръзката ще се включи. Това също означава, че единственият начин да го изключите е чрез изключване на батерията, което е голяма неприятност. Просто решение е да поставите превключвател за изключване/изключване на батерията.

Стъпка 1: Изрежете третия щифт на превключвателя

Един от нецентрираните щифтове не е необходим. Прекъснете го на едно ниво с тялото на превключвателя.

Стъпка 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. Те не се използват.

Ето обобщение на високо ниво за това, което се случва в кода.

Какъв вход дава какво?

  • Бутон А: Преминава през LED анимациите
  • Бутон В: Преминава през песните
  • Капацитивен тъчпад A1: Променя цветовете за LED анимациите
  • Капацитивен тъчпад A6: Променя скоростта на LED анимациите

3 анимации съществуват, но само 2 са в сила

code.py

импортиране на пиксели

#import vumeter импортиране на стълби внос twinkle… led_animations = [pixelsoff. PixelsOff (пиксели), # vumeter. VuMeter (пиксели, 100, 400) стълби. стълби (пиксели), twinkle. Twinkle (пиксели))

Портирах кода на стила на Ampli-Tie VU метър. Той използва микрофона CPX за улавяне на звук и осветяване на NeoPixels въз основа на амплитудата на звука. Исках обаче повече анимации. Поради ограничения в паметта по време на работа трябваше да избера кои анимации искам. Така че по подразбиране другите две, Stairs и Twinkle, ще работят, без да се налага да правите промени в кода. За да стартирате анимацията на VU метър, една или и двете други анимации трябва да бъдат коментирани и VU метър да бъде коментиран.

Музикален мениджър и офлайн кодиране

frosty_the_snowman.py

импортирайте музикални бележки като mn

# Frosty the Snowman # Walter E. Rollins песен = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. 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] с отворен (файл, "wb") като bin_file: за въвеждане в данни: print ("писане:" + str (запис)) бележка = запис [0] dur = запис [1] bin_file.write (struct.pack ("<HH", бележка, dur))

Исках празнична музика. CPX поддържа както WAV, така и тонове. WAV файловете се оказаха твърде големи по отношение на размера на файла и паметта по време на изпълнение. Използването на структури от данни на python за задържане на тонове и тяхната продължителност също се оказа, че използва твърде много памет по време на работа. Затова промених кода на Holi-Tie, за да прочета компресиран двоичен файл, който съдържа само необходимите данни за песента в компресиран двоичен формат. Написах скрипт, който чете песен, държана в структура от данни на python, и я записва в двоичен формат. Кодирането на песента като двоични данни във файл прави песента малка и динамична. След като песента приключи, паметта се освобождава.

Тривиално е да добавите още песни. За подробности вижте README.md в песни.

Бутон А анимира NeoPixels, B възпроизвежда музика, но не едновременно

code.py

def button_a_pressed ():

if music.is_playing (): # Спрете музиката при възпроизвеждане на музика.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. След като се овладях и се вгледах в прилагането на добри кодиращи практики като капсулиране и модулиране, бързо открих, че използвам твърде много памет по време на работа. Така че има доста не-DRY код. Също така трябваше да използвам някои техники на MicroPython, като const (), за да намаля допълнително проблемите с паметта по време на изпълнение.

Компилирани модули

компилирам

#!/bin/bash

компилатор = ~/development/circuitpython/mpy-cross-3.x-windows.exe cd песни python3./convert_to_binary.py cd.. за f в *.py; направете, ако

В началото на проекта следвах съветите на Adafruit и съхранявах всички библиотеки на Adafruit CircuitPython на флаш. Това обаче остави малко място за моя проект. За да мога да получа кода си в CPX, започнах да компилирам модулите и да ги поставям в MCU. Оказва се, че Holi-Tie не се нуждае от външни библиотеки. Съществуващите библиотеки в UF2 бяха достатъчни за този проект. Изпълнението на *.mpy файлове е малко по -ефективно, затова запазих процеса на разгръщане на компилираните модули.

Както е видно от скрипта за компилиране по -горе, работя на машина с Windows, но използвам помощни програми на Unix като bash и python3. Използвам Cygwin, за да постигна това. Този скрипт може лесно да бъде преведен на партида DOS и на собствена реализация на Python3 на Windows.

Стъпка 8: Закопчаване на вратовръзката

Закопчаване на вратовръзката
Закопчаване на вратовръзката
Закопчаване на вратовръзката
Закопчаване на вратовръзката

Последната стъпка е да поставите сърцевината на вратовръзката на място, да я сглобите отново и да я зашиете обратно. Не забравяйте да можете да направите CPX достъпен. Ще ви е необходим, когато сменяте батерията или правите промени в кода.

Препоръчано: