Indholdsfortegnelse:

Holi-Tie: 8 trin (med billeder)
Holi-Tie: 8 trin (med billeder)

Video: Holi-Tie: 8 trin (med billeder)

Video: Holi-Tie: 8 trin (med billeder)
Video: Braces process 2024, Juli
Anonim
Image
Image

Af gwfongMonkey PatchingFølg mere af forfatteren:

Lysende hunderampe
Lysende hunderampe
Stålhjerte og smeltet glasskulptur
Stålhjerte og smeltet glasskulptur
Stålhjerte og smeltet glasskulptur
Stålhjerte og smeltet glasskulptur
Kobbertråd og smeltet glasfugl
Kobbertråd og smeltet glasfugl
Kobbertråd og smeltet glasfugl
Kobbertråd og smeltet glasfugl

Om: Bare en fyr, der ønsker at lave fede ting Mere om gwfong »

Dette er Holi-Tie, et festligt slips designet til at blive brugt i løbet af ferien. Løst baseret på Ampli-Tie af Becky Stern, der bruger et Flora-bord, bruger Holi-Tie en Circuit Python Express (CPX) mikrokontroller til at drive NeoPixel-animationerne og musikken. En knap skifter mellem 2 forskellige NeoPixel -animationer. Kapacitive berøringspuder ændrer NeoPixel -farverne og animationshastighederne. Den anden knap skifter mellem LED -animationer og musik. Den indbyggede mikrofon bruges til at måle omgivende støj til VU-måleranimationen. Og CPX -højttaleren udsender feriechipmelodier.

Alt er kodet ved hjælp af Python -programmeringssproget, der kører oven på CircuitPython -systemet. Den drives af et 3,7V, 500mAH LiPo -batteri, som blev ændret til at have en tænd/sluk -kontakt.

Der er to videoklip, der viser Holi-Tie:

  • Gennemført Holi-Tie
  • Inde i Holi-Tie

Trin 1: Dele og værktøjer

Dele

  • Circuit Playground Express
  • 15x Flora Neopixels
  • Magnet wire
  • Selvklæbende krog og sløjfe tape
  • 500mAH lipo batteri med JST stik
  • Candy Cane slips
  • Mini skydekontakt, SPDT
  • Krympeslange

Ved indkøb af delene ville det være klogt at købe ekstraudstyr. Jeg havde i alt 20 NeoPixels, hvoraf den ene var brudt fra begyndelsen, og en jeg ødelagde. Candy Cane slipset var så billigt, at jeg købte et andet, bare hvis jeg ødelagde det første.

Værktøjer

  • Varm limpistol
  • Lodde station
  • Trådskærere
  • Lille kniv
  • Multimeter
  • Computer
  • Lighter eller varmepistol
  • Tråd og nål

Trin 2: Læsning af slipset

Læser slipset
Læser slipset
Læser slipset
Læser slipset
Læser slipset
Læser slipset

Hovedmålet er at få adgang til den indre slipsekerne og afgrænse linjer, der angiver, hvor lysdioderne skal placeres.

Trin 1: Bind slipset på plads

Det bliver svært at binde slipset, når elektronikken er på plads. Så bind slipset, så det ser godt ud, og knuden er nogenlunde fast og vil ikke løsne sig. Træk derefter forsigtigt i den lille ende af slipset for at åbne hullet for at få slipset over hovedet. Dette er den stilling, slipset vil blive arbejdet på.

Der findes alle slags forskellige slipseknuder. Jeg kender kun den, jeg lærte som barn, Windsor. Det bør ikke være ligegyldigt hvilken knude der bruges.

Trin 2: Åbn slipsets bagside

Rip sømmene op på den ene side af slipsløkken og logoet og derefter ned i midten af slipset. Vær forsigtig, for den skal syes tilbage til sidst.

Trin 3: Tegn linjer, hvor lysdioderne skal placeres

For at få lysdioderne til at se i de hvide stribesektioner af slipset, er det lettere at finde midterlinjen for hver hvid stribesektion på bagsiden af slipskernen og derefter kortlægge det til forsiden af slipskernen. Kontroller og dobbelttjek, at midterlinjen er 1) i midten og 2) parallelt med striben. Finjustering af LED -positionerne vil være mulig, hvis de er lidt slukket. Men det er bedst at få det så tæt på præcis nu snarere end senere.

Test linjernes centrering ved at placere lysdioder på linjerne og lægge stribestoffet ovenpå. Juster, hvor det er nødvendigt.

Trin 3: Montering af NeoPixels

Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels
Vedhæftning af NeoPixels

Grundlæggende laver vi vores egen LED -strip. Vi monterer simpelthen lysdioderne på slipsekernen og forbinder dem derefter med hinanden.

Trin 1: Klæb NeoPixels fast i bunden

Læg en klat varm lim på bagsiden af NeoPixel, og anbring den på midterlinjerne. For sektionerne med 3 NeoPixels, juster den midterste NeoPixel lodret og lim dem først ned. Dette vil gøre det lettere at placere venstre og højre NeoPixel i forhold til midten, især da slipsets bredde øges fra top til bund.

Sørg for at orientere alle NeoPixels i samme retning fra nederst til venstre til øverst til højre. Hvis dette ikke er korrekt, fungerer båndet ikke.

En note om den varme lim. Det vil være tilstrækkeligt at få projektet afsluttet. Hvad angår om det vil vare i de kommende år, skal man bare se.

Trin 3: Lodde NeoPixels til hinanden

Fordi jeg besluttede at lodde NeoPixels sammen i stedet for at bruge ledende tråd, virker hullet i NeoPixel -puderne lidt imod os. Find bare et godt sted på puden til at lodde tråden på. Prøv ikke at fylde hullet med loddetin, men hvis det sker, vil det være OK.

Magnetwire har et tyndt lag isolering omkring en kobberkerne. Skrab isoleringen af med en kniv lige i enderne, hvor de vil blive loddet. Det er bedst at skrabe hele trådens omkreds.

Trin 4: Test forbindelse

Brug et multimeter til at teste forbindelsen mellem:

  1. Positive forbindelser. Der skal være forbindelse fra spids til hale. Sørg for, at testforbindelsen på puderne og ikke ledningen.
  2. Jordforbindelser. Udfør den samme test, men med jordpuderne.
  3. Hver datalinje. Fra den ene datapude til den næste skal du kontrollere, at der er forbindelse.

Trin 4: Montering af Circuit Playground Express

Montering af Circuit Playground Express
Montering af Circuit Playground Express

Circuit Playground Express (CPX) er hjertet i systemet. Adafruit har mange tutorials til denne controller. Senere i denne instruktive vil jeg fremhæve et par af MCU -funktionerne.

Trin 1: Lod CPX'en til bundspidsen NeoPixel

Klip passende længder af magnetwiren til strøm, jord og data. Skub dem gennem slipsekernestoffet, så de rører NeoPixels strøm-, jord- og datapuder. Lod dem ned og sørg for, at de eksisterende ledninger på puderne stadig giver god forbindelse.

Vend derefter slipskernen, og anbring CPX'en i ønsket position. Tilfør strømledningen til VOUT -puden, jordledningen til en hvilken som helst jordpude og datakablet til en anden I/O -pad end A0. Koden, jeg har skrevet, bruger A3.

Test forbindelsen.

Trin 2: Bind CPX

Brug en tråd og en nål til at vælge de fire ækvivalente puder og sy dem ned på slipskernen.

Trin 5: Tænd for CPX

Tænder CPX
Tænder CPX
Tænder CPX
Tænder CPX
Tænder CPX
Tænder CPX

CPX har ikke en tænd/sluk -kontakt. Det betyder, at i det øjeblik batteriet er tilsluttet, tændes slipset. Dette betyder også, at den eneste måde at slukke det på er ved at tage batteriet ud, hvilket er et stort besvær. En enkel løsning er at sætte en sluk/sluk -knap på batteriet.

Trin 1: Skær den 3. pin af på kontakten

En af de ikke-midterste stifter er ikke nødvendig. Skær det af med kontakten.

Trin 2: Lodd kontakten in-line en batterikabel

Skær batteriets jordledning et sted i midten. Skub et stykke varmekrympeslange på hver af jordtrådene. Lod den ene jordledning til en af stifterne og den anden jordledning til den anden stift. Sørg for, at de ikke rører hinanden, eller at loddet rører ved metallegemet.

Kontroller, at der ikke er tilsluttet et multimeter. Skub slangen over de loddede forbindelser, og krym den. Tilføj en smule elektrisk tape til enhver del, der kan mislykkes på grund af bøjningstræthed.

Trin 3: Kontroller, at batteriet fungerer

På dette tidspunkt kan batteriet tilsluttes CPX. Hvis alt gik godt, skulle kontakten kunne tænde og slukke CPX.

Trin 4: Monter batteriet

Sæt en smule klæbebånd på bagsiden af batteriet og på slipskernen. Dette vil holde det på plads, hvis slipset ikke håndteres for meget.

Trin 6: Opsætning af Circuit Playground Express

Jeg vil ikke gå i detaljer om, hvordan du konfigurerer CPX. Adafruit gør det og så nogle. Jeg vil give et par tips til problemer, som jeg ofte stødte på.

CPX fryser

Sandsynligvis på grund af problemer med hukommelsestid i løbetid ville CPX fryse ganske ofte. Den hurtige løsning er at slette og blinke igen. Søg efter "Old Way" i denne vejledning. Grundlæggende er det et par knapper, et træk og slip for at slette, og derefter et træk og slip for at blinke igen.

Advarsel: Dette sletter alt. Al kode på CPX går tabt.

Gemme ændringer i CPX kan forårsage problemer

Jeg opdagede, at nogle gange efter at have gemt en fil på CPX, ville python -runtime være i en dårlig tilstand. Rettelsen blev genstart python -runtime ved at trykke på reset -knappen. Tryk kun på den én gang. Ved at trykke to gange på den starter genblitzprocessen.

At spare direkte på CPX er risikabelt

På grund af muligheden for at CPX'en skal flashes igen, risikerer man at miste al deres kode. Efter at have mistet min kode to gange, fandt jeg på en simpel arbejdsgang. Jeg ville gemme min kode på den lokale harddisk. Når det var klar til at blive testet på CPX, ville jeg simpelthen kopiere det ved at køre et simpelt implementeringsskript.

Trin 7: Kodning af Circuit Playground Express

På dette tidspunkt er CPX og NeoPixels stort set komplette. Der skal ikke udføres andet mekanisk eller elektrisk arbejde med dem. Resten er alt software.

Koden kan findes på min github -konto. Kernepythonkoden skal fungere uden ændringer for alle operativsystemer. Installer ikke de eksterne Adafruit CircuitPython -biblioteker. De bruges ikke.

Her er et resumé på højt niveau af, hvad der foregår i koden.

Hvilket input gør hvad?

  • Knap A: Cykler gennem LED -animationerne
  • Knap B: Cykler gennem sangene
  • Kapacitiv touchpad A1: Ændrer farverne for LED -animationerne
  • Kapacitiv Touchpad A6: Ændrer hastigheden på LED -animationerne

3 animationer eksisterer, men kun 2 er i kraft

kode.py

import pixelsoff

#import vum meter import trapper import glimt… led_animations = [pixelsoff. PixelsOff (pixels), # vumeter. VuMeter (pixels, 100, 400) trapper. Trapper (pixels), twinkle. Twinkle (pixels)]

Jeg portede Ampli-Tie VU måler stilkoden. Den bruger CPX -mikrofonen til at opfange lyd og tænde NeoPixels baseret på lydamplitude. Jeg ville dog have flere animationer. På grund af runtime -hukommelsesbegrænsninger måtte jeg vælge, hvilke animationer jeg ville have. Så som standard vil de to andre, Trapper og Twinkle, køre uden at skulle foretage kodeændringer. For at køre VU -måleranimationen skal den ene eller begge de andre animationer kommenteres, og VU -måleren skal kommenteres.

Musikmanager og offline kodning

frosty_the_snowman.py

importere musical_notes som mn

# Frosty the Snowman # Walter E. Rollins sang = [(mn. G4, mn. HLF), (mn. E4, mn. DTQ), (mn. F4, mn. ETH), (mn. G4, mn. QTR), (mn. C5, mn. HLF), …

convert_to_binary.py

sange = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] for sang i sange: data = song [0] file = song [1] med åben (fil, "wb") som bin_file: til indtastning i data: print ("writing:" + str (entry)) note = entry [0] dur = entry [1] bin_file.write (struct.pack ("<HH", note, dur))

Jeg ville have feriemusik. CPX understøtter både WAV og toner. WAV -filer viste sig at være for store med hensyn til filstørrelse og runtime -hukommelse. Brug af python -datastrukturer til at holde toner og deres varighed viste sig også at bruge for meget runtime -hukommelse. Så jeg ændrede Holi-Tie-koden for at læse en komprimeret binær fil, der kun indeholdt de nødvendige sangdata i et komprimeret binært format. Jeg skrev et script, der læser en sang, der er i en python -datastruktur, og skriver den ud i det binære format. At have sangen kodet som binære data i en fil gør sangen både lille og dynamisk. Når sangen er spillet, frigives hukommelsen.

Det er trivielt at tilføje flere sange. For detaljer, se README.md i sange.

Knap A Animerer NeoPixels, B Spiller musik, men ikke samtidigt

kode.py

def button_a_pressed ():

hvis music.is_playing (): # Stop musik, hvis du spiller musik.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Kør no-op animation next_led_animation (0) hvis musik.is_playing (): # Toggle musik til eller fra music.stop () else: music.play ()

Selv med det mere hukommelseseffektive musikstyringssystem kunne jeg ikke gemme 2 animationer i runtime -hukommelse, mens jeg spillede 1 af dem og også afspilte en sang på samme tid. Fordi jeg allerede har valgt slet ikke at have VU -meter i runtime -hukommelse, ville jeg ikke reducere antallet af animationer til kun 1. Så jeg skrev koden, så enten animationen afspilles, eller musikken afspilles, men ikke begge. En anden mulighed var at reducere antallet af NeoPixels, men det ville miste noget af animationens coolness.

Python Code Funkiness

Selvom jeg er en erfaren softwareudvikler, havde jeg aldrig skrevet Python. Efter at jeg fik styr på det og stirrede på at anvende god kodningspraksis som indkapsling og modularisering, opdagede jeg hurtigt, at jeg brugte for meget runtime -hukommelse. Så der er en hel del ikke-DRY kode. Jeg var også nødt til at bruge nogle MicroPython -teknikker som const () for yderligere at reducere problemer med hukommelsestid.

Kompilerede moduler

udarbejde

#!/bin/bash

compiler = ~/development/circuitpython/mpy-cross-3.x-windows.exe cd sange python3./convert_to_binary.py cd.. til f i *.py; gør hvis

Tidligt i projektet fulgte jeg Adafruit's råd og lagrede alle Adafruit CircuitPython -biblioteker på flash. Dette efterlod dog lidt plads til mit projekt. For at kunne få min kode på CPX begyndte jeg at samle modulerne og placere dem på MCU'en. Det viser sig, at Holi-Tie ikke har brug for nogen af de eksterne biblioteker. De eksisterende biblioteker i UF2 var tilstrækkelige til dette projekt. At køre *.mpy -filer er lidt mere effektivt, så jeg bevarede processen med at implementere de kompilerede moduler.

Som det fremgår af kompileringskriptet ovenfor, arbejder jeg på en Windows -maskine, men bruger Unix -værktøjer som bash og python3. Jeg bruger Cygwin til at opnå dette. Dette script kan let oversættes til DOS -batch og en Windows -native Python3 -implementering.

Trin 8: Knapning af slipset

Knapning af slipset
Knapning af slipset
Knapning af slipset
Knapning af slipset

Det sidste trin er at sætte slipskernen tilbage på plads, samle slipset igen og sy det op igen. Sørg for at kunne gøre CPX tilgængelig. Du får brug for det, når du udskifter batteriet eller foretager kodeændringer.

Anbefalede: