Sisällysluettelo:

Fancy LED -hattu: 5 vaihetta (kuvilla)
Fancy LED -hattu: 5 vaihetta (kuvilla)

Video: Fancy LED -hattu: 5 vaihetta (kuvilla)

Video: Fancy LED -hattu: 5 vaihetta (kuvilla)
Video: ПРАВИЛЬНЫЙ генератор для ювелирной бензиновой горелки! 2024, Marraskuu
Anonim
Image
Image
Tyylikäs LED -hattu
Tyylikäs LED -hattu

Olen aina halunnut tehdä Arduino -projektin, mutta minulla ei koskaan ollut mitään hienoja ideoita, ennen kuin perheeni kutsuttiin hienoon hattujuhlaan. Kahden viikon läpimenoaikana olin utelias, voisinko suunnitella ja toteuttaa liikeherkän LED -animaatiohatun. Kävi ilmi, että voisin! Menin luultavasti hieman yli laidan, mutta koko projekti maksoi noin 80 dollaria. Kokeilemalla ja koodaamalla voit tehdä sen halvemmalla.

Päämäärä hatulla oli seuraava:

  1. Pyydä valoja siirtymään hatun keskikohdasta taakse, yksi valo kummallakin puolella
  2. Muuta valon kulkunopeutta, joka johtuu hatun edestä taaksepäin kallistumisesta
  3. Anna valojen kääntyä taaksepäin, kun hattupanta on kallistettu alaspäin (eli jäljittelee painovoiman vaikutusta valoihin)
  4. Vaihda väriä hatun kallistuksen perusteella vasemmalta oikealle
  5. Tunne iskuja ja näytä erikoistehoste
  6. Tunne käyttäjän pyörivä ja näytä erikoistehoste
  7. Pidä se kokonaan hatussa

Vaihe 1: Tarvittavat osat

Tarvittavat osat
Tarvittavat osat
Tarvittavat osat
Tarvittavat osat
Tarvittavat osat
Tarvittavat osat

Käytin seuraavia pääkomponentteja (mukana ei-sidoksissa olevia Amazon-linkkejä):

  • Teensy LC -mikro -ohjain - Valitsin tämän tavallisen Arduinon sijaan, koska se on pieni, ja sillä on erityinen liitäntä LED -valojen ohjaamiseen sekä vahva kirjasto- ja yhteisötuki.
  • Bosch BNO055 -pohjainen paikannusanturi - rehellisesti sanottuna yksi ensimmäisistä asiakirjoistani. On paljon halvempia vaihtoehtoja, mutta kun ymmärrät Boschin, se tekee sinulle paljon, mitä sinun olisi muuten tehtävä koodissa
  • WS2812 osoitettava LED -nauha - Valitsin 1 metrin pituuden ja 144 LEDiä metriä kohti. Tämän tiheyden ansiosta valo näyttää enemmän liikkuvalta kuin yksittäiset elementit syttyvät peräkkäin.

Ja seuraavat pienet komponentit:

  • Hattu - mikä tahansa hattu, jolla on hattu, sopii. Tämä on 6 dollarin hattu paikallisesta kaupasta. Jos siinä on sauma takana, johdotuksen saaminen on helpompaa. Kiinnitä huomiota siihen, jos hattupanta on liimattu, sillä se aiheuttaa myös lisävaikeuksia. Tämä on ommeltu yläosaa pitkin, mutta alaosa on helppo vetää ylös.
  • 4,7 K ohmin vastukset
  • 3x AAA -paristokotelo - käyttämällä 3 AAA -paristoa antaa jännitteen täsmälleen elektroniikan haluamalla alueella, mikä yksinkertaistaa asioita. AAA sopii hattuun helpommin kuin AA ja sillä on silti hyvä käyttöaika.
  • Pienikokoinen lanka - Käytin kiinteää lankaa, jonka olin asettanut edellisestä LED -projektista.
  • Juotin ja juote
  • Jotkut elastaania, joka vastaa hatun sisäistä väriä ja lankaa

Ehdotettu, mutta valinnainen:

  • Akun johtojen pikaliittimet
  • Helping Hands -työkalu, nämä asiat ovat hyvin pieniä ja vaikeasti juotettavia

Vaihe 2: Muokkaa hattua

Muokkaa hattua
Muokkaa hattua
Muokkaa hattua
Muokkaa hattua
Muokkaa hattua
Muokkaa hattua
Muokkaa hattua
Muokkaa hattua

Tarvitset paikan hatussa elektroniikan kiinnittämistä varten ja pariston. Vaimoni työskentelee vaatteiden kanssa ammattimaisesti, joten kysyin häneltä neuvoja ja apua. Päädyimme luomaan kaksi taskua spandexilla. Ensimmäinen pienempi tasku eteen on osoitettu kuin hattu itse, joten kun elektroniikka on asennettu, asentoanturi pysyy paikallaan melko hyvin, mutta voidaan tarvittaessa irrottaa helposti. Toinen tasku takana on akun pitäminen paikallaan.

Taskut kylvettiin langalla, joka vastasi hatun väriä, pitkin kruunulinjaa. Hattu- ja materiaalityypistä riippuen se on valmistettu YMMV: stä tällä tekniikalla.

Löysimme myös hattupannan, joka kiinnittyy itseensä toisella puolella, ja se oli täysin ommeltu hattuun kyseisessä paikassa. Meidän oli poistettava alkuperäinen sauma voidaksemme käyttää LED -valoja kaistan alla. Rakennuksen aikana se pidettiin paikallaan nastoilla ja ommeltiin sitten vastaavalla langalla, kun se oli valmis.

Lopulta avasimme hatun takana olevan sauman, jos se olisi nauhan peitossa. Työnsimme LED -valojen mukana toimitetut johtosarjat tuon sauman läpi ja vuorattiin nauhan ensimmäinen LED -valo sauman kohdalle. Kääriimme sitten LEDit hatun ympärille ja leikkasimme nauhan alas niin, että viimeinen LED olisi aivan ensimmäisen vieressä. LED -nauha voidaan pitää paikallaan vain hattupannan kanssa, mutta riippuen nauhasta ja materiaalista sinun on ehkä kiinnitettävä LEDit ompelemalla tai liimaamalla.

Vaihe 3: Yhdistä se

Johto se
Johto se

Teensy -kortti ja LED -valot toimivat missä tahansa 3,3 - 5 voltin teholla. Siksi päätin käyttää 3 AAA -paristoa, lähtöjännite 4,5 V on hienosti tällä alueella, ja niillä on runsaasti käyttöaikaa tapaan, jolla olen ohjelmoinut LEDit toimimaan. Sinun pitäisi pystyä saamaan reilusti yli 8 tuntia käyttöaikaa.

Virran kytkeminen

Johdotin akkurasian positiiviset ja negatiiviset johtimet ja LEDit yhteen, juotin sitten Teensyyn sopiviin paikkoihin. Akun positiivinen on liitettävä kaavion Teensyn oikeaan ylänastaan (merkitty taululle Vin), ja negatiivinen voidaan kytkeä mihin tahansa GND -merkittyyn nastaan. Kätevästi yksi on suoraan levyn vastakkaisella puolella tai Vin -tapin vieressä. Taulun koko pinout -kaavio löytyy tämän sivun alareunasta. Ja joissakin tapauksissa paperikopio tulee mukaan, kun tilaat levyn.

Jos aiot käyttää koodia, johon on kytketty vain muutama LED -valo kerrallaan, voit kytkeä LEDit itse Teensy -laitteeseen käyttämällä 3,3 V: n lähtöä ja GND: tä, mutta jos yrität ottaa liikaa virtaa, voit vahingoittaa levyä. Jotta saat eniten vaihtoehtoja, on parasta kytkeä LEDit suoraan akkulähteeseen.

LEDien kytkentä

Valitsin Teensy LC: n tähän projektiin, koska siinä on tappi, joka helpottaa osoitettavien LED -valojen kytkemistä. Taulun alaosassa on nasta, joka on toinen vasemmalta peilistä Nasta #17, mutta jossa on myös 3,3 V. Tätä kutsutaan pull-upiksi, ja muilla levyillä sinun on johdotettava vastus tämän jännitteen aikaansaamiseksi. Teensy LC: n tapauksessa voit kytkeä vain tuon nastan suoraan LED -datakaapeliin.

Asentoanturin kytkentä

Jotkut saatavilla olevista BNO055 -levyistä ovat paljon tiukempia jännitteelle ja haluavat vain 3,3 V: n. Tämän vuoksi johdotin BNO055 -levyn Vinin Teensyn 3,3 voltin ulostulosta, joka on 3. nasta oikealla. Voit sitten yhdistää BNO055: n GND: n mihin tahansa Teensyn GND: hen.

BNO055 -asentoanturi käyttää I2c: tä puhuakseen Teensyn kanssa. I2c vaatii vetoja, joten johdotin kaksi 4,7 K ohmin vastusta Teensyn 3,3 voltin ulostulosta nastoihin 18 ja 19. Johdotin sitten nastan 19 BNO055-kortin SCL-nastaan ja 18 SDA-nastaan.

Johdotusvinkkejä/temppuja

Tämän projektin suorittamiseen käytin kiinteää lankaa kuin säikeistä. Yksi etu kiinteästä langasta on juottaminen tällaisiin prototyyppilevyihin. Voit irrottaa langan, taivuttaa sen 90 asteeseen ja viedä sen jonkin liittimen pohjan läpi niin, että langan katkaistu pää on kiinni levyn yläpuolella. Tarvitset vain pienen määrän juotetta pitämään sen terminaalissa, ja voit leikata ylimääräisen helposti.

Kiinteää lankaa voi olla vaikeampi käsitellä, koska se haluaa pysyä taipuneena. Tästä hankkeesta oli kuitenkin hyötyä. Leikkasin ja muotoilin johdot niin, että asentoanturin suunta olisi johdonmukainen, kun asetin ja poistin elektroniikan hatusta säätämistä ja ohjelmointia varten.

Vaihe 4: Ohjelmointi

Nyt kun kaikki on koottu, tarvitset Arduino -yhteensopivan ohjelmointityökalun. Käytin todellista Arduino IDE: tä (toimii Linuxin, Macin ja PC: n kanssa). Tarvitset myös Teensyduino -ohjelmiston liittyäksesi Teensy -korttiin. Tämä projekti käyttää voimakkaasti FastLED -kirjastoa LED -valojen värin ja sijainnin ohjelmointiin.

Kalibrointi

Ensimmäinen asia, jonka haluat tehdä, on mennä Kris Winerin erinomaiseen BNO055 -GitHub -arkistoon ja ladata hänen BNO_055_Nano_Basic_AHRS_t3.ino -luonnoksensa. Asenna koodi Serial Monitorin ollessa käynnissä, niin se kertoo, tuleeko BNO055 -levy oikein verkkoon ja läpäisee itsetestit. Se opastaa myös BNO055: n kalibroinnissa, mikä antaa sinulle johdonmukaisemmat tulokset myöhemmin.

Aloittaminen Fancy LED -luonnoksella

Erityisesti Fancy LED -hatun koodi on liitteenä ja myös GitHub -arkistossani. Aion tehdä lisää muutoksia koodiin ja ne julkaistaan GitHub -repossa. Tässä oleva tiedosto heijastaa koodia, kun tämä Instructable julkaistiin. Luonnoksen lataamisen ja avaamisen jälkeen sinun on muutettava muutamia asioita. Suurin osa muutettavista tärkeistä arvoista on aivan ylhäällä #define -lauseina:

Rivi 24: #define NUM_LEDS 89 - muuta tämä todelliseksi LED -nauhojen lukumääräksi

Rivi 28: #define SERIAL_DEBUG false - haluat todennäköisesti tehdä tämän totta, jotta voit nähdä sarjan näytön

Sijainnin tunnistuskoodi

Sijainnin havaitseminen ja suurin osa säätämisistäsi alkaa rivillä 742 ja kulkee 802. Saamme sijainti- ja heilahdus-, kääntö- ja kääntymistiedot sijaintianturista ja käytämme sitä arvojen asettamiseen. Riippuen siitä, miten elektroniikka on asennettu, sinun on ehkä muutettava niitä. Jos asennat asentoanturin sirulla hatun yläosaa kohti ja taululle painetun X: n vieressä oleva nuoli osoittaa hatun etuosaa kohti, sinun pitäisi nähdä seuraava:

  • Piki nyökkää päätäsi
  • Rulla kallistaa päätäsi, esim. kosketa korvaasi olkapäähän
  • Yaw on mihin suuntaan. edessäsi (pohjoinen, länsi jne.).

Jos lauta on asennettu eri suuntaan, sinun on vaihdettava Pitch/Roll/Yaw, jotta ne käyttäytyvät haluamallasi tavalla.

Voit muuttaa rulla -asetuksia muuttamalla seuraavia #define -arvoja:

  • ROLLOFFSET: hattu on vakaa ja niin keskitetty kuin mahdollista, jos rulla ei ole 0, muuta tämä ero. Toisin sanoen jos näet Roll -20: ssä, kun hattu on keskitetty, tee tämä 20.
  • ROLLMAX: suurin arvo, jota käytetään rullamittauksessa. Helpoin löytää käyttämällä hattua ja siirtämällä oikea korva kohti oikeaa olkapäätäsi. Tarvitset pitkän USB -kaapelin, kun käytät sarjamonitoria.
  • ROLLMIN: pienin arvo, jota käytetään rullamittaukseen, kun kallistat päätäsi vasemmalle

Samoin Pitchille:

  • MAXPITCH - suurin arvo, kun katsot ylös
  • MINPITCH - vähimmäisarvo, kun katsot alas
  • PITCHCENTER - sävelkorkeus, kun katsot suoraan eteenpäin

Jos asetat SERIALDEBUG -asetukseksi true tiedoston yläreunassa, sinun pitäisi nähdä sarjamonitorin Roll/Pitch/Yaw -ulostulon nykyiset arvot, jotta voit säätää näitä arvoja.

Muut parametrit, joita haluat ehkä muuttaa

  • MAX_LED_DELAY 35 - hitain LED -hiukkanen voi liikkua. Tämä on millisekunneissa. Se on viive siirtymisestä merkkijonosta toiseen.
  • MIN_LED_DELAY 10 - paasto, jonka LED -partikkeli voi liikkua. Kuten edellä, se on millisekunteina.

Johtopäätös

Jos olet mennyt näin pitkälle, sinulla pitäisi olla täysin toimiva ja hauska LED -hattu! Jos haluat tehdä enemmän sillä, seuraavalla sivulla on lisätietoja asetusten muuttamisesta ja omien asioidesi tekemisestä. sekä selitys siitä, mitä muu koodini tekee.

Vaihe 5: Edistynyt ja valinnainen: koodin sisällä

Iskun ja linkouksen tunnistus

Iskun/linkouksen tunnistus tehdään BNO055: n korkean G-anturitoiminnon avulla. Voit säätää sen herkkyyttä seuraavilla riveillä initBNO055 ():

  • Rivi #316: BNO055_ACC_HG_DURATION - kuinka kauan tapahtuman on kestettävä
  • Rivi #317: BNO055_ACC_HG_THRESH - kuinka kova vaikutus on oltava
  • Rivi #319: BNO055_GYR_HR_Z_SET - pyörimisnopeuden kynnys
  • Rivi #320: BNO055_GYR_DUR_Z - kuinka kauan kierto edes kestää

Molemmat arvot ovat 8 -bittisiä, tällä hetkellä vaikutus on B11000000, joka on 192/255.

Kun törmäys tai pyöräytys havaitaan, BNO055 asettaa arvon, jota koodi etsii silmukan alussa:

// Tunnista kaikki keskeytykset, jotka ovat käynnistyneet, eli johtuen suuresta G -tavusta intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); if (intStatus> 8) {vaikutus (); } else if (intStatus> 0) {spin (); }

Etsi koodista yllä oleva void impact () -rivi, jos haluat muuttaa vaikutusta vaikutukseen, tai void spin () muuttaaksesi linkouskäyttäytymistä.

Auttajat

Olen luonut yksinkertaisen aputoiminnon (void setAllLeds ()) kaikkien LED -valojen nopeaan asettamiseen yhdelle värille. Yksi käyttää sitä sammuttaakseen kaikki:

setAllLeds (CRGB:: musta);

Tai voit valita minkä tahansa FastLED -kirjaston tunnistaman värin:

setAllLeds (CRGB:: Punainen);

On myös fadeAllLeds () -toiminto, joka himmentää kaikki LEDit 25%.

Partikkeliluokka

Johdotuksen yksinkertaistamiseksi suuresti halusin käyttää yhtä merkkijonoa, mutta saada ne käyttäytymään kuin useat merkkijonot. Koska tämä oli ensimmäinen kokeiluni, halusin pitää sen mahdollisimman yksinkertaisena, joten pidän yhtä merkkijonoa kahtena, jolloin keskimmäiset LED -valot jakautuvat. Koska meillä voi olla parillinen tai pariton luku, meidän on otettava tämä huomioon. Aloitan muutamilla globaaleilla muuttujilla:

/ * * LED -valojen muuttuja ja säiliöt */ CRGB -ledit [NUM_LEDS]; staattinen unsigned int curLedDelay = MAX_LED_DELAY; staattinen int centerLed = NUM_LEDS / 2; staattinen int maxLedPos = NUM_LEDS / 2; staattinen bool oddLeds = 0; staattinen bool -partikkeliDir = 1; staattinen bool speedDir = 1; allekirjoittamaton pitkä dirCount; allekirjoittamaton pitkä hueCount;

Ja jotain koodia asennuksessa ():

jos (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } else {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }

Jos meillä on parittomia numeroita, haluamme käyttää 1/2 pistettä keskipisteenä, muuten haluamme 1/2 pisteen - 1. Tämä on helppo nähdä 10 tai 11 LEDillä:

  • 11 LEDiä: 11/2 kokonaisluvuilla pitäisi olla 5. ja tietokoneiden lukumäärä on 0. Joten 0 - 4 on toinen puoli, 6 - 10 on toinen puoli ja 5 on niiden välissä. Käsittelemme numeroa 5 tässä tapauksessa ikään kuin se olisi osa molempia, eli se on numero 1 molemmille LED -virtuaalijonoille
  • 10 LEDiä: 10/2 on 5. Mutta koska tietokoneet laskevat nollasta, meidän on poistettava yksi. Sitten meillä on 0-4 toiselle puoliskolle ja 5-9 toiselle puolelle. Ensimmäisen virtuaalisen merkkijonon numero 1 on 4 ja toisen virtuaalisen merkkijonon numero #5.

Sitten hiukkaskoodissamme meidän on laskettava jonkin verran yleisestä sijainnistamme todellisiin sijainteihin LED -merkkijonossa:

if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }

Koodilla on myös olosuhteita, joissa hiukkanen voi muuttaa suuntaa, joten meidän on myös otettava tämä huomioon:

jos (particleDir) {if ((currPos == NUM_LEDS/2) && oddLeds) {currPos = 0; } else if ((currPos == NUM_LEDS/2 - 1) && (! oddLeds)) {currPos = 0; } else {currPos ++; }} else {if ((currPos == 0) && oddLeds) {currPos = centerLed; } else if ((currPos == 0) && (! oddLeds)) {currPos = centerLed - 1; } else {currPos--; }}

Käytämme siis aiottua suuntaa (particleDir) laskeaksemme, mikä LED -valo syttyy seuraavaksi, mutta meidän on myös harkittava, onko saavutettu joko LED -merkkijonon todellinen pää tai keskipiste, joka toimii myös päätepisteenä jokainen virtuaalinen merkkijono.

Kun olemme selvittäneet kaiken, sytytämme seuraavan valon tarpeen mukaan:

if (particleDir) {if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } else {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }} else {if (oddLeds) {Pos1 = centerLed - currPos; Pos2 = centerLed + currPos; } else {Pos1 = centerLed - currPos; Pos2 = (centerLed -1) + currPos; }} lediä [Pos1] = CHSV (currHue, 255, 255); ledit [Pos2] = CHSV (currHue, 255, 255); FastLED.show ();}

Miksi tehdä tästä luokasta ylipäätään? Tämä on melko yksinkertaista, eikä sen tarvitse olla luokassa. Minulla on kuitenkin tulevaisuudessa suunnitelmia päivittää koodi, jotta useampi kuin yksi hiukkanen voi esiintyä kerrallaan, ja jotkut toimivat päinvastoin, kun taas toiset jatkavat eteenpäin. Luulen, että on olemassa todella hienoja mahdollisuuksia spin -havaitsemiseen käyttämällä useita hiukkasia.

Suositeltava: