Satura rādītājs:

Arduino un Neopixel koksa pudeles varavīksnes ballītes gaisma: 7 soļi (ar attēliem)
Arduino un Neopixel koksa pudeles varavīksnes ballītes gaisma: 7 soļi (ar attēliem)

Video: Arduino un Neopixel koksa pudeles varavīksnes ballītes gaisma: 7 soļi (ar attēliem)

Video: Arduino un Neopixel koksa pudeles varavīksnes ballītes gaisma: 7 soļi (ar attēliem)
Video: Супердом №2 — Суперчувства 2024, Jūlijs
Anonim
Image
Image

Tāpēc mans dēls Doons pamana ļoti foršu ballīšu gaismu, kas izgatavota no vecām koksa pudelēm un glow Sticks smalkmaizītēm, un jautā, vai mēs varam to uztaisīt gaidāmajiem skolas eksāmeniem, kas beidzas PartAYYY !!! Es saku, ka noteikti, bet vai jūs labprātāk nevēlētos dažus no tiem dīvainajiem Adafruit Neopixel gredzeniem, par kuriem mēs lasījām … Viņš velta man tukšu skatienu. Jo patiesībā viņš nezina, par ko es runāju, bet tētis ir pamanījis iespēju spēlēties ar tiem Neopikseļu gredzeniem, par kuriem viņš ir lasījis, un mēs visi zinām vienu no desmit galvenajiem iemesliem, kādēļ ģīmi tēvi rada. attaisnojums spēlēties ar atdzist sīkrīkiem, par kuriem viņi stāsta, ka visi ir paredzēti saviem bērniem.

Šis ir ļoti vienkāršs projekts, kas izskatās patiešām lieliski. Mēs izgatavojām savu no 3 vecām koksa pudelēm, koka plāksnes un rotaļu laukuma statīva - pagrabā esošas lietas - kopā ar Arduino (mūsu gadījumā Leonardo, bet derēs jebkura Genuino plāksne!) Un trīs Neopixel gredzenus. Es pasūtīju 9 LED gredzenu, bet galu galā ar 12 LED gredzenu par to pašu cenu. Kas bija salds, bet nozīmēja pārslēgšanos uz urbumiem-12 LED gredzeni ir 35 mm plati, pretstatā 23 mm. Kas jums būs nepieciešams:

  • Genuino/Arduino dēlis (mēs izmantojām Leonardo, bet gandrīz jebkura tāfele derēs)
  • 3 neopikselu gredzeni (katrs 12 gaismas diodes): iegūstiet tos no Adafruit un atbalstiet šos izcilos ļaudis
  • 1000 µf 6.3v vai labāks kondensators
  • 300-500 omu rezistors
  • Koka plāksne vai skaldnes kvadrāts vai jebkas, kurā varat ievietot neopikseli un virsū novietot koksa pudeles
  • Kāda veida plāksnes stiprinājums - rotaļu laukuma kronšteins mums lieliski darbojās
  • 9v sienas kārpu
  • 40 mm caurums
  • Skrūves, uzgriežņi, paplāksnes, starplikas
  • Cieta serdes stieple
  • Lodāmurs un lodētava
  • Maizes dēlis
  • Plastmasas korpuss Arduino. Jūs varat iziet un nopirkt patiešām jauku, ideāli pieguļošu plastmasas korpusu, kas izgatavots no miljonus gadus vecas naftas, kas izurbta no zemes kādā trauslā vidē un ražota planētas otrā pusē un konteinerā nosūtīta uz noliktavu pie jums ar visu ostas ir izgrieztas perfektā izkārtojumā un nogādājiet to pie jūsu durvīm ar furgonu, kas atmosfērā izplūst oglekļa dioksīdu. Vai arī jūs varat darīt to, ko es darīju, un izmantot vecu izlietotu plastmasas kastīti.. šajā gadījumā Madagaskaras lenti, kas atrodas aptieciņā, un izurbt tajā dažus caurumus. Šeit beidzas lekcija. Taisīsim…

1. darbība: izveidojiet pamatni

Izveidojiet pamatu
Izveidojiet pamatu
Izveidojiet pamatu
Izveidojiet pamatu

Jūs varat improvizēt savu bāzi no jebkādiem atkritumiem, kas jums ir pagrabā, vai pat vienkārši izmantot koka kasti vai jebko, kas slēps jūsu elektroniku.

Vispirms mēs izurbām trīs caurumus, kas vienmērīgi izvietoti uz koka plāksnes, pietiekami lieli, lai varētu ievietot neopikseļu gredzenus. Attēlā caurumi ir urbumi, kas urbti ar lāpstiņu urbi. Galu galā 12 LED gredzenu lielāka izmēra dēļ mums bija jāizurbj caurumi ar urbumu. Tas nozīmēja iet cauri plāksnei un tā vietā, lai gredzenus glīti savilktu smalki izveidotajās mazajās 2 mm dziļajās iedobēs ar centrālo atveri kārtīgai stiepļu palaišanai, es galu galā gredzenus nostiprināju ar… ahem… līmlenti pāri apakšai no plāksnes. Netiesājiet. Tik un tā jūs nevarat redzēt plāksnes dibenu manā dizainā. Un ieslēgts ir tumšs. Un turklāt - kas vainas līmlentei?

Man vajadzēja atstarpi starp plāksni un kronšteinu maizes plāksnei plāksnes apakšā un vienai sastāvdaļai - kondensatoram, kā arī vadu vadiem, kuriem vajadzētu pāriet no maizes dēļa uz Arduino, ko es plānoju ievietot kronšteinā. Tāpēc es uz skrūvju vārpstām ievietoju pagaidu starpliku komplektu, lai būtu pietiekami daudz brīvas vietas - apmēram 3 cm, maizes dēļa augstums un mazliet, lai nesaspiestu elektroinstalāciju. Katrā stūrī es izmantoju divas koka enkuru skrūves, jo tās bija pareizajā augstumā un gulēja vīra atvilktnē … tajā vaļēju skrūvju, skrūvju, naglu, sarūsējušu ķēdes posmu, šļūteņu savienojumu, vecu monētu, negaidīti asu priekšmetu kastē biti un bobi, kas maģiski var ietaupīt ceļojumu uz datortehnikas veikalu, piedāvājot, ja ne tieši to, kas jums nepieciešams, kaut ko, kas derēs lieliski.

Laimīgs negadījums saistībā ar rotaļu laukuma pastu, ko es atradu pagrabā, jo caur plāksni jau bija caurumi. Nav nepieciešams urbt dzelzi! Pamatnei bija četri skrūvju caurumi, un koka plāksnē mēs izurbām četrus pretēji iegremdētus caurumus.

Pēc tam mēs visu izsmidzinājām ar gotu melno krāsu.

2. solis: Neopikselu gredzenu sagatavošana

Neopikselu gredzenu sagatavošana
Neopikselu gredzenu sagatavošana

Jums būs jāpielodē vadi uz neopikselu gredzeniem: datu ievades vads visiem, datu izvades vads diviem no tiem, kā arī barošana un zemējums katram. Neatkarīgi no garuma, kas jums šķiet vajadzīgs, pievienojiet dažus. Jūs vienmēr varat nogriezt lieko vadu, jūs nevarat izstiept pārāk īsu vadu. Un ņemiet vērā Adafruit brīdinājumu:

Lodējot vadus pie šiem gredzeniem, jums jābūt īpaši modram attiecībā uz lodēšanas lāsēm un īssavienojumiem. Attālums starp komponentiem ir ļoti šaurs! Bieži vien visvieglāk ir ievietot vadu no priekšpuses un lodēt aizmugurē.

Es vēlos to izlasīt pirms lodēšanas uz priekšu. Man izdevās neizdegt nevienu no gaismas diodēm, bet es apdedzināju tā malu tā, ka man bija svīšana, līdz es to ieslēdzu. Turklāt, ja es būtu izlasījis smalko rokasgrāmatu, es būtu izlasījis arī brīdinājumu nelikt aligatoru klipu uz gaismas diodes. Ļaujiet maniem kuģu avārijām būt jūsu bākai.

Neopikselis gredzenveida ķēdes gredzenus, kas nozīmē, ka jūs varat vienlaikus kontrolēt visas to gaismas diodes no Arduino, savienojot vadu no viena gredzena izejas līdz cita IN. Katram gredzenam ir nepieciešami arī strāvas un zemējuma vadi.

3. solis: elektroinstalācija

Elektroinstalācija
Elektroinstalācija

Pievienojiet to vadam, kā aprakstīts iepriekš-Arduino 6. tapa aizved datus uz pirmo gredzenu, no šī gredzena iegūtie dati nonāk uz nākamā datu ievadi, bet no šī-uz Pēdējā zvana datu ievadīšana. Jums nav nepieciešams gala gredzena datu izvades vads.

1000 µf ietilpība ir starp maizes dēļa pozitīvajām un negatīvajām sliedēm. Šis vāciņš aizsargā gredzenus no strāvas padeves, un to iesaka Adafruit NeoPixel Uberguide paraugprakses sadaļa. Adafruit iesaka arī pretestību datiem pirmajā neopikselā-tas ir 1K Fritzing, bet ieteicamā pretestība ir 300-500 omi.

Savā uzbūvē es vadīju vadus no neopikseliem pāri plāksnes aizmugurē līdz maizes plāksnei, kas nostiprināta centrā. Tādā veidā jums ir jāievada tikai trīs gari vadi pamatvienībā: jauda, zeme un dati. Es izveidoju šos vadus īpaši garus-pamatnē ir daudz vietas uzglabāšanai, un tas padara ērtu iespēju izvilkt dēli pārprogrammēšanai.

4. solis: kods

"iekraušana =" slinks "minēja, ka mans dēls vēlējās šo versiju, kas reaģē uz mūziku. Pagāja līdz 18. dzimšanas dienai, lai to panāktu, bet šeit tas ir!

Papildu aprīkojums:

1 viena pola dubultā metiena slēdzis 1 automātiskā pastiprinājuma vadības mikrofons (es izmantoju AdaFruit MAX9184) 1 1uF-100uF kondensators (jebkura vērtība)

Lai tas darbotos pareizi, mikrofonam patiešām ir jābūt automātiskai pastiprinājuma kontrolei. AGC nepārtraukti ņems apkārtējā trokšņa paraugus un paaugstinās un pazeminās slieksni, ko uzskata par fonu, tāpēc jūsu gaisma reaģēs uz tapām uz šī fona. AdaFruit mikrofons ir izcils: jūs varat pāriet no klusas telpas, kurā vienas balss skaņa to aktivizēs, līdz pilnvērtīgam ballītes režīmam, telpā, kurā ir pusaudži un skaļa mūzika, un tas uztvers tikai mūzikas ritmu. labi. Alternatīvā, regulējamā pastiprinājuma mikrofonā uz tāfeles ir niecīgs potenciometrs, kas ir neiespējami smalks un viltīgs. Lai padarītu ierīci bezjēdzīgu, apkārtējās vides skaņā nav vajadzīgas lielas izmaiņas: pastāvīgi ieslēdzas gaismas vai nepārtraukti tumšs. AGC darbojas kā maģija.

Es gribēju iespēju izmantot virpuļtesta paraugu vai mūziku, tāpēc es pārslēdzu centrālā vadu uz VIN un vienu vadu pie 4. tapas, otru pie Leonardo 8. tapas. Pārbaudot šīs tapas HIGH vai LOW, mēs varam zināt, kurā stāvoklī atrodas slēdzis, un attiecīgi filiāles kodu.

7. solis: Mikrofona pievienošana

Mikrofona pieslēgšana
Mikrofona pieslēgšana

Ievadiet mikrofona ieeju, izmantojot šo 1-100µF kondensatoru, analogā tapā 0. Ja jūsu kondensators ir polarizēts, izejas tapa iet uz pozitīvo pusi (zaļais vads).

Paldies CodeGirlJP par viņas ikdienu Trinket-Color-by-Sound, kuru es pielāgoju zemāk:

// Ar skaņu aktivizētas gaismas diodes ar Arduino un NeoPixels

#iekļaut

#define MIC_PIN A0 // Mikrofons ir pievienots Leonardo a0 tapai

#define LED_PIN 6 // NeoPixel LED šķipsna, kas piestiprināta Leonardo #6 definīcijai #define N_PIXELS 36 // pikseļu skaits LED pavedienā !!!!!! Pielāgojiet iestatījumu pikseļu skaitam. Tas ir pareizi 3 Neopixel gredzeniem !!!!!! #define N 100 // Katru reizi nolasāmo paraugu skaits

// Inicializējiet NeoPixel sloksni ar iepriekš norādītajām vērtībām:

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

int paraugi [N]; // paraugu savākšanas komplekta krātuve

int periodFactor = 0; // izsekot ms skaitam perioda aprēķinam int t1 = -1; // konstatēti slīpuma laiki> 100. int T; // periods starp reizēm, kas mērogotas līdz milisekundēm int slīpumā; // divu savākto datu izlases punktu slīpums baitu periodsChanged = 0; const int SwitchPinMusic = 4; // Piespraude slēdža pozīcijai mūzikas jutīgums const int SwitchPinSwirl = 8; // Piespraudes slēdža pozīcijai Testa modelis (virpulis) int MusicbuttonState = 0; // Mūzikas jutīguma izslēgšanas loģiskais mainīgais

// Arduino iestatīšanas metode

void setup () {

strip.begin ();

ledsOff (); kavēšanās (500); displayColor (ritenis (100)); strip.show (); kavēšanās (500); oddWheel (ritenis (100)); strip.show (); kavēšanās (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Pārslēgts, FALLING);

}

// Arduino cilpas metode

void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // HIGH, ja slēdzis ir iestatīts uz mūzikas jutību MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH, ja slēdzis ir iestatīts uz Test model, kamēr (SwirlbuttonState == LOW) {readSamples (); // Palaidiet mūzikas izlases rutīnu SwirlbuttonState = digitalRead (SwitchPinSwirl); // Pārbaudiet, vai slēdzis nav mainīts} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Deja (); // Palaidiet swirly testa modeļa rutīnu SwirlbuttonState = digitalRead (SwitchPinSwirl); // Pārbaudiet, vai slēdzis nav mainīts

}

}

void Dance () {

while (SwirlbuttonState == HIGH) {colorWipe (strip. Color (255, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (sloksne. Krāsa (0, 255, 0), 50); // Green SwirlbuttonState = digitalRead (SwitchPinSwirl); colorWipe (sloksne. Krāsa (0, 0, 255), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); //colorWipe(strip. Color(0, 0, 0, 255), 50); // Balts RGBW // Nosūtīt teātra pikseļu meklēšanu… SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (sloksne. Krāsa (127, 127, 127), 50); // White SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (sloksne. Krāsa (127, 0, 0), 50); // Red SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (sloksne. Krāsa (0, 0, 127), 50); // Blue SwirlbuttonState = digitalRead (SwitchPinSwirl); varavīksne (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); varavīksnes cikls (20); SwirlbuttonState = digitalRead (SwitchPinSwirl); teātrisChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Lasīt un apstrādāt parauga datus no Mic void readSamples () {for (int i = 0; i0) {slope = sample - paraugi [i -1]; } cits {slīpums = paraugi - paraugi [N -1]; } // Pārbaudiet, vai slīpums ir lielāks par noiseLevel - skaņa, kas nav trokšņa līmenī, tiek konstatēta, ja (abs (slīpums)> noiseLevel) {if (slīpums <0) {calcPeriod (i); ja (periodsChanged == 1) {displayColor (getColor (T)); }}} cits {ledsOff (); // teātrisChaseRainbow (50); } periodFaktors += 1; kavēšanās (1); }}

void calcPeriod (int i)

{ja (t1 == -1) {// t1 nav iestatīts t1 = i; } cits {// t1 tika iestatīts tā, lai aprēķinātu periodu int period = periodFactor*(i - t1); periodChanged = T == periods? 0: 1; T = periods; //Serial.println(T); // atiestatīt t1 uz jaunu i vērtību t1 = i; periodFactor = 0; }}

uint32_t getColor (int periods)

{if (periods == -1) atgriešanās ritenis (0); citādi, ja (periods> 400) atgriešanās ritenis (5); cits atgriešanās ritenis (karte (-1*periods, -400, -1, 50, 255)); }

void fadeOut ()

{par (int i = 0; i <5; i ++) {strip.setBrightness (110 - i*20); strip.show (); // Atjaunināšanas joslas aizkave (fadeDelay); periodFactor += fadeDelay; }}

void fadeIn ()

{strip.setBrightness (100); strip.show (); // Atjaunināt joslu // izgaist krāsu (int i = 0; i <5; i ++) {//strip.setBrightness(20*i+30); //strip.show (); // Atjaunināšanas joslas aizkave (fadeDelay); periodFactor+= fadeDelay; }}

void ledsOff ()

{ izgaist(); par (int i = 0; i

tukšs displejs Krāsa (uint32_t krāsa)

{par (int i = 0; i

void oddWheel (uint32_t krāsa)

{par (int j = 0; j <256; j ++) {// ciklā visas 256 krāsas ritenī par (int q = 0; q <3; q ++) {par (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, ritenis ((i+j) % 255)); // ieslēgt katru trešo pikseļu} strip.show ();

kavēšanās (1);

par (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // izslēgt katru trešo pikseļu}}} fadeIn (); }

// Aizpildiet punktus vienu pēc otra ar krāsu

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

tukša varavīksne (pagaidiet) {{

uint16_t i, j;

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

// Nedaudz atšķirīgi, tāpēc varavīksne ir vienmērīgi sadalīta visā

void rainbowCycle (uint8_t gaidīt) {uint16_t i, j;

(j = 0; j <256*5; j ++) {// 5 visu krāsu riteņi uz riteņa (i = 0; i <strip.numPixels (); i ++) {strip.setPixelColor (i, Wheel (((i * 256 / strip.numPixels ()) + j) & 255)); } strip.show (); aizkavēties (gaidīt); }}

// Teātra stila rāpojošās gaismas.

void TheaterChase (uint32_t c, uint8_t gaidīt) {par (int j = 0; j <10; j ++) {// veic 10 vajāšanas ciklus (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, c); // ieslēgt katru trešo pikseļu} strip.show ();

aizkavēties (gaidīt);

par (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // izslēdziet katru trešo pikseļu}}}}

// Teātra stila rāpojošas gaismas ar varavīksnes efektu

void theatreChaseRainbow (uint8_t wait) {for (int j = 0; j <256; j ++) {// ciklā visas 256 krāsas ritenī (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Ritenis ((i+j) % 255)); // ieslēgt katru trešo pikseļu} strip.show ();

aizkavēties (gaidīt);

par (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // izslēdziet katru trešo pikseļu}}}}

// Ievadiet vērtību no 0 līdz 255, lai iegūtu krāsas vērtību.

// Krāsas ir pāreja r - g - b - atpakaļ uz r. uint32_t Ritenis (baits WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return strip. Color (255 - WheelPos * 3, 0, WheelPos * 3); } ja (WheelPos <170) {WheelPos -= 85; atgriešanas sloksne. Krāsa (0, WheelPos * 3, 255 - WheelPos * 3); } WheelPos -= 170; atgriešanas sloksne. Krāsa (WheelPos * 3, 255 - WheelPos * 3, 0); }

void Switched () {

strip.show (); readSamples (); }

Pirms mani nokauj komentāros (atcerieties politiku Be Nice!) Es pēc augšupielādēšanas sapratu, cik pavirši ir daži no maniem kodiem. Nav nepieciešams pastāvīgi pārbaudīt gan 4., gan 8. tapu, lai iegūtu AUGSTUMU. Tā kā slēdzis ir viena pola divkāršs metiens, viena vērtību var secināt no otra: jums ir jāpārbauda tikai viens. Tātad, ja jums ir nepietiekams atmiņas apjoms vai ja veicat citas darbības, varat izņemt visas atsauces uz MusicButtonState lasīšanu un rakstīšanu un vienkārši palaist visu efektīvāk, pārbaudot SwirlButtonState. Bet iepriekš minētais kods darbojas.

Un, ja kāds vēlas uzlabot šīs audio procedūras, lai saprastu ne tikai trokšņa līmeni, bet arī frekvenci, un uzrakstītu gludu kodu, lai slīdētu augšup un lejup pa gaismas spektru, reaģējot uz kustībām gar audio spektru, atstājiet saiti komentāros uz kā tu to izdarīji.

Izbaudi!

Ieteicams: