Innehållsförteckning:
- Steg 1: Delar och verktyg
- Steg 2: Avläsning av slipsen
- Steg 3: Fäst NeoPixels
- Steg 4: Anslutning av Circuit Playground Express
- Steg 5: Driva CPX
- Steg 6: Konfigurera Circuit Playground Express
- Steg 7: Kodning av Circuit Playground Express
- Steg 8: Knappar upp slipsen
Video: The Holi-Tie: 8 Steps (with Pictures)
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:45
Av gwfongMonkey PatchingFollow Mer av författaren:
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
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
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:
- Positiva kopplingar. Det bör finnas anslutning från spets till svans. Se till att testanslutningen på plattorna och inte kabeln.
- Jordanslutningar. Utför samma test men med markkuddarna.
- Varje datarad. Kontrollera att det finns anslutning från en datadator till nästa.
Steg 4: 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
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
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:
DIY 37 Leds Arduino Roulette Game: 3 Steps (with Pictures)
DIY 37 Leds Arduino Roulette Game: Roulette är ett kasinospel uppkallat efter det franska ordet som betyder litet hjul
FuseLight: Turn Old/Fused Tubelight in Studio/Party Light: 3 Steps (with Pictures)
FuseLight: Turn Old/Fused Tubelight In Studio/Party Light: Här förvandlade jag en Fused Tubelight till en Studio/Part -lampa med några grundläggande verktyg, rgb -lampor och 3d -utskrift. På grund av RGB -ledremsor som används kan vi ha flera färger och nyanser
Night Light Motion & Darkness Sensing - No Micro: 7 Steps (with Pictures)
Night Light Motion & Darkness Sensing - No Micro: Den här instruerbara handlingen handlar om att hindra dig från att sticka tån när du går genom ett mörkt rum. Du kan säga att det är för din egen säkerhet om du går upp på natten och försöker nå dörren på ett säkert sätt. Naturligtvis kan du använda en sänglampa eller huvudlampan
Jukebox Casera Por: Tono Kiehnle: 5 Steps (with Pictures)
Jukebox Casera Por: Tono Kiehnle: Jukebox hecha en casa programada con Arduino UNO. Contiene 3 canciones reproducidas por medio de un buzzer pasivo y cuenta con botones de pulso y una pantalla LCD para la interacción con el usuario.La jukebox cuenta with 3 botones. 2 de ellos se util
Mini Bench Power Supply - Vintage Style: 6 Steps (with Pictures)
Mini Bench Power Supply - Vintage Style: Jag har fått för många förfrågningar om min mini strömförsörjning, så jag gjorde instruerbart för det. Jag håller på att bygga en ny 2 -kanalig strömförsörjning, men på grund av pågående pandemi går frakten långsamt och artiklar försvinner. Samtidigt bestämde jag mig för att bygga