Obsah:

Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 krokov (s obrázkami)
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 krokov (s obrázkami)

Video: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 krokov (s obrázkami)

Video: Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 krokov (s obrázkami)
Video: Arduino & Neopixel Coke Bottle Party Light 2024, December
Anonim
Image
Image

Takže môj syn Doon zbadá veľmi chladné párty svetlo vyrobené zo starých koksárskych fliaš a mazľavých vnútorností Glow Sticks a pýta sa, či by sme ho nemohli vyrobiť aj pre jeho nadchádzajúce školské skúšky. Hovorím určite, ale nedali by ste si radšej nejaké tie neforemné prstene Adafruit, o ktorých sme čítali … Venuje mi prázdny pohľad. Pretože faktom je, že nevie, o čom hovorím, ale otec si všimol príležitosť hrať s tými prstencami z Neopixelu, o ktorých ON čítal, a všetci vieme, že jedným z 10 najlepších dôvodov, prečo si geekoví otcovia rozmnožujú, je mať ospravedlňte hru so skvelými pomôckami, o ktorých hovoria, že každý je pre svoje deti.

Jedná sa o super jednoduchý projekt, ktorý vyzerá naozaj skvele. Postavili sme naše 3 staré fľaše s koksom, drevenú dosku a konzolu na ihrisko - veci ležiace v suteréne - v kombinácii s Arduinom (v našom prípade Leonardom, ale postačí akákoľvek doska Genuino!) A tromi prstencami z Neopixelu. Objednal som si 9-LED krúžok, ale skončil som s 12-LED krúžkom za rovnakú cenu. Čo bolo sladké, ale znamenalo to prerobenie jamiek-12-LED krúžky sú široké 35 mm, na rozdiel od 23 mm. Čo budete potrebovať:

  • Doska Genuino/Arduino (Použili sme Leonardo, ale takmer každá doska to zvládne)
  • 3 neopixelové krúžky (po 12 diód LED): získajte ich od spoločnosti Adafruit a podporte týchto milých ľudí
  • Kondenzátor 1 000 µf 6,3 V alebo lepší
  • Odpor 300-500 ohmov
  • Drevený tanier alebo štvorec šrotu alebo čokoľvek, do čoho môžete vkladať neopixely, a na vrch položiť fľaše s koksom
  • Nejaká forma držiaka na tanier - konzola stĺpika na ihrisko pre nás fungovala skvele
  • 9v stena bradavice
  • 40 mm dierovač
  • Skrutky, matice, podložky, rozpery
  • Drôt s plným jadrom
  • Spájkovačka a spájkovačka
  • Breadboard
  • Plastové puzdro pre Arduino. Môžete ísť von a kúpiť si naozaj pekné, perfektne padnúce plastové puzdro vyrobené z miliónov rokov starej ropy vyvŕtanej zo zeme v nejakom krehkom prostredí, vyrobené na druhom konci planéty a odoslané v kontajneri do skladu vo vašom okolí so všetkým porty vyrezané v dokonalom súlade a nechajte si ich doručiť k vašim dverám dodávkou chrliacou oxid uhličitý do atmosféry. Alebo môžete urobiť to, čo som urobil, a použiť starú vyradenú plastovú škatuľu.. v tomto prípade madagaskarský box na pomôcky ležiaci v lekárničke … a vyvŕtajte do nej niekoľko dier. Tu sa prednáška končí. Urobme…

Krok 1: Vytvorte základňu

Vytvorte základňu
Vytvorte základňu
Vytvorte základňu
Vytvorte základňu

Môžete improvizovať svoju základňu z akéhokoľvek odpadu, ktorý máte vo svojom vlastnom suteréne, alebo dokonca môžete použiť drevenú škatuľu alebo čokoľvek, čo skryje vašu elektroniku.

Najprv sme vyvŕtali tri otvory, rovnomerne rozmiestnené na drevenej doske, dostatočne veľké na to, aby v nich mohli sedieť prstene Neopixel. Na obrázku sú otvory vyvŕtané rýľovým vrtákom. Nakoniec sme kvôli väčšej veľkosti 12-LED krúžkov museli vyvŕtať otvory vŕtacím vrtákom. To znamenalo prejsť celou doskou a namiesto toho, aby som prstene pekne priliehal do ich jemne vytvorených malých 2 mm hlbokých jamiek so stredovým otvorom pre úhľadný drôtený beh, skončil som tým, že som krúžky zaistil… ehm… lepiacou páskou cez dno taniera. Nesúďte. V mojom návrhu aj tak nevidíte dno taniera. A keď je zapnuté, je tma. A okrem toho - čo je zlé na lepiacej páske?

Potreboval som voľný priestor medzi doskou a konzolou na dosku na chlieb na dne dosky a jeden komponent - kondenzátor a na vedenie drôtov, ktoré by muselo ísť z dosky na pečenie do Arduina, ktorú som plánoval vložiť do držiaka. Na hriadele skrutiek som teda dal sadu provizórnych rozperiek, aby bol dostatok voľného priestoru - asi 3 cm, výška dosky na chlieb a trochu, aby ste nerozdrvili vedenie. Použil som dve drevené kotviace skrutky na roh, pretože mali správnu výšku a ležali v zásuvke pre mužov … tá škatuľka s uvoľnenými skrutkami, skrutkami, klincami, hrdzavými článkami, hadicovými spojkami, starými mincami, nečakane ostrými predmetmi a všetkým možným. bitov a bobov, ktoré vám môžu magicky ušetriť výlet do železiarstva tým, že ponúknu, ak nie presne to, čo potrebujete, niečo, čo bude v poriadku.

Šťastná nehoda ohľadom príspevku na ihrisko, ktorý som našiel v suteréne, bol, že už tanierom prechádzali otvory. Nie je potrebné vŕtať železo! Základňa mala štyri otvory pre skrutky a do drevenej platne sme vyvŕtali štyri proti sebe zapustené otvory.

Celé sme to potom nastriekali na Gothic Black.

Krok 2: Príprava neopixelových krúžkov

Príprava neopixelových prsteňov
Príprava neopixelových prsteňov

Na svoje neopixelové krúžky budete musieť spájkovať drôty: pre všetky dátový vstupný kábel, pre dva dátový výstupný kábel a pre každý napájací a uzemňovací vodič. Bez ohľadu na to, akú dĺžku si myslíte, že potrebujete, pridajte ju. Prebytočný drôt môžete vždy odstrihnúť, príliš krátky nemôžete natiahnuť. Uvedomte si varovanie od spoločnosti Adafruit:

Pri spájkovaní drôtov s týmito krúžkami musíte byť obzvlášť opatrní pri spájkovacích krúžkoch a skratoch. Rozstup medzi komponentmi je veľmi tesný! Často je najľahšie vložiť drôt spredu a spájkovať zozadu.

Kiež by som si to prečítal, kým som sa nepájil dopredu. Podarilo sa mi nespáliť žiadnu zo svojich diód LED, ale okraj jednej som spálil tak, že som sa potil, až kým som ho nezapol. Tiež by som si prečítal jemný manuál a prečítal by som si varovanie, aby ste na LED diódu nedávali klip aligátora. Nech sú moje vraky blízko vašim majákom.

Neopixelové krúžky sú zapojené do reťazca, čo znamená, že všetky ich LED diódy môžete ovládať súčasne z Arduina zapojením vodiča z VONKA jedného krúžku do VSTUPU druhého. Každý prstenec potrebuje tiež napájacie a uzemňovacie vodiče.

Krok 3: Zapojenie

The Wiring
The Wiring

Zapojte ho ako vo vyššie uvedenom Fritzingu-pin 6 Arduina prenesie údaje do prvého kruhu, výstup dát z tohto kruhu prejde do vstupu údajov ďalšieho, výstup dát z tohto kruhu prejde na Údaje o poslednom zvonení. Nepotrebujete dátový výstupný kábel posledného prstenca.

Kapacita 1 000 µf prechádza medzi kladnými a zápornými koľajnicami nepájivého poľa. Táto čiapočka chráni krúžky pred špičkami a je odporúčaná sekciou najlepších postupov Adafruit NeoPixel Uberguide. Odpor na Údaje v prvom neopixeli odporúča aj Adafruit-je to 1K vo Fritzingu, ale odporúčaný odpor je 300-500 ohmov.

V mojej zostave som previedol káble z Neopixelov cez zadnú stranu taniera na dosku upevnenú v strede. Tak budete musieť k základnej jednotke viesť iba tri dlhé káble: napájanie, uzemnenie a dáta. Tieto káble som vyrobil superdlhé-v základni je veľa úložného priestoru, a preto je praktické vytiahnuť dosku na preprogramovanie.

Krok 4: Kód

„loading =“lenivý”spomenul, že môj syn chcel jeho verziu reagujúcu na hudbu. Trvalo to do jeho 18. narodenín, aby sa k tomu dostal, ale je to tu!

Dodatočné vybavenie:

1 jednopólový prepínač s dvojitým hodením 1 mikrofón s automatickým ovládaním zisku (použil som MAX9184 od spoločnosti AdaFruit) 1 kondenzátor 1uF-100uF (ľubovoľná hodnota)

Aby správne fungoval, musí mať mikrofón automatické ovládanie zisku. AGC bude neustále vzorkovať okolitý hluk a zvyšovať a znižovať prah, ktorý považuje za pozadie, takže vaše svetlo bude reagovať na špičky na tomto pozadí. Mikrofón AdaFruit je vynikajúci: môžete ísť z tichej miestnosti, v ktorej vás zvuk jedného hlasu spustí do režimu celodennej párty s miestnosťou plnou tínedžerov a kriku hudby, a zachytí rytmus hudby. dobre. Alternatíva, nastaviteľný zosilňovací mikrofón, má na doske malý potenciometer, ktorý je neuveriteľne jemný a neistý. Na to, aby bola jednotka zbytočná, nie je potrebné veľa meniť okolitý zvuk: svetlá svietia stále alebo sú stále tmavé. AGC funguje ako mágia.

Chcel som možnosť použiť vzor vírivého testu alebo hudbu, a tak som zapojil stredový vodič prepínača do VIN a jeden vodič do kolíka 4 druhý do pinu 8 Leonarda. Testovaním týchto pinov na HIGH alebo LOW môžeme zistiť, v ktorom stave sa prepínač nachádza, a podľa toho kód pobočky.

Krok 7: Zapojenie mikrofónu

Zapojenie mikrofónu
Zapojenie mikrofónu

Vstup Mic zapojte cez kondenzátor 1-100 µF do analógového pinu 0. Ak je váš kondenzátor polarizovaný, výstupný kolík prejde na kladnú stranu (zelený vodič).

Ďakujem CodeGirlJP za rutinu Trinket-Color-by-Sound, ktorú som upravil nižšie:

// Zvukovo aktivované diódy LED s Arduino a NeoPixels

#zahrnúť

#define MIC_PIN A0 // Mikrofón je pripevnený ku kolíku a0 na Leonarde

#define LED_PIN 6 // NeoPixel LED vlákno pripevnené k pinu 6 na Leonardo #define N_PIXELS 36 // počet pixelov v LED vlákne !!!!!! Upravte počet pixelov vo vašom nastavení. To je správne pre 3 neopixelové prstene !!!!!! #define N 100 // Počet vzoriek, ktoré je potrebné odobrať pri každom čítaní Ukážky sa nazýva #define fadeDelay 5 // čas oneskorenia pre každé množstvo fade #definovať hlukÚroveň 30 // úroveň sklonu priemerného mikrofónneho šumu bez zvuku

// Inicializujte pás NeoPixel s definovanými hodnotami vyššie:

Pásik Adafruit_NeoPixel = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

int vzorky [N]; // úložisko pre sadu kolekcií vzoriek

int periodFactor = 0; // sledovanie počtu ms pre výpočet periódy int t1 = -1; // zistené časy sklonu> 100. int T; // perióda medzi časmi škálovanými na milisekundy int sklon; // sklon dvoch zozbieraných dátových bodov vzorky byte periodChanged = 0; const int SwitchPinMusic = 4; // Pin pre polohu prepínača citlivosť na hudbu const int SwitchPinSwirl = 8; // Pin pre polohu prepínača Testovací vzor (vírenie) int MusicbuttonState = 0; // Logická premenná zapnutá pre citlivosť hudby

// Spôsob nastavenia Arduino

neplatné nastavenie () {

strip.begin ();

ledsOff (); oneskorenie (500); displayColor (koleso (100)); strip.show (); oneskorenie (500); oddWheel (koleso (100)); strip.show (); oneskorenie (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Switched, FALLING);

}

// Metóda slučky Arduino

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // VYSOKÉ, ak je prepínač nastavený na Citlivosť hudby MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH, ak je prepínač nastavený na Testovací vzor while (SwirlbuttonState == LOW) {readSamples (); // Spustite rutinu vzorkovania hudby SwirlbuttonState = digitalRead (SwitchPinSwirl); // Skontrolujte, či bol prepínač zmenený} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Dance (); // Spustite rutinnú testovaciu schému SwirlbuttonState = digitalRead (SwitchPinSwirl); // Skontrolujte, či bol prepínač zmenený

}

}

prázdny tanec () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (pásik. Farba (0, 255, 0), 50); // Zelená SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (pásik. Farba (0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Biele RGBW // Odoslanie prenasledovania pixelov v kine v … SwirlbuttonState = digitalRead (SwitchPinSwirl); divadloChase (pás. Farba (127, 127, 127), 50); // White SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (pás. Farba (127, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (pás. Color (0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); dúha (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); rainbowCycle (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); divadloChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Čítanie a spracovanie vzorových dát z Mic void readSamples () {for (int i = 0; i0) {sklon = vzorky - vzorky [i -1]; } else {sklon = vzorky - vzorky [N -1]; } // Zistiť, či je sklon väčší ako noiseLevel - zvuk, ktorý nie je na úrovni šumu detegovaný if (abs (sklon)> noiseLevel) {if (sklon <0) {countPeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} else {ledsOff (); // divadloChaseRainbow (50); } periodFactor += 1; oneskorenie (1); }}

prázdne vypočítať obdobie (int i)

{if (t1 == -1) {// t1 nebolo nastavené t1 = i; } else {// t1 bolo nastavené, takže vypočítajte obdobie int obdobie = periodFactor*(i - t1); periodChanged = T == bodka? 0: 1; T = bodka; //Serial.println(T); // reset t1 na novú hodnotu i t1 = i; periodFactor = 0; }}

uint32_t getColor (int obdobie)

{if (period == -1) return Wheel (0); else if (bodka> 400) vrátiť Koleso (5); else return Wheel (mapa (-1*bodka, -400, -1, 50, 255)); }

void fadeOut ()

{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Aktualizácia oneskorenia pásu (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Aktualizácia pruhu // vyblednutie farby pre (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); //strip.show (); // Aktualizácia oneskorenia pásu (fadeDelay); periodFactor+= fadeDelay; }}

prázdne diódy LED Vypnuté ()

{ vyblednúť(); pre (int i = 0; i

prázdna displayColor (farba uint32_t)

{for (int i = 0; i

void oddWheel (farba uint32_t)

{for (int j = 0; j <256; j ++) {// cyklus všetkých 256 farieb v koliesku pre (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255)); // zapnite každý tretí pixel}} strip.show ();

oneskorenie (1);

pre (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // vypnite každý tretí pixel}}} fadeIn (); }

// Vyplňte bodky jednu za druhou farbou

void colorWipe (uint32_t c, uint8_t čakať) {for (uint16_t i = 0; i

prázdna dúha (uint8_t čakať) {

uint16_t i, j;

pre (j = 0; j <256; j ++) {pre (i = 0; i

// Trochu odlišný, vďaka čomu je dúha rovnomerne rozložená v celom objeme

void rainbowCycle (uint8_t čakať) {uint16_t i, j;

for (j = 0; j <256*5; j ++) {// 5 cyklov všetkých farieb na koliesku pre (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); oneskorenie (čakanie); }}

// Plazivé svetlá v divadelnom štýle.

void TheaterChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// do 10 cyklov chasing for (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // zapnite každý tretí pixel}} strip.show ();

oneskorenie (čakanie);

pre (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // vypnite každý tretí pixel}}}}

// Plazivé svetlá v divadelnom štýle s dúhovým efektom

void TheaterChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// cyklus všetkých 256 farieb v koliesku pre (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Wheel ((i+j) % 255)); // zapnite každý tretí pixel}} strip.show ();

oneskorenie (čakanie);

pre (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // vypnite každý tretí pixel}}}}

// Na získanie hodnoty farby zadajte hodnotu 0 až 255.

// Farby sú prechodom r - g - b - späť na r. uint32_t Wheel (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {spätný pás. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; spätný pás. Farba (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; spätný pás. Farba (WheelPos * 3, 255 - WheelPos * 3, 0); }

void Prepnuté () {

strip.show (); readSamples (); }

Predtým, ako ma zabijú v komentároch (pamätajte na zásady „Buďte milí !! Nie je potrebné neustále testovať, či je pin 4 aj pin 8 VYSOKÝ. Pretože je prepínač jednopólový dvojitý hod, hodnotu jedného je možné vyvodiť z druhého: stačí otestovať iba jeden. Takže by ste mohli prejsť a odstrániť všetky odkazy na čítanie a písanie MusicButtonState a jednoducho spustiť celú vec efektívnejšie testovaním SwirlButtonState, ak máte málo pamäte alebo ju rozširujete o ďalšie rutiny. Vyššie uvedený kód však funguje.

A ak niekto chce vyladiť tieto zvukové rutiny tak, aby snímali nielen hladinu hluku, ale aj frekvenciu, a napísali nejaký plynulý kód na posúvanie svetelného spektra nahor a nadol v reakcii na pohyby pozdĺž zvukového spektra, zanechajte odkaz v komentároch na ako si to urobil

Užite si to!

Odporúča: