Innholdsfortegnelse:

The Holi-Tie: 8 Steps (med bilder)
The Holi-Tie: 8 Steps (med bilder)

Video: The Holi-Tie: 8 Steps (med bilder)

Video: The Holi-Tie: 8 Steps (med bilder)
Video: This Painting Holds a Dark Secret | Last Supper ARG Explained 2024, Juli
Anonim
Image
Image

Av gwfongMonkey PatchingFollow More av forfatteren:

Illuminating Dog Ramp
Illuminating Dog Ramp
Stålhjerte og smeltet glassskulptur
Stålhjerte og smeltet glassskulptur
Stålhjerte og smeltet glassskulptur
Stålhjerte og smeltet glassskulptur
Kobbertråd og smeltet glassfugl
Kobbertråd og smeltet glassfugl
Kobbertråd og smeltet glassfugl
Kobbertråd og smeltet glassfugl

Om: Bare en fyr som ønsker å lage kule ting Mer om gwfong »

Dette er Holi-Tie, en festlig slips designet for å brukes i ferien. Løst basert på Ampli-Tie av Becky Stern som bruker et Flora-bord, bruker Holi-Tie en Circuit Python Express (CPX) mikrokontroller for å drive NeoPixel-animasjonene og musikken. En knapp skifter mellom 2 forskjellige NeoPixel -animasjoner. Kapasitive berøringsputer endrer NeoPixel -fargene og animasjonshastighetene. Den andre knappen skifter mellom LED -animasjoner og musikk. Den innebygde mikrofonen brukes til å måle omgivelsesstøy for VU-måleranimasjonen. Og CPX -høyttaleren sender ut feriebrikke -melodier.

Alt er kodet ved hjelp av programmeringsspråket Python som kjører på toppen av CircuitPython -systemet. Den drives av et 3,7V, 500mAH LiPo -batteri som ble endret for å ha en av/på -bryter.

Det er to videoklipp som viser Holi-Tie:

  • Fullført Holi-Tie
  • Inne i Holi-Tie

Trinn 1: Deler og verktøy

Deler

  • Circuit Playground Express
  • 15x Flora Neopixels
  • Magnettråd
  • Selvklebende krokbånd
  • 500mAH lipo -batteri med JST -kontakt
  • Candy Cane slips
  • Mini skyvebryter, SPDT
  • Krympeslange

Når du skaffer delene, vil det være lurt å kjøpe tillegg. Jeg hadde totalt 20 NeoPixels, hvorav en var ødelagt fra begynnelsen og en jeg ødela. Slipset til Candy Cane var så billig at jeg kjøpte et nytt, i tilfelle jeg ødela det første.

Verktøy

  • Varm limpistol
  • Loddestasjon
  • Avbitertang
  • Liten kniv
  • Multimeter
  • Datamaskin
  • Lighter eller varmepistol
  • Tråd og nål

Trinn 2: Lese slipset

Leser slipsen
Leser slipsen
Leser slipsen
Leser slipsen
Leser slipsen
Leser slipsen

Hovedmålet er å få tilgang til den indre slipsekjernen og avgrense linjer som angir hvor lysdiodene skal plasseres.

Trinn 1: Knyt slipset på plass

Det blir vanskelig å knytte slipset når elektronikken er på plass. Så bind slipset slik at det ser bra ut og knuten er ganske fast og ikke vil løsne seg. Trekk deretter forsiktig i den lille enden av slipset for å åpne hullet for å få slipset over hodet. Dette er stillingen slipset skal jobbes med.

Det finnes alle slags forskjellige slipseknuter. Jeg kjenner bare den jeg lærte som liten, Windsor. Det skal ikke ha noen rolle hvilken knute som brukes.

Trinn 2: Åpne baksiden av slipset

Rip opp sømmene på den ene siden av sløyfesløyfen og logoen og deretter nedover midten av slipset. Vær forsiktig fordi den må sys opp igjen på slutten.

Trinn 3: Tegn linjer der lysdiodene skal plasseres

For å få lysdiodene til å vises i de hvite stripeseksjonene av slipset, er det lettere å finne senterlinjen for hver hvit stripeseksjon på baksiden av slipsekjernen og deretter kartlegge den foran på slipsekjernen. Kontroller og dobbeltsjekk at midtlinjen er 1) i midten og 2) parallell med stripen. Finjustering av LED -posisjonene vil være mulig hvis de er litt av. Men det er best å få det så nær nøyaktig nå enn senere.

Test midtpunktet på linjene ved å plassere lysdioder på linjene og legge stripestoffet på toppen. Juster der det trengs.

Trinn 3: Fest NeoPixels

Fest NeoPixels
Fest NeoPixels
Fest NeoPixels
Fest NeoPixels
Fest NeoPixels
Fest NeoPixels
Fest NeoPixels
Fest NeoPixels

I utgangspunktet lager vi vår egen LED -stripe. Vi monterer enkelt lysdiodene på slipsekjernen og kobler dem deretter til hverandre.

Trinn 1: Fest NeoPixels til festekjernen

Legg en klatt varmt lim på baksiden av NeoPixel, legg den på senterlinjene. For seksjonene med 3 NeoPixels, juster den midtre NeoPixel vertikalt og lim dem ned først. Dette vil gjøre det lettere å plassere venstre og høyre NeoPixel i forhold til midten spesielt gitt at bredden på slipset øker fra topp til bunn.

Sørg for å orientere alle NeoPixels i samme retning, fra nedre venstre til øvre høyre. Hvis dette ikke er riktig, vil stripen ikke fungere.

Et notat om det varme limet. Det vil være tilstrekkelig å få prosjektet fullført. Når det gjelder om det vil vare i årene som kommer, må man bare se.

Trinn 3: Lodd NeoPixels til hverandre

Fordi jeg bestemte meg for å lodde NeoPixels sammen i stedet for å bruke ledende tråd, fungerer hullet i NeoPixel -putene litt mot oss. Bare finn et godt sted på puten å lodde tråden på. Ikke prøv å fylle hullet med loddetinn, men hvis det skjer, vil det være OK.

Magnettråd har et tynt lag isolasjon rundt en kobberkjerne. Skrap av isolasjonen med en kniv bare i endene der de skal loddes. Det er best å skrape hele omkretsen av ledningen.

Trinn 4: Test tilkobling

Bruk et multimeter for å teste tilkoblingen til:

  1. Positive forbindelser. Det skal være tilkobling fra spiss til hale. Sørg for at testtilkoblingen på putene og ikke ledningen.
  2. Jordforbindelser. Utfør den samme testen, men med bakken.
  3. Hver datalinje. Kontroller at det er tilkobling fra en datapad til den neste.

Trinn 4: Koble til Circuit Playground Express

Fester Circuit Playground Express
Fester Circuit Playground Express

Circuit Playground Express (CPX) er hjertet i systemet. Adafruit har mange opplæringsprogrammer for denne kontrolleren. Senere i denne instruksen vil jeg markere noen av MCU -funksjonene.

Trinn 1: Lodd CPX til den nederste spissen NeoPixel

Klipp ut passende lengder på magnetledningen for strøm, jord og data. Skyv dem gjennom bindestoffet slik at de berører NeoPixel -strøm, jord og dataputer. Lodde dem ned og sørg for at de eksisterende ledningene på putene fortsatt gir god tilkobling.

Vend deretter slipskjernen og sett CPX i ønsket posisjon. Før strømledningen til VOUT -puten, jordledningen til en hvilken som helst jordpute og datakabelen til en annen I/O -pad enn A0. Koden jeg har skrevet bruker A3.

Test tilkoblingen.

Trinn 2: Bind ned CPX

Bruk en tråd og en nål til å velge de fire like store padsene og sy dem fast på festekjernen.

Trinn 5: Slå på CPX

Drift av CPX
Drift av CPX
Drift av CPX
Drift av CPX
Drift av CPX
Drift av CPX

CPX har ikke en av/på -bryter. Dette betyr at i det øyeblikket batteriet er plugget inn, vil slipset slås på. Dette betyr også at den eneste måten å slå den av er ved å koble fra batteriet, noe som er et stort problem. En enkel løsning er å sette en av/på -bryter på batteriet.

Trinn 1: Klipp av den tredje pinnen på bryteren

En av de ikke-midtre pinnene er ikke nødvendig. Skjær den av med bryteren.

Trinn 2: Lodd bryteren på linje med en batteriledning

Kutt batteriets jordledning et sted i midten. Skyv et stykke varmekrympeslange på hver av jordledningene. Lodd den ene jordledningen til en av pinnene og den andre jordledningen til den andre pinnen. Pass på at de ikke berører hverandre eller at loddetinn berører metallhuset.

Kontroller at de ikke er tilkoblet med et multimeter. Skyv slangen over de loddede forbindelsene og krympe den. Legg litt elektrisk tape til alle deler som kan mislykkes på grunn av bøyningstretthet.

Trinn 3: Kontroller at batteriet fungerer

På dette tidspunktet kan batteriet kobles til CPX. Hvis alt gikk bra, skulle bryteren kunne slå CPX på og av.

Trinn 4: Monter batteriet

Legg litt klebebånd på baksiden av batteriet og på festekjernen. Dette vil holde det på plass hvis slipset ikke håndteres for mye.

Trinn 6: Sette opp Circuit Playground Express

Jeg vil ikke gå i detalj om hvordan du konfigurerer CPX. Adafruit gjør det og så litt. Jeg vil gi noen tips for problemer som jeg har møtt ganske ofte.

CPX fryser

Sannsynligvis på grunn av problemer med driftstiden, vil CPX fryse ganske ofte. Den hurtige løsningen er å slette og blinke på nytt. Søk etter "Old Way" i denne instruksjonen. I utgangspunktet er det et par knappetrykk, et dra og slipp for å slette, og deretter et dra og slipp for å blinke på nytt.

Advarsel: Dette sletter alt. All kode på CPX går tapt.

Lagring av endringer i CPX kan forårsake problemer

Jeg oppdaget at noen ganger etter å ha lagret en fil på CPX, ville python -kjøretiden være i dårlig tilstand. Løsningen var å starte python -kjøretiden på nytt ved å trykke på tilbakestillingsknappen. Trykk på den bare én gang. Trykk på den to ganger for å starte re-flash-prosessen.

Å spare direkte på CPX er risikabelt

På grunn av muligheten for at CPX må blinker på nytt, risikerer man å miste hele koden. Etter å ha mistet koden min to ganger, kom jeg på en enkel arbeidsflyt. Jeg ville lagret koden min på den lokale harddisken. Når den var klar til å bli testet på CPX, ville jeg ganske enkelt kopiere den ved å kjøre et enkelt distribusjonsskript.

Trinn 7: Koding av Circuit Playground Express

På dette tidspunktet er CPX og NeoPixels ganske komplette. Ingen andre mekaniske eller elektriske arbeider må utføres med dem. Resten er programvare.

Koden finner du på min github -konto. Kjernepythonkoden skal fungere uten endringer for alle operativsystemer. Ikke installer de eksterne Adafruit CircuitPython -bibliotekene. De er ikke brukt.

Her er et sammendrag på høyt nivå av hva som skjer i koden.

Hvilken inngang gjør hva?

  • Knapp A: Bla gjennom LED -animasjonene
  • Knapp B: Bla gjennom sangene
  • Kapasitiv berøringsplate A1: Endrer fargene på LED -animasjonene
  • Kapasitiv berøringsplate A6: Endrer hastigheten på LED -animasjonene

3 animasjoner eksisterer, men bare to er i kraft

code.py

importer piksler av

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

Jeg portet Ampli-Tie VU-målerstilkoden. Den bruker CPX -mikrofonen til å plukke opp lyd og lyse opp NeoPixels basert på lydamplitude. Imidlertid ønsket jeg flere animasjoner. På grunn av begrensninger i kjøretidsminne måtte jeg velge hvilke animasjoner jeg ønsket. Så som standard vil de to andre, Trapper og Twinkle, kjøre uten å måtte gjøre kodeendringer. For å kjøre VU -måleranimasjonen må en eller begge de andre animasjonene kommenteres og VU -måler ikke kommenteres.

Musikkbehandling og off-line koding

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

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

Jeg ønsket feriemusikk. CPX støtter både WAV og toner. WAV -filer viste seg å være for store når det gjelder filstørrelse og kjøretidsminne. Å bruke python -datastrukturer til å holde toner og varigheten deres viste seg også å bruke for mye kjøretidsminne. Så jeg endret Holi-Tie-koden for å lese en komprimert binærfil som bare inneholdt de nødvendige sangdataene i et komprimert binært format. Jeg skrev et manus som leser en sang som er inneholdt i en python -datastruktur og skriver den ut til det binære formatet. Å ha sangen kodet som binære data i en fil gjør sangen både liten og dynamisk. Når sangen er ferdig spilt, slippes minnet.

Det er trivielt å legge til flere sanger. For detaljer, se README.md i sanger.

Knapp A Animerer NeoPixels, B Spiller musikk, men ikke samtidig

code.py

def button_a_pressed ():

if music.is_playing (): # Stop music if playing music.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Run no-op animation next_led_animation (0) if music.is_playing (): # Toggle musikk på eller av music.stop () else: music.play ()

Selv med det mer minneeffektive musikkstyringssystemet klarte jeg ikke å beholde 2 animasjoner av kjøretidsminne mens jeg spilte en av dem og også spille en sang samtidig. Fordi jeg allerede valgte å ikke ha VU -måler i kjøretidsminne i det hele tatt, ønsket jeg ikke å redusere antall animasjoner til bare 1. Så jeg skrev koden slik at enten animasjonen spilles eller musikken spilles, men ikke både. Et annet alternativ var å redusere antallet NeoPixels, men det ville miste noe av animasjonskulden.

Python Code Funkiness

Selv om jeg er en erfaren programvareutvikler, hadde jeg aldri skrevet Python. Etter at jeg fikk taket på det og stirret på gode kodingsrutiner som innkapsling og modularisering, oppdaget jeg raskt at jeg brukte for mye kjøretidsminne. Så det er en god del ikke-DRY-kode. Jeg måtte også bruke noen MicroPython -teknikker som const () for å ytterligere redusere problemer med minnetiden.

Kompilerte moduler

kompilere

#!/bin/bash

kompilator = ~/utvikling/circuitpython/mpy-cross-3.x-windows.exe cd-sanger python3./convert_to_binary.py cd.. for f in *.py; gjør hvis

Tidlig i prosjektet fulgte jeg Adafruits råd og lagret alle Adafruit CircuitPython -bibliotekene på flash. Dette ga imidlertid lite rom for prosjektet mitt. For å kunne få koden min til CPX begynte jeg å kompilere modulene og plassere dem på MCU. Det viser seg at Holi-Tie ikke trenger noen av de eksterne bibliotekene. De eksisterende bibliotekene i UF2 var tilstrekkelig for dette prosjektet. Å kjøre *.mpy -filer er litt mer effektivt, så jeg beholdt prosessen med å distribuere de kompilerte modulene.

Som det fremgår av kompileringsskriptet ovenfor, jobber jeg på en Windows -maskin, men bruker Unix -verktøy som bash og python3. Jeg bruker Cygwin for å oppnå dette. Dette skriptet kan enkelt oversettes til DOS -batch og en Windows -native Python3 -implementering.

Trinn 8: Knapp opp slipset

Knapper opp slipset
Knapper opp slipset
Knapper opp slipset
Knapper opp slipset

Det siste trinnet er å sette slipsekjernen tilbake på plass, montere slipset igjen og sy det opp igjen. Sørg for å kunne gjøre CPX tilgjengelig. Du trenger det når du skal bytte batteri eller gjøre kodeendringer.

Anbefalt: