Բովանդակություն:
- Քայլ 1: Նախքան մենք սկսում ենք
- Քայլ 2: Անհրաժեշտ մասեր
- Քայլ 3: Միացում և սարքավորումների ստեղծում
- Քայլ 4: Ստեղծեք 50 լուսային մոդուլների օգտագործմամբ
- Քայլ 5: Arduino կոդավորում և էլեկտրագծեր
- Քայլ 6: Արդյունք և ֆիլմ պատրաստելը
Video: Քաշեք լույսը - Լույսի մոդուլը Neopixel- ի միջոցով և քաշեք անջատիչը ՝ 6 քայլ (նկարներով)
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Light մոդուլի առանձնահատկությունները
- Արդուինո Ունո
- Սարքավորումներ և պատյաններ, որոնք գնվել են ինտերնետից
- Neopixel & Էներգամատակարարումը փոխառված է Ինֆորմատիկայի և արտադրանքի դիզայնի դպրոցից
- Լույսի մոդուլ, որը վերահսկվում է էներգիայի մատակարարման միջոցով
- Բոլոր գործառույթները վերահսկվում են օգտվողների փոխազդեցության միջոցով
- Neopixel շերտի անիմացիոն տեսակները ՝ անձրևի տեսակը, ցնցուղի տեսակը, կայծի կայծի տեսակը, փոփ տեսակը, անկանոն տեսակը
- Ձգվող անջատիչը միացված է Neopixel ժապավենին, և շարժումը փոխվում է Neopixel շերտը քաշելիս
Քայլ 1: Նախքան մենք սկսում ենք
Ողջույն Instructables and Makers:
Մենք սկսեցինք և ինտերակտիվ դիզայնի նախագիծ այն առումով, թե ինչ կլիներ, եթե մենք զգայինք անձրևի զգացմունքները լույսի անիմացիայի միջոցով: Ես կարծում էի, որ օգտագործողի զգայունությունը առավելագույնի կհասցվի ինտերֆեյսի միջոցով, որն ուղղակիորեն ձգում է լույսը:
Թող գործի անցնի
Քայլ 2: Անհրաժեշտ մասեր
Մեկ լույսի մոդուլի հիման վրա
*** Մեր բաժնի աջակցությամբ օգտագործվել են նեոպիքսելներ և էլեկտրամատակարարում: ***
Էլեկտրոնիկա:
- Արդուինո Ունո
- 3 գույնի մետաղալար (սև, կարմիր, ցանկացած գույն)
- 3 պին միակցիչ (գնման հղում)
- Քաշեք անջատիչը 1 (գնման համար հղում)
- նեղացող խողովակ
- WS2812b հավելելի LED ժապավեն ՝ 74 LED (Neopixel շերտ)*2
- Սնուցման աղբյուր (5V 350A) 1
*** Arduino- ի, Pull Switch- ի և NeoPixels- ի համար անհրաժեշտ է 50 հավաքածու: ***
Սարքավորումներ:
- Ակրիլային ձող 2t (10 մմ*1000 մմ) 1
- Ակրիլային տախտակ 5t (60 մմ*60 մմ) 1
- Foemax 10t (1200 մմ*1800 մմ) 1
- Սև լակի
- Մալուխի փողկապ
- Լարային
- Կոշտ գրատախտակ
- Gանցի տախտակ
Քայլ 3: Միացում և սարքավորումների ստեղծում
Նախ, մեզ անհրաժեշտ է Ակրիլային կտրում `մեկ լուսավորման մոդուլ պատրաստելու համար:
- Որպես լույսի անիմացիան զգալու միջոց, կազմեք լուսավորման մոդուլ, որն ամրացված է ՝ ամրացնելով 74 լուսադիոդներ ՝ նեոպիքսելային ժապավենի տեսքով ՝ 1 մմ մակերեսով 2 մմ հաստությամբ ակրիլային ձողի վրա: Մենք արտադրել ենք երկու տեսակի լուսավորման մոդուլներ `բնորոշ գծային և պարուրաձև:
- Գծային տեսակների համար գոյություն ունեցող նեոպիքսելային շերտերը կարող են պահվել և ամրացվել, սակայն պարուրաձև տեսակները պահանջում են ձեռքով աշխատել: 74 LED- ներից յուրաքանչյուրը բաժանված է կտորների, ամրացված պարուրաձև ակրիլին և կապվում կապարի հետ միասին:
Կցեք Neopixel- ի ժապավենը ակրիլին և ամրացրեք յուրաքանչյուր շերտ, որպեսզի այն չտարածվի շոգից կամ կապեք ձկնորսության բարակ գծով: Գծային տիպի դեպքում, ոլորտը, որը պետք էր քաշել մոդուլի ծայրին, տեղադրվեց գեղագիտական տեսքը ձևավորելու համար և մենք ավարտեցինք պինգ -պոնգի գնդակը սև լակիով: Հետո նրանք փոքր անցք են բացել պինգ -պոնգի գնդակի մեջ եւ այն կապել պարանով: Հաջորդ ամենակարևոր հատվածը ՝ անջատիչը և նեոպիքսելը, միացված են, ինչպես ցույց է տրված: Դրանից հետո անջատիչը ամրացվում է առաստաղի դարակի վրա:
Պարուրաձև տիպի դեպքում վտանգ կա, որ պարույրի մոդուլի ուղղակի ձգումը կարող է ճնշման տակ կոտրել ակրիլը, ուստի քաշման հատվածը (Մուտք) և մոդուլը (Ելք) առանձնացվել են: Լույսի անկումը առավելագույնի հասցնելու համար մոդուլները ուղղահայաց տեղադրվեցին առաստաղի վրա, գծային մոդուլները ամրացվեցին օդին, պարույրները `անմիջապես առաստաղին: Եվ մենք միացրեցինք պինգ -պոնգի գնդակը և անջատիչը ձկնորսական գծին, որպեսզի այն շահագործվի:
Ակրիլային կտրումը, ինչպես ցույց է տրված վերևում նկարում, պահանջվում է դարակը դեպի անջատիչը ամրացնելու համար: 6 սմ քառակուսի ձևի անջատիչը մոտավորապես 5 մմ հաստություն ունի, անջատիչը կենտրոնացած է, իսկ մալուխի փողկապը տեղադրված է երկու կողմերի անցքերի միջով ՝ անջատիչն ամուր ամրացնելու համար: Կենտրոնի ներքևի մասում գտնվող շրջանաձև անցքը բացահայտում է անջատիչի ձգումը, որից ներքև երեք մետաղալար մալուխը դուրս է բերվում և միացված է մոդուլի մալուխային տերմինալին: Եվ նմանապես, չորս անկյուններում անցքի միջոցով դարակը և ակրիլը ամրացված են մալուխային կապերով: Ինչպես նկարագրված է վերևում, գծային մոդուլը միացված է անմիջապես ձգմանը, բայց պարուրաձև մոդուլը կապում է քորոցն ու անջատիչը առանձին:
Քայլ 4: Ստեղծեք 50 լուսային մոդուլների օգտագործմամբ
Մենք նախագծել ենք օգտագործողի փորձը ավելի հարուստ լույսի համար `տեղակայելով ընդհանուր առմամբ 50 մոդուլ:
Մենք ունեինք 1, 800 մմ լայնություն և 1, 200 մմ երկարություն ունեցող դարակ, և մենք միացնում էինք յուրաքանչյուր անջատիչ և մոդուլ, որպեսզի դուք կարողանաք զգալ անձրևի և անձրևի միջավայրը, որը մենք նախապես պլանավորել էինք, և յուրաքանչյուր մոդուլ ունեինք առանձին ՝ մի քանի առաջադրանքներ թույլ տալու համար:.
Կախված դիզայնի գծագրից, փրփուրի մեջ փորվել է կլոր անցք `տեղադրումը թաքցնելու և համոզվելու համար, որ LED մոդուլի միացված տարածքը տեսանելի չէ: Քանի որ ակրիլային տախտակից մինչև LED մոդուլի միացում, որտեղ անջատիչը ամրացված է, հեռավորությունը մոտ 1 սմ է, օգտագործվել է 1 սմ հաստությամբ փրփուր:
Մետաղական քառակուսի շրջանակն օգտագործվում էր տեղադրումը պտուտակների և մալուխների հետ միասին պահելու համար ՝ պահպանելով ընդհանուր քաշը և հավասարակշռությունը: Եթե բացահայտված միացումների երկարությունն ավելի շատ է, քան արտադրողը, երբ այն փորձում է, ապա ավելի հաստ տախտակն անարդյունավետ է, և առաջարկվում են այլ կառույցներ:
Աչքի մակարդակում օգտագործողի փորձը հեշտացնելու համար ավարտված տեղադրումը տեղադրվում է մոտավորապես 2 մ բարձրության հենարանի վրա, սակայն զգուշությունը կայանում է նրանում, որ անջատիչով տեղադրված ներկառուցված LED մոդուլը տեղադրելը շատ դժվար է, ուստի բոլոր կապերը պետք է հեռացվեն: Մենք բարձրացանք սանդուղքով և մոդուլը միացրեցինք աջակցության վրա ամրացված տեղադրմամբ:
Այս ամբողջ գործընթացի ամենակարևոր մասն է ապահովել, որ աշխատանքը կատարվի ապահով և լիովին ապահովված `ապահովելու համար, որ փորձը հնարավոր է դառնում ապահով միջավայրում:
Ընդհանուր առմամբ օգտագործվել է 10 arduino և 50 LED մոդուլներ, և հինգ LED մոդուլներ միացվել են մեկ arduino- ի համար `ավելի արդյունավետ և անխափան բազմակողմանի աշխատանքի համար: Մանրամասների համար տե՛ս կից նախագիծը: Neopixel- ի բազմակի առաջադրանքների կոդավորումը `օգտագործելով ամբողջական անջատիչը` ըստ նախագծման սխեմայի, մանրամասն կքննարկվի հաջորդ քայլին:
Քայլ 5: Arduino կոդավորում և էլեկտրագծեր
Հաղորդալարեր
- Համաձայն 4 -րդ քայլի դասավորության `միացվել է 50 մոդուլ:
- Յուրաքանչյուր մոդուլ բաժանված էր 10 մոդուլների `50 մոդուլներից` բազմակի առաջադրանքներ կատարելու և հստակ կապ ապահովելու համար:
- Ինչպես ցույց է տրված վերը նշված 1 -ին նկարում, հինգ մոդուլ միացված էր մեկ arduino- ին, իսկ neopixel- ի 5v կապոցները միանգամից իրար էին կապվում `սնուցման աղբյուրը միացնելու համար:
- Նեոպիքսելների և անջատիչների GND- ն նույնպես կապված էին միմյանց հետ և, ընկալման հեշտության համար, անջատիչները միացված էին 2, 3, 4, 5, 6 կապում, իսկ նորապիքսելները միացված էին 9, 10, 11, 12, 13 կապում:.
- Անջատիչները եւ նեոպիքսելները միացված էին համապատասխանաբար 2-9, 3-10, 4-11, 5-12, 6-13 եղանակներով:
- Պետք է նշել, որ քանի որ գծերի միացումները բարդ են և կարճ միացման հետևանքով հրդեհի վտանգ կա, կրճատվող խողովակը տաքացվեց, որպեսզի թույլ մասերը չջարդվեն:
Neopixel բազմաֆունկցիոնալ կոդավորում ՝ քաշման անջատիչով
5 թեթև անիմացիա (անձրևի տեսակը, ցնցուղի տեսակը, կայծի կայծի տեսակը, փոփ տեսակը, անկանոն տեսակը)
#ներառում
/*사용 하고자 하는 패턴 을 추가/*/
enum pattern {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}; /*네오 픽셀 을 을 설정 함*/ enum ուղղություն {ԱՌԱARD, ԱՆՎԱՐ};
/*패턴 의 클래스 를 입력 함*/
դաս NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 추가 업데이트 위한 /* / public: pattern ActivePattern; /*클레스 함수 에 패턴 의 방향 입력 입력*/ ուղղություն Ուղղություն;
/*변수 Interval 추가*/ unsigned long Interval; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Գույն 1, Գույն 2 Color 추가*/ uint32_t Գույն 1, Գույն 2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 ինդեքս 를 추가*/ uint16_t ինդեքս;
/*패턴 을 완료 했을 시 다시 함수*/ void (*OnComplete) (); /*네오 패턴 에서 네오 픽샐 갯수 핀, 번호 번호, 타입, 콜백 을 함수/*/ NeoPatterns (uint16_t պիքսել, uint8_t փին, uint8_t տեսակ, անվավեր (*հետադարձ) ()) ՝ Adafruit_NeoPixel (պիքսելներ, քորոց, տեսակ) { OnComplete = հետադարձ զանգ; }
/*패턴 을 업데이트 하기 위한 케이스/*/
void Update () { /*패턴 의 시간 설정: If 태스킹 을 구현 구문*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 스위치 구문*/ անջատիչ (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*պատյան RAINBOW_CYCLE 나와라*/ ընդմիջում;
/*գործ THEATER_CHASE 에서는 TheaterChaseUpdate 실행 하라*/
գործ THEATER_CHASE: TheaterChaseUpdate (); /*գործ THEATER_CHASE 나와라*/ ընդմիջում;
/*պատյան COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/
գործ COLOR_WIPE: ColorWipeUpdate (); /*գործ COLOR_WIPE 나와라*/ ընդմիջում; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate (); /*պատյան SCANNER 나와라*/ ընդմիջում;
/*գործ FADE 에서는 FadeUpdate 를 실행 하라*/
գործ FADE: FadeUpdate (); /*գործ FADE 나와라*/ ընդմիջում;
/*գործ TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/
գործ TWINKLE: TwinkleUpdate (); /*գործ TWINKLE 나와라*/ ընդմիջում;
/*գործ STAR 에서는 StarUpdate 를 실행 하라*/
գործ STAR: StarUpdate (); /*գործ STAR 나와라*/ ընդմիջում;
/*գործ RAINBOWSPARKLE 에서는 Rainbowsparkle Թարմացնել 를 실행 하라*/
գործ RAINBOWSPARKLE: RainbowsparkleUpdate (); /*պատյան RAINBOWSPARKLE 나와라*/ ընդմիջում; /*case METEOR 에서는 MeteorUpdate 를 실행 하라*/ case METEOR: MeteorUpdate (); /*գործ METEOR 나와라*/ ընդմիջում;
/*պատյան LIGHT 에서는 LightUpdate 실행 하라*/
պատյան LIGHT: LightUpdate (); /*պատյան ԼՈTՅՍ 나와라*/ ընդմիջում;
/*գործ BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/
գործ BLOSSOM: BlossomUpdate (); /*գործ BLOSSOM 나와라*/ ընդմիջում; }}}
/*패턴 의 방향 을 설정 하는/*/
/*Indուցանիշ 증가 시키고 초기화 하는 함수*/
void Բարձրացում () { /*만약 정방향 이면 를 증가 시켜라* / եթե (Ուղղություն == ԱՌԱ) {Ինդեքս ++; /*만약 인덱스 가 전체 네오 픽셀 갯수 같 거나 많다 면 0 으로 초기화 시켜라*/ if (Index> = TotalSteps) {Index = 0; /*패턴 을 완료 시키는 함수*/ եթե (OnComplete! = NULL) {OnComplete (); }}}
/*만약 정방향 이 아니면 else else else*/ else { -ինդեքս; /*만약 인덱스 가 전체 네오 픽셀 갯수 같 거나 적 다면 전체 갯수 에서 1 을 빼라*/ if (Index <= 0) {Index = TotalSteps - 1; /*패턴 을 완료 함수/*/ if (OnComplete! = NULL) {OnComplete (); }}}}
/*반대 방향 으로 움직이게 하는 함수*/
void Հակադարձ () { /*애니메이션 함수 에 Հակադարձ 를 썼을 시, 방향 이 이면* / եթե (Ուղղություն == ԱՌԱ) { /*방향 은 그 와 반대 이며 전체 구동 갯수 일 1 / 일 빼라* / Ուղղություն = ԱՆՎԱՐ; Exուցանիշ = TotalSteps - 1; } /*그 외의 방향 이 정방향 이면 으로 0 으로 설정 해라* / else {Direction = FORWARD; Exուցանիշ = 0; }}
/*애니메이션 을 설정 하는 함수 들*
*RainbowCycle/ 시간 과 방향 을 입력*/
դատարկ RainbowCycle (uint8_t ընդմիջում, ուղղություն dir = ԱՌԱ) { /*실행 되는 패턴 은 RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 안에 입력 되는 ընդմիջում 과 같음*/ Interval = interval; /*총 구동 갯수 는 255 임*/ TotalSteps = 255; /*인덱스 는 0 으로 설정 함*/ exուցանիշ = 0; /*방향 은 void RainbowCycle () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }
/*RainbowCycle 업데이트 했을 경우*/
void RainbowCycleUpdate () { /*변수 i 가 네오 픽셀 개수 /으면 i 를 증가 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 함 과 동시에 RGB 의 무지개 * / SetPixelColor (i, անիվ (((i * 256 / numPixels ()) + ինդեքս) & 255)); } / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
/*TheaterChase 컬러 와 시간 방향 을/*/
void TheaterChase (uint32_t color1, uint32_t color2, uint8_t interval, direction dir = FORWARD) { /*실행 되는 패턴 TH RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 입력 되는 interval 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1, 2 설정*/ Գույն 1 = գույն 1; Գույն 2 = գույն 2; /*인덱스 는 0 으로 설정 함*/ exուցանիշ = 0; /*방향 은 void TheaterChase () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }
/*TheaterChase 업데이트 했을 경우*/
void TheaterChaseUpdate () { /*변수 i 가 네오 개수 보다 보다 for i 를 증가 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 에 인덱스 를 더해서 3 으로 나눈 것이 0 과 같다 면 i 를 Գույն 변환 시켜라 시켜라*/ եթե ((i + ինդեքս) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Գույն 로 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
/*ColorWipe 컬러 와 시간 방향 을/*/
անվավեր ColorWipe (uint32_t գույն, uint8_t ընդմիջում, ուղղություն dir = ԱՌԱ) { /*실행 되는 패턴 L COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 은 void ColorWipe () 안에 입력 되는 ընդմիջում 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Color1 = գույն; /*인덱스 는 0 으로 설정 함*/ exուցանիշ = 0; /*방향 은 void ColorWipe () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }
/*ColorWipeUpdate 를 업데이트 했을 경우*/
անվավեր ColorWipeUpdate () { /*index 를 컬러 1 로 변환 시켜라* / setPixelColor (Index, Color1); / *애니메이션 을 보여주는 함수 */ շոու (); Ավելացում (); }
/*Սկաներ/컬러 와 시간 을 입력*/
դատարկ սկաներ (uint32_t գույն 1, uint8_t միջակայք) { /*실행 되는 패턴 AN SCANNER* / ActivePattern = SCANNER; /*시간 은 void Scanner () 입력 되는 interval 과 같음*/ Interval = interval; /*구동 갯수 는 총 갯수 을 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2; /*컬러 1 설정*/ Color1 = color1; /*인덱스 는 0 으로 설정 함*/ exուցանիշ = 0; }
/*ScannerUpdate 를 업데이트 했을 경우*/
void ScannerUpdate () { /*변수 i 는 영 총 갯수 갯수 보다 경우 i 를 증가 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 같다 면 i 를 color1 로 변환 시켜라*/ if (i == Index) {setPixelColor (i, Color1); } / *그렇지 않다면 변수 i 를 전체 구동 에서 인덱스 를 뺀값 과 같다 else else * / else if (i == TotalSteps - Index) {setPixelColor (i, Color1); } / *그 밖에는 i 를 디밍 시켜라 i 의 만큼 만큼 * / else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
/*Սկաներ 컬러 컬러 1, 2 스텝 스텝, 시간, 방향 을 입력*/
void Fade (uint32_t color1, uint32_t color2, uint16_t քայլեր, uint8_t ընդմիջում, ուղղություն dir = ԱՌԱ) { /*실행 되는 패턴 AD FADE* / ActivePattern = FADE; /*시간 은 void Fade () 입력 되는 interval 과 같음*/ Interval = interval; /*구동 갯수 는 값임/*/ TotalSteps = քայլեր; /*컬러 1, 2 설정*/ Գույն 1 = գույն 1; Գույն 2 = գույն 2; /*인덱스 는 0 으로 설정 함*/ exուցանիշ = 0; /*방향 은 void Fade () 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; } /*FadeUpdate 를 업데이트 했을 경우* / void FadeUpdate () { /*변수 կարմիր 값 은 다음 같음 같음* / uint8_t կարմիր = ((կարմիր (գույն 1)*(ընդհանուր քայլեր - ինդեքս)) + (կարմիր (գույն 2)*ինդեքս)) / TotalSteps; / * 변수 կանաչ 값 은 다음 과 같음 * / uint8_t կանաչ = ((Կանաչ (Գույնը 1) * (Ընդհանուր քայլեր - ինդեքս)) + (Կանաչ (Գույնը 2) * exուցանիշ)) / Ընդհանուր քայլեր; / * 변수 կապույտ 은 다음 과 같음 * / uint8_t կապույտ = ((կապույտ (գույն 1) * (ընդհանուր քայլեր - ինդեքս)) + (կապույտ (գույն 2) * ինդեքս)) / TotalSteps; /*위 의 կարմիր, կանաչ, կապույտ/ 으로 컬러 셋팅 함 함*/ ColorSet (Գույն (կարմիր, կանաչ, կապույտ)); / *애니메이션 을 보여주는 함수 */ շոու (); Ավելացում (); }
/*모든 네오 픽셀 을 끄는 구문*/
void alloff () { /*총 네오 픽셀 갯수 는 74 개 이며* / int NPIXEL = 74; /*변수 i 가 증가 하며 모든 픽셀 컬러 값 을 0 으로 변환 함*/ համար (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}
/*Թարթել 의 컬러 1 와 시간 을 입력*/
անվավեր Twinkle (uint32_t գույնը 1, uint8_t միջակայք) { /*실행 되는 패턴 은 TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 안에 입력 되는 interval 과 같음*/ Interval = interval; /*컬러 1 설정*/ Color1 = color1; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Exուցանիշ = 0; }
/*TwinkleUpdate 를 업데이트 했을 경우*/
անվավեր TwinkleUpdate () { /*모든 네오 픽셀 의 컬러 를 0 으로 셋팅* / setAll (0, 0, 0); /*변수 Pixel 은 պատահական 74*/ int Pixel = պատահական (74); /*պատահական 74 개 에서 2 로나 눈 수 를 하게 켜라*/setPixelColor (Pixel/2, 50, 100, 255); setPixelColor (Pixel, 250, 255, 250); setPixelColor (Pixel/2, 200, 250, 255); setPixelColor (պիքսել, 255, 255, 255); setPixelColor (Pixel, 250, 230, 250); setPixelColor (Pixel/2, 150, 200, 255); / *애니메이션 을 보여주는 함수 */ շոու (); / *랜덤 하게 함수 함수 */ setPixelColor (պիքսել, 0, 0, 0); / *애니메이션 을 보여주는 함수 */ շոու (); Ավելացում (); }
/*Աստղ 의 컬러 1 값 을 입력*/
դատարկ աստղ (uint32_t գույն 1) { /*실행 되는 패턴 AR STAR* / ActivePattern = STAR; /*시간 은 void Star () 입력 되는 ընդմիջում 과 같음*/ Interval = Interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 설정*/ Color1 = color1; Exուցանիշ = 0; }
/*StarUpdate 업데이트 했을 경우*/
անվավեր StarUpdate () { /*인덱스 와 컬러 셋팅 /* / setPixelColor (ինդեքս, գույն 1); ցուցադրում(); /*변수 i 가 0 이고 구동 갯수 작 으면 i 를 감소 시킴 = 한칸 씩 하는 애니메이션*/ for (int i = 0; i <numPixels (); i--) {setPixelColor (i, Color (0, 0, 0)); } / *애니메이션 을 보여주는 함수 * / ավելացում (); }
/*Rainbowsparkle 시간 과 방향 을 입력*/
դատարկ Rainbowsparkle (uint8_t ընդմիջում, ուղղություն dir = ԱՌԱ) { /*실행 되는 패턴 IN RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 անվավեր Rainbowsparkle () 안에 입력 val ընդմիջում 과 같음*/ Interval = interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Exուցանիշ = 0; /*방향 은 անվավեր Rainbowsparkle () 안에 입력 되는 ուղղություն 과 같음*/ Direction = dir; }
/*RainbowsparkleUpdate 를 업데이트 했을 경우*/
void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 으면 i 값 을 증가 하는데* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 If 으면 i 값 증가 하는데 하는데*/ եթե ((i + ինդեքս) % 2 == 0) {uint32_t c = պատահական (255); setPixelColor (i, c); } else {setPixelColor (i, պատահական (255)); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); } /*Meteor 시간 과 방향 을 입력* / void Meteor (uint32_t color1) { /*실행 되는 패턴 은 METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Exուցանիշ = 0; }
/*MeteorUpdate 업데이트 했을 경우*/
void MeteorUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, պատահական (255), 255); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
/*Լույս 의 시간 과 방향 을 입력*/
դատարկ լույս (uint32_t գույն 1) { /*실행 되는 패턴 IGH LIGHT* / ActivePattern = LIGHT; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Exուցանիշ = 0; }
/*LightUpdate 업데이트 했을 경우*/
void LightUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 150, պատահական (200), 40); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
/*Ossաղկել/시간 과 방향 을 입력*/
void Blossom (uint32_t գույնը 1) { /*실행 되는 패턴 OS BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Interval; / *총 구동 갯수 는 numPixels 갯수 에서 1 후 후, *2 를 한 같음/ */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 설정*/ Color1 = color1; Exուցանիշ = 0; }
/*BlossomUpdate 를 업데이트 했을 경우*/
void BlossomUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, պատահական (255), 100); } else {setPixelColor (i, DimColor (getPixelColor (i))); }} / *애니메이션 을 보여주는 함수 * / շոու (); Ավելացում (); }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/ *네오 픽셀 켜지 는 는 위치 지정 지정 함수//, կանաչ, կապույտ); } ցուցադրում(); }
/*네오 픽셀 의 디밍, 즉 밝기 를 하는 함수/*/
uint32_t DimColor (uint32_t գույն) {// Տեղափոխել R, G և B բաղադրիչները մեկ բիթ դեպի աջ uint32_t dimColor = Գույն (կարմիր (գույն) >> 1, կանաչ (գույն) >> 1, կապույտ (գույն) >> 1); վերադարձ dimColor; }
/*모든 네오 픽셀 의 칼라 를/*/
անվավեր ColorSet (uint32_t գույն) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, գույն); } ցուցադրում(); }
/*레드 값 을 불러 옴*/
uint8_t Կարմիր (uint32_t գույն) {վերադարձ (գույն >> 16) & 0xFF; } /*그린 값 을 옴 /* / uint8_t Կանաչ (uint32_t գույն) {վերադարձ (գույն >> 8) & 0xFF; } /*블루 값 을 옴 /* / uint8_t Կապույտ (uint32_t գույն) {վերադարձ գույն & 0xFF; }
/*Rիածան 를 불러 옴*/
uint32_t Անիվ (բայթ WheelPos) {WheelPos = 255 - WheelPos; եթե (WheelPos <85) {վերադարձ գույնը (255 - WheelPos * 3, 0, WheelPos * 3); } else if (WheelPos <170) {WheelPos -= 85; վերադարձ Գույնը (0, WheelPos * 3, 255 - WheelPos * 3); } else {WheelPos -= 170; վերադարձ Գույնը (WheelPos * 3, 255 - WheelPos * 3, 0); }}};
/*շերտ 을 불러 오기 위한* /*사용 하는 스트립 별로 모두 지정 / /* /
void strip1Complete (); void strip2Complete (); void strip3Complete (); void strip4Complete (); void strip5Complete ();
/*네오 픽셀 의 갯수 설정*/
#սահմանել NUMPIXELS 74 /*사용 하는 버튼 의 설정 /* / #սահմանել B_NUM 5 /*ներմուծել շերտ 1 ~ 5 까지, 는 는 74 개 스트립 연결 핀 p շերտ 1 은 8 ~ շերտ 5 까지 12* / NeoPatterns շերտ 1, (74, 8, NEO_GRB + NEO_KHZ800, & strip1Complete); NeoPatterns շերտ 2 (74, 9, NEO_GRB + NEO_KHZ800, & strip2Complete); NeoPatterns strip3 (74, 10, NEO_GRB + NEO_KHZ800, & strip3Complete); NeoPatterns շերտ 4 (74, 11, NEO_GRB + NEO_KHZ800, & strip4Complete); NeoPatterns շերտ 5 (74, 12, NEO_GRB + NEO_KHZ800, & strip5Complete); /*배열 을 사용한 버튼 핀 설정/*/ const int buttonPin [B_NUM] = {2, 3, 4, 5, 6}; /*배열 을 사용 하여 상태 를 해줌/*/ int կոճակ Պետություն [B_NUM]; /*2 번핀 부터 6 번핀 까지 상태 는 순서 OW OW OW OW*/ int lastButtonState [B_NUM] = {OWԱ,Ր, OWԱOW, OWԱOW, LԱOW, OWԱOWՐ}; /*2 번핀 부터 6 번핀 까지 버튼 를 초기화 시킴*/ int կոճակ Counter [B_NUM] = {0, 0, 0, 0, 0}; /*2 번핀 부터 6 번핀 까지 최대 버튼 카운터 는 5 임*/ int buttonCounterMax = 5; /*모든 버튼 핀 읽 일수 있도록 추가/*/ int ընթերցում [B_NUM]; անստորագիր երկար lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 을 읽는 시간 은 հետաձգում 50 과 같음*/ անստորագիր երկար դեբունս Հետաձգում = 50;
void setup () {
/*복잡 하게 이 필요 없도록 방식 의 의 G: GND - 5V (Միացեք կապի համարին)*/ for (int i = 0; i <B_NUM; i ++) {pinMode (buttonPin , INPUT_PULLUP); } Serial.begin (9600); /*스트립 1 ~ 5 를 셋팅*/ strip1.begin (); strip2.begin (); strip3.begin (); strip4.begin (); strip5.begin ();
//strip1. TaterChase(strip1. Color(255, 0, 255), strip1. Color (255, 50, 0), 20, FORWARD);
}
/*버튼 카운터 변수 값 은 5 임*/
int հաշվիչ = 5; void loop () { /*버튼 수 보다 i 가 으면 를 i 를 증가 시키고* / for (int i = 0; i debounceDelay) {if (ընթերցում ! = buttonState ) {buttonState = կարդալ ; buttonCounter ++; /*버튼 카운팅 이 위에서 설정 한 Max 값 5 를 넘으면 0 으로 초기화 시켜라.*/ If (buttonCounter > buttonCounterMax) buttonCounter = 0; }} lastButtonState = ընթերցում ; } /*모든 스트립 을 업데이트*.* / Strip1. Update (); շերտ 2. Թարմացում (); strip3. Թարմացում (); ժապավեն 4. Թարմացում (); ժապավեն 5. Թարմացում ();
///// SWITCH_2 /////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////////////////////////
/*버튼 배열 의 0 번째: 2 번핀 에 연결된 을 활용 하여 애니메이션 구동 하는 하는 스위치 스위치 스위치//*/ անջատիչ (buttonCounter [0]) {
/*첫번째 버튼 을 활동 시키면 구동//*/
գործ 0: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션 의 을 을/*/ ժապավեն 1. Interval = 20; /*구동 되는 네오 의 의 설정/*/ strip1. TotalSteps = strip1.numPixels (); ընդմիջում; /*두번째 버튼 을 활동//*/ գործ 1: strip1. ActivePattern = RAINBOWSPARKLE; ժապավեն 1. Interval = 50; strip1. TotalSteps = strip1.numPixels (); ընդմիջում; /*세번째 버튼 을 시키면 구동 되는 case*/ գործ 2: strip1. ActivePattern = SCANNER; ժապավեն 1. Interval = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; ընդմիջում; /*네번째 버튼 을 활동 시키면/ case*/ գործ 3: strip1. ActivePattern = TWINKLE; ժապավեն 1. Interval = 1; strip1. TotalSteps = strip1.numPixels (); ընդմիջում; /*다섯 번째 버튼 을 활동 시키면 애니메이션/*/ գործ 4: strip1. ActivePattern = METEOR; ժապավեն 1. Interval = 10; strip1. TotalSteps = strip1.numPixels (); ընդմիջում; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_3 /////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////////////////////////
անջատիչ (buttonCounter [1]) {case 0: strip2. ActivePattern = STAR; ժապավեն 2. Interval = 50; strip2. TotalSteps = strip2.numPixels (); ընդմիջում; գործ 1: strip2. ActivePattern = RAINBOWSPARKLE; ժապավեն 2. Interval = 100; strip2. TotalSteps = strip2.numPixels (); ընդմիջում; գործ 2: strip2. ActivePattern = SCANNER; ժապավեն 2. Interval = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; ընդմիջում; դեպք 3: strip2. ActivePattern = TWINKLE; ժապավեն 2. Interval = 5; strip2. TotalSteps = strip2.numPixels (); ընդմիջում; դեպք 4: strip2. ActivePattern = METEOR; ժապավեն 2. Interval = 40; strip2. TotalSteps = strip2.numPixels (); ընդմիջում; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_4 //////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////////////////////////
անջատիչ (buttonCounter [2]) {case 0: strip3. ActivePattern = STAR; strip3. Interval = 50; strip3. TotalSteps = strip3.numPixels (); ընդմիջում; գործ 1: strip3. ActivePattern = RAINBOWSPARKLE; strip3. Interval = 100; strip3. TotalSteps = strip3.numPixels (); ընդմիջում; գործ 2: strip3. ActivePattern = SCANNER; strip3. Interval = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; ընդմիջում; դեպք 3: strip3. ActivePattern = TWINKLE; strip3. Interval = 5; strip3. TotalSteps = strip3.numPixels (); ընդմիջում; դեպք 4: strip3. ActivePattern = METEOR; strip3. Interval = 25; strip3. TotalSteps = strip3.numPixels (); ընդմիջում; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_5 ///////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////////////////////////
անջատիչ (buttonCounter [3]) {case 0: strip4. ActivePattern = STAR; ժապավեն 4. Interval = 50; strip4. TotalSteps = strip4.numPixels (); ընդմիջում; գործ 1: strip4. ActivePattern = RAINBOWSPARKLE; ժապավեն 4. Interval = 100; strip4. TotalSteps = strip4.numPixels (); ընդմիջում; գործ 2: strip4. ActivePattern = SCANNER; ժապավեն 4. Interval = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; ընդմիջում; դեպք 3: strip4. ActivePattern = TWINKLE; ժապավեն 4. Interval = 5; strip4. TotalSteps = strip4.numPixels (); ընդմիջում; գործ 4: strip4. ActivePattern = METEOR; ժապավեն 4. Interval = 25; strip4. TotalSteps = strip4.numPixels (); ընդմիջում; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]);
///// SWITCH_6 ////////////////////////////////////////////// /////////////////////////////////////////////////// //////////////////////////////////////////
անջատիչ (buttonCounter [4]) {case 0: strip5. ActivePattern = STAR; ժապավեն 5. Interval = 50; strip5. TotalSteps = strip5.numPixels (); ընդմիջում; գործ 1: strip5. ActivePattern = RAINBOWSPARKLE; ժապավեն 5. Interval = 100; strip5. TotalSteps = strip5.numPixels (); ընդմիջում; գործ 2: strip5. ActivePattern = SCANNER; ժապավեն 5. Interval = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; ընդմիջում; գործ 3: strip5. ActivePattern = TWINKLE; ժապավեն 5. Interval = 5; strip5. TotalSteps = strip5.numPixels (); ընդմիջում; գործ 4: strip5. ActivePattern = METEOR; ժապավեն 5. Interval = 25; strip5. TotalSteps = strip5.numPixels (); ընդմիջում; } Serial.print (buttonCounter [0]); Serial.print (","); Serial.println (buttonCounter [1]); }
// strip1 Ավարտման հետադարձ կապ
void strip1Complete () {strip1. Color1 = strip1. Wheel (պատահական (255)); շերտ 1. Գույն 2 = ժապավեն 1. Անիվ (պատահական (255)); շերտ 1. Index = 0; }
// strip2 Ավարտման հետադարձ կապ
void strip2Complete () {strip2. Color1 = strip2. Wheel (պատահական (255)); strip2. Color2 = շերտ 2. Անիվ (պատահական (255)); շերտ 2. Index = 0; }
// strip3 Ավարտման հետադարձ կապ
void strip3Complete () {strip3. Color1 = strip3. Wheel (պատահական (255)); strip3. Color2 = strip3. Wheel (պատահական (255)); strip3. Index = 0; }
// strip4 Ավարտման հետադարձ կապ
void strip4Complete () {strip4. Color1 = strip4. Wheel (պատահական (255)); strip4. Color2 = շերտ 4. Անիվ (պատահական (255)); շերտ 4. Index = 0; }
// strip5 Ավարտման հետադարձ կապ
void strip5Complete () {strip5. Color1 = strip5. Wheel (պատահական (255)); ժապավեն 5. Գույն 2 = ժապավեն 5. Անիվ (պատահական (255)); շերտ 5. Index = 0; }
Քայլ 6: Արդյունք և ֆիլմ պատրաստելը
Շնորհակալություն մեր նախագծի նկատմամբ հետաքրքրության համար, չնայած դա բավարար չէ:
Խորհուրդ ենք տալիս:
Սենյակի լույսը վերահսկվում է PIR տվիչի և Arduino- ի միջոցով. 6 քայլ
Սենյակի լուսավորությունը վերահսկվում է PIR տվիչի և Arduino- ի միջոցով: Այսօր մենք ձեր սենյակի լույսերը կառավարելու ենք Arduino PIR շարժման տվիչի միջոցով շարժման հայտնաբերման միջոցով: Այս նախագիծը շատ զվարճալի է և այն շատ գործնական կիրառություն ունի ձեր տանը և կարող է ձեզ որոշակի գումար խնայել ՝ այս նախագիծը կատարելով: Juու
Ինչպես վերահսկել լույսը/տան լույսերը Arduino- ի և Amazon Alexa- ի միջոցով. 16 քայլ (նկարներով)
Ինչպես վերահսկել լույսը/տան լույսերը Arduino- ի և Amazon Alexa- ի միջոցով. Ես բացատրել եմ, թե ինչպես վերահսկել լույսը, որը միացված է ՄԱԿ -ին և վերահսկվում է Alexa- ի կողմից
Ինչպես վերահսկել ESP8266 հիմնված Sonoff հիմնական խելացի անջատիչը սմարթֆոնով. 4 քայլ (նկարներով)
Ինչպես վերահսկել ESP8266 հիմնված Sonoff հիմնական խելացի անջատիչը սմարթֆոնով. Sonoff- ը Smart Home- ի սարքի գիծ է, որը մշակվել է ITEAD- ի կողմից: Այդ գծի ամենաճկուն և էժան սարքերից են Sonoff Basic- ը: Դա Wi-Fi- ով միացված անջատիչ է, որը հիմնված է հիանալի չիպի ՝ ESP8266- ի վրա: Այս հոդվածը նկարագրում է, թե ինչպես տեղադրել Cl
Քաշեք մրցավազքի արձագանքի ժամանակը ՝ 5 քայլ (նկարներով)
Քաշեք մրցավազքի արձագանքման ժամանակը. Այս ուսանելի դասում ես ձեզ ցույց կտամ, թե ինչպես ստեղծել քաշքշուկների արձագանքման ժամանակի մարզիչ: Ամեն ինչ ավարտված լինելու դեպքում դուք կկարողանաք օգտագործել կոճակը ՝ շրջելով բոլոր լույսերը և ստանալ արձագանքի ժամանակ: Առաջին երկու դեղին լուսարձակները կներկայացնեն
Ավտոմատացրեք լույսը MESH շարժման ցուցիչի միջոցով. 3 քայլ (նկարներով)
Ավտոմատացրեք լուսավորությունը ՝ օգտագործելով MESH շարժման տվիչ: Հաճա՞խ եք մոռանում լույսերն անջատել: Ձեր տնից կամ սենյակից դուրս գալու դեպքում միշտ կարելի է մոռանալ անջատել լույսերը, բայց MESH Motion Sensor- ով մենք լուծեցինք խնդիրը ՝ օգտագործելով դետեկտիվ և չբացահայտող գործառույթները, որոնք կօգնեն ձեզ հեշտացնել