Obsah:

Efektní LED klobouk: 5 kroků (s obrázky)
Efektní LED klobouk: 5 kroků (s obrázky)

Video: Efektní LED klobouk: 5 kroků (s obrázky)

Video: Efektní LED klobouk: 5 kroků (s obrázky)
Video: Naše denc můvs🕺💃🤣 #czech #youtubeshorts #dance #dancevideo 2024, Listopad
Anonim
Image
Image
Efektní LED čepice
Efektní LED čepice

Vždycky jsem chtěl dělat projekt Arduino, ale nikdy jsem neměl žádné skvělé nápady, dokud moje rodina nebyla pozvána na fantastickou kloboukovou párty. S dodací lhůtou dva týdny jsem byl zvědavý, jestli dokážu naplánovat a zrealizovat pohybově citlivou LED animaci. Ukázalo se, že bych mohl! Pravděpodobně jsem to trochu přehnal, ale celkový projekt stál kolem 80 dolarů. S experimentováním a nějakým kódováním to zvládnete za méně peněz.

Cíl s kloboukem byl následující:

  1. Nechte sadu světel přesunout ze střední přední části klobouku dozadu, jedno světlo na každé straně
  2. Změňte rychlost pohybu světla diktovanou nakloněním klobouku zepředu dozadu
  3. Nechte světla couvat, když byl kloboukový pás nakloněn dolů (tj. Emulovat vliv gravitace na světla)
  4. Změňte barvu podle naklonění klobouku zleva doprava
  5. Rozpoznejte nárazy a zobrazte speciální efekt
  6. Vnímejte točení nositele a zobrazte speciální efekt
  7. Nechte to úplně obsažené v klobouku

Krok 1: Potřebné součásti

Potřebné díly
Potřebné díly
Potřebné díly
Potřebné díly
Potřebné díly
Potřebné díly

Použil jsem následující hlavní komponenty (zahrnuty non-affiliate odkazy Amazon):

  • Mikrokontrolér Teensy LC - vybral jsem si to před běžným Arduinem kvůli jeho malé velikosti a má speciální připojení pro ovládání mých LED diod, stejně jako silnou podporu knihovny a komunity.
  • Polohový snímač založený na Bosch BNO055 - upřímně jeden z prvních, na kterém jsem našel dokumentaci. Existuje mnohem méně nákladných možností, ale jakmile zjistíte Bosch, udělá pro vás mnoho, co byste jinak museli dělat v kódu
  • Adresovatelný LED pásek WS2812 - zvolil jsem délku 1 metr se 144 LED na metr. Díky této hustotě světlo vypadá spíše, jako by se pohybovalo, než aby se jednotlivé prvky postupně rozsvěcovaly.

A následující drobné součásti:

  • Klobouk - postačí jakýkoli klobouk s kloboukem. Toto je klobouk za 6 $ z místního obchodu. Pokud má šev vzadu, bude snazší projít kabeláž. Věnujte pozornost tomu, zda je čepice nalepená, protože to také způsobí nějaké další potíže. Tenhle je ušitý nahoře, ale dno se snadno vytáhne nahoru.
  • Rezistory 4,7K ohm
  • Pouzdro na baterie 3x AAA - pomocí 3 baterií AAA vychází napětí přesně v rozsahu, jaký elektronika chce, což věci zjednodušuje. AAA se vejde do klobouku snadněji než AA a stále má skvělou dobu provozu.
  • Drát s malým rozchodem - použil jsem nějaký plný drát, který jsem položil z předchozího projektu LED.
  • Páječka a pájka
  • Nějaký spandex, který odpovídá vnitřní barvě klobouku a nitě

Doporučené, ale volitelné:

  • Rychlé konektory pro vodiče baterie
  • Pomocné ruce nástroje, tyto věci jsou velmi malé a těžko pájitelné

Krok 2: Upravte klobouk

Upravte klobouk
Upravte klobouk
Upravte klobouk
Upravte klobouk
Upravte klobouk
Upravte klobouk
Upravte klobouk
Upravte klobouk

Budete potřebovat místo v klobouku pro montáž elektroniky a místo pro baterii. Moje žena pracuje s oděvy profesionálně, proto jsem ji požádal o radu a pomoc. Nakonec jsme vytvořili dvě kapsy se spandexem. První menší kapsa vpředu je namířena jako klobouk sama, takže když je nainstalována elektronika, snímač polohy drží docela dobře, ale v případě potřeby jej lze snadno vyjmout. Druhá kapsa směrem dozadu drží baterii na místě.

Kapsy byly posety nití, která odpovídala barvě klobouku, všechny dlouhé po korunní linii. V závislosti na stylu klobouku a materiálů je tato technika vyrobena z YMMV.

Zjistili jsme také, že kloboukový pásek je na jedné straně zasunutý do sebe, a v tom místě byl k klobouku úplně přišitý. Museli jsme odstranit původní šev, abychom mohli spustit LED diody pod pásmem. Během stavby byl držen na místě pomocí kolíků a po dokončení sešitý odpovídajícím vláknem.

Nakonec jsme otevřeli šev na zadní straně klobouku, pokud byl zakrytý páskem. Přes tento šev jsme zastrčili kabelový svazek, který přišel s LED diodami, a lemovali první LED v pásku, aby byla přímo na švu. Poté jsme omotali LED diody kolem klobouku a pás odřízli, aby poslední LED byla hned vedle první. LED pásek lze držet na místě pouze pomocí kloboukového pásku, ale v závislosti na pásku a materiálu budete možná muset LED diody zajistit šitím nebo lepením.

Krok 3: Zapojte jej

Zapojte to
Zapojte to

Deska Teensy a LED budou pracovat kdekoli od 3,3 V do 5 V pro napájení. To je důvod, proč jsem se rozhodl použít 3 baterie AAA, výstupní napětí 4,5 V je pěkně v tomto rozsahu a mají spoustu času pro způsob, jakým jsem naprogramoval LED diody tak, aby fungovaly. Měli byste být schopni získat více než 8 hodin běhu.

Zapojení napájení

Zapojil jsem kladné a záporné vodiče z bateriového boxu a LED dohromady a poté připájel na Teensy na příslušných místech. Pozitivní z baterie musí být připojeno k pravému hornímu kolíku Teensy v diagramu (na desce označené Vin) a záporný může být připojen k jakémukoli pinu označenému GND. Pohodlně je jeden přímo na opačné straně desky, nebo hned vedle Vin pin. Úplný diagram vývodů desky najdete ve spodní části této stránky. A v některých případech je při objednání desky zahrnuta papírová kopie.

Pokud plánujete spuštění kódu, který má zapnutých jen několik LED diod najednou, můžete LED diody napájet ze samotného Teensy pomocí výstupu 3,3 V a GND, ale pokud se pokusíte vytáhnout příliš mnoho energie, můžete poškodit desku. Abyste měli k dispozici co nejvíce možností, je nejlepší připojit LED diody přímo ke zdroji baterie.

Zapojení LED diod

Pro tento projekt jsem zvolil Teensy LC, protože má kolík, který výrazně usnadňuje zapojení adresovatelných LED diod. Na spodní straně desky je kolík, který je druhý z levého zrcadla, kolík č. 17, ale má také 3,3 V. Toto se označuje jako pull-up a na jiných deskách byste museli zapojit odpor, abyste zajistili toto napětí. V případě Teensy LC můžete jednoduše připojit z tohoto kolíku přímo k datovému vodiči LED.

Zapojení snímače polohy

Některé z dostupných desek BNO055 jsou na napětí mnohem přísnější a chtějí pouze 3,3 V. Z tohoto důvodu jsem připojil Vin na desku BNO055 z vyhrazeného výstupu 3,3 V na Teensy, což je třetí kolík vpravo. Poté můžete GND na BNO055 připojit k libovolnému GND na Teensy.

Polohový snímač BNO055 používá k rozhovoru s Teensy I2c. I2c vyžaduje přítahy, takže jsem zapojil dva rezistory 4,7K ohm z výstupu 3,3 V na Teensy na piny 18 a 19. Poté jsem zapojil pin 19 na pin SCL na desce BNO055 a 18 na pin SDA.

Tipy/triky pro zapojení

K provedení tohoto projektu jsem použil spíše drát než pletený. Jednou výhodou pevných drátů je pájení na prototypové desky, jako jsou tyto. Můžete odizolovat trochu drátu, ohnout ho o 90 stupňů a zasunout jej do spodní části jednoho z terminálů tak, aby přestřižený konec drátu trčel nad deskou. Pak už potřebujete jen malé množství pájky, abyste jej přidrželi na terminálu, a přebytek můžete snadno odříznout.

S pevným drátem může být obtížnější pracovat, protože obvykle chce zůstat tak, jak je ohnutý. Pro tento projekt to však byla výhoda. Řezal jsem a tvaroval své dráty tak, aby orientace snímače polohy byla konzistentní, když jsem vkládal a vyjímal elektroniku z klobouku pro ladění a programování.

Krok 4: Programování

Nyní, když je vše sestaveno, budete potřebovat programovací nástroj kompatibilní s Arduino. Použil jsem skutečné Arduino IDE (funguje s Linuxem, Macem a PC). K propojení s deskou Teensy budete také potřebovat software Teensyduino. Tento projekt hojně využívá knihovnu FastLED k programování barev a poloh LED.

Kalibrace

První věc, kterou budete chtít udělat, je zajít na skvělé úložiště GitHub Kris Winera pro BNO055 a stáhnout si jeho skicu BNO_055_Nano_Basic_AHRS_t3.ino. Nainstalujte tento kód se spuštěným sériovým monitorem a on vám řekne, zda se deska BNO055 správně připojí k internetu a projde vlastními testy. Provede vás také kalibrací BNO055, což vám později poskytne konzistentnější výsledky.

Začínáme s efektní LED skicou

Konkrétně je připojen kód pro klobouk Fancy LED a také na mém úložišti GitHub. Mám v plánu provést další vylepšení kódu a ty budou zveřejněny na repo GitHubu. Soubor zde odráží kód, když byl tento Instructable publikován. Po stažení a otevření náčrtu je několik věcí, které budete muset změnit. Většina důležitých hodnot, které je třeba změnit, je úplně nahoře jako příkazy #define:

Řádek 24: #define NUM_LEDS 89 - změňte na skutečný počet LED na vašem LED pásku

Řádek 28: #define SERIAL_DEBUG false - pravděpodobně to budete chtít udělat pravdivě, abyste mohli vidět výstup na sériovém monitoru

Kód detekce polohy

Detekce polohy a většina vašich vyladění začíná na řádku 742 a prochází 802. Ze snímače polohy získáme data Pitch, Roll a Yaw a použijeme je k nastavení hodnot. V závislosti na tom, jak je vaše elektronika namontována, je možná budete muset změnit. Pokud namontujete snímač polohy čipem směrem k horní části klobouku a šipka vedle X vytištěná na desce směřuje k přední části klobouku, měli byste vidět následující:

  • Pitch kývá hlavou
  • Roll naklání hlavu, např. dotkněte se ucha ramenem
  • Zatáčení je kterým směrem. čelíte (sever, západ atd.).

Pokud je vaše deska namontována v jiné orientaci, budete muset vyměnit Pitch/Roll/Yaw, aby se chovali tak, jak byste chtěli.

Chcete -li upravit nastavení role, můžete změnit následující hodnoty #define:

  • ROLLOFFSET: pokud je váš klobouk stabilní a pokud možno vystředěný, pokud Roll není 0, změňte to rozdílem. Tj. pokud vidíte Roll na -20, když je váš klobouk vycentrovaný, udělejte 20.
  • ROLLMAX: maximální hodnota, která se použije pro měření role. Nejsnazší je najít klobouk a pohybovat pravým uchem směrem k pravému rameni. K tomu budete při používání sériového monitoru potřebovat dlouhý kabel USB.
  • ROLLMIN: nejnižší hodnota, kterou lze použít pro měření náklonu, když nakláníte hlavu doleva

Podobně pro Pitch:

  • MAXPITCH - maximální hodnota při pohledu vzhůru
  • MINPITCH - minimální hodnota při pohledu dolů
  • PITCHCENTER - hodnota výšky tónu, když se díváte přímo dopředu

Pokud nastavíte SERIALDEBUG na hodnotu true v horní části souboru, měli byste vidět aktuální hodnoty pro výstup Roll/Pitch/Yaw na sériový monitor, což pomůže tyto hodnoty upravit.

Další parametry, které můžete chtít změnit

  • MAX_LED_DELAY 35 - nejpomalejší pohyb částice LED. To je v milisekundách. Je to zpoždění od přechodu z jedné LED do druhé v řetězci.
  • MIN_LED_DELAY 10 - půst, kterým se částice LED může pohybovat. Jak je uvedeno výše, je to v milisekundách.

Závěr

Pokud jste došli tak daleko, měli byste mít plně funkční a zábavný LED klobouk! Pokud s tím chcete dělat více, další stránka obsahuje pokročilé informace o změně nastavení a provádění vlastních věcí. stejně jako nějaké vysvětlení toho, co dělá zbytek mého kódu.

Krok 5: Pokročilé a volitelné: Uvnitř kódu

Detekce nárazu a otáčení

Detekce nárazů/otáček se provádí pomocí funkcí snímače G s vysokým G v BNO055. Jeho citlivost můžete vyladit pomocí následujících řádků v initBNO055 ():

  • Řádek č. 316: BNO055_ACC_HG_DURATION - jak dlouho musí událost trvat
  • Řádek #317: BNO055_ACC_HG_THRESH - jak tvrdý musí být dopad
  • Řádek č. 319: BNO055_GYR_HR_Z_SET - práh rychlosti otáčení
  • Řádek č. 320: BNO055_GYR_DUR_Z - jak dlouho musí rotace dokonce trvat

Obě hodnoty jsou 8bitové binární, v současné době je dopad nastaven na B11000000, což je 192 z 255.

Když je detekován náraz nebo otočení, BNO055 nastaví hodnotu, kterou kód hledá hned na začátku smyčky:

// Zjištění všech spuštěných přerušení, tj. Kvůli vysokému G byte intStatus = readByte (BNO055_ADDRESS, BNO055_INT_STATUS); if (intStatus> 8) {impact (); } else if (intStatus> 0) {spin (); }

Chcete -li změnit chování při nárazu, vyhledejte řádek neplatný impact () výše, nebo chcete -li změnit chování při odstřeďování, void spin ().

Pomocníci

Vytvořil jsem jednoduchou pomocnou funkci (void setAllLeds ()) pro rychlé nastavení všech LED na jedinou barvu. Jeden je používá k vypnutí všech:

setAllLeds (CRGB:: Black);

Nebo si můžete vybrat libovolnou barvu rozpoznanou knihovnou FastLED:

setAllLeds (CRGB:: Red);

K dispozici je také funkce fadeAllLeds (), která ztlumí všechny LED diody o 25%.

Třída částic

Aby se výrazně zjednodušilo zapojení, chtěl jsem použít jeden řetězec LED, ale nechat je chovat se jako více řetězců. Vzhledem k tomu, že to byl můj první pokus, chtěl jsem, aby to bylo co nejjednodušší, takže s jedním řetězcem zacházím jako se dvěma, přičemž tam jsou střední LED diody. Jelikož můžeme mít sudé nebo liché číslo, musíme to zohlednit. Začínám s některými globálními proměnnými:

/ * * Proměnná a kontejnery pro LED */ LED diody CRGB [NUM_LEDS]; static unsigned int curLedDelay = MAX_LED_DELAY; static int centerLed = NUM_LEDS / 2; static int maxLedPos = NUM_LEDS / 2; static bool oddLeds = 0; static bool particleDir = 1; static bool speedDir = 1; dlouhé znaménko bez znaménka; nepodepsaný dlouhý hueCount;

A nějaký kód v setup ():

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

Pokud máme lichá čísla, chceme jako střed použít 1/2 bod, v opačném případě chceme 1/2 bod - 1. To je dobře vidět s 10 nebo 11 LED:

  • 11 LED diod: 11/2 s celými čísly by se mělo vyhodnotit na 5. a počítače počítat od 0. Takže 0 - 4 je jedna polovina, 6 - 10 je druhá polovina a 5 je mezi nimi. V tomto případě zacházíme s číslem 5, jako by to bylo součástí obou, tj. Je to #1 pro oba virtuální řetězce LED diod
  • 10 LED: 10/2 je 5. Ale protože počítače počítají od 0, musíme jednu odstranit. Pak máme 0 - 4 pro jednu polovinu a 5 - 9 pro druhou. #1 pro první virtuální řetězec bude 4 a #1 pro druhý virtuální řetězec bude #5.

Potom v našem částicovém kódu musíme provést nějaké počítání od naší celkové polohy po skutečné pozice na řetězci LED:

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

Kód má také podmínky, kdy částice může měnit směr, takže to musíme také vzít v úvahu:

if (particleDir) {if ((proudPos == NUM_LEDS/2) && oddLeds) {aktuálnePos = 0; } else if ((proudPos == NUM_LEDS/2 - 1) && (! oddLeds)) {proudPos = 0; } else {streamPos ++; }} else {if ((proudPos == 0) && oddLeds) {coinsPos = centerLed; } else if ((proudPos == 0) && (! oddLeds)) {aktuálnePos = centerLed - 1; } else {coinsPos--; }}

Použijeme tedy zamýšlený směr (particleDir) k výpočtu, která LED by měla svítit dále, ale musíme také zvážit, zda jsme dosáhli buď skutečného konce řetězce LED, nebo našeho středového bodu, který také funguje jako konec pro každý z virtuálních řetězců.

Jakmile jsme to všechno zjistili, rozsvítíme další světlo podle potřeby:

if (particleDir) {if (oddLeds) {Pos1 = centerLed + proudPos; Pos2 = centerLed - proudPos; } else {Pos1 = centerLed + proudPos; Pos2 = (centerLed -1) - proudPos; }} else {if (oddLeds) {Pos1 = centerLed - proudPos; Poz2 = středová LED + proudPos; } else {Pos1 = centerLed - proudPos; Poz2 = (středová -1) + proudPos; }} LED [Poz1] = CHSV (proudHue, 255, 255); LED [Pos2] = CHSV (proudHue, 255, 255); FastLED.show ();}

Proč z toho vůbec dělat třídu? Jak to je, je to docela jednoduché a ve skutečnosti nemusí být ve třídě. Mám však plány do budoucna aktualizovat kód, aby umožňoval výskyt více než jedné částice najednou, a některé pracovat obráceně, zatímco jiné jdou vpřed. Myslím, že existuje několik opravdu skvělých možností pro detekci spinu pomocí více částic.

Doporučuje: