Sadržaj:

Arduino i Neopixel boca s koks -bocom Rainbow Party Light: 7 koraka (sa slikama)
Arduino i Neopixel boca s koks -bocom Rainbow Party Light: 7 koraka (sa slikama)

Video: Arduino i Neopixel boca s koks -bocom Rainbow Party Light: 7 koraka (sa slikama)

Video: Arduino i Neopixel boca s koks -bocom Rainbow Party Light: 7 koraka (sa slikama)
Video: Arduino NeoPixel Tutorial 2024, Studeni
Anonim
Image
Image

Tako moj sin Doon uočava jako cool svjetlo za zabavu napravljeno od starih boca koksa i gnjecave nutrine sjajnih štapića, i pita možemo li ga napraviti za njegove nadolazeće školske ispite koji su završili puhanjem PARTYYY !!! Kažem sigurno, ali zar ne biste radije uzeli neko od onih prskavih prstenova od adafruta od neopiksela o kojima smo čitali … On me gleda u prazno. Jer činjenica je da ne zna o čemu govorim, ali tata je uočio priliku da se poigra s onim neopikselnim prstenovima o kojima je čitao, a svi znamo jedan od 10 najboljih razloga zbog kojih su štreberski tate razmnožili izgovor da se igrate sa cool gadgetima za koje kažu da su svi za svoju djecu.

Ovo je super-jednostavan projekt koji izgleda jako sjajno. Napravili smo naše od 3 stare boce koksa, drvene ploče i držača za dječje igralište - stvari koje leže okolo u podrumu - u kombinaciji s Arduinom (u našem slučaju Leonardo, ali svaka Genuino ploča će uspjeti!) I tri prstena od neopiksela. Naručio sam 9-LED prsten, ali na kraju sam dobio 12-LED prsten za istu cijenu. Što je bilo slatko, ali značilo je prelazak na rupe za bušotine-12-LED prstenovi su široki 35 mm, za razliku od 23 mm. Što će vam trebati:

  • Genuino/Arduino ploča (Koristili smo Leonardo, ali gotovo svaka ploča će to učiniti)
  • 3 neopikselna prstena (po 12 LED dioda): nabavite ih od Adafruit -a i podržite one dobre ljude
  • 1000 µf 6,3 V ili bolji kondenzator
  • Otpor 300-500 ohma
  • Drvena ploča, ili kvadratni otpad, ili bilo što u što možete staviti neopiksele i na njih staviti boce koksa
  • Neki oblik nosača za ploču - nosač za igralište odlično nam je uspio
  • 9v zidna bradavica
  • Bušotina za rupe od 40 mm
  • Vijci, matice, podloške, odstojnici
  • Žica s čvrstom jezgrom
  • Lemilica i lemljenje
  • Oglasna ploča
  • Plastično kućište za Arduino. Možete izaći van i kupiti zaista lijepo, savršeno uklapajuće plastično kućište od milijun godina stare nafte izbušene iz zemlje u nekom krhkom okruženju i proizvedene na drugoj strani planeta te otpremljene u kontejneru u skladište u vašoj blizini sa svim priključci izrezani u savršenom poravnanju i dostaviti ih na vaša vrata kombijem koji izbacuje ugljikov dioksid u atmosferu. Ili možete učiniti ono što sam ja učinio i upotrijebiti staru odbačenu plastičnu kutiju.. u ovom slučaju kutiju s flasterom s Madagaskara koja leži u ormariću s lijekovima … i izbušiti nekoliko rupa u njoj. Ovdje završava predavanje. Idemo napraviti…

Korak 1: Napravite bazu

Napravite bazu
Napravite bazu
Napravite bazu
Napravite bazu

Možete improvizirati svoju bazu iz bilo kojeg smeća koje imate u svom podrumu, ili čak upotrijebiti drvenu kutiju ili bilo što što će sakriti vašu elektroniku.

Prvo smo izbušili tri rupe, ravnomjerno raspoređene na drvenoj ploči, dovoljno velike da mogu sjediti prstenovi Neopixela. Na slici su rupe izbušene bušilicom s lopatom. Na kraju smo zbog veće veličine 12-LED prstenova morali izbušiti rupe s bušilicom. To je značilo proći skroz kroz ploču, i umjesto da lijepo uguram prstenove u njihove fino izrađene male bušotine dubine 2 mm sa središnjim otvorom za urednu žicu, na kraju sam prstenove učvrstio … hmm … ljepljivom trakom po dnu ploče. Ne osuđujte. U mom dizajnu ionako ne možete vidjeti dno ploče. A kad je uključeno, mračno je. I osim toga - što nije u redu s ljepljivom trakom?

Trebao mi je razmak između ploče i držača za ploču na dnu ploče i jednu komponentu - kondenzator te za žice koje bi morale ići od ploče do Arduina, koje sam planirao staviti unutar nosača. Stoga sam stavio set improviziranih odstojnika na osovine vijaka kako bih dao dovoljno slobodnog prostora - oko 3 cm, visine ploče i malo kako ne biste slomili ožičenje. Koristio sam dva drvena sidrena vijka po kutu jer su bili odgovarajuće visine i ležali su u ladici … ta kutija labavih vijaka, vijaka, čavala, zahrđalih lančića, spojnica za crijeva, stari novčići, neočekivano oštri predmeti i sve bitova i bobova koji vam čarobno mogu uštedjeti put do željezarije nudeći, ako ne i točno ono što vam je potrebno, nešto što će biti sasvim u redu.

Sretna nesreća oko stupa za igralište koju sam pronašla u podrumu bila je to što su kroz ploču već prolazile rupe. Nije potrebno bušiti željezo! Baza je imala četiri rupe za vijke, a mi smo u drvenoj ploči izbušili četiri suprotno utonule rupe.

Zatim smo cijelu stvar obojili u gotičko crno.

Korak 2: Priprema prstenova Neopixel

Priprema prstenova Neopixel
Priprema prstenova Neopixel

Morat ćete lemiti žice na svoje neopikselne prstenove: žicu za ulaz podataka za sve njih, žicu za izlaz podataka za dvije od njih te napajanje i uzemljenje za svaki. Koju god duljinu mislite da trebate, dodajte je. Višak žice uvijek možete odrezati, prekratku ne možete rastegnuti. I imajte na umu upozorenje Adafruit -a:

Prilikom lemljenja žica na ove prstenove morate biti posebno oprezni u vezi sa lemnim mrljama i kratkim spojevima. Razmak između komponenti vrlo je mali! Često je najlakše umetnuti žicu s prednje strane i lemiti sa stražnje strane.

Volio bih da sam to pročitao prije nego što sam lemio naprijed. Uspio sam ne izgorjeti nijedna LED dioda, ali sam opekao rub jedne na način da sam se znojio sve dok je nisam upalio. Također, da sam pročitao fini priručnik, pročitao bih i upozorenje da na LED ne stavljam štipaljku od aligatora. Neka moji brodski olupini budu vaš svjetionik.

Neopixel prstenovi pričvršćuju lanac, što znači da možete kontrolirati sve njihove LED diode istovremeno s Arduina povezivanjem žice s izlaza jednog prstena na ulaz drugog. Svaki prsten također treba napajanje i uzemljenje.

Korak 3: Ožičenje

Ožičenje
Ožičenje

Povežite ga kao u gore navedenom Fritzingu-pin 6 Arduina vodi podatke u prvo zvono, podaci iz tog prstena idu u ulaz podataka sljedećeg, izlaz iz tog podatka ide u Ulaz podataka zadnjeg zvona. Ne treba vam žica za izlaz podataka posljednjeg prstena.

Kapacitet od 1000 µf ide između pozitivnih i negativnih vodilica matične ploče. Ova kapa štiti prstenove od skokova struje i preporučuje je odjeljak o najboljoj praksi Adafruit NeoPixel Uberguidea. Otpornik na Data u prvom neopikselu također preporučuje Adafruit-to je 1K u Fritzingu, ali preporučeni otpor je 300-500 ohma.

U svojoj konstrukciji vodio sam žice od Neopixela preko stražnje strane ploče do ploče postavljene u sredini. Na taj način morate provesti samo tri dugačke žice dolje u bazu: napajanje, uzemljenje i prijenos podataka. Napravio sam ove žice super dugačkim-u podnožju ima dosta prostora za pohranu, pa je prikladno moći izvući ploču radi ponovnog programiranja.

Korak 4: Kôd

"loading =" lijen "spomenuo je da je moj sin htio glazbeno reaktivnu verziju ovoga. Trebao je do svog 18. rođendana da se snađe, ali evo ga!

Dodatna oprema:

1 jednopolni, dvostruki prekidač 1 mikrofon za automatsku kontrolu pojačanja (koristio sam AdaFruit-ov MAX9184) 1 1uF-100uF kondenzator (bilo koja vrijednost)

Mikrofon zaista mora imati automatsku kontrolu pojačanja kako bi ispravno radio. AGC će stalno uzorkovati okolnu buku te podizati i spuštati prag koji smatra pozadinom, pa će vaše svjetlo reagirati na skokove na toj pozadini. AdaFruit mikrofon je briljantan: možete otići iz tihe sobe u kojoj će ga zvuk jednog glasa pokrenuti u način rada za potpunu zabavu sa prostorijom punom tinejdžera i treperenjem glazbe, a on će pokupiti ritam glazbe samo fino. Alternativa, mikrofon s podesivim pojačanjem, ima maleni potenciometar na ploči koji je nemoguće osjetljiv i spretan. Nije potrebno puno promjena u ambijentalnom zvuku kako bi jedinica postala beskorisna: svjetla su stalno upaljena ili stalno tamna. AGC djeluje poput magije.

Htio sam mogućnost korištenja uzorka za vrtloženje ili glazbe, pa sam spojio središnji kabel prekidača na VIN, a jedan vodič na pin 4, drugi na pin 8 Leonarda. Testiranjem tih pinova na VISOKO ili NISKO možemo saznati u kojem je stanju prekidač i prema tome šifru grane.

Korak 7: Ožičenje mikrofona

Ožičenje mikrofona
Ožičenje mikrofona

Uključite mikrofon ulaz preko tog kondenzatora od 1-100µF u analogni pin 0. Ako je vaš kondenzator polariziran, vanjski pin ide na pozitivnu stranu (zelena žica).

Zahvaljujući CodeGirlJP-u za njenu Trinket-Color-by-Sound rutinu, koju sam dolje prilagodila:

// Zvučno aktivirane LED diode s Arduino i NeoPixels

#uključi

#define MIC_PIN A0 // Mikrofon je priključen na pin a0 na Leonardu

#define LED_PIN 6 // NeoPixel LED nit pričvršćena na pin 6 na Leonardu #define N_PIXELS 36 // broj piksela u LED nizu !!!!!! Prilagodite se broju piksela u postavkama. To je točno za 3 neopikselna prstena !!!!!! #define N 100 // Broj uzoraka koje treba uzeti svaki put pri čitanjuUzorci se zovu #define fadeDelay 5 // vrijeme kašnjenja za svaki iznos blijeđenja #define noiseLevel 30 // nagib prosječne mikrofonske buke bez zvuka

// Inicijalizirajte NeoPixel traku s gornjim definiranim vrijednostima:

Adafruit_NeoPixel traka = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

int uzorci [N]; // pohrana za skup uzoraka

int periodFactor = 0; // prati broj ms za izračun razdoblja int t1 = -1; // otkriveno vrijeme nagiba> 100. int T; // razdoblje između vremena skalirano na milisekunde int nagib; // nagib dviju prikupljenih točaka uzorka podataka byte periodChanged = 0; const int SwitchPinMusic = 4; // Pin za položaj prekidača osjetljivost na glazbu const int SwitchPinSwirl = 8; // Pin za položaj prekidača Test Pattern (swirl) int MusicbuttonState = 0; // Uključena isključena logička varijabla za osjetljivost glazbe

// Način postavljanja Arduina

void setup () {

strip.begin ();

ledsOff (); kašnjenje (500); displayColor (Kotačić (100)); strip.show (); kašnjenje (500); oddWheel (Kotač (100)); strip.show (); kašnjenje (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Sklopljeno, PADA);

}

// Metoda Arduino petlje

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // VISOKO ako je prekidač postavljen na Osjetljivost glazbe MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH ako je prekidač postavljen na Test pattern while (SwirlbuttonState == LOW) {readSamples (); // Pokretanje rutine uzorkovanja glazbe SwirlbuttonState = digitalRead (SwitchPinSwirl); // Provjerite je li prekidač promijenjen} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalno čitanje (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Dance (); // Pokreni rutinu ispitnog uzorka SwirlbuttonState = digitalRead (SwitchPinSwirl); // Provjerite je li prekidač promijenjen

}

}

void Dance () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Crveno SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (strip. Color (0, 255, 0), 50); // Zeleni SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (strip. Color (0, 0, 255), 50); // Plavi SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Bijeli RGBW // Slanje kazališnih piksela u … SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (127, 127, 127), 50); // Bijelo SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (127, 0, 0), 50); // Crveno SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (0, 0, 127), 50); // Plavi SwirlbuttonState = digitalRead (SwitchPinSwirl); duga (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); rainbowCycle (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); kazališteChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Čitanje i obrada uzoraka podataka iz Mic void readSamples () {for (int i = 0; i0) {slope = uzorci - uzorci [i -1]; } else {nagib = uzorci - uzorci [N -1]; } // Provjeri je li nagib veći od noiseLevel - zvuk koji nije na razini buke otkriven if (abs (nagib)> noiseLevel) {if (nagib <0) {CalculatePeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} else {ledsOff (); // kazališteChaseRainbow (50); } periodFactor += 1; odgoda (1); }}

void Calculiperiod (int i)

{if (t1 == -1) {// t1 nije postavljeno t1 = i; } else {// t1 je postavljeno pa izračunaj period int period = periodFactor*(i - t1); periodChanged = T == period? 0: 1; T = točka; //Serial.println(T); // resetiranje t1 na novu vrijednost i t1 = i; periodFactor = 0; }}

uint32_t getColor (int razdoblje)

{if (period == -1) povratni kotač (0); else if (period> 400) return kotač (5); else return kotač (karta (-1*točka, -400, -1, 50, 255)); }

void fadeOut ()

{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Ažuriranje kašnjenja trake (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Ažuriraj traku // izblijedje boju za (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); //strip.show (); // Ažuriranje kašnjenja trake (fadeDelay); periodFactor+= fadeDelay; }}

void ledsOff ()

{ izblijediti(); za (int i = 0; i

void displayColor (boja uint32_t)

{for (int i = 0; i

void oddWheel (boja uint32_t)

{for (int j = 0; j <256; j ++) {// ciklus svih 256 boja u kotaču za (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, kotačić ((i+j) % 255)); // uključuje svaki treći piksel} strip.show ();

odgoda (1);

za (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // isključuje svaki treći piksel}}} fadeIn (); }

// Ispunite točkice jednu za drugom bojom

void colorWipe (uint32_t c, uint8_t wait) {for (uint16_t i = 0; i

void rainbow (uint8_t wait) {

uint16_t i, j;

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

// Pomalo drugačije, zbog toga je duga podjednako raspoređena

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

za (j = 0; j <256*5; j ++) {// 5 ciklusa svih boja na kotaču za (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); odgoda (čekanje); }}

// Svjetla za puzanje u kazališnom stilu.

void theatreChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// napravite 10 ciklusa jurnjave za (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // uključuje svaki treći piksel} strip.show ();

odgoda (čekanje);

za (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // isključi svaki treći piksel}}}}

// Svjetla za puzanje u kazališnom stilu s efektom duge

void theatreChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// ciklus svih 256 boja u kotaču za (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Kotačić ((i+j) % 255)); // uključuje svaki treći piksel} strip.show ();

odgoda (čekanje);

za (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // isključi svaki treći piksel}}}}

// Unesite vrijednost od 0 do 255 da biste dobili vrijednost boje.

// Boje su prijelaz r - g - b - natrag u r. uint32_t Kotač (byte WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; povratna traka. Boja (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; povratna traka. Boja (WheelPos * 3, 255 - WheelPos * 3, 0); }

void Switched () {

strip.show (); readSamples (); }

Prije nego što su me zaklali u komentarima (sjetite se politike Budi lijep !!) shvatio sam nakon što sam ovo postavio kako su neki moji kodovi traljavi. Nema potrebe stalno testirati pin 4 i pin 8 na HIGH. Budući da je prekidač jednopolno dvostruko bacanje, vrijednost jednog može se zaključiti iz drugog: trebate samo testirati jedno. Tako biste mogli proći kroz i ukloniti svaku referencu na čitanje i pisanje MusicButtonState te jednostavno sve pokrenuti učinkovitije testiranjem SwirlButtonState, ako vam nedostaje memorije ili se proširujete drugim rutinama. Ali gornji kod radi.

A ako netko želi prilagoditi te audio rutine kako bi osjetio ne samo razinu šuma, već i frekvenciju, te napisao neki glatki kôd za klizanje gore -dolje po svjetlosnom spektru kao odgovor na pomake duž audio spektra, neka u komentarima pusti vezu kako si to napravio.

Uživati!

Preporučeni: