Sadržaj:
- Korak 1: Napravite bazu
- Korak 2: Priprema prstenova Neopixel
- Korak 3: Ožičenje
- Korak 4: Kôd
- Korak 7: Povežite mikrofon
Video: Arduino i Neopixel boca Coca -Cole Rainbow Party Light: 7 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Tako moj sin Doon spazi jako kul svjetlo za zabavu napravljeno od starih boca koksa i gnjecavih unutrašnjosti sjajnih štapića, i pita možemo li ga napraviti za njegove predstojeće školske ispite koji su završili s probijanjem PartAYYY !!! Kažem sigurno, ali zar ne biste radije uzeli neke od onih šljaštećih prstenova od adafruta od neopiksela o kojima smo čitali … On me gleda u prazno. Jer činjenica 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žavali da imaju izgovor da se igrate sa cool uređajima za koje kažu da su svi za svoju djecu.
Ovo je super-jednostavan projekt koji izgleda zaista sjajno. Napravili smo naše od 3 stare boce koksa, drvenog tanjura i držača za dječje igralište - stvari koje leže 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 sam na kraju dobio 12-LED prsten po istoj cijeni. Što je bilo slatko, ali je značilo prepravku na otvorima za bušotine-12-LED prstenovi su široki 35 mm, za razliku od 23 mm. Šta ć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.3v ili bolji kondenzator
- Otpornik 300-500 ohma
- Drvena ploča, ili kvadrat starog drveta, 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 funkcionirao
- 9v zidna bradavica
- Otvor za bušenje rupa 40 mm
- Vijci, matice, podloške, odstojnici
- Žica sa čvrstim jezgrom
- Lemilica i lemljenje
- Breadboard
- Plastično kućište za Arduino. Možete izaći i kupiti zaista lijepo plastično kućište savršeno uklopljeno, napravljeno od naftne nafte stare milijune godina, izvađeno iz zemlje u nekom krhkom okruženju i proizvedeno na drugoj strani planete i poslano u kontejneru u skladište u vašoj blizini sa svim portovi izrezani u savršenom poravnanju i dostavljeni kombijem koji izbacuje ugljični dioksid u atmosferu do vaših vrata. 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 iz Madagaskara koja leži u ormariću s lijekovima … i izbušiti nekoliko rupa u njoj. Ovde se predavanje završava. Napravimo…
Korak 1: 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 neopikselni prstenovi mogu sjediti. Na slici su rupe izbušene bušilicom s lopatom. Na kraju, zbog veće veličine 12-LED prstenova, morali smo izbušiti rupe sa svrdlom. To je značilo proći do kraja 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 pričvrstio … hmm … ljepljivom trakom po dnu ploče. Ne sudite. U mom dizajnu ionako ne možete vidjeti dno ploče. Mračno je kad je uključeno. I osim toga - šta nije u redu sa selotejpom?
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. Zato 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 uglu jer su bili odgovarajuće visine i ležali su u ladici … ta kutija labavih vijaka, vijaka, eksera, zahrđalih lanaca, spojnica za crijeva, stari novčići, neočekivano oštri predmeti i sve ostalo bitova i bobova koji vam čarobnim putem mogu uštedjeti put do željezarije nudeći, ako ne i upravo ono što vam je potrebno, nešto što će biti sasvim u redu.
Srećna nesreća oko stuba za igralište koju sam pronašao u podrumu jer je već imao rupe kroz ploču. Nema potrebe za bušenjem gvožđa! 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
Morat ćete lemiti žice na svoje neopikselne prstenove: žicu za ulaz podataka za sve njih, žicu za izlaz podataka za dvije od njih i napajanje i uzemljenje za svaki. Za koju god dužinu mislite da vam je potrebna, dodajte je. Uvijek možete odrezati višak žice, ne možete rastegnuti onu koja je prekratka. I imajte na umu upozorenje Adafruit -a:
Prilikom lemljenja žica na ove prstene, morate biti posebno oprezni u vezi sa lemilicama i kratkim spojevima. Razmak između komponenti je vrlo 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đe, da sam pročitao fin priručnik, pročitao bih i upozorenje da ne stavljam štipaljku od aligatora na LED. Neka moji skoro olupine brodova 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. Svakom prstenu je potrebno napajanje i uzemljenje.
Korak 3: Ožičenje
Povežite ga kao u gore navedenom Fritzingu-pin 6 Arduina vodi podatke u prvi prsten, podaci iz tog prstena idu u ulaz podataka sljedećeg, izlaz iz tog podatka ide u Ulaz podataka poslednjeg zvona. Ne treba vam žica za izlaz podataka posljednjeg prstena.
Kapacitet od 1000 µf ide između pozitivnih i negativnih šina matične ploče. Ova kapa štiti prstenove od skokova struje i preporučuje se u odjeljku najboljih 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 Neopiksela preko stražnje strane ploče do matične ploče fiksirane 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 zgodno moći izvući ploču radi ponovnog programiranja.
Korak 4: Kôd
"loading =" lijen "je spomenuo da je moj sin htio muzički reaktivnu verziju ovoga. Trebalo mu je do 18. rođendana da se snađe, ali evo ga!
Dodatna oprema:
1 jednopolni, dvostruki prekidač 1 automatski mikrofon za 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 i podizati i spuštati prag koji smatra pozadinom, tako da će vaše svjetlo reagirati na skokove na toj pozadini. AdaFruit mikrofon je briljantan: možete izać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 muzikom koja trešti, a on će samo pokupiti ritam muzike u redu. Alternativa, mikrofon s podesivim pojačanjem, ima mali potenciometar na ploči koji je nemoguće osjetljiv i škrtar. Nije potrebno mnogo promjena u ambijentalnom zvuku kako bi jedinica postala beskorisna: svjetla su stalno upaljena ili stalno tamna. AGC radi kao magija.
Htio sam mogućnost korištenja uzorka za vrtloženje ili muzike, pa sam spojio središnji provodnik prekidača na VIN, a jedan provodnik na pin 4, drugi na pin 8 Leonarda. Testiranjem ovih pinova na VISOKO ili NISKO možemo znati u kojem je stanju prekidač i prema tome šifru grane.
Korak 7: Povežite mikrofon
Uključite mikrofon 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
#include
#define MIC_PIN A0 // Mikrofon je priključen na pin a0 na Leonardu
#define LED_PIN 6 // NeoPixel LED lanac pričvršćen na pin 6 na Leonardu #define N_PIXELS 36 // broj piksela u LED nizu !!!!!! Prilagodite se broju piksela u postavkama. Ovo je tač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
// Pokrećemo NeoPixel traku s gore definiranim vrijednostima:
Adafruit_NeoPixel strip = Adafruit_NeoPixel (N_PIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);
int uzorci [N]; // spremište za skup zbirki uzoraka
int periodFactor = 0; // prati broj ms za izračunavanje perioda int t1 = -1; // otkriveno vrijeme nagiba> 100. int T; // period između vremena skaliran na milisekunde int nagib; // nagib dviju prikupljenih tačaka uzorka podataka byte periodChanged = 0; const int SwitchPinMusic = 4; // Pin za položaj prekidača osetljivost na muziku const int SwitchPinSwirl = 8; // Pin za položaj prekidača Test Pattern (swirl) int MusicbuttonState = 0; // Uključena i isključena logička varijabla za osjetljivost muzike
// Arduino način postavljanja
void setup () {
strip.begin ();
ledsOff (); kašnjenje (500); displayColor (Točak (100)); strip.show (); kašnjenje (500); oddWheel (Točak (100)); strip.show (); kašnjenje (500); pinMode (SwitchPinMusic, INPUT); pinMode (SwitchPinSwirl, INPUT); // attachInterrupt (4, Switched, FALLING);
}
// Metoda Arduino petlje
void loop () {SwirlbuttonState = digitalRead (SwitchPinSwirl); // VISOKO ako je prekidač postavljen na Muzička osjetljivost MusicbuttonState = digitalRead (SwitchPinMusic); // HIGH ako je prekidač postavljen na Test pattern while (SwirlbuttonState == LOW) {readSamples (); // Pokretanje rutine uzorkovanja muzike SwirlbuttonState = digitalRead (SwitchPinSwirl); // Provjerite je li prekidač promijenjen} SwirlbuttonState = digitalRead (SwitchPinSwirl); MusicbuttonState = digitalRead (SwitchPinMusic); while (SwirlbuttonState == HIGH) {Dance (); // Pokrenuti rutinu swirly test 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 lovačkog piksela u … SwirlbuttonState = digitalRead (SwitchPinSwirl); TheaterChase (strip. Color (127, 127, 127), 50); // Bijeli 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); TheaterChaseRainbow (50); SwirlbuttonState = digitalRead (SwitchPinSwirl); }} // Čitanje i obrada uzoraka podataka iz Mic void readSamples () {for (int i = 0; i0) {nagib = 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) {CalcuPeriod (i); if (periodChanged == 1) {displayColor (getColor (T)); }}} else {ledsOff (); // TheaterChaseRainbow (50); } periodFactor += 1; kašnjenje (1); }}
void izračunati period (int i)
{if (t1 == -1) {// t1 nije postavljeno t1 = i; } else {// t1 je postavljeno tako da calc period int period = periodFactor*(i - t1); periodChanged = T == period? 0: 1; T = period; //Serial.println(T); // resetiranje t1 na novu vrijednost i1 t1 = i; periodFactor = 0; }}
uint32_t getColor (int period)
{if (period == -1) povratak kotača (0); else if (period> 400) vraća točak (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 ()
{fadeOut (); za (int i = 0; i
void displayColor (boja uint32_t)
{for (int i = 0; i
void oddWheel (uint32_t boja)
{for (int j = 0; j <256; j ++) {// ciklus svih 256 boja u kolu za (int q = 0; q <3; q ++) {for (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, Točak ((i+j) % 255)); // uključuje svaki treći piksel} strip.show ();
kašnjenje (1);
za (uint16_t i = 24; i <36; i = i+3) {strip.setPixelColor (i+q, 0); // isključuje svaki treći piksel}}} fadeIn (); }
// Popunite tačke 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
// Malo drugačije, ovo čini dugu podjednako raspoređenom po cijeloj dužini
void rainbowCycle (uint8_t čekanje) {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 (); kašnjenje (čekanje); }}
// Svjetla za puzanje u kazališnom stilu.
void theatreChase (uint32_t c, uint8_t wait) {for (int j = 0; j <10; j ++) {// uradimo 10 ciklusa jurenja 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 ();
kašnjenje (čekanje);
za (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // isključuje 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 kolu za (int q = 0; q <3; q ++) {for (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, Točak ((i+j) % 255)); // uključuje svaki treći piksel} strip.show ();
kašnjenje (čekanje);
za (uint16_t i = 0; i <strip.numPixels (); i = i+3) {strip.setPixelColor (i+q, 0); // isključuje 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 Točak (bajt 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 me zaklaju u komentarima (zapamtite politiku Budi lijep !!) shvatio sam nakon što sam ovo postavio koliko su neki moji kodovi traljavi. Nema potrebe stalno testirati pin 4 i pin 8 na HIGH. Kako je prekidač jednopolno dvostruko bacanje, vrijednost jednog se može zaključiti iz drugog: potrebno je samo testirati jedno. Tako biste mogli proći i ukloniti svaku referencu na čitanje i pisanje MusicButtonState i jednostavno pokrenuti cijelu stvar efikasnije testiranjem SwirlButtonState, ako vam nedostaje memorije ili se proširujete drugim rutinama. Ali gornji kod funkcionira.
A ako netko želi prilagoditi te audio rutine kako bi osjetio ne samo nivoe šuma, već i frekvenciju, i napisao neki glatki kod za klizanje gore -dolje po svjetlosnom spektru kao odgovor na pokrete duž audio spektra, neka u komentarima pusti vezu kako si to uradio.
Uživajte!
Preporučuje se:
T2 - čajna boca - jednostavno pripremanje čaja: 4 koraka
T2 - Tea Bot - Čaj za pripremu čaja olakšan: Bočica za čaj napravljena je kako bi pomogla korisniku da skuha čaj prema preporučenom vremenu kuhanja. Jedan od ciljeva dizajna bio je da bude jednostavan. ESP8266 je programiran sa web serverom za upravljanje servo motorom. Web server ESP8266 prilagođen je mobilnim uređajima i
CLEPCIDRE: digitalni sat od boca jabukovače: 8 koraka (sa slikama)
CLEPCIDRE: digitalni sat od flaša od jabukovače: Prije zaranjanja u opis objekta moram objasniti kontekst u kojem je projektiran i izgrađen. Moja supruga je umjetnica i radi uglavnom s glinom, kao keramičarka, ali i s drugim materijalima poput drveta, škriljevca ili stakla. U većini njenih
Recikliranje čepova boca u električni automobil: 6 koraka
Recikliranje čepova boca u električni automobil: Zdravo svima. Ovo je naš mini električni automobil. Vrlo je jednostavno za napraviti. Molim vas učinite to kod kuće Ako ste roditelj, bit će vrlo prikladno za igru sa vašom djecom Pojednostavljivanje, bit će jako zanimljivo Vodit ću vas, hajdemo! YO
Neopixel Ws2812 Rainbow LED sjaj sa M5stick-C - Pokretanje Rainbow -a na Neopixelu Ws2812 Korištenje M5stack M5stick C Korištenje Arduino IDE -a: 5 koraka
Neopixel Ws2812 Rainbow LED sjaj sa M5stick-C | Pokretanje Rainbow-a na Neopixel Ws2812 Korištenje M5stack M5stick C Korištenje Arduino IDE-a: Zdravo momci u ovim uputama naučit ćemo kako koristiti neopixel ws2812 LED diode ili LED traku ili LED matricu ili LED prsten s razvojnom pločom m5stack m5stick-C s Arduino IDE-om, a mi ćemo napraviti dugin uzorak sa njim
Coca-Cola računar: 7 koraka (sa slikama)
Coca-Cola Computer: Ovo je kućište za PC napravljeno od Coca-Cola robe. Komponente računara dolaze iz Dell Dimension 8500. Ako to pokušate sami, budite posebno oprezni pri rezanju aluminijskih limenki, rubovi su nevjerojatno oštri. Računar