INHOUDSOPGAWE:
- Stap 1: Onderdele benodig
- Stap 2: Pas die hoed aan
- Stap 3: Draai dit op
- Stap 4: Programmering
- Stap 5: Gevorderd en opsioneel: binne die kode
Video: Fancy LED -hoed: 5 stappe (met foto's)
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:27
Ek wou nog altyd 'n Arduino -projek doen, maar ek het nog nooit goeie idees daarvoor gehad nie, totdat my gesin uitgenooi is na 'n feestelike hoedpartytjie. Met twee weke se tyd was ek nuuskierig of ek 'n bewegingsgevoelige LED -animasiehoed kon beplan en uitvoer. Dit blyk dat ek kon! Ek het waarskynlik 'n bietjie oorboord gegaan, maar die totale projek kos ongeveer $ 80. Met eksperimentering en kodering kan u dit vir minder doen.
Die doel met die hoed was die volgende:
- Laat 'n stel ligte van die middel van die hoed na die agterkant beweeg, een lig aan elke kant
- Verander die snelheid van die lig se reis deur die kanteling van die hoed van voor na agter
- Laat die ligte omdraai wanneer die hoedband afwaarts gekantel is (d.w.s. die effek van swaartekrag op die ligte naboots)
- Verander kleur op grond van die kanteling van die hoed van links na regs
- Gevoel skokke, en vertoon 'n spesiale effek
- Laat die draer voel draai en toon 'n spesiale effek
- Hou dit heeltemal in die hoed
Stap 1: Onderdele benodig
Ek het die volgende hoofkomponente gebruik (nie-aangeslote Amazon-skakels ingesluit):
- Teensy LC -mikrobeheerder - ek het dit gekies bo 'n gewone Arduino vanweë die klein grootte, en dit het 'n spesiale verbinding om my LED's te beheer, sowel as sterk biblioteek- en gemeenskapsondersteuning.
- Bosch BNO055 gebaseerde posisionele sensor - eerlik een van die eerste dokumente waaroor ek dokumentasie gevind het. Daar is baie goedkoper opsies, maar sodra u die Bosch uitvind, doen dit baie vir u wat u andersins in die kode sou moes doen.
- WS2812 aanspreekbare LED -strook - ek het 'n lengte van 1 meter gekies met 144 LED's per meter. Deur die digtheid te hê, kan die lig meer lyk asof dit beweeg, eerder as om individuele elemente in volgorde te verlig.
En die volgende klein komponente:
- 'N Hoed - enige hoed met 'n hoedband sal regkom. Dit is 'n $ 6 -hoed van 'n plaaslike winkel. As dit 'n naat aan die agterkant het, sal dit makliker wees om die bedrading deur te haal. Let op as die hoedband vasgeplak word, aangesien dit ook ekstra probleme veroorsaak. Hierdie een word aan die bokant vasgewerk, maar die onderkant kan maklik opgetrek word.
- Weerstands van 4,7K ohm
- 3x AAA -batterykas - met behulp van 3 AAA -batterye lewer die spanning presies in die bereik wat die elektronika wil hê, wat dinge vergemaklik. AAA pas makliker in 'n hoed as AA en het steeds uitstekende tydsduur.
- Klein maatdraad - ek het soliede draad gebruik wat ek van 'n vorige LED -projek af gelê het.
- Soldeerbout en soldeer
- 'N Paar spandex wat ooreenstem met die binnekleur van die hoed en draad
Voorgestel, maar opsioneel:
- Vinnige verbindings vir die batterydrade
- Hierdie hulpmiddels is baie klein en moeilik om te soldeer
Stap 2: Pas die hoed aan
U benodig 'n plek in die hoed om die elektronika te monteer, en 'n plek vir die battery. My vrou werk professioneel met klere, en ek het haar raad gevra en hulp gegee. Uiteindelik het ons twee sakke met spandex gemaak. Die eerste kleiner sak aan die voorkant is soos die hoed self, sodat die posisionele sensor redelik goed op sy plek gehou word, maar indien nodig maklik verwyder kan word. Die tweede sak na agter is om die battery op sy plek te hou.
Die sakke is gesaai met gare wat ooreenstem met die kleur van die hoed, almal langs die kroonlyn. Afhangende van die hoedstyl en materiaal, is dit gemaak van YMMV met hierdie tegniek.
Ons het ook ontdek dat die hoedband aan die een kant in homself steek, en dit is heeltemal vasgemaak aan die hoed op daardie plek. Ons moes die oorspronklike naat verwyder om die LED's onder die band te laat loop. Tydens die bouwerk is dit vasgehou met penne, en dan vasgemaak met bypassende draad wanneer dit voltooi is.
Uiteindelik maak ons die naat aan die agterkant van die hoed oop as dit deur die band bedek is. Ons het die kabelboom wat by die LED's gekom het, deur die naat vasgesteek en die eerste LED in die strook gevoer om reg op die naat te wees. Ons draai dan die LED's om die hoed en sny die strook af sodat die laaste LED reg langs die eerste is. Die LED -strook kan net met die hoedband vasgehou word, maar afhangende van u band en materiaal, kan dit nodig wees om die LED's vas te maak deur naai of te plak.
Stap 3: Draai dit op
Die Teensy -bord en die LED's werk oral van 3.3v tot 5v vir krag. Dit is die rede waarom ek gekies het om 3 AAA -batterye te gebruik; die uitgangsspanning van 4.5v is goed in die reeks, en hulle het baie tydsduur vir die manier waarop ek die LED's laat werk het. U behoort meer as 8 uur se tydsduur te bereik.
Bedrading van die krag
Ek het die positiewe en negatiewe leidrade van die batterykas en LED's aanmekaar gekoppel en dan op die Teensy op die gepaste plekke gesoldeer. Die positiewe van die battery moet gekoppel word aan die regter boonste pen van die Teensy in die diagram (gemerk Vin op die bord), en die negatiewe kan aan enige pen met die GND gekoppel word. Daar is gerieflik een direk aan die teenoorgestelde kant van die bord, of reg langs die Vin -pen. Die volledige pin -diagram vir die bord kan onderaan hierdie bladsy gevind word. En in sommige gevalle is 'n papierkopie ingesluit wanneer u die bord bestel.
As u van plan is om 'n kode te gebruik wat slegs 'n paar LED's tegelyk aangeskakel het, kan u die LED's van die Teensy self af aandryf deur 'n 3.3v -uitgang en GND te gebruik, maar as u te veel krag probeer trek, kan u die bord beskadig. Om u die meeste opsies te gee, is dit die beste om die LED's direk na u batterybron te lei.
Bedrading van die LED's
Ek het die Teensy LC vir hierdie projek gekies, aangesien dit 'n pen het wat dit makliker maak om adresseerbare LED's op te sit. Aan die onderkant van die bord is die pen wat tweede is van die linker spieëls, speld #17, maar het ook 3.3v. Dit word 'pull-up' genoem, en op ander borde moet u 'n weerstand inskakel om die spanning te verskaf. In die geval van die Teensy LC kan u net van die pen direk na u LED -datadraad lei.
Bedrading van die posisiesensor
Sommige van die beskikbare BNO055 -borde is baie strenger op spanning en benodig slegs 3.3v. As gevolg hiervan het ek die Vin op die BNO055 -bord bedraad vanaf die toegewyde 3.3v -uitvoer op die Teensy, wat die derde pen aan die regterkant is. U kan dan die GND op die BNO055 koppel aan enige GND op die Teensy.
Die BNO055 -posisiesensor gebruik I2c om met die Teensy te praat. I2c benodig pull-ups, so ek het twee 4,7K ohm weerstande van 'n 3.3v-uitset op die Teensy na penne 18 en 19. bedraad. Daarna het ek pen 19 aan die SCL-pen op die BNO055-bord gekoppel en 18 aan die SDA-pen.
Bedrading wenke/truuks
Om hierdie projek te doen, gebruik ek soliede draad eerder as gestrand. Een voordeel vir soliede draad is die soldeer aan prototipe borde soos hierdie. U kan 'n draad afstrek, tot 90 grade buig en deur die onderkant van een van die terminale steek sodat die snypunt van die draad bo u bord uitsteek. U benodig dan slegs 'n klein hoeveelheid soldeersel om dit by die terminale te hou, en u kan die oortollige stof maklik afsny.
Die soliede draad kan moeiliker wees om mee te werk, aangesien dit geneig is om te wil bly hoe dit gebuig is. Vir hierdie projek was dit egter 'n voordeel. Ek het my drade so geknip en gevorm dat die oriëntasie van die posisionele sensor konsekwent was terwyl ek die elektronika uit die hoed steek en verwyder vir aanpassing en programmering.
Stap 4: Programmering
Noudat alles saamgestel is, benodig u 'n Arduino -versoenbare programmeerhulpmiddel. Ek het die werklike Arduino IDE gebruik (werk met Linux, Mac en PC). U benodig ook die Teensyduino -sagteware om met die Teensy -bord te koppel. Hierdie projek maak sterk gebruik van die FastLED -biblioteek om die kleur- en posisionering van die LED's te doen.
Kalibreer
Die eerste ding wat u wil doen, is om na die uitstekende GitHub -bewaarplek van Kris Winer vir die BNO055 te gaan en sy BNO_055_Nano_Basic_AHRS_t3.ino -skets af te laai. Installeer die kode terwyl die Serial Monitor aan die gang is, en dit sal u vertel of die BNO055 -bord behoorlik aanlyn kom en sy selftoetse slaag. Dit sal u ook help om die BNO055 te kalibreer, wat u later meer konsekwente resultate sal gee.
Begin met die Fancy LED -skets
Die kode vir die Fancy LED -hoed is spesifiek aangeheg, en ook op my GitHub -bewaarplek. Ek is van plan om meer aanpassings aan die kode te maak, en dit sal op die GitHub -repo geplaas word. Die lêer hier weerspieël die kode toe hierdie instruksie gepubliseer is. Nadat u die skets afgelaai en oopgemaak het, is daar 'n paar dinge wat u moet verander. Die meeste van die belangrike waardes wat verander moet word, is #define -uitsprake:
Reël 24: #definieer NUM_LEDS 89 - verander dit na die werklike aantal LED's op u LED -strook
Reël 28: #define SERIAL_DEBUG vals - u sal dit waarskynlik wil waar maak, sodat u die uitset op die seriële monitor kan sien
Posisie -opsporingskode
Posisie -opsporing en die meeste van u aanpassings begin by lyn 742 en gaan deur 802. Ons kry Pitch-, Roll- en Yaw -data van die posisiesensor en gebruik dit om waardes in te stel. Afhangende van hoe u elektronika gemonteer is, moet u dit moontlik verander. As u die posisiesensor met die skyfie bo -op die hoed monteer, en die pyltjie langs X op die bord gedruk na die voorkant van die hoed, moet u die volgende sien:
- Pitch knik jou kop
- Rol kantel jou kop, bv. raak jou oor aan jou skouer
- Yaw is watter rigting. wat u in die gesig staar (Noord, Wes, ens.).
As u bord in 'n ander rigting gemonteer is, moet u Pitch/Roll/Yaw omruil sodat hulle kan optree soos u wil.
Om die rolinstellings aan te pas, kan u die volgende #definieer waardes verander:
- ROLLOFFSET: met u hoed stabiel en so gesentreerd as moontlik, as die rol nie 0 is nie, verander dit met die verskil. D.w.s. as u Roll by -20 sien as u hoed gesentreer is, maak hierdie 20.
- ROLLMAX: die maksimum waarde om vir rolmeting te gebruik. Die maklikste om te vind deur die hoed te dra en jou regteroor na jou regterskouer te skuif. U benodig 'n lang USB -kabel om dit te doen terwyl u die seriële monitor gebruik.
- ROLLMIN: die laagste waarde om te gebruik vir rolmeting, vir wanneer u u kop na links kantel
Net so, vir Pitch:
- MAXPITCH - die maksimum waarde as u opkyk
- MINPITCH - die minimum waarde as u afkyk
- PITCHCENTER - die toonhoogtewaarde as u reguit vorentoe kyk
As u SERIALDEBUG bo -aan die lêer op true stel, moet u die huidige waardes vir Roll/Pitch/Yaw -uitvoer na die seriële monitor sien om hierdie waardes aan te pas.
Ander parameters wat u dalk wil verander
- MAX_LED_DELAY 35 - die stadigste wat die LED -deeltjie kan beweeg. Dit is in millisekondes. Dit is die vertraging om van die een LED na die volgende in die string te beweeg.
- MIN_LED_DELAY 10 - die vas dat die LED -deeltjie kan beweeg. Soos hierbo is dit in millisekondes.
Afsluiting
As u so ver gegaan het, moet u 'n funksionele en prettige LED -hoed hê! As u meer daarmee wil doen, bevat die volgende bladsy gevorderde inligting oor die verandering van instellings en om u eie dinge te doen. asook 'n verduideliking van wat die res van my kode doen.
Stap 5: Gevorderd en opsioneel: binne die kode
Impak- en draai -opsporing
Impak/spin-opsporing word gedoen met behulp van die hoë-G-sensorfunksies van die BNO055. U kan die sensitiwiteit daarvan aanpas met die volgende reëls in initBNO055 ():
- Reël #316: BNO055_ACC_HG_DURATION - hoe lank die geleentheid moet duur
- Reël #317: BNO055_ACC_HG_THRESH - hoe hard moet die impak wees
- Reël #319: BNO055_GYR_HR_Z_SET - rotasiesnelheidsdrempel
- Reël #320: BNO055_GYR_DUR_Z - hoe lank die rotasie selfs moet duur
Beide waardes is 8 bis binêre, tans is die impak ingestel op B11000000, wat 192 uit 255 is.
As 'n impak of draai opgespoor word, stel die BNO055 'n waarde waarna die kode aan die begin van die lus soek:
// Ontdek enige onderbrekings wat veroorsaak word, dit wil sê as gevolg van hoë G -byte intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); as (intStatus> 8) {impact (); } anders as (intStatus> 0) {spin (); }
Soek die lyn van die leemte -impak () hierbo in die kode om die gedrag by die impak te verander, of die leemte -draai () om die draai -gedrag te verander.
Helpers
Ek het 'n eenvoudige helperfunksie (void setAllLeds ()) geskep om al die LED's vinnig in 'n enkele kleur te stel. Een gebruik dit om hulle almal uit te skakel:
setAllLeds (CRGB:: Swart);
Of u kan enige kleur kies wat deur die FastLED -biblioteek herken word:
setAllLeds (CRGB:: Rooi);
Daar is ook 'n fadeAllLeds () -funksie wat al die LED's met 25%sal verdof.
Die Deeltjie klas
Om die bedrading aansienlik te vereenvoudig, wou ek 'n enkele string LED's gebruik, maar laat hulle soos verskeie snare optree. Aangesien dit my eerste probeerslag was, wou ek dit so eenvoudig as moontlik hou, en daarom behandel ek die een string as twee, met die middelste LED's wat daar is. Aangesien ons 'n ewe getal of 'n onewe getal kan hê, moet ons dit in ag neem. Ek begin met 'n paar globale veranderlikes:
/ * * Veranderlike en houers vir LED's */ CRGB -leds [NUM_LEDS]; statiese ongetekende int curLedDelay = MAX_LED_DELAY; static int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; statiese bool oddLeds = 0; statiese bool particleDir = 1; statiese bool speedDir = 1; ongetekende lang dirCount; ongetekende lang hueCount;
En 'n paar kode in die opstelling ():
as (NUM_LEDS % 2 == 1) {oddLeds = 1; maxLedPos = NUM_LEDS/2; } anders {oddLeds = 0; maxLedPos = NUM_LEDS/2 - 1; }
As ons onewe getalle het, wil ons die 1/2 punt as die middel gebruik, anders wil ons die 1/2 punt - 1. Dit is maklik om te sien met 10 of 11 LED's:
- 11 LED's: 11/2 met heelgetalle moet tot 5. evalueer en rekenaars tel van 0. Dus is 0 - 4 die een helfte, 6 - 10 die ander helfte en 5 tussen hulle. Ons behandel #5 in hierdie geval asof dit deel was van albei, dit wil sê dit is nommer 1 vir beide virtuele stringe LED's
- 10 LED's: 10/2 is 5. Maar aangesien rekenaars van 0 tel, moet ons een verwyder. Dan het ons 0 - 4 vir die een helfte en 5 - 9 vir die ander helfte. #1 vir die eerste virtuele string sal 4 wees, en #1 vir die tweede virtuele string sal #5 wees.
Dan moet ons in ons deeltjiekode tel van ons algehele posisie tot die werklike posisies op die LED -string:
as (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } anders {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }
Die kode het ook toestande waar die deeltjie van rigting kan verander, dus moet ons dit ook in ag neem:
if (particleDir) {if ((currPos == NUM_LEDS/2) && oddLeds) {currPos = 0; } anders as ((currPos == NUM_LEDS/2 - 1) && (! oddLeds)) {currPos = 0; } anders {currPos ++; }} anders {if ((currPos == 0) && oddLeds) {currPos = centerLed; } anders as ((currPos == 0) && (! oddLeds)) {currPos = centerLed - 1; } anders {currPos--; }}
Dus gebruik ons die beoogde rigting (particleDir) om te bereken watter LED daarna moet brand, maar ons moet ook oorweeg of ons die werklike einde van die LED -string bereik het, of ons middelpunt, wat ook dien as 'n einde vir elk van die virtuele snare.
Nadat ons dit alles agtergekom het, lig ons die volgende lig op soos nodig:
if (particleDir) {if (oddLeds) {Pos1 = centerLed + currPos; Pos2 = centerLed - currPos; } anders {Pos1 = centerLed + currPos; Pos2 = (centerLed -1) - currPos; }} anders {if (oddLeds) {Pos1 = centerLed - currPos; Pos2 = centerLed + currPos; } anders {Pos1 = centerLed - currPos; Pos2 = (centerLed -1) + currPos; }} leds [Pos1] = CHSV (currHue, 255, 255); leds [Pos2] = CHSV (currHue, 255, 255); FastLED.show ();}
Waarom hoegenaamd 'n klas hiervan maak? Soos dit is, is dit redelik eenvoudig en hoef dit nie regtig in 'n klas te wees nie. Ek het egter toekomstige planne om die kode by te werk sodat meer as een deeltjie op 'n slag kan voorkom, en dat sommige agteruit werk terwyl ander vorentoe gaan. Ek dink daar is 'n paar wonderlike moontlikhede vir spin -opsporing met behulp van veelvuldige deeltjies.
Aanbeveel:
DIY Tuisgemaakte Fancy Lamp: 5 stappe (met foto's)
DIY Tuisgemaakte Fancy Lamp: ek is 'n universiteitstudent wat tans 'n klas oor stroombane volg. Tydens die klas het ek 'n idee gehad om 'n baie eenvoudige kring te gebruik om 'n praktiese projek te ontwerp wat ontwerp is vir laerskoolleerlinge wat pret, kreatief en insiggewend was. Hierdie projek sluit die
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino - Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter - Rc Helikopter - Rc -vliegtuig met Arduino: 5 stappe (met foto's)
Draadlose afstandsbediening met 2,4 GHz NRF24L01 -module met Arduino | Nrf24l01 4 -kanaals / 6 -kanaals sender -ontvanger voor quadcopter | Rc Helikopter | Rc -vliegtuig met Arduino: om 'n Rc -motor te bestuur | Quadcopter | Drone | RC -vliegtuig | RC -boot, ons het altyd 'n ontvanger en sender nodig, veronderstel dat ons vir RC QUADCOPTER 'n 6 -kanaals sender en ontvanger nodig het en dat die tipe TX en RX te duur is, so ons maak een op ons
Hoe om 'n rekenaar met maklike stappe en foto's uitmekaar te haal: 13 stappe (met foto's)
Hoe om 'n rekenaar uitmekaar te haal met eenvoudige stappe en foto's: dit is 'n instruksie oor hoe om 'n rekenaar uitmekaar te haal. Die meeste basiese komponente is modulêr en kan maklik verwyder word. Dit is egter belangrik dat u daaroor georganiseerd is. Dit sal u verhinder om onderdele te verloor, en ook om die montering weer
Fancy Bed Night Lights: 6 stappe (met foto's)
Fancy Bed Night Lights: Dit is die bedligstelsel van die toekoms! Hulle word aangeskakel as u in die middel van die nag uit u bed stap en afskakel as u in u gemaklike droommasjien instap. Dus nie meer nagongelukke en stukkende tone nie !! Dit is baie maklik om te koop
Semi-Fancy G1 Stand: 6 stappe
Semi-Fancy G1 Stand: 'n Stand vir jou t-mobile G1, as jy een het, werk dit waarskynlik ook vir iPhones, maar ek het dit vir die G1 gemaak, so … ek weet nie. Dit werk goed vir kyk en luister op YouTube vir musiek, die sentrale strook wat jy sien, is daar om die geraas van agter te weerspieël