Sommario:

The Holi-Tie: 8 passaggi (con immagini)
The Holi-Tie: 8 passaggi (con immagini)

Video: The Holi-Tie: 8 passaggi (con immagini)

Video: The Holi-Tie: 8 passaggi (con immagini)
Video: Elisa Esposito ha tradito gentisosa con Gilbert Nana 2024, Dicembre
Anonim
Image
Image

Di gwfongMonkey PatchingFollow Altro dell'autore:

Rampa illuminante per cani
Rampa illuminante per cani
Cuore in acciaio e scultura in vetro fuso
Cuore in acciaio e scultura in vetro fuso
Cuore in acciaio e scultura in vetro fuso
Cuore in acciaio e scultura in vetro fuso
Farfalla in filo di rame e vetro fuso
Farfalla in filo di rame e vetro fuso
Farfalla in filo di rame e vetro fuso
Farfalla in filo di rame e vetro fuso

Informazioni su: solo un ragazzo che cerca di fare cose interessanti Ulteriori informazioni su gwfong »

Questa è l'Holi-Tie, una cravatta festiva pensata per essere indossata durante le feste. Liberamente basato sull'Ampli-Tie di Becky Stern che utilizza una scheda Flora, l'Holi-Tie utilizza un microcontrollore Circuit Python Express (CPX) per guidare le animazioni NeoPixel e la musica. Un pulsante cambia tra 2 diverse animazioni NeoPixel. I touch pad capacitivi cambiano i colori NeoPixel e le velocità di animazione. L'altro pulsante cambia tra animazioni LED e musica. Il microfono integrato viene utilizzato per misurare il rumore ambientale per l'animazione del VU meter. E l'altoparlante CPX emette melodie natalizie.

Tutto è codificato utilizzando il linguaggio di programmazione Python in esecuzione sul sistema CircuitPython. È alimentato da una batteria LiPo da 3,7 V, 500 mAh che è stata modificata per avere un interruttore di accensione/spegnimento.

Ci sono due video clip che mostrano l'Holi-Tie:

  • Holi-Tie completato
  • Dentro l'Holi-Tie

Passaggio 1: parti e strumenti

Parti

  • Circuito Parco giochi Express
  • 15x Flora Neopixel
  • Filo smaltato
  • Nastro adesivo a strappo
  • Batteria lipo da 500 mAh con connettore JST
  • Cravatta con bastoncini di zucchero
  • Mini interruttore a scorrimento, SPDT
  • Guaina termorestringente

Quando si acquistano le parti, sarebbe saggio acquistare degli extra. Avevo un totale di 20 NeoPixel, uno dei quali era rotto dall'inizio e uno l'ho rovinato. La cravatta di Candy Cane era così economica che ne ho comprata una seconda nel caso avessi rovinato la prima.

Utensili

  • Pistola per colla a caldo
  • Stazione di saldatura
  • Pinza tagliafili
  • Coltello piccolo
  • Multimetro
  • Computer
  • Accendino o pistola termica
  • Filo e ago

Passaggio 2: preparare la cravatta

Preparare la cravatta
Preparare la cravatta
Preparare la cravatta
Preparare la cravatta
Preparare la cravatta
Preparare la cravatta

L'obiettivo principale è ottenere l'accesso al nucleo di collegamento interno e delimitare le linee che indicano dove devono essere posizionati i LED.

Passaggio 1: lega la cravatta in posizione

Sarà difficile legare la cravatta quando l'elettronica è a posto. Quindi annoda la cravatta in modo che stia bene e che il nodo sia abbastanza fermo e non si sciolga. Quindi tirare con attenzione l'estremità più piccola della cravatta per aprire il foro per far passare la cravatta sopra la testa. Questa è la posizione su cui verrà lavorata la cravatta.

Ci sono tutti i tipi di nodi di cravatta diversi. Conosco solo quello che ho imparato da bambino, il Windsor. Non dovrebbe importare quale nodo viene utilizzato.

Passaggio 2: apri il retro della cravatta

Strappare le cuciture su un lato del passante e del logo e poi lungo il centro della cravatta. Fate attenzione perché deve essere ricucito alla fine.

Passaggio 3: tracciare le linee in cui devono essere posizionati i LED

Per fare in modo che i LED appaiano nelle sezioni della striscia bianca del tirante, è più facile trovare la linea centrale per ogni sezione della striscia bianca sul retro del nucleo del tirante e quindi mapparla sulla parte anteriore del nucleo del tirante. Controllare e ricontrollare che la linea centrale sia 1) al centro e 2) parallela alla striscia. La regolazione fine delle posizioni dei LED sarà possibile se sono un po' spente. Ma è meglio arrivare il più vicino all'esatto ora piuttosto che dopo.

Prova la centratura delle linee posizionando i LED sulle linee e posando sopra il tessuto a strisce. Regola dove necessario.

Passaggio 3: collegamento dei NeoPixel

Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel
Collegamento dei NeoPixel

Fondamentalmente, stiamo creando la nostra striscia LED. Montiamo semplicemente i LED sul nucleo di collegamento e poi li colleghiamo tra loro.

Passaggio 1: far aderire i NeoPixel al nucleo di collegamento

Metti una piccola quantità di colla a caldo sul retro del NeoPixel posizionalo sulle linee centrali. Per le sezioni con 3 NeoPixel, allinea verticalmente il NeoPixel centrale e incollali prima. Ciò renderà più facile posizionare il NeoPixel sinistro e destro rispetto al centro soprattutto dato che la larghezza della cravatta aumenta dall'alto verso il basso.

Assicurati di orientare tutti i NeoPixel nella stessa direzione, andando da in basso a sinistra a in alto a destra. Se questo non è corretto, la striscia non funzionerà.

Una nota sulla colla a caldo. Basterà per portare a termine il progetto. Per quanto riguarda se durerà negli anni a venire, bisogna solo vedere.

Passaggio 3: saldare i NeoPixel tra loro

Poiché ho deciso di saldare insieme i NeoPixel invece di utilizzare un filo conduttivo, il foro nei pad NeoPixel funziona contro di noi a un certo punto. Trova un buon punto sul pad per saldare il filo. Non cercare di riempire il buco con la saldatura, ma se succede, andrà bene.

Il filo smaltato ha un sottile strato di isolamento attorno a un nucleo di rame. Con un coltello, raschiare via l'isolante proprio alle estremità dove verranno saldate. È meglio raschiare l'intera circonferenza del filo.

Passaggio 4: verifica la connettività

Usa un multimetro per testare la connettività di:

  1. Connessioni positive. Dovrebbe esserci connettività dalla punta alla coda. Assicurati che la connettività di prova sui pad e non sul filo.
  2. Collegamenti di terra. Eseguire lo stesso test ma con i pad a terra.
  3. Ogni linea dati. Da un data pad all'altro, verifica che ci sia connettività.

Passaggio 4: collegamento di Circuit Playground Express

Collegamento di Circuit Playground Express
Collegamento di Circuit Playground Express

Il Circuit Playground Express (CPX) è il cuore del sistema. Adafruit ha numerosi tutorial per questo controller. Più avanti in questo tutorial, evidenzierò alcune delle funzionalità dell'MCU.

Passaggio 1: saldare il CPX alla punta inferiore NeoPixel

Tagliare le lunghezze appropriate del filo smaltato per l'alimentazione, la terra e i dati. Spingili attraverso il tessuto del nucleo della cravatta in modo che tocchino i pad di alimentazione, massa e dati NeoPixel. Saldarli assicurandosi che i fili esistenti sui pad abbiano ancora una buona connettività.

Quindi capovolgere il nucleo del tirante e posizionare il CPX nella posizione desiderata. Alimentare il cavo di alimentazione al pad VOUT, il filo di terra a qualsiasi pad di terra e il cavo dati a qualsiasi pad I/O diverso da A0. Il codice che ho scritto usa A3.

Prova la connettività.

Passaggio 2: fissa il CPX

Usando un filo e un ago, prendi quattro cuscinetti equidistanti e cucili sul nucleo della cravatta.

Passaggio 5: alimentazione del CPX

Alimentazione del CPX
Alimentazione del CPX
Alimentazione del CPX
Alimentazione del CPX
Alimentazione del CPX
Alimentazione del CPX

Il CPX non ha un interruttore on/off. Ciò significa che nel momento in cui la batteria è collegata, la cravatta si accenderà. Ciò significa anche che l'unico modo per spegnerlo è scollegare la batteria, il che è un grosso problema. Una soluzione semplice è mettere un interruttore off/off sulla batteria.

Passaggio 1: tagliare il terzo pin sull'interruttore

Uno dei perni non centrali non è necessario. Tagliarlo a filo con il corpo dell'interruttore.

Passaggio 2: saldare l'interruttore in linea con un cavo della batteria

Tagliare il filo di massa della batteria da qualche parte nel mezzo. Fai scorrere un pezzo di tubo termoretraibile su ciascuno dei fili di terra. Saldare un filo di terra a uno dei pin e l'altro filo di terra all'altro pin. Assicurarsi che non si tocchino o che la saldatura tocchi il corpo metallico.

Verificare che non siano collegati utilizzando un multimetro. Far scorrere il tubo sui collegamenti saldati e restringerlo. Aggiungi un po' di nastro isolante a qualsiasi parte che potrebbe rompersi a causa della fatica da piegatura.

Passaggio 3: verifica che la batteria funzioni

A questo punto è possibile inserire la batteria nel CPX. Se tutto è andato bene, l'interruttore dovrebbe essere in grado di accendere e spegnere il CPX.

Passaggio 4: montare la batteria

Metti un po' di nastro adesivo a strappo sul lato posteriore della batteria e sul nucleo del tirante. Questo lo manterrà in posizione se la cravatta non viene manipolata troppo.

Passaggio 6: configurazione del circuito Playground Express

Non entrerò nei dettagli su come configurare il CPX. Adafruit lo fa e poi alcuni. Fornirò alcuni suggerimenti per problemi che ho riscontrato abbastanza spesso.

CPX si blocca

Probabilmente a causa di problemi di memoria del tempo di esecuzione, il CPX si bloccava abbastanza spesso. La soluzione rapida è cancellare e riaccendere. Cerca "Old Way" in queste istruzioni. Fondamentalmente, si tratta di un paio di pressioni di pulsanti, un trascinamento della selezione per cancellare e quindi un trascinamento della selezione per riattivare il flash.

Avvertimento: questo cancella tutto. Tutto il codice sul CPX andrà perso.

Il salvataggio delle modifiche in CPX può causare problemi

Ho scoperto che a volte dopo aver salvato un file sul CPX il runtime di Python era in uno stato non valido. La correzione è stata riavviare il runtime di Python premendo il pulsante di ripristino. Premilo solo una volta. Premendolo due volte si avvierà il processo di re-flash.

Salvare direttamente su CPX è rischioso

A causa della possibilità che il CPX debba essere ri-flash, si corre il rischio di perdere tutto il loro codice. Dopo aver perso il mio codice due volte, ho creato un flusso di lavoro semplice. Vorrei salvare il mio codice sul disco rigido locale. Quando era pronto per essere testato sul CPX, lo copiavo semplicemente eseguendo un semplice script di distribuzione.

Passaggio 7: codifica del circuito Playground Express

A questo punto, CPX e NeoPixel sono praticamente completi. Nessun altro lavoro meccanico o elettrico deve essere fatto con loro. Il resto è tutto software.

Il codice può essere trovato sul mio account github. Il codice Python principale dovrebbe funzionare senza modifiche per tutti i sistemi operativi. Non installare le librerie esterne Adafruit CircuitPython. Non vengono utilizzati.

Ecco un riassunto di alto livello di ciò che sta accadendo nel codice.

Che input fa cosa?

  • Pulsante A: scorre le animazioni LED
  • Pulsante B: scorre le canzoni
  • Touch Pad capacitivo A1: cambia i colori per le animazioni LED
  • Touch Pad capacitivo A6: cambia la velocità delle animazioni LED

Esistono 3 animazioni ma solo 2 sono attive

codice.py

importa pixel off

#import vumeter importa scale importa scintillio … led_animations = [pixelsoff. PixelsOff(pixel), # vumeter. VuMeter(pixels, 100, 400) scale. Stairs(pixel), scintillio. Twinkle(pixel)]

Ho portato il codice di stile del misuratore VU Ampli-Tie. Utilizza il microfono CPX per captare il suono e illuminare i NeoPixel in base all'ampiezza del suono. Tuttavia, volevo più animazioni. A causa dei vincoli di memoria di runtime ho dovuto scegliere quali animazioni volevo. Quindi per impostazione predefinita gli altri due, Stairs e Twinkle, verranno eseguiti senza dover apportare modifiche al codice. Per eseguire l'animazione del VU meter, una o entrambe le altre animazioni devono essere commentate e il VU meter decommentato.

Music Manager e codifica offline

gelido_il_pupazzo di neve.py

importa note_musicali come mn

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

convert_to_binary.py

canzoni = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] per il brano nei brani: data=song[0] file=song[1] with open(file, "wb") as bin_file: per l'immissione dei dati: print("writing: " + str(entry)) note=entry[0] dur=entry[1] bin_file.write(struct.pack("<HH", note, dur))

Volevo musica per le vacanze. Il CPX supporta sia WAV che toni. I file WAV si sono rivelati troppo grandi in termini di dimensioni del file e memoria di runtime. Anche l'utilizzo di strutture di dati Python per contenere i toni e la loro durata si è rivelato utilizzare troppa memoria di runtime. Così ho modificato il codice Holi-Tie per leggere un file binario compresso che conteneva solo i dati necessari della canzone in un formato binario compresso. Ho scritto uno script che legge una canzone contenuta in una struttura dati Python e la scrive nel formato binario. Avere la canzone codificata come dati binari in un file rende la canzone sia piccola che dinamica. Una volta che la canzone ha finito di suonare, la memoria viene liberata.

È banale aggiungere più canzoni. Per i dettagli, vedere il file README.md nelle canzoni.

Il pulsante A anima i NeoPixel, B riproduce la musica, ma non contemporaneamente

codice.py

def button_a_pressed():

if music.is_playing(): # Ferma la musica se sta riproducendo music.stop() next_led_animation() def button_b_pressed(): if active_led_animation != 0: # Esegue l'animazione no-op next_led_animation(0) if music.is_playing(): # Toggle musica accesa o spenta music.stop() altro: music.play()

Anche con il sistema di gestione della musica più efficiente in termini di memoria, non sono stato in grado di mantenere 2 animazioni in memoria di runtime, durante la riproduzione di 1 di esse e anche di riprodurre una canzone contemporaneamente. Poiché avevo già scelto di non avere VU meter nella memoria di runtime, non volevo ridurre il numero di animazioni a solo 1. Quindi ho scritto il codice in modo che l'animazione sia in riproduzione o la musica stia giocando ma non entrambi. Un'altra opzione era quella di ridurre il numero di NeoPixel, ma ciò avrebbe perso parte della freschezza dell'animazione.

Funky del codice Python

Sebbene io sia uno sviluppatore di software veterano, non avevo mai scritto Python. Dopo essermi preso la mano e aver iniziato ad applicare buone pratiche di codifica come l'incapsulamento e la modularizzazione, ho scoperto rapidamente che stavo usando troppa memoria di runtime. Quindi c'è un bel po' di codice non DRY. Ho anche dovuto utilizzare alcune tecniche MicroPython come const() per ridurre ulteriormente i problemi di memoria del tempo di esecuzione.

Moduli compilati

compilare

#!/bin/bash

compiler=~/development/circuitpython/mpy-cross-3.x-windows.exe cd canzoni python3./convert_to_binary.py cd.. for f in *.py; fai se

All'inizio del progetto ho seguito il consiglio di Adafruit e ho archiviato tutte le librerie di Adafruit CircuitPython su flash. Questo, però, lasciava poco spazio al mio progetto. Per poter trasferire il mio codice sul CPX, ho iniziato a compilare i moduli e a inserirli nell'MCU. Si scopre che l'Holi-Tie non ha bisogno di nessuna delle librerie esterne. Le biblioteche esistenti nell'UF2 erano sufficienti per questo progetto. L'esecuzione dei file *.mpy è un po' più efficiente, quindi ho mantenuto il processo di distribuzione dei moduli compilati.

Come evidente nello script di compilazione sopra, sto lavorando su una macchina Windows ma utilizzando utility Unix come bash e python3. Uso Cygwin per farlo. Questo script può essere facilmente tradotto in batch DOS e un'implementazione Python3 nativa di Windows.

Passaggio 8: abbottonare la cravatta

Abbottonare la cravatta
Abbottonare la cravatta
Abbottonare la cravatta
Abbottonare la cravatta

Il passaggio finale consiste nel rimettere a posto l'anima della cravatta, rimontare la cravatta e ricucirla. Assicurati di essere in grado di rendere accessibile il CPX. Ne avrai bisogno per sostituire la batteria o apportare modifiche al codice.

Consigliato: