Sadržaj:
- Korak 1: Prije nego počnemo
- Korak 2: Potrebni dijelovi
- Korak 3: Povezivanje i izgradnja hardvera
- Korak 4: Kreirajte pomoću 50 svjetlosnih modula
- Korak 5: Arduino kodiranje i ožičenje
- Korak 6: Rezultat i stvaranje filma
Video: Povucite svjetlo - Modul svjetla pomoću neopiksela i prekidača za povlačenje prema gore: 6 koraka (sa slikama)
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
Karakteristike modula Light
- Arduino Uno
- Hardver i kućište kupljeni s interneta
- Neopixel i napajanje posuđeni od Škole za informatiku i dizajn proizvoda
- Svjetlosni modul kontroliran napajanjem
- Sve funkcije kontrolirane su interakcijom korisnika
- Vrste animacija Neopixel trake: Kiša, Vrsta tuša, Vrsta svjećice, Pop tip, Nepravilan tip
- Prekidač za povlačenje spojen je na Neopixel traku i animacija se mijenja kada se povuče Neopixel traka
Korak 1: Prije nego počnemo
Zdravo Instructables and Makers.
Započeli smo interaktivni dizajnerski projekt u smislu onoga što bi se dogodilo ako bismo mogli osjetiti emociju kiše kroz animaciju svjetla. Mislio sam da će senzibilitet korisnika biti maksimiziran kroz sučelje koje izravno privlači svjetlo.
Da ne pređemo na posao
Korak 2: Potrebni dijelovi
Zasnovano na jednom svjetlosnom modulu
*** Neopikseli i napajanje korišteni su uz podršku našeg odjela. ***
Elektronika:
- Arduino Uno
- Žica u 3 boje (crna, crvena, bilo koje boje)
- 3 -pinski konektor (veza za kupovinu)
- Povucite prekidač 1 (veza za kupovinu)
- cijev za skupljanje
- WS2812b adresirajuća LED traka sa 74 LED (traka od neopiksela)*2
- Napajanje (5V 350A) 1
*** Za Arduino, prekidač za povlačenje i NeoPiksele potrebno je 50 kompleta. ***
Hardver:
- Akrilna šipka 2t (10 mm*1000 mm) 1
- Akrilna ploča 5t (60mm*60mm) 1
- Foemax 10t (1200 mm*1800 mm) 1
- Crni sprej
- Kabelska vezica
- String
- Lesonit
- Mrežna ploča
Korak 3: Povezivanje i izgradnja hardvera
Prvo nam je potrebno rezanje akrilom za izradu jednog modula za osvjetljenje.
- Kao način da doživite animaciju svjetla, nacrtajte modul rasvjete koji je fiksiran pričvršćivanjem 74 LED diode u obliku trake od neopiksela na akrilnu šipku debljine 2 mm s površinom od 1 M. Proizveli smo dvije vrste rasvjetnih modula: tipične linearne i spiralne.
- Za linearne tipove, postojeće neopikselne trake mogu se držati i učvrstiti, ali spiralne vrste zahtijevaju ručni rad. Svaki od 74 LED diode podijeljen je na komade, pričvršćen na spiralni akril i spojen olovom.
Pričvrstite Neopixel traku na akril i pričvrstite svaku traku da se spriječi njeno širenje toplinom ili je zavežite tankom ribarskom vrpcom. U slučaju linearnog tipa, sfera koju je trebalo povući na kraj modula instalirana je kako bi se oblikovao estetski izgled, a loptu za ping pong završili smo crnim sprejom. Zatim su izbušili malu rupu u kugli za ping pong i povezali je užetom. Sljedeći najvažniji dio, prekidač i neopiksel, povezani su kako je prikazano. Prekidač je zatim pričvršćen za stropnu policu.
U slučaju spiralnog tipa, postoji rizik da bi izravno povlačenje spiralnog modula moglo razbiti akril pod pritiskom, pa su potezni dio (ulaz) i modul (izlaz) razdvojeni. Da bi se povećalo padanje svjetlosti, moduli su postavljeni okomito na strop, linearni moduli su pričvršćeni za zrak, spirale su pričvršćene direktno na strop. Spojili smo loptu za ping pong i prekidač na ribarsku liniju kako bi se njome moglo upravljati.
Akrilno rezanje kako je prikazano na gornjoj slici potrebno je za pričvršćivanje prekidača na policu. Prekidač kvadratnog oblika od 6 cm debljine je približno 5 mm, sa prekidačem u sredini i kabelskom vezicom umetnutom kroz rupe na obje strane kako bi se prekidač čvrsto učvrstio. Kružna rupa na dnu centra otkriva povlačenje prekidača, ispod kojeg se trožični kabel izvlači i spaja na kabelski terminal modula. Slično, kroz rupu u četiri ugla polica i akril su pričvršćeni kabelskim vezicama. Kao što je gore opisano, linearni modul je spojen direktno na povlačenje, ali spiralni modul povezuje iglu i prekidač odvojeno.
Korak 4: Kreirajte pomoću 50 svjetlosnih modula
Dizajnirali smo korisničko iskustvo za bogatiju svjetlost primjenom ukupno 50 modula
Imali smo policu širine 1 800 mm i dužinu 1 200 mm, a svaki prekidač i modul smo povezali tako da ste mogli iskusiti kišu i kišnu sredinu koju smo prvobitno planirali, a svaki smo modul imali samostalno kako bismo omogućili obavljanje više zadataka.
Ovisno o crtežu projekta, u foemax je izbušena okrugla rupa kako bi se sakrila instalacija i kako bi se osiguralo da povezano područje LED modula nije vidljivo. Budući da je udaljenost od akrilne ploče do priključka LED modula na koji je priključen prekidač oko 1 cm, upotrijebljen je fomaks debljine 1 cm.
Metalni kvadratni okvir korišten je za držanje instalacije zajedno s vijcima i vezicama za kabele uz održavanje ukupne težine i ravnoteže. Ako je duljina izloženih veza veća od one kada proizvođač pokuša, deblja ploča je neučinkovita i preporučuju se druge strukture.
Kako bi se olakšalo korisničko iskustvo u visini očiju, dovršena instalacija postavljena je na oslonac visok približno 2 m, ali oprez je da je vrlo nezgodno instalirati ugrađeni LED modul sa prekidačem, pa sve veze treba ukloniti. Popeli smo se uz ljestve i spojili modul s instalacijom pričvršćenom na nosač.
Najvažniji dio cijelog ovog procesa je osigurati da se posao obavlja sigurno i potpuno osiguran kako bi se osiguralo da je iskustvo omogućeno u sigurnom okruženju
Ukupno je korišteno 10 arduino i 50 LED modula, a spojeno je pet LED modula po arduinu za učinkovitije i besprijekorno obavljanje više zadataka. Za detalje pogledajte priloženi nacrt. Neopikselno kodiranje za više zadataka pomoću potpunog prekidača prema shemi dizajna bit će detaljno razmotreno u sljedećem koraku.
Korak 5: Arduino kodiranje i ožičenje
Ožičenje
- 50 modula je spojeno prema rasporedu iz koraka 4.
- Svaki modul je podijeljen u 10 kompleta od 50 modula kako bi se omogućilo obavljanje više zadataka i omogućila jasna veza.
- Kao što je prikazano na gornjoj slici skupa 1, pet modula je spojeno na jedan arduino, a 5v pinovi neopiksela povezani su odjednom kako bi se povezalo napajanje.
- GND neopiksela i prekidači su također povezani zajedno, a radi lakše percepcije, prekidači su uključeni u pinove 2, 3, 4, 5, 6, a neopikseli su priključeni u pinove 9, 10, 11, 12, 13.
- Prekidači i neopikseli povezani su na 2-9, 3-10, 4-11, 5-12, 6-13 načina.
- Valja napomenuti da su spojevi vodova složeni i da postoji opasnost od požara zbog kratkog spoja, skupljajuća cijev je zagrijana kako bi se osiguralo da se slabi dijelovi ne slome.
Neopikselno kodiranje za više zadataka sa prekidačem na izvlačenje
5 svjetlosnih animacija (vrsta kiše, tip tuša, vrsta svjećice, tip pop, nepravilni tip)
#include
/*사용 하고자 하는////*/
obrazac nabrajanja {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}; /*Pravac kretanja///*/ smjer enuma {FORWARD, REVERSE};
/*패턴 의 의 클래스//*/
klasa NeoPatterns: javni Adafruit_NeoPixel { /* 패턴 을 을 하고 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /*클레스 함수 에 패턴/////*/ direction Direction;
/*변수 Interval 을 추가*/ nepotpisani dugi interval; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Boja1, Boja2 를 추가*/ uint32_t Boja1, Boja2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 Indeks 를 추가*/ uint16_t Indeks;
/*패턴 을///////*/ void (*OnComplete) (); /*네오 패턴 에서 네오 갯수 갯수 갯수, 핀 번호, 타입, 콜백 을//*/ NeoPatterns (uint16_t piksela, uint8_t pin, uint8_t tip, void (*povratni poziv) ()): Adafruit_NeoPixel (pikseli, pin, tip) { OnComplete = povratni poziv; }
/*패턴 을 을////*/
void Update () { /*Zaustavi ažuriranje. 멀티 태스킹 을 구현//*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 의 스위치/*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*kućište RAINBOW_CYCLE 에서 나와라*/ break;
/*kućište THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/
slučaj THEATER_CHASE: TheaterChaseUpdate (); /*case THEATER_CHASE 에서 나와라*/ break;
/*kućište COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/
kućište COLOR_WIPE: ColorWipeUpdate (); /*kućište COLOR_WIPE 에서 나와라*/ break; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라/*/ case SCANNER: ScannerUpdate (); /*kućište SCANNER 에서 나와라*/ break;
/*case FADE 에서는 FadeUpdate 를 실행 하라*/
slučaj FADE: FadeUpdate (); /*kućište FADE 에서 나와라*/ break;
/*kućište TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/
kućište TWINKLE: TwinkleUpdate (); /*kućište TWINKLE 에서 나와라*/ break;
/*kućište STAR 에서는 StarUpdate 를 실행 하라*/
kućište STAR: StarUpdate (); /*kućište STAR 에서 나와라*/ break;
/*case RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/
kućište RAINBOWSPARKLE: RainbowsparkleUpdate (); /*kućište RAINBOWSPARKLE 에서 나와라*/ break; /*case METEOR 에서는 MeteorUpdate 를 실행 실행/*/ case METEOR: MeteorUpdate (); /*kućište METEOR 에서 나와라*/ break;
/*kućište LIGHT 에서는 LightUpdate 를 실행 하라*/
kućište LIGHT: LightUpdate (); /*kućište LIGHT 에서 나와라*/ break;
/*kućište BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/
kućište BLOSSOM: BlossomUpdate (); /*kućište BLOSSOM 에서 나와라*/ break; }}}
/*패턴 의 방향////*/
/*Indeks 를 증가 증가 초기화//*/
void Increment () { /*만약 정방향 정방향 이면 인덱스 / / / /* / if (Smjer == NAPRIJED) {Indeks ++; /*Provjerite da li želite da napravite 0 ili više (*Index> = TotalSteps) {Index = 0; /*패턴 을 완료 시키는/*/ if (OnComplete! = NULL) {OnComplete (); }}}
/*만약 정방향 정방향/////*/ else {--Index; /*만약 인덱스 인덱스 전체 네오 픽셀 구동 갯수 에서 에서 에서 에서 에서 에서 을///////////////////////////////////////////////////////////////////// /*패턴 을 완료 시키는/*/ if (OnComplete! = NULL) {OnComplete (); }}}}
/*반대 방향 방향 으로//*/
void Reverse () { /*애니메이션 함수 에 verse Reverse 를 썼을 시, 만약 방향 이 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /; Indeks = TotalSteps - 1; } /*Učitajte ovu stranicu sa sljedećim sadržajima: 0 Slijedeći korak* / else {Direction = FORWARD; Indeks = 0; }}
/*애니메이션 을 설정 하는 함수 들*
*RainbowCycle 의 시간////*/
void RainbowCycle (interval uint8_t, smjer dir = NAPRIJED) { /*실행 되는 패턴 은 RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 안에 입력 interval 과 같음*/ Interval = interval; /*Povratak na listu 255 korisnika*/ TotalSteps = 255; /*Označeno sa 0 stavki*/ Indeks = 0; /*방향 은 void RainbowCycle () 안에 입력 ir dir = NAPRIJED 과 같음*/ Direction = dir; }
/*RainbowCycle 를 업데이트 했을 경우*/
void RainbowCycleUpdate () { /*변수 i 가 가 픽셀 개수 /으면 를 를 / / /* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 함 동시에 RGB 컬러 로 변화 하면서 / / * / setPixelColor (i, Wheel (((i * 256 / numPixels ()) + Index) & 255))); } / *애니메이션 애니메이션 / / / * / show (); Increment (); }
/*TheaterChase 의 컬러 와////*/
void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, smjer dir = NAPRIJED) { /*실행 되는 패턴 은 RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임 임*/ TotalSteps = numPixels (); /*컬러 1, 2 를 설정*/ Color1 = color1; Boja2 = boja2; /*Označeno sa 0 stavki*/ Indeks = 0; /*방향 은 void TheaterChase () 안에 입력 ir dir = NAPRIJED 과 같음*/ Direction = dir; }
/*TheaterChase 를 업데이트 했을 경우*/
void TheaterChaseUpdate () { /*변수 i 가 가 픽셀 개수 /으면 를 를 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /for 으로 으로 으로 으로 으로 으로 으로 으로 것이 0 과 같다 면 i 를 Boja 로 변환 시켜라*/ if ((i + Indeks) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Boja 로 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 / / / * / show (); Increment (); }
/*ColorWipe 의 컬러////*/
void ColorWipe (boja uint32_t, interval uint8_t, smjer dir = NAPRIJED) { /*실행 되는 패턴 OL COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 은 void ColorWipe () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임 임*/ TotalSteps = numPixels (); /*1 1 polje*/ Color1 = boja; /*Označeno sa 0 stavki*/ Indeks = 0; /*방향 은 void ColorWipe () 안에 입력 ir dir = NAPRIJED 과 같음*/ Direction = dir; }
/*ColorWipeUpdate 를 업데이트 했을 경우*/
void ColorWipeUpdate () { /*index 를 1 로 변환 /* / setPixelColor (Index, Color1); / *애니메이션 을/// */ show (); Increment (); }
/*Skener 의 컬러 컬러 시간 을//*/
void Scanner (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 은 SCANNER* / ActivePattern = SCANNER; /*시간 은 id void Scanner () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*Zabranjeno je postavljanje 1 stavke za drugu stavku 2 stavke*/ TotalSteps = (numPixels () - 1)*2; /*1 polje 1*/ Boja1 = boja1; /*Označeno sa 0 stavki*/ Indeks = 0; }
/*ScannerUpdate 를 업데이트 했을 경우/*/
void ScannerUpdate () { /*변수 i 는 영 이고 총 / /를 를 를 / / / / /* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 와 같다 를 color1 로 변환 시켜라*/ if (i == Index) {setPixelColor (i, Color1); } / *그렇지 않다면 변수 를 를 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / } / *그 밖에는 i 를 디밍 시켜라 i / { / / * / else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 / / / * / show (); Increment (); }
/*Skener 1, 2, 와, 시간, 방향 을/*/
void Fade (uint32_t color1, uint32_t color2, uint16_t koraci, uint8_t interval, smjer dir = NAPRIJED) { /*실행 되는 패턴 은 FADE* / ActivePattern = FADE; /*시간 은 void Fade () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*구동 구동 갯수//*/ TotalSteps = steps; /*컬러 1, 2 를 설정*/ Color1 = color1; Boja2 = boja2; /*Označeno sa 0 stavki*/ Indeks = 0; /*방향 은 void Fade () 안에 입력 ir dir = NAPRIJED 과 같음*/ Direction = dir; } /*FadeUpdate 를 업데이트 했을 /* / void FadeUpdate () { /*변수 crveno 값 은 다음 과 /* / uint8_t crveno = ((Crveno (Boja1)*(TotalSteps - Indeks)) + (Crveno (Boja2)*Indeks)) / TotalSteps; / * 변수 zelena 값 은 다음 과 / * / uint8_t zelena = ((zelena (boja1) * (ukupni koraci - indeks)) + (zelena (boja2) * indeks)) / totalkoraci; / * 변수 plavo 값 은 다음 과 / * / uint8_t plavo = ((Plavo (Boja1) * (TotalSteps - Indeks)) + (Plavo (Boja2) * Indeks)) / TotalSteps; /*위 의 crvena, zelena, plava 값 으로 컬러 를//*/ ColorSet (Boja (crvena, zelena, plava)); / *애니메이션 을/// */ show (); Increment (); }
/*모든 네오 네오 픽셀//*/
void alloff () { /*Povratak na vrh stranice 74 /*int NPIXEL = 74; / * 변수 i 가 증가 하며 모든 네오 픽셀 의 컬러 값 을 0 으로 변환 함 * / for (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}
/*Twinkle 1 stranica 1/1
void Twinkle (uint32_t color1, uint8_t interval) { /*실행 되는 패턴 은 TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*1 polje 1*/ Boja1 = boja1; /*총 구동 갯수 는 numPixels 임 임*/ TotalSteps = numPixels (); Indeks = 0; }
/*TwinkleUpdate 를 업데이트 했을/*/
void TwinkleUpdate () { /*Ne može se postaviti na 0 stavki* / setAll (0, 0, 0); /*변수 Piksel 은 slučajno 74*/ int Piksel = slučajno (74); /*slučajno 74, 2, 2, 2, 1, 2, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5 setPixelColor (Pixel, 250, 255, 250); setPixelColor (Pixel/2, 200, 250, 255); setPixelColor (Pixel, 255, 255, 255); setPixelColor (Pixel, 250, 230, 250); setPixelColor (Pixel/2, 150, 200, 255); / *애니메이션 을/// */ show (); / *랜덤 하게 끄는/ */ setPixelColor (Pixel, 0, 0, 0); / *애니메이션 을/// */ show (); Increment (); }
/*Zvjezdica 1 stranica 1*
void Star (uint32_t color1) { /*실행 되는 패턴 은 STAR* / ActivePattern = STAR; /*시간 은 void Star () 안에 입력 되는 interval 과 같음*/ Interval = Interval; /*총 구동 갯수 는 numPixels 임 임*/ TotalSteps = numPixels (); /*1 polje 1*/ Boja1 = boja1; Indeks = 0; }
/*StarUpdate 를 업데이트 했을/*/
void StarUpdate () { /*인덱스 와 컬러 / /* / setPixelColor (Index, Color1); show (); /*변수 i 가 0 이고 구동 갯수 으면 으면 를 를/ 한칸/////////////////////////////////////////////////////////////////*/ for (int i = 0; i <numPixels (); i--) {setPixelColor (i, Color (0, 0, 0)); } / *Izmjenjivanje vrijednosti / *Povećanje (); }
/*Rainbowsparkle 의 시간 과 방향//*/
void Rainbowsparkle (interval uint8_t, smjer dir = NAPRIJED) { /*실행 되는 패턴 은 RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 void Rainbowsparkle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 임 임*/ TotalSteps = numPixels (); Indeks = 0; /*방향 은 void Rainbowsparkle () 안에 입력 되는 pravac 과 같음*/ Direction = dir; }
/*RainbowsparkleUpdate 를 업데이트 했을 경우/*/
void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 으면 값 값 값 / / / / / / / / / / / / / / / / / / / / / / /* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 보다 작 으면 i 값 을 하는데/*/ if ((i + Indeks) % 2 == 0) {uint32_t c = random (255); setPixelColor (i, c); } else {setPixelColor (i, random (255)); }} / *애니메이션 을 / / / * / show (); Increment (); } /*Meteor 의 시간 과 / / /* / void Meteor (uint32_t color1) { /*실행 되는 패턴 ET METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Interval; / *Zabrani prikaz numPixels-a 1 stavka, *2 Zaštita podataka */ TotalSteps = (numPixels ()-1) *2; /*1 polje 1*/ Boja1 = boja1; Indeks = 0; }
/*MeteorUpdate 를 업데이트 했을 경우/*/
void MeteorUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, random (255), 255); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 / / / * / show (); Increment (); }
/*Svjetlo 의 시간 과 방향 을//*/
void Light (uint32_t color1) { /*실행 되는 패턴 은 LIGHT* / ActivePattern = LIGHT; /*시간 설정*/ Interval = Interval; / *Zabrani prikaz numPixels-a u 1-oj veličini, *2 za najviši nivo */ TotalSteps = (numPixels ()-1) *2; /*1 polje 1*/ Boja1 = boja1; Indeks = 0; }
/*LightUpdate 를 업데이트 했을/*/
void LightUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 150, random (200), 40); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 / / / * / show (); Increment (); }
/*Blossom 의 시간 과 방향//*/
void Blossom (uint32_t color1) { /*실행 되는 패턴 OS BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Interval; / *Zabrani prikaz numPixels-a 1 stavka, *2 Zaštita podataka */ TotalSteps = (numPixels ()-1) *2; /*1 polje 1*/ Boja1 = boja1; Indeks = 0; }
/*BlossomUpdate 를 업데이트 했을/*/
void BlossomUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, random (255), 100); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 / / / * / show (); Increment (); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/ *네오 픽셀 의 켜지 는/ 와 색 을// */ void setAll (bajt crveno, bajt zeleno, bajt plavo) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, crveno, zelena, plava); } show (); }
/*Zabranjeno je postavljanje podataka, za postavljanje podataka o prometu*/
uint32_t DimColor (uint32_t boja) {// Pomicanje komponenti R, G i B za jedan bit udesno uint32_t dimColor = Boja (crvena (boja) >> 1, zelena (boja) >> 1, plava (boja) >> 1); return dimColor; }
/*모든 네오 네오////*/
void ColorSet (uint32_t boja) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, boja); } show (); }
/*레드 값 을 불러//*/
uint8_t Crveno (uint32_t boja) {return (boja >> 16) & 0xFF; } /*그린 값 을 불러 /* / uint8_t Zeleno (uint32_t boja) {return (boja >> 8) & 0xFF; } /*블루 값 을 불러 /* / uint8_t Plava (uint32_t boja) {povratna boja & 0xFF; }
/*Rainbow 컬러 를 불러 옴*/
uint32_t Točak (bajt WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return Color (255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos <170) {WheelPos -= 85; return Color (0, WheelPos * 3, 255 - WheelPos * 3); } else {WheelPos -= 170; return Color (WheelPos * 3, 255 - WheelPos * 3, 0); }}};
/*strip traka za snimanje / / traka za dodavanje traka za brisanje traka* /
void strip1Complete (); void strip2Complete (); void strip3Complete (); void strip4Complete (); void strip5Complete ();
/*네오 픽셀 픽셀 갯수/*/
#define NUMPIXELS 74 /*사용 하는 하는 의 갯수 / /* / #define B_NUM 5 /*Uvoz trake1 ~ 5 까지, 갯수 는 74 개 스트립 연결 은 strip1 은 8 ~ strip5 까지 12* / NeoPatterns strip1 (74, 8, NEO_GRB + NEO_KHZ800, & strip1Complete); NeoPatterns strip2 (74, 9, NEO_GRB + NEO_KHZ800, & strip2Complete); NeoPatterns strip3 (74, 10, NEO_GRB + NEO_KHZ800, & strip3Complete); NeoPatterns strip4 (74, 11, NEO_GRB + NEO_KHZ800, & strip4Complete); NeoPatterns strip5 (74, 12, NEO_GRB + NEO_KHZ800, & strip5Complete); /*배열 을 사용한 연결///*/ const int buttonPin [B_NUM] = {2, 3, 4, 5, 6}; /*배열 을 을/////*/ int buttonState [B_NUM]; /*2 번핀 부터 6 번핀 까지 상태 는 OW OW LOW 임*/ int lastButtonState [B_NUM] = {LOW, LOW, LOW, LOW, LOW}; /*2 stavka 6 stavki 6/ int button*/ int buttonCounter [B_NUM] = {0, 0, 0, 0, 0}; /*2 Poglavlje 6 Poglavlje 5 Popis podataka 5/*int buttonCounterMax = 5; /*모든 버튼 버튼/////*/ int čitanje [B_NUM]; unsigned long lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 은 은 은 은 은 delay50 과 같음*/ unsigned long debounceDelay = 50;
void setup () {
/*복잡 하게 저항 G G G G G G G G G G G G G G G G G G G G G G G ND G ND ND ND G ND G ND G ND ND ND ND ND ND ND G ND G G ND G G ND ND G ND G ND ND ND G G ND G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G; } Serial.begin (9600); /*1 do 5 stavki*/ strip1.begin (); strip2.begin (); strip3.begin (); strip4.begin (); strip5.begin ();
//strip1. TheaterChase(strip1. Color(255, 0, 255), strip1. Color (255, 50, 0), 20, FORWARD);
}
/*버튼 카운터 변수 값 은 5 임*/
int brojač = 5; void loop () { /*버튼 수 보다 i 가 작 으면 i 를 증가 /* / for (int i = 0; i debounceDelay) {if (čitanje ! = buttonState ) {buttonState = čitanje ; buttonCounter ++; /*버튼 카운팅 이 위에서 한 한 한 Max 값 5 를 0 으로 초기화*.*/ If (buttonCounter > buttonCounterMax) buttonCounter = 0; }} lastButtonState = čitanje ; } /*Zapamti ovu sliku.* / Strip1. Update (); strip2. Update (); strip3. Update (); strip4. Update (); strip5. Update ();
///// SWITCH_2 //////////////////////////////////////////////// ////////////////////////////////////////////////////////// ///////////////////////////////////////////////
/*Ovaj odgovor je ocenjen od 0 korisnika. 2 번핀 에 연결된 버튼 을///////////*/ switch (buttonCounter [0]) {
/*첫번째 버튼 버튼/////*/
slučaj 0: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션////*/ strip1. Interval = 20; /*Učitavanje datoteka/ traka*/ strip1. TotalSteps = strip1.numPixels (); break; /*Zaštita podataka*/ slučaj 1: strip1. ActivePattern = RAINBOWSPARKLE; strip1. Interval = 50; strip1. TotalSteps = strip1.numPixels (); break; /*Zaštita podataka*/ slučaj 2: strip1. ActivePattern = SCANNER; strip1. Interval = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; break; /*Zaštita podataka i obrada podataka/ slučaj 3: strip1. ActivePattern = TWINKLE; strip1. Interval = 1; strip1. TotalSteps = strip1.numPixels (); break; /*Zaštita podataka i obrada podataka/ slučaj 4/ strip 4: strip1. ActivePattern = METEOR; strip1. Interval = 10; strip1. TotalSteps = strip1.numPixels (); break; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_3 //////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////////////////////////////////////
switch (buttonCounter [1]) {slučaj 0: strip2. ActivePattern = STAR; strip2. Interval = 50; strip2. TotalSteps = strip2.numPixels (); break; slučaj 1: strip2. ActivePattern = RAINBOWSPARKLE; strip2. Interval = 100; strip2. TotalSteps = strip2.numPixels (); break; slučaj 2: strip2. ActivePattern = SCANNER; strip2. Interval = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; break; slučaj 3: strip2. ActivePattern = TWINKLE; strip2. Interval = 5; strip2. TotalSteps = strip2.numPixels (); break; slučaj 4: strip2. ActivePattern = METEOR; strip2. Interval = 40; strip2. TotalSteps = strip2.numPixels (); break; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_4 //////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////////////////////////////////////
switch (buttonCounter [2]) {slučaj 0: strip3. ActivePattern = STAR; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels (); break; slučaj 1: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels (); break; slučaj 2: strip3. ActivePattern = SCANNER; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; break; slučaj 3: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels (); break; slučaj 4: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels (); break; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_5 //////////////////////////////////////////////// ////////////////////////////////////////////////////////// //////////////////////////////////////////////
switch (buttonCounter [3]) {slučaj 0: strip4. ActivePattern = STAR; strip4. Interval = 50; strip4. TotalSteps = strip4.numPixels (); break; slučaj 1: strip4. ActivePattern = RAINBOWSPARKLE; strip4. Interval = 100; strip4. TotalSteps = strip4.numPixels (); break; slučaj 2: strip4. ActivePattern = SCANNER; strip4. Interval = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; break; slučaj 3: strip4. ActivePattern = TWINKLE; strip4. Interval = 5; strip4. TotalSteps = strip4.numPixels (); break; slučaj 4: strip4. ActivePattern = METEOR; strip4. Interval = 25; strip4. TotalSteps = strip4.numPixels (); break; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_6 //////////////////////////////////////////////// ////////////////////////////////////////////////////////// ///////////////////////////////////////////////
switch (buttonCounter [4]) {slučaj 0: strip5. ActivePattern = STAR; strip5. Interval = 50; strip5. TotalSteps = strip5.numPixels (); break; slučaj 1: strip5. ActivePattern = RAINBOWSPARKLE; strip5. Interval = 100; strip5. TotalSteps = strip5.numPixels (); break; slučaj 2: strip5. ActivePattern = SCANNER; strip5. Interval = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; break; slučaj 3: strip5. ActivePattern = TWINKLE; strip5. Interval = 5; strip5. TotalSteps = strip5.numPixels (); break; slučaj 4: strip5. ActivePattern = METEOR; strip5. Interval = 25; strip5. TotalSteps = strip5.numPixels (); break; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]); }
// strip1 Completion Povratni poziv
void strip1Complete () {strip1. Color1 = strip1. Wheel (nasumično (255)); strip1. Color2 = strip1. Wheel (nasumično (255)); strip1. Index = 0; }
// strip2 Completion Povratni poziv
void strip2Complete () {strip2. Color1 = strip2. Wheel (nasumično (255)); strip2. Color2 = strip2. Wheel (nasumično (255)); strip2. Index = 0; }
// strip3 Dovršetak Povratni poziv
void strip3Complete () {strip3. Color1 = strip3. Wheel (nasumično (255)); strip3. Color2 = strip3. Wheel (nasumično (255)); strip3. Index = 0; }
// strip4 Completion Povratni poziv
void strip4Complete () {strip4. Color1 = strip4. Wheel (nasumično (255)); strip4. Color2 = strip4. Wheel (nasumično (255)); strip4. Index = 0; }
// strip5 Completion Povratni poziv
void strip5Complete () {strip5. Color1 = strip5. Wheel (nasumično (255)); strip5. Color2 = strip5. Wheel (nasumično (255)); strip5. Index = 0; }
Korak 6: Rezultat i stvaranje filma
Hvala vam na interesu za naš projekt, iako to nije dovoljno.
Preporučuje se:
LED stolno svjetlo za pametni stol - Pametna rasvjeta W/ Arduino - Radni prostor Neopiksela: 10 koraka (sa slikama)
LED stolno svjetlo za pametni stol | Pametna rasvjeta W/ Arduino | Neopixel radni prostor: Danas dane provodimo puno vremena kod kuće, učimo i virtuelno radimo, pa zašto ne bismo povećali svoj radni prostor prilagođenim i pametnim sistemom osvjetljenja zasnovanim na LED -ima na bazi Arduino i Ws2812b. Ovdje ću vam pokazati kako izgraditi svoj pametni telefon Stono LED svjetlo koje
Povucite i ambijentalno prikažite podatke sa bilo koje web stranice putem Wi -Fi -ja (indikator sjevernog svjetla) sa NodeMcu: 6 koraka
Povucite i ambijentalno prikažite podatke sa bilo koje web stranice putem Wi -Fi -ja (indikator sjevernog svjetla) sa NodeMcu: Moja motivacija: Vidio sam mnogo instrukcija o postavljanju/ korištenju NodeMCU -a (izgrađenog na modulu ESP8266) za izradu IoT (internet stvari) projekata . Međutim, vrlo mali broj ovih vodiča imao je sve detalje/ kod/ dijagrame za vrlo početnike
LED sat pomoću neopiksela: 4 koraka (sa slikama)
LED sat pomoću neopiksela: Dobro došli u moje uputstvo o tome kako napraviti LED sat od 60 neopiksela. U prilogu ćete pronaći 3 PDF -a, jedan je za segmente sata, drugi je za bazu i na kraju jedan je predložak za pomoć pri lijepljenju sekcije zajedno. Pa da dođem
DIY komplet prekidača za daljinski upravljač prema 2262/2272 M4 ploča za kruh i relej za proizvođača: 4 koraka (sa slikama)
DIY komplet prekidača za daljinsko upravljanje od 2262/2272 M4 ploča za kruh i relej za proizvođača: pametna kuća dolazi u naš život. ako želimo ostvarenje pametnog doma, potrebno nam je mnogo prekidača na daljinsko upravljanje. danas ćemo napraviti test, napraviti jednostavan krug kako bismo naučili teoriju prekidača za daljinsko upravljanje. ovaj dizajn kompleta SINONING ROBOT
Usmjeravanje TELLO kamere prema naprijed prema dolje: 10 koraka
Usmjeravanje TELLO prednje kamere prema dolje: Ovo uputstvo se ne preporučuje početnicima. Trebali biste imati priličnu količinu tehničkog povjerenja prije otvaranja i izmjene vašeg Tello drona. Nakon što je rekao da; Ovo je sjajan način da steknete priličnu količinu tehničkog povjerenja;) Dakle želite