Innehållsförteckning:

The Holi-Tie: 8 Steps (with Pictures)
The Holi-Tie: 8 Steps (with Pictures)

Video: The Holi-Tie: 8 Steps (with Pictures)

Video: The Holi-Tie: 8 Steps (with Pictures)
Video: How to Tie a School Tie 2024, Juli
Anonim
Image
Image

Av gwfongMonkey PatchingFollow Mer av författaren:

Lysande hundramp
Lysande hundramp
Stålhjärta och smält glasskulptur
Stålhjärta och smält glasskulptur
Stålhjärta och smält glasskulptur
Stålhjärta och smält glasskulptur
Koppartråd och smält glasfjäril
Koppartråd och smält glasfjäril
Koppartråd och smält glasfjäril
Koppartråd och smält glasfjäril

Om: Bara en kille som vill göra coola saker Mer om gwfong »

Detta är Holi-Tie, en festlig slips som är avsedd att bäras under semestern. Löst baserat på Ampli-Tie av Becky Stern som använder ett Flora-kort använder Holi-Tie en Circuit Python Express (CPX) mikrokontroller för att driva NeoPixel-animationerna och musiken. En knapp växlar mellan 2 olika NeoPixel -animationer. Kapacitiva pekplattor ändrar NeoPixels färger och animationshastigheter. Den andra knappen växlar mellan LED -animationer och musik. Den inbyggda mikrofonen används för att mäta omgivande brus för VU-mätaranimationen. Och CPX -högtalaren matar ut julchips.

Allt är kodat med Python -programmeringsspråket som körs ovanpå CircuitPython -systemet. Den drivs av ett 3,7V, 500mAH LiPo -batteri som modifierades för att ha en på/av -omkopplare.

Det finns två videoklipp som visar Holi-Tie:

  • Slutfört Holi-Tie
  • Inuti Holi-Tie

Steg 1: Delar och verktyg

Delar

  • Circuit Playground Express
  • 15x Flora Neopixels
  • Magnettråd
  • Självhäftande tejp
  • 500mAH lipobatteri med JST -kontakt
  • Candy Cane slips
  • Mini skjutbrytare, SPDT
  • Krympslang

När du köper delarna är det klokt att köpa tillbehör. Jag hade totalt 20 NeoPixels, varav en var trasig från början och en jag förstörde. Candy Cane slipsen var så billig att jag köpte en andra om jag förstör den första.

Verktyg

  • Lim pistol
  • Lödstation
  • Avbitartång
  • Liten kniv
  • Multimeter
  • Dator
  • Tändare eller värmepistol
  • Tråd och nål

Steg 2: Avläsning av slipsen

Läser slipsen
Läser slipsen
Läser slipsen
Läser slipsen
Läser slipsen
Läser slipsen

Huvudmålet är att få åtkomst till den inre knutkärnan och avgränsa linjer som anger var lysdioderna ska placeras.

Steg 1: Knyt slipsen på plats

Det blir svårt att knyta slipsen när elektroniken är på plats. Så bind slipsen så att den ser bra ut och knuten är ganska fast och kommer inte att lossna. Dra sedan försiktigt i den lilla änden av slipsen för att öppna hålet för att få slipsen över huvudet. Det är den positionen slipsen kommer att arbetas med.

Det finns alla slags olika slipsar. Jag känner bara den som jag lärde mig som liten, Windsor. Det ska inte spela någon roll vilken knut som används.

Steg 2: Öppna slipsens baksida

Öppna sömmarna på ena sidan av slipsöglan och logotypen och sedan ner i mitten av slipsen. Var försiktig eftersom det måste sys tillbaka i slutet.

Steg 3: Rita linjer där lysdioderna ska placeras

För att lysdioderna ska visas i de vita randavsnitten på slipsen är det lättare att hitta mittlinjen för varje vit randavsnitt på baksidan av slipskärnan och sedan kartlägga det till slipsens kärna. Kontrollera och dubbelkolla att mittlinjen är 1) i mitten och 2) parallell med randen. Finjustering av LED -positionerna kommer att vara möjligt om de är lite avstängda. Men det är bäst att få det så nära exakt nu snarare än senare.

Testa linjernas centreradhet genom att placera lysdioder på linjerna och lägga randtyget ovanpå. Justera där det behövs.

Steg 3: Fäst NeoPixels

Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels
Fäster NeoPixels

I grund och botten gör vi vår egen LED -remsa. Vi monterar helt enkelt lysdioderna på dragkärnan och ansluter dem sedan till varandra.

Steg 1: Fäst NeoPixels på slipsen

Lägg en klick varmt lim på baksidan av NeoPixel och placera det på mittlinjerna. För sektionerna med 3 NeoPixels, justera vertikalt mitt NeoPixel vertikalt och limma ner dem först. Detta kommer att göra det lättare att placera vänster och höger NeoPixel i förhållande till mitten, särskilt med tanke på att slipsets bredd ökar från topp till botten.

Var noga med att rikta alla NeoPixels i samma riktning, från nedre vänster till övre högra hörnet. Om detta inte är korrekt fungerar inte remsan.

En anteckning om det heta limet. Det räcker med att få projektet genomfört. När det gäller huruvida det kommer att pågå i många år framöver måste man bara se.

Steg 3: Löd NeoPixels till varandra

Eftersom jag bestämde mig för att lödda NeoPixels tillsammans istället för att använda ledande tråd, fungerar hålet i NeoPixel -kuddarna lite mot oss. Hitta bara ett bra ställe på dynan för att löda tråden. Försök inte att fylla hålet med löd, men om det händer blir det OK.

Magnettråd har ett tunt lager isolering runt en kopparkärna. Skrapa bort isoleringen med en kniv precis vid ändarna där de kommer att lödas. Det är bäst att skrapa hela omkretsen av tråden.

Steg 4: Testa anslutning

Använd en multimeter för att testa anslutningen av:

  1. Positiva kopplingar. Det bör finnas anslutning från spets till svans. Se till att testanslutningen på plattorna och inte kabeln.
  2. Jordanslutningar. Utför samma test men med markkuddarna.
  3. Varje datarad. Kontrollera att det finns anslutning från en datadator till nästa.

Steg 4: Anslutning av Circuit Playground Express

Anslutning av Circuit Playground Express
Anslutning av Circuit Playground Express

Circuit Playground Express (CPX) är hjärtat i systemet. Adafruit har många självstudier för denna handkontroll. Senare i denna instruerbara, kommer jag att markera några av MCU -funktionerna.

Steg 1: Löd CPX till NeoPixel på botten

Klipp lämpliga längder på magnetkabeln för kraft, jord och data. Skjut dem genom tygkärnan så att de vidrör NeoPixels ström, jord och datadynor. Lödda dem och se till att de befintliga trådarna på dynorna fortfarande gör bra anslutningar.

Vänd därefter knytkärnan och placera CPX i önskeläget. Mata strömkabeln till VOUT -plattan, jordledningen till valfri jordplatta och datakabeln till en annan I/O -pad än A0. Koden jag har skrivit använder A3.

Testa anslutningen.

Steg 2: Knyt ner CPX

Använd en tråd och en nål och välj alla fyra likadistanta kuddar och sy fast dem på bandkärnan.

Steg 5: Driva CPX

Driva CPX
Driva CPX
Driva CPX
Driva CPX
Driva CPX
Driva CPX

CPX har ingen på/av -omkopplare. Det betyder att i det ögonblick som batteriet är anslutet slås slipsen på. Detta innebär också att det enda sättet att stänga av det är att koppla ur batteriet, vilket är ett stort krångel. En enkel lösning är att sätta en av/på -knapp på batteriet.

Steg 1: Klipp av den tredje stiftet på strömbrytaren

En av de icke-mittersta stiften behövs inte. Skär av den i linje med omkopplarens kropp.

Steg 2: Löd strömbrytaren in-line en batterikabel

Klipp batteriets jordkabel någonstans i mitten. Skjut ett stycke värmekrympslangar på var och en av jordledningarna. Löd en jordkabel till en av stiften och den andra jordledningen till den andra stiftet. Se till att de inte vidrör varandra eller att lödet vidrör metallkroppen.

Kontrollera att de inte är anslutna med en multimeter. Skjut slangen över de lödda anslutningarna och krympa den. Lägg lite eltejp till alla delar som kan misslyckas på grund av böjningströtthet.

Steg 3: Kontrollera att batteriet fungerar

Vid denna tidpunkt kan batteriet anslutas till CPX. Om allt gick bra borde omkopplaren kunna slå på och av CPX.

Steg 4: Montera batteriet

Lägg lite tejp på baksidan av batteriet och på dragkärnan. Detta kommer att hålla den på plats om slipsen inte hanteras för mycket.

Steg 6: Konfigurera Circuit Playground Express

Jag går inte in på detaljer om hur du ställer in CPX. Adafruit gör det och sedan några. Jag kommer att ge några tips för problem som jag stött på ganska ofta.

CPX fryser

Förmodligen på grund av problem med körtidens minne skulle CPX frysa ganska ofta. Snabbkorrigeringen är att radera och blinka igen. Sök efter "Old Way" i dessa instruktioner. I grund och botten är det ett par knapptryckningar, ett dra och släpp för att radera, och sedan ett dra och släpp för att återblixt.

Varning: Detta raderar allt. All kod på CPX går förlorad.

Spara ändringar i CPX kan orsaka problem

Jag upptäckte att ibland efter att ha sparat en fil på CPX skulle python -körtiden vara i dåligt skick. Fixen startade om python -körtiden genom att trycka på återställningsknappen. Tryck bara på den en gång. Om du trycker på den två gånger startas omblixtprocessen.

Att spara direkt på CPX är riskabelt

På grund av möjligheten att CPX måste blinka om, riskerar man att förlora all sin kod. Efter att ha tappat min kod två gånger kom jag på ett enkelt arbetsflöde. Jag skulle spara min kod på den lokala hårddisken. När den var klar att testas på CPX skulle jag helt enkelt kopiera den genom att köra ett enkelt distributionsskript.

Steg 7: Kodning av Circuit Playground Express

Vid denna tidpunkt är CPX och NeoPixels i stort sett komplett. Inget annat mekaniskt eller elektriskt arbete behöver utföras med dem. Resten är all programvara.

Koden finns på mitt github -konto. Kärnpythonkoden ska fungera utan några ändringar för alla operativsystem. Installera inte de externa Adafruit CircuitPython -biblioteken. De används inte.

Här är en sammanfattning på hög nivå av vad som händer i koden.

Vilken ingång gör vad?

  • Knapp A: Bläddrar genom LED -animeringarna
  • Knapp B: Bläddrar igenom låtarna
  • Kapacitiv pekplatta A1: Ändrar färgerna för LED -animeringarna
  • Kapacitiv pekplatta A6: Ändrar hastigheten på LED -animeringarna

3 animationer existerar men bara 2 är i kraft

kod.py

importera pixlar av

#import vum meter import trappor import twinkle… led_animations = [pixelsoff. PixelsOff (pixlar), # vumeter. VuMeter (pixlar, 100, 400) trappor. Trappor (pixlar), twinkle. Twinkle (pixlar)]

Jag portade Ampli-Tie VU-mätarens stilkod. Den använder CPX -mikrofonen för att plocka upp ljud och lysa upp NeoPixels baserat på ljudamplitud. Jag ville dock ha fler animationer. På grund av körtidsminnesbegränsningar var jag tvungen att välja vilka animationer jag ville ha. Så som standard kommer de andra två, Trappor och Twinkle, att köras utan att behöva göra kodändringar. För att köra VU -mätaranimationen måste en eller båda av de andra animationerna kommenteras och VU -mätaren kommenteras.

Musikhanterare och offlinekodning

frosty_the_snowman.py

importera musikaliska noter som mn

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

convert_to_binary.py

låtar = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] för låt i låtar: data = song [0] file = song [1] med öppen (fil, "wb") as bin_file: for entry in data: print ("writing:" + str (entry)) note = entry [0] dur = entry [1] bin_file.write (struct.pack ("<HH", note, dur))

Jag ville ha semestermusik. CPX stöder både WAV och toner. WAV -filer visade sig vara för stora när det gäller filstorlek och körtidsminne. Att använda pythondatastrukturer för att hålla toner och deras varaktighet visade sig också använda för mycket körtidsminne. Så jag ändrade Holi-Tie-koden för att läsa en komprimerad binär fil som endast innehöll nödvändiga sångdata i ett komprimerat binärt format. Jag skrev ett manus som läser en låt som finns i en pythondatastruktur och skriver ut det i det binära formatet. Om låten är kodad som binär data i en fil gör låten både liten och dynamisk. När låten är klar spelas minnet ut.

Det är trivialt att lägga till fler låtar. För mer information, se README.md i låtar.

Knapp A Animerar NeoPixels, B spelar musik, men inte samtidigt

kod.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 musik på eller av music.stop () else: music.play ()

Även med det mer minneseffektiva musikhanteringssystemet kunde jag inte hålla i 2 animationer av körtidsminne medan jag spelade en av dem och samtidigt spela en låt samtidigt. Eftersom jag redan valde att inte ha VU -mätare i körtidsminne alls ville jag inte minska antalet animationer till bara 1. Så jag skrev koden så att antingen animationen spelas eller musiken spelas men inte både. Ett annat alternativ var att minska antalet NeoPixels men det skulle tappa lite av animationens svalhet.

Python Code Funkiness

Även om jag är en erfaren mjukvaruutvecklare hade jag aldrig skrivit Python. Efter att jag fick kläm på det och stirrade på att använda goda kodmetoder som inkapsling och modularisering upptäckte jag snabbt att jag använde för mycket körtidsminne. Så det finns en hel del icke-torr kod. Jag var också tvungen att använda några MicroPython -tekniker som const () för att ytterligare minska problem med minnet för körtid.

Kompilerade moduler

sammanställa

#!/bin/bash

kompilator = ~/utveckling/circuitpython/mpy-cross-3.x-windows.exe cd-låtar python3./convert_to_binary.py cd.. för f i *.py; gör om

Tidigt i projektet följde jag Adafruits råd och lagrade alla Adafruit CircuitPython -bibliotek på flash. Detta lämnade dock lite utrymme för mitt projekt. För att kunna få min kod på CPX började jag sammanställa modulerna och placera dem på MCU. Det visar sig att Holi-Tie inte behöver något av de externa biblioteken. De befintliga biblioteken i UF2 var tillräckliga för detta projekt. Att köra *.mpy -filer är lite mer effektivt så jag behöll installationen av de kompilerade modulerna.

Som framgår av kompileringsskriptet ovan arbetar jag på en Windows -maskin men använder Unix -verktyg som bash och python3. Jag använder Cygwin för att åstadkomma detta. Det här skriptet kan enkelt översättas till DOS -batch och en Windows -native Python3 -implementering.

Steg 8: Knappar upp slipsen

Knappar upp slipsen
Knappar upp slipsen
Knappar upp slipsen
Knappar upp slipsen

Det sista steget är att sätta tillbaka slipskärnan på plats, montera ihop slipsen och sy ihop den igen. Se till att kunna göra CPX tillgängligt. Du behöver det när du byter batteri eller gör kodändringar.

Rekommenderad: