Cuprins:

Holi-Tie: 8 pași (cu imagini)
Holi-Tie: 8 pași (cu imagini)

Video: Holi-Tie: 8 pași (cu imagini)

Video: Holi-Tie: 8 pași (cu imagini)
Video: Iuly Neamtu - Viii cu viii fostii cu mortii ( Video Oficial ) 🛸🇹🇩 █▬█ █ ▀█▀ 2024, Iulie
Anonim
Image
Image

De gwfongMonkey Patching Urmăriți mai multe de la autor:

Rampă de câine iluminată
Rampă de câine iluminată
Sculptură din inimă de oțel și sticlă topită
Sculptură din inimă de oțel și sticlă topită
Sculptură din inimă de oțel și sticlă topită
Sculptură din inimă de oțel și sticlă topită
Sârmă de cupru și fluture din sticlă topită
Sârmă de cupru și fluture din sticlă topită
Sârmă de cupru și fluture din sticlă topită
Sârmă de cupru și fluture din sticlă topită

Despre: Doar un tip care caută să facă lucruri interesante Mai multe despre gwfong »

Acesta este Holi-Tie, o cravată festivă concepută pentru a fi purtată în timpul sărbătorilor. Bazat pe Ampli-Tie de Becky Stern, care folosește o placă Flora, Holi-Tie folosește un microcontroler Circuit Python Express (CPX) pentru a conduce animațiile NeoPixel și muzica. Un buton se schimbă între 2 animații NeoPixel diferite. Tampoanele tactile capacitive modifică culorile NeoPixel și viteza de animație. Celălalt buton se schimbă între animațiile LED și muzică. Microfonul de la bord este folosit pentru a măsura zgomotul ambiental pentru animația VU-meter. Iar difuzorul CPX redă melodii cu cipuri de vacanță.

Totul este codat folosind limbajul de programare Python care rulează deasupra sistemului CircuitPython. Este alimentat de o baterie LiPo de 3,7 V, 500 mAH, care a fost modificată pentru a avea un comutator pornit / oprit.

Există două videoclipuri care arată Holi-Tie:

  • Finalizat Holi-Tie
  • În interiorul Holi-Tie

Pasul 1: Piese și instrumente

Părți

  • Circuit Playground Express
  • 15x Flora Neopixels
  • Fir magnetic
  • Banda cu cârlig și buclă adezivă
  • Baterie lipo de 500mAH cu conector JST
  • Cravată Candy Cane
  • Mini comutator glisant, SPDT
  • Tuburi termocontractabile

La aprovizionarea pieselor, ar fi înțelept să cumpărați extras. Am avut în total 20 de NeoPixeli, dintre care unul a fost rupt de la început și unul pe care l-am stricat. Cravata Candy Cane a fost atât de ieftină, încât am cumpărat una a doua, în caz că am stricat-o pe prima.

Instrumente

  • Pistol de lipit fierbinte
  • Stație de lipit
  • Freze de sârmă
  • Cuțit mic
  • Multimetru
  • Calculator
  • Brichetă sau pistol cu căldură
  • Fir și ac

Pasul 2: Pregătirea cravatei

Pregătirea cravatei
Pregătirea cravatei
Pregătirea cravatei
Pregătirea cravatei
Pregătirea cravatei
Pregătirea cravatei

Scopul principal este de a obține acces la nucleul interior al legăturii și de a delimita liniile care indică locul în care ar trebui poziționate LED-urile.

Pasul 1: Legați cravata în poziție

Va fi dificil să legăm cravata atunci când aparatele electronice sunt la locul lor. Deci, legați cravata astfel încât să arate bine și nodul să fie destul de ferm și să nu se desfacă. Apoi trageți cu grijă capătul mic al cravatei pentru a deschide gaura pentru a obține cravata peste cap. Aceasta este poziția pe care se va lucra cravata.

Există tot felul de noduri de cravată diferite. Îl cunosc doar pe cel pe care l-am învățat în copilărie, Windsor. Nu ar trebui să conteze nodul utilizat.

Pasul 2: Deschideți partea din spate a cravatei

Deschideți cusăturile pe o parte a buclei de cravată și sigla și apoi în jos în centrul cravatei. Aveți grijă, deoarece la sfârșit trebuie cusut înapoi.

Pasul 3: Desenați linii în care ar trebui să fie plasate LED-urile

Pentru ca LED-urile să apară în secțiunile de bandă albă ale cravatei, este mai ușor să găsiți linia centrală pentru fiecare secțiune de bandă albă pe partea din spate a miezului cravatei și apoi să o mapați în fața miezului cravatei. Verificați și verificați dacă linia centrală este 1) în centru și 2) paralelă cu banda. Reglarea fină a pozițiilor LED-urilor va fi posibilă dacă acestea sunt puțin oprite. Dar cel mai bine este să îl obțineți cât mai aproape de exact acum decât mai târziu.

Testați centrarea liniilor prin plasarea LED-urilor pe linii și așezarea țesăturii cu dungi deasupra. Reglați acolo unde este necesar.

Pasul 3: Atașarea NeoPixels

Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels
Atașarea NeoPixels

Practic, ne facem propria bandă LED. Montăm pur și simplu LED-urile pe nucleul de legare și apoi le conectăm între ele.

Pasul 1: Aderați NeoPixels la miezul cravatei

Așezați un strat de adeziv fierbinte pe spatele NeoPixel, așezați-l pe liniile centrale. Pentru secțiunile cu 3 NeoPixeli, aliniați vertical NeoPixelul central și lipiți-le mai întâi. Acest lucru va face mai ușoară poziționarea NeoPixel stânga și dreapta în raport cu centrul, mai ales având în vedere că lățimea cravatei crește de sus în jos.

Asigurați-vă că orientați toți NeoPixels în aceeași direcție, mergând de la stânga jos la dreapta sus. Dacă acest lucru nu este corect, banda nu va funcționa.

O notă despre lipiciul fierbinte. Va fi suficient pentru a finaliza proiectul. În ceea ce privește dacă va dura ani buni, trebuie doar să vedem.

Pasul 3: lipiți NeoPixels unul cu celălalt

Deoarece am decis să lipim NeoPixels împreună în loc să folosim fir conductiv, gaura din tampoanele NeoPixel funcționează puțin împotriva noastră. Găsiți doar un loc bun pe tampon pentru a lipi firul. Nu încercați să umpleți gaura cu lipit, dar dacă se întâmplă, va fi OK.

Sârma magnetică are un strat subțire de izolație în jurul unui miez de cupru. Cu un cuțit, îndepărtați izolația chiar la capetele unde vor fi lipite. Cel mai bine este să răzuiești întreaga circumferință a firului.

Pasul 4: Testați conectivitatea

Folosiți un multimetru pentru a testa conectivitatea:

  1. Conexiuni pozitive. Ar trebui să existe conectivitate de la vârf la coadă. Asigurați-vă că conectivitatea de testare pe tampoane și nu firul.
  2. Conexiuni la sol. Efectuați același test, dar cu tampoanele de la sol.
  3. Fiecare linie de date. De la un bloc de date la altul, verificați dacă există conectivitate.

Pasul 4: Atașarea Circuit Playground Express

Atașarea Circuit Playground Express
Atașarea Circuit Playground Express

Circuit Playground Express (CPX) este inima sistemului. Adafruit are numeroase tutoriale pentru acest controler. Mai târziu, în acest instructable, voi evidenția câteva dintre caracteristicile MCU.

Pasul 1: lipiți CPX la vârful inferior NeoPixel

Tăiați lungimile corespunzătoare ale firului magnetic pentru putere, masă și date. Împingeți-le prin țesătura miezului cravatei astfel încât să atingă plăcile NeoPixel de alimentare, la sol și date. Lipiți-le în jos, asigurându-vă că firele existente pe plăci asigură încă o conectivitate bună.

Apoi răsuciți miezul cravatei și plasați CPX în poziția dorită. Alimentați firul de alimentare către pad-ul VOUT, firul de masă către orice pad de masă și firul de date către orice pad I / O, altul decât A0. Codul pe care l-am scris folosește A3.

Testați conectivitatea.

Pasul 2: legați CPX-ul

Folosind un fir și un ac, alegeți oricare patru plăcuțe echidistante și coaseți-le în jos pe miezul cravatei.

Pasul 5: Alimentarea CPX

Alimentarea CPX
Alimentarea CPX
Alimentarea CPX
Alimentarea CPX
Alimentarea CPX
Alimentarea CPX

CPX nu are un comutator de pornire / oprire. Aceasta înseamnă că în momentul în care bateria este conectată, cravata se va activa. Acest lucru înseamnă, de asemenea, că singura modalitate de oprire este deconectând bateria, care este o problemă majoră. O soluție simplă este să puneți întrerupătorul oprit / oprit pe baterie.

Pasul 1: Tăiați al treilea pin de pe comutator

Unul dintre pinii non-centrali nu este necesar. Tăiați-l la același nivel cu corpul comutatorului.

Pasul 2: lipiți comutatorul în linie cu un cablu de baterie

Tăiați firul de împământare al bateriei undeva la mijloc. Glisați o bucată de tub termocontractabil pe fiecare dintre firele de la sol. Lipiți un fir de împământare pe unul dintre pini și celălalt fir de împământare pe celălalt pin. Asigurați-vă că acestea nu se ating sau că lipirea atinge corpul metalic.

Verificați dacă acestea nu sunt conectate folosind un multimetru. Glisați tubulatura peste conexiunile lipite și micșorați-o. Adăugați un pic de bandă electrică la orice piesă care poate eșua din cauza oboselii la îndoire.

Pasul 3: Verificați funcționarea bateriei

În acest moment, bateria poate fi conectată la CPX. Dacă totul a mers bine, comutatorul ar trebui să poată porni și opri CPX-ul.

Pasul 4: Montați bateria

Puneți un pic de cârlig adeziv și bandă buclă pe partea din spate a bateriei și pe miezul de legare. Acest lucru îl va menține în loc dacă cravata nu este manipulată prea mult.

Pasul 6: Configurarea Circuit Playground Express

Nu voi intra în detalii despre modul de configurare a CPX. Adafruit face asta și apoi unele. Voi oferi câteva sfaturi pentru probleme pe care le-am întâlnit destul de des.

CPX Blochează

Probabil din cauza problemelor de memorie a timpului de rulare, CPX ar îngheța destul de des. Remedierea rapidă este ștergerea și reluarea intermitentului. Căutați „Old Way” în aceste instrucțiuni. Practic, este vorba de câteva apăsări de butoane, un glisare și fixare pentru ștergere, apoi un glisare și fixare pentru a clipi din nou.

Avertisment: Acest lucru șterge totul. Tot codul de pe CPX se va pierde.

Salvarea modificărilor la CPX poate cauza probleme

Am descoperit că, uneori, după salvarea unui fișier pe CPX, timpul de execuție python ar fi într-o stare proastă. Remedierea a fost repornirea timpului de execuție python apăsând butonul de resetare. Apăsați-l o singură dată. Apăsând-o de două ori va începe procesul de re-flash.

Salvarea directă pe CPX este riscantă

Din cauza posibilității ca CPX-ul să fie reluat, cineva riscă să-și piardă tot codul. După ce mi-am pierdut codul de două ori, am venit cu un flux de lucru simplu. Mi-aș salva codul pe hard diskul local. Când era gata să fie testat pe CPX, aș copia-l pur și simplu rulând un script de implementare simplu.

Pasul 7: Codificarea Circuit Playground Express

În acest moment, CPX și NeoPixels sunt destul de complete. Nici o altă lucrare mecanică sau electrică nu trebuie făcută cu ele. Restul este tot software.

Codul poate fi găsit în contul meu github. Codul python de bază ar trebui să funcționeze fără modificări pentru toate sistemele de operare. Nu instalați bibliotecile externe Adafruit CircuitPython. Nu sunt folosite.

Iată un rezumat la nivel înalt a ceea ce se întâmplă în cod.

Ce intrare înseamnă ce?

  • Butonul A: Ciclează prin animațiile LED
  • Butonul B: Ciclează melodiile
  • Capacitive Touch Pad A1: Schimbă culorile pentru animațiile cu LED-uri
  • Touchpad capacitiv A6: Schimbă viteza animațiilor cu LED-uri

Există 3 animații, dar numai 2 sunt în vigoare

code.py

import pixeloff

#import vumeter import scări import sclipire … led_animations = [pixelsoff. PixelsOff (pixeli), # vumeter. VuMeter (pixeli, 100, 400) scări. Scări (pixeli), sclipire. Twinkle (pixeli)]

Am portat codul de stil al contorului Ampli-Tie VU. Folosește microfonul CPX pentru a prelua sunetul și a lumina NeoPixels pe baza amplitudinii sunetului. Cu toate acestea, am vrut mai multe animații. Datorită constrângerilor de memorie în timpul rulării, a trebuit să aleg ce animații doresc. Deci, în mod implicit, celelalte două, Scări și Twinkle, vor rula fără a fi nevoie să faceți modificări de cod. Pentru a rula animația contorului VU, una sau ambele animații trebuie comentate și contorul VU necomentat.

Manager muzică și codificare offline

frosty_the_snowman.py

import note muzicale ca mn

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

convert_to_binary.py

melodii = [(jingle_bells.song, "jingle_bells.bin"), (frosty_the_snowman.song, "frosty_the_snowman.bin")] pentru melodie în melodii: data = melodie [0] fișier = melodie [1] cu deschis (fișier, "wb") ca fișier bin_: pentru intrarea în date: print ("scris:" + str (intrare)) notă = intrare [0] dur = intrare [1] bin_file.write (struct.pack ("<HH", notă, dur))

Am vrut muzică de sărbători. CPX acceptă atât WAV cât și tonuri. Fișierele WAV s-au dovedit a fi prea mari în ceea ce privește dimensiunea fișierului și memoria de rulare. Utilizarea structurilor de date Python pentru a păstra tonurile și durata acestora s-a dovedit, de asemenea, să utilizeze prea multă memorie de rulare. Așa că am modificat codul Holi-Tie pentru a citi un fișier binar comprimat care conținea doar datele melodiei necesare într-un format binar comprimat. Am scris un script care citește o melodie păstrată într-o structură de date python și o scrie în format binar. Având melodia codificată ca date binare într-un fișier, face melodia atât mică, cât și dinamică. Odată ce piesa este terminată de redare, memoria este eliberată.

Este banal să adăugați mai multe melodii. Pentru detalii, consultați README.md în melodii.

Butonul A Animează NeoPixeli, B redă muzică, dar nu simultan

code.py

buton def_a_pressed ():

if music.is_playing (): # Opriți muzica dacă redați music.stop () next_led_animation () def button_b_pressed (): if active_led_animation! = 0: # Rulați animație fără opțiune next_led_animation (0) dacă music.is_playing (): # Comutați muzică activată sau dezactivată music.stop () else: music.play ()

Chiar și cu un sistem de gestionare a muzicii mai eficient din punct de vedere al memoriei, nu am reușit să rețin 2 animații în memoria de execuție, în timp ce jucam 1 dintre ele și, de asemenea, să redau o melodie în același timp. Deoarece am optat deja să nu am deloc VU meter în memoria de rulare deloc, nu am vrut să reduc numărul de animații la doar 1. Așa că am scris codul astfel încât fie animația să fie redată, fie muzica să fie redată, dar nu ambii. O altă opțiune a fost reducerea numărului de NeoPixels, dar acest lucru ar pierde o parte din răceala animației.

Python Code Funkiness

Deși sunt un dezvoltator veteran de software, nu am scris niciodată Python. După ce am prins-o și am privit aplicând bune practici de codificare, cum ar fi încapsularea și modularizarea, am descoperit rapid că foloseam prea multă memorie de rulare. Deci, există un pic de cod non-DRY. De asemenea, a trebuit să folosesc câteva tehnici MicroPython, cum ar fi const (), pentru a reduce în continuare problemele de memorie în timpul rulării.

Module compilate

compila

#! / bin / bash

compilator = ~ / development / circuitpython / mpy-cross-3.x-windows.exe cd cântece python3./convert_to_binary.py cd.. pentru f in *.py; faceți dacă

La începutul proiectului, am urmat sfaturile Adafruit și am stocat toate bibliotecile Adafruit CircuitPython pe flash. Acest lucru, însă, a lăsat puțin loc pentru proiectul meu. Pentru a putea obține codul meu pe CPX, am început să compilez modulele și să le plasez pe MCU. Se pare că Holi-Tie nu are nevoie de biblioteci externe. Bibliotecile existente în UF2 au fost suficiente pentru acest proiect. Rularea fișierelor *.mpy este puțin mai eficientă, așa că am păstrat procesul de implementare a modulelor compilate.

Așa cum este evident în scriptul de compilare de mai sus, lucrez la o mașină Windows, dar folosesc utilitare Unix precum bash și python3. Folosesc Cygwin pentru a realiza acest lucru. Acest script poate fi tradus cu ușurință în lot DOS și o implementare nativă Windows Python3.

Pasul 8: Butonarea cravatei

Butonând Cravata
Butonând Cravata
Butonând Cravata
Butonând Cravata

Ultimul pas este de a pune miezul cravatei la loc, reasambla cravata și coase-o înapoi. Asigurați-vă că puteți face CPX accesibil. Veți avea nevoie de ea atunci când înlocuiți bateria sau când faceți modificări de cod.

Recomandat: