Turinys:

„Arduino“ir „Neopixel“kokso butelių vaivorykštės vakarėlio šviesa: 7 žingsniai (su nuotraukomis)
„Arduino“ir „Neopixel“kokso butelių vaivorykštės vakarėlio šviesa: 7 žingsniai (su nuotraukomis)

Video: „Arduino“ir „Neopixel“kokso butelių vaivorykštės vakarėlio šviesa: 7 žingsniai (su nuotraukomis)

Video: „Arduino“ir „Neopixel“kokso butelių vaivorykštės vakarėlio šviesa: 7 žingsniai (su nuotraukomis)
Video: How to Use Infrared Remotes and Receivers on the Arduino - Ultimate Guide to the Arduino #26 2024, Lapkritis
Anonim
Image
Image

Taigi mano sūnus Doonas pastebi labai šaunią vakarėlio lemputę, pagamintą iš senų kokso butelių, ir kvapnius „Glow Sticks“vidų, ir klausia, ar galime padaryti vieną jo būsimiems mokyklos egzaminams „PartAYYY !!! Aš sakau tikrai, bet ar nenorėtumėte turėti tų aštrių „Adafruit Neopixel“žiedų, apie kuriuos mes skaitėme … Jis žvelgia man tuščiu žvilgsniu. Nes iš tikrųjų jis nežino, apie ką aš kalbu, bet tėtis pastebėjo progą pažaisti su tais neopikseliniais žiedais, apie kuriuos jis skaito, ir mes visi žinome vieną iš dešimties pagrindinių priežasčių, dėl kurių giedami tėčiai. pasiteisinimas žaisti su šauniais dalykėliais, kuriuos jie sako visiems skirti savo vaikams.

Tai labai paprastas projektas, kuris atrodo tikrai puikiai. Mes pastatėme savo 3 senus kokso butelius, medinę lėkštę ir žaidimų aikštelės laikiklį - daiktus, esančius rūsyje - kartu su „Arduino“(mūsų atveju - „Leonardo“, bet tiks bet kuri „Genuino“plokštė!) Ir trys „Neopixel“žiedai. Aš užsisakiau 9 LED žiedą, bet gavau 12 LED žiedą už tą pačią kainą. Tai buvo miela, bet reiškė, kad reikia padaryti per šulinių angas-12 LED žiedų plotis yra 35 mm, o ne 23 mm. Ko jums reikės:

  • „Genuino“/„Arduino“lenta (mes naudojome „Leonardo“, bet tinka beveik bet kuri lenta)
  • 3 „Neopixel“žiedai (po 12 šviesos diodų): įsigykite juos iš „Adafruit“ir palaikykite tuos puikius žmones
  • 1000 µf 6.3v arba geresnis kondensatorius
  • 300-500 omų rezistorius
  • Medinė lėkštė, skardos kvadratas ar bet kas, į ką galite įdėti neopikselius ir uždėti kokso butelius ant viršaus
  • Tam tikra plokštės tvirtinimo forma - žaidimų aikštelės laikiklis mums puikiai tiko
  • 9v sieninė karpa
  • 40 mm skylė
  • Varžtai, veržlės, poveržlės, tarpinės
  • Tvirta šerdies viela
  • Lituoklis ir lydmetalis
  • Bandomoji Lenta
  • Plastikinis „Arduino“dėklas. Galite išeiti ir nusipirkti tikrai gražaus, puikiai priglundančio plastikinio dėklo, pagaminto iš milijono metų senumo naftos, išgręžtos iš žemės tam tikroje trapioje aplinkoje ir pagaminta kitoje planetos pusėje, o konteineryje išsiųsta į sandėlį, esantį šalia jūsų. uostai yra visiškai suderinti ir pristatomi į jūsų duris mikroautobusu, išmetančiu į atmosferą anglies dioksidą. Arba galite padaryti tai, ką aš padariau, ir panaudoti seną išmestą plastikinę dėžutę.. šiuo atveju vaistų spintoje gulinti Madagaskaro juostos pagalvė … ir išgręžti keletą skylių. Čia baigiasi paskaita. Padarykime…

1 žingsnis: padarykite pagrindą

Padarykite pagrindą
Padarykite pagrindą
Padarykite pagrindą
Padarykite pagrindą

Galite improvizuoti savo bazę iš bet kokio šlamšto, kurį turite savo rūsyje, arba net tiesiog naudoti medinę dėžę ar bet ką, kas paslėps jūsų elektroniką.

Pirmiausia mes išgręžėme tris skylutes, tolygiai išdėstytas ant medinės plokštės, pakankamai dideles, kad neopikselio žiedai įsitaisytų. Paveikslėlyje skylės yra šuliniai, išgręžti kastuvu. Galų gale dėl didesnio 12 LED žiedų dydžio turėjome gręžti skyles su gręžtuvu. Tai reiškė, kad reikia eiti per visą plokštę ir vietoj to, kad žiedai būtų gražiai prigludę prie jų smulkiai pagamintų 2 mm gylio šulinių su centrine skylute tvarkingam vielos paleidimui, galų gale pritvirtinau žiedus… ahem… lipnia juosta per apačią iš plokštelės. Nesmerk. Šiaip mano dizaino plokštelės dugno nematote. Ir įjungus yra tamsu. Ir be to - kas negerai su lipnia juosta?

Man reikėjo atstumo tarp plokštės ir laikiklio, skirto duonos plokštei, esančiai plokštės apačioje, ir vieno komponento - kondensatoriaus, taip pat laidų važiavimams, kurie turėtų pereiti nuo duonos lentos iki „Arduino“, kurį planavau įdėti į laikiklio vidų. Taigi ant varžtų velenų uždėjau laikinų tarpiklių rinkinį, kad būtų pakankamai laisvos vietos - apie 3 cm, duonos lentos aukštis ir šiek tiek, kad nesutraiškytumėte laidų. Kiekviename kampe naudojau du medinius inkarinius varžtus, nes jie buvo tinkamo aukščio ir gulėjo žmogaus stalčiuje … ta dėžė su atsilaisvinusiais varžtais, varžtais, vinimis, surūdijusiomis grandininėmis grandinėmis, žarnų jungtimis, senomis monetomis, netikėtai aštriais daiktais ir visais būdais bitų ir bobų, kurios stebuklingai gali sutaupyti jums kelionę į techninės įrangos parduotuvę, pasiūlydamos, jei ne būtent tai, ko jums reikia, ką nors, kas puikiai tiks.

Laiminga nelaimė dėl žaidimų aikštelės posto, kurį radau rūsyje, nes jame jau buvo skylių. Nereikia gręžti geležies! Pagrindas turėjo keturias varžtų skyles, o medinėje plokštėje išgręžėme keturias skylutes.

Tada mes viską išpurškėme purškiama gotikine juoda spalva.

2 žingsnis: Neopikselių žiedų paruošimas

Neopikselių žiedų paruošimas
Neopikselių žiedų paruošimas

Ant neopikselių žiedų turėsite lituoti laidus: duomenų įvesties laidą visiems, dviejų duomenų perdavimo laidą dviem ir maitinimą bei įžeminimą kiekvienam. Kokio ilgio manote, kad jums reikia, pridėkite šiek tiek. Visada galite nupjauti vielos perteklių, negalima ištempti per trumpo. Ir atkreipkite dėmesį į „Adafruit“įspėjimą:

Lituodami laidus prie šių žiedų, turite būti ypač budrūs dėl litavimo dėmių ir trumpojo jungimo. Atstumas tarp komponentų yra labai mažas! Dažnai lengviausia įkišti laidą iš priekio ir lituoti ant nugaros.

Norėčiau tai perskaityti prieš lituodamas į priekį. Man pavyko nesudeginti nė vieno šviesos diodo, bet vieno jo kraštą išdeginau taip, kad prakaitavau, kol įjungiau. Be to, jei būčiau perskaitęs puikų vadovą, taip pat būčiau perskaitęs įspėjimą nedėti aligatoriaus spaustuko ant šviesos diodo. Tegul mano beveik nuolaužos yra tavo švyturys.

„Neopixel“žiedai sukuria grandininę grandinę, o tai reiškia, kad galite vienu metu valdyti visus jų šviesos diodus iš „Arduino“, prijungdami laidą nuo vieno žiedo OUT prie kito. Kiekvienam žiedui taip pat reikia maitinimo ir įžeminimo laidų.

3 žingsnis: laidai

Laidai
Laidai

Sujunkite jį taip, kaip aprašyta aukščiau-„Arduino“6 kaištis perkelia duomenis į pirmąjį žiedą, o duomenys iš to žiedo pereina į kito duomenų įvestį, o duomenys iš to-į Paskutinio skambučio duomenys. Jums nereikia paskutinio žiedo duomenų išvesties laido.

1000 µf talpa yra tarp teigiamų ir neigiamų duonos lentos bėgelių. Šis dangtelis apsaugo žiedus nuo elektros šuolių ir rekomenduojamas „Adafruit NeoPixel Uberguide“geriausios praktikos skyriuje. „Adafruit“taip pat rekomenduoja pirmojo neopikselio duomenų rezistorių-jis yra 1K „Fritzing“, tačiau rekomenduojamas atsparumas yra 300–500 omų.

Kurdamas konstrukciją, laidus nuo neopikselių pervedžiau per plokštelės galą iki centre pritvirtintos duonos lentos. Tokiu būdu į pagrindinį įrenginį turite įvesti tik tris ilgus laidus: maitinimą, įžeminimą ir duomenis. Aš padariau šiuos laidus ypač ilgus-bazėje yra daug vietos saugojimui, todėl patogu ištraukti plokštę iš naujo perprogramuoti.

4 žingsnis: Kodas

"loading =" tingus "paminėjo, kad mano sūnus norėjo šios versijos, kuri reaguotų į muziką. Prireikė 18-ojo gimtadienio, kad tai pasiekčiau, bet štai!

Papildoma įranga:

1 vieno poliaus, dvigubo mėtymo jungiklis 1 automatinio stiprinimo valdymo mikrofonas (naudojau „AdaFruit“MAX9184) 1 1uF-100uF kondensatorius (bet kokia vertė)

Norint tinkamai veikti, mikrofonas turi turėti automatinio stiprinimo valdiklį. AGC nuolat ims aplinkos triukšmą ir padidins bei sumažins slenkstį, kurį laiko fonu, todėl jūsų šviesa reaguos į šuolius tame fone. „AdaFruit“mikrofonas yra puikus: galite pereiti iš tylaus kambario, kuriame vieno balso garsas jį suaktyvins, į visiškai įjungto vakarėlio režimą, kuriame yra kambarys, kuriame pilna paauglių ir skamba muzika, ir jis tiesiog pajus muzikos ritmą. gerai. Alternatyva, reguliuojamas stiprinimo mikrofonas, turi mažą potenciometrą, kuris yra neįtikėtinai subtilus ir neramus. Nereikia daug keisti aplinkos garso, kad įrenginys taptų nenaudingas: nuolat šviečia šviesa arba nuolat tamsu. AGC veikia kaip magija.

Norėjau galimybės naudoti sūkurinio bandymo modelį ar muziką, todėl jungiklio centrinį laidą prijungiau prie VIN, o vieną - prie 4 kištuko, kitą - prie „Leonardo“8 kaiščio. Išbandę tuos kaiščius HIGH arba LOW, mes galime žinoti, kurioje būsenoje yra jungiklis, ir atitinkamai šakos kodą.

7 žingsnis: Mikrofono prijungimas

Mikrofono prijungimas
Mikrofono prijungimas

Įveskite mikrofono įvestį per tą 1-100µF kondensatorių į analoginį kaištį 0. Jei jūsų kondensatorius yra poliarizuotas, išėjimo kaištis pereina į teigiamą pusę (žalia viela).

Ačiū „CodeGirlJP“už jos kasdienybę „Trinket-Color-by-Sound“, kurią pritaikiau žemiau:

// Garsu aktyvuojami šviesos diodai su „Arduino“ir „NeoPixels“

#įtraukti

#define MIC_PIN A0 // Prie „Leonardo“kištuko a0 pritvirtintas mikrofonas

#define LED_PIN 6 // „NeoPixel“LED juostelė, pritvirtinta prie „Leonardo“6 kaiščio #define N_PIXELS 36 // taškų skaičius LED grandinėje !!!!!! Sąrankoje prisitaikykite prie pikselių skaičiaus. Tai tinka 3 Neopixel žiedams !!!!!! #define N 100 // Kiekvieną kartą skaitant imamų mėginių skaičius Pavyzdžiai vadinami #define fadeDelay 5 // kiekvienos išblukimo sumos uždelsimo laikas #define noiseLevel 30 // vidutinio mikrofono triukšmo nuolydžio lygis be garso

// Inicijuokite „NeoPixel“juostelę naudodami aukščiau nurodytas reikšmes:

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

int mėginiai [N]; // pavyzdžių rinkinio rinkinio saugykla

int periodFactor = 0; // sekti ms skaičių skaičiuojant periodą int t1 = -1; // aptiktas nuolydžio laikas> 100. int T; // laikotarpis tarp kartų padidintas iki milisekundžių int šlaitu; // dviejų surinktų duomenų imties taškų nuolydis baitų periodasPakeistas = 0; const int „SwitchPinMusic“= 4; // Smeigtukas jungiklio padėčiai muzikos jautrumas const int SwitchPinSwirl = 8; // jungiklio padėties kaištis Bandymo modelis (sūkurys) int MusicbuttonState = 0; // Įjungtas loginis kintamasis muzikos jautrumui

// „Arduino“sąrankos metodas

void setup () {

strip.begin ();

ledsOff (); vėlavimas (500); displayColor (ratas (100)); strip.show (); vėlavimas (500); oddWheel (ratas (100)); strip.show (); vėlavimas (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Perjungta, FALLING);

}

// Arduino kilpos metodas

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // HIGH, jei jungiklis nustatytas į muzikos jautrumą MusicbuttonState = digitalRead (SwitchPinMusic); // AUKŠTAS, jei jungiklis nustatytas į Bandymo modelis, o (SwirlbuttonState == LOW) {readSamples (); // Vykdyti muzikos mėginių ėmimo procedūrą SwirlbuttonState = digitalRead (SwitchPinSwirl); // Patikrinkite, ar nebuvo pakeistas jungiklis} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Dance (); // Vykdyti sūkurinio bandymo modelio rutiną SwirlbuttonState = digitalRead (SwitchPinSwirl); // Patikrinkite, ar nebuvo pakeistas jungiklis

}

}

void Dance () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (juostelė. Spalva (0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (juostelė. Spalva (0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Baltas RGBW // Siųsti teatro pikselių persekiojimą… SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (juostelė. Spalva (127, 127, 127), 50); // White SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (juostelė. Spalva (127, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (juostelė. Spalva (0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); vaivorykštė (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); vaivorykštinis ciklas (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); teatrasChaseVaivorykštė (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Skaityti ir apdoroti pavyzdinius duomenis iš „Mic void readSamples“() {for (int i = 0; i0) {slope = sample - mėginiai [i -1]; } else {nuolydis = mėginiai - mėginiai [N -1]; } // Patikrinkite, ar nuolydis didesnis nei noiseLevel - garsas, kuris nėra triukšmo lygyje, aptinkamas, jei (abs (nuolydis)> noiseLevel) {if (nuolydis <0) {calcPeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} else {ledsOff (); // teatrasChaseRainbow (50); } periodFactor += 1; uždelsimas (1); }}

void calcPeriod (int i)

{jei (t1 == -1) {// t1 nenustatytas t1 = i; } else {// t1 buvo nustatytas taip apskaičiuoti laikotarpį int period = periodFactor*(i - t1); periodChanged = T == periodas? 0: 1; T = laikotarpis; // Serija.println (T); // atstatyti t1 į naują i reikšmę t1 = i; periodFactor = 0; }}

uint32_t getColor (int periodas)

{if (laikotarpis == -1) grąžinimo ratas (0); kitaip, jei (laikotarpis> 400) grąžinimo ratas (5); else return Wheel (žemėlapis (-1*periodas, -400, -1, 50, 255)); }

void fadeOut ()

{for (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Atnaujinimo juostos uždelsimas (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Atnaujinti juostelę // išblukinti spalvą (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); //strip.show (); // Atnaujinimo juostos uždelsimas (fadeDelay); periodFactor+= fadeDelay; }}

void ledsOff ()

{ Išnykti(); už (int i = 0; i

tuščias ekranas Spalva (uint32_t spalva)

{už (int i = 0; t

void oddWheel (uint32_t spalva)

{for (int j = 0; j <256; j ++) {// perjunkite visas 256 rato spalvas, skirtas (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, ratas ((i+j) % 255)); // įjungti kas trečią pikselį} strip.show ();

uždelsimas (1);

už (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // išjungti kiekvieną trečiąjį tašką}}} fadeIn (); }

// Taškus vieną po kito užpildykite spalva

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

void rainbow (uint8_t wait) {

uint16_t i, j;

už (j = 0; j <256; j ++) {už (i = 0; i

// Šiek tiek skiriasi, todėl vaivorykštė pasiskirsto tolygiai

void rainbowCycle (uint8_t palaukti) {uint16_t i, j;

(j = 0; j <256*5; j ++) {// 5 visų rato spalvų ciklai (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, ratas (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); atidėti (laukti); }}

// Teatro stiliaus šliaužiančios šviesos.

void theatreChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// atlikite 10 persekiojimo ciklų (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // įjungti kas trečią pikselį} strip.show ();

atidėti (laukti);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // išjunkite kas trečią tašką}}}}

// Teatro stiliaus šliaužiančios šviesos su vaivorykštės efektu

void theatreChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// perjungti visas 256 rato spalvas, skirtas (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, ratas ((i+j) % 255)); // įjungti kas trečią pikselį} strip.show ();

atidėti (laukti);

for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // išjunkite kas trečią tašką}}}}

// Įveskite reikšmę nuo 0 iki 255, kad gautumėte spalvos vertę.

// Spalvos yra perėjimas r - g - b - atgal į r. uint32_t Ratas (baitas WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } if (WheelPos <170) {WheelPos -= 85; grąžinimo juostelė. Spalva (0, WheelPos * 3, 255 - WheelPos * 3); } „WheelPos“-= 170; grąžinimo juostelė. Spalva („WheelPos“* 3, 255 - „WheelPos“* 3, 0); }

void Perjungta () {

strip.show (); readSamples (); }

Prieš pasmerkdamas mane komentaruose (prisimink politiką „Būk malonus !!“), įkėlęs tai supratau, koks apleistas yra mano kodas. Nereikia nuolat tikrinti, ar 4 ir 8 kaiščiai yra AUKŠTI. Kadangi jungiklis yra vieno poliaus dvigubas metimas, vieno vertę galima spręsti iš kito: jums reikia tik išbandyti vieną. Taigi, jei trūksta atminties arba praleidžiate kitas procedūras, galite perskaityti ir pašalinti visas nuorodas į „MusicButtonState“skaitymą ir rašymą ir tiesiog efektyviau paleisti viską, išbandydami „SwirlButtonState“. Tačiau aukščiau pateiktas kodas veikia.

Ir jei kas nors nori patobulinti šias garso procedūras, kad pajustų ne tik triukšmo lygį, bet ir dažnį, ir parašytų sklandų kodą, kad slinktų aukštyn ir žemyn šviesos spektru, reaguodamas į judesius išilgai garso spektro, pameskite nuorodą į komentarus kaip tu tai padarei.

Mėgautis!

Rekomenduojamas: