Мазмұны:

Жарықты тартыңыз - Neopixel & Pull Up қосқышын қолданатын жарық модулі: 6 қадам (суреттермен)
Жарықты тартыңыз - Neopixel & Pull Up қосқышын қолданатын жарық модулі: 6 қадам (суреттермен)

Бейне: Жарықты тартыңыз - Neopixel & Pull Up қосқышын қолданатын жарық модулі: 6 қадам (суреттермен)

Бейне: Жарықты тартыңыз - Neopixel & Pull Up қосқышын қолданатын жарық модулі: 6 қадам (суреттермен)
Бейне: ESP32 Tutorial 47 - WS2812 CheerLights using MQTT over Internet | SunFounder's ESP32 IoT Learnig kit 2024, Қараша
Anonim
Image
Image
Жарықты тартыңыз - Жарық модулі неопиксельді және жоғары тартқышты қолданыңыз
Жарықты тартыңыз - Жарық модулі неопиксельді және жоғары тартқышты қолданыңыз

Жарық модулінің ерекшеліктері

  • Ардуино Уно
  • Жабдықтар мен корпустар интернеттен сатып алынды
  • Neopixel & Қуат көзі информатика және өнім дизайны мектебінен алынған
  • Жарық модулі қуат көзімен басқарылады
  • Барлық функциялар пайдаланушылардың өзара әрекеттесуі арқылы басқарылады
  • Неопиксель жолағының анимациялық түрлері: жаңбыр түрі, душ түрі, найзағай түрі, поп түрі, біркелкі емес түрі
  • Тартқыш қосқыш Neopixel жолағына қосылады және Neopixel жолағын тартқан кезде анимация өзгереді

1 -қадам: біз бастамас бұрын

Біз бастамас бұрын
Біз бастамас бұрын

Сәлеметсіз бе, нұсқаушылар мен жасаушылар.

Біз жаңбырдың эмоциясын жарық анимациясы арқылы сезінетін болсақ не болатынын түсіну үшін интерактивті дизайн жобасын бастадық. Мен жарықты тікелей тартатын интерфейс арқылы пайдаланушының сезімталдығы жоғарылайды деп ойладым.

Жұмысқа кіріспеу үшін

2 -қадам: қажет бөлшектер

Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер
Қажетті бөлшектер

Бір жарық модуліне негізделген

*** Неопиксельдер мен қуат көзі біздің департаменттің қолдауымен қолданылды. ***

Электроника:

  1. Ардуино Уно
  2. 3 түсті сым (қара, қызыл, кез келген түсті)
  3. 3 істікшелі қосқыш (сатып алу сілтемесі)
  4. 1 -қосқышты көтеріңіз (сатып алу сілтемесі)
  5. қысқаратын түтік
  6. WS2812b қосымша жарықдиодты жолақ 74 светодиодты (Neopixel жолағы)*2
  7. Қуат көзі (5В 350А) 1

*** Arduino, Pull Switch және NeoPixels үшін 50 жиынтық қажет. ***

Жабдық:

  1. Акрил штангасы 2t (10мм*1000мм) 1
  2. Акрил тақтасы 5t (60мм*60мм) 1
  3. Foemax 10t (1200мм*1800мм) 1
  4. Қара спрей
  5. Кабель байланысы
  6. Жол
  7. Қатты тақта
  8. Тор тақтасы

3 -қадам: Байланыс және жабдықты құру

Қосылу және аппараттық құралдарды құру
Қосылу және аппараттық құралдарды құру
Байланыс және аппараттық құралдарды құру
Байланыс және аппараттық құралдарды құру
Қосылу және аппараттық құралдарды құру
Қосылу және аппараттық құралдарды құру

Біріншіден, бізге бір жарықтандыру модулін жасау үшін акрилді кесу қажет.

  • Жарық анимациясын сезіну үшін 1М ауданы бар 2 мм қалыңдығы акрил жолағына 74 жарықдиодты неопиксель түрінде бекіту арқылы бекітілетін жарықтандыру модулін жасаңыз. Біз жарықтандыру модульдерінің екі түрін шығардық: типтік сызықтық және спираль.
  • Сызықтық типтер үшін қолданыстағы неопиксельді жолақтарды ұстауға және бекітуге болады, бірақ спиральды типтер қолмен жұмыс жасауды қажет етеді. 74 жарықдиодты шамдардың әрқайсысы спиральды акрилге бекітілген және қорғасынмен біріктірілген.

Неопиксель жолағын акрилге бекітіңіз және оны жылудың таралуына жол бермеу үшін әр жолақты бекітіңіз немесе жіңішке балық аулау сызығымен байлаңыз. Сызықтық типтегі жағдайда, эстетикалық көріністі безендіру үшін модульдің соңына қарай тарту қажет сфера орнатылды, біз қара шашыратқышпен үстел теннисі шарын аяқтадық. Содан кейін олар үстел теннисі шарында кішкене тесік жасап, оны арқанмен жалғады. Келесі маңызды бөлік, коммутатор мен неопиксель көрсетілгендей қосылады. Содан кейін қосқыш төбелік сөреге бекітіледі.

Спиральды типтегі жағдайда спиральды модульді тікелей тарту акрилді қысыммен бұзуы мүмкін, сондықтан тарту бөлімі (Кіріс) мен модуль (Шығу) ажыратылды. Жарықтың түсуін барынша арттыру үшін модульдер төбеге тігінен орнатылды, желілік модульдер ауаға бекітілді, спиральдар төбеге тікелей бекітілді. Біз үстел теннисі допы мен қосқышты балық аулау желісіне жалғадық, осылайша оны басқаруға болады.

Сөреге қосқышты бекіту үшін жоғарыдағы суретте көрсетілгендей акрилді кесу қажет. 6 см шаршы пішінді қосқыштың қалыңдығы шамамен 5 мм, қосқышты ортаға қойып, қосқышты мықтап бекіту үшін екі жағындағы саңылаулар арқылы кабель байланысы салынған. Орталықтың төменгі жағындағы дөңгелек тесік қосқыштың тартылуын көрсетеді, оның астында үш сымды кабель шығарылады және модульдің кабельдік терминалына қосылады. Сонымен қатар, төрт бұрыштағы тесік арқылы сөре мен акрил кабельдік байланыстармен бекітілген. Жоғарыда сипатталғандай, сызықтық модуль тартуға тікелей қосылады, бірақ спиральды модуль істік пен қосқышты бөлек қосады.

4 -қадам: 50 жарық модулін пайдаланып жасаңыз

50 жарық модулін қолданып құру
50 жарық модулін қолданып құру
50 жарық модулін қолданып құру
50 жарық модулін қолданып құру
50 жарық модулін қолданып құру
50 жарық модулін қолданып құру

Біз 50 модульді қолдану арқылы бай жарық үшін пайдаланушы тәжірибесін жасадық

Бізде ені 1 800 мм және ұзындығы 1 200 мм болатын сөре болды, және біз әр жоспарлаушы мен жаңбырдың ортасын сезіну үшін әр қосқышты және модульді жалғадық, және бізде көп модульді қосуға мүмкіндік беретін әрбір модуль бар..

Дизайн сызбасына байланысты, орнатуды жасыру үшін және жарықдиодты модульдің жалғанған аймағының көрінбейтініне көз жеткізу үшін фокустың ішіне дөңгелек тесік бұрғыланды. Акрил тақтасынан светодиодты қосуға дейінгі қашықтық шамамен 1 см болғандықтан, қалыңдығы 1 см болатын фемакс қолданылды.

Металл шаршы жақтау жалпы салмақ пен тепе -теңдікті сақтай отырып, бұрандалармен және кабельдік байланыстармен бірге қондырғыны ұстау үшін пайдаланылды. Егер ашық қосылыстардың ұзындығы өндіруші тырысқаннан асып кетсе, қалың тақта тиімсіз және басқа құрылымдар ұсынылады.

Қолданушының тәжірибесін көз деңгейінде жеңілдету үшін аяқталған қондырғы биіктігі шамамен 2 м болатын тірекке орнатылады, бірақ сақтандырғыш ендірілген жарықдиодты модульді коммутатормен орнату өте қиын, сондықтан барлық қосылымдарды алып тастау керек. Біз баспалдақпен жоғары көтеріліп, модульді тірекке бекітілген қондырғымен жалғадық.

Бұл процестің ең маңызды бөлігі - бұл жұмыстың қауіпсіз және толық қауіпсіз болуын қамтамасыз ету, бұл тәжірибенің қауіпсіз ортада мүмкін болуын қамтамасыз ету

Барлығы 10 ардуино мен 50 жарықдиодты модуль қолданылды және тиімдірек және үздіксіз көп тапсырмаларды орындау үшін бір ардуиноға бес жарықдиодты модуль қосылды. Мәліметтер алу үшін қоса берілген сызбаны қараңыз. Дизайн схемасына сәйкес толық қосқышты қолданатын неопикселді көп функциялы кодтау келесі қадамда егжей-тегжейлі талқыланады.

5 -қадам: Arduino кодтау және сымдар

Arduino кодтау және сымдар
Arduino кодтау және сымдар
Arduino кодтау және сымдар
Arduino кодтау және сымдар

Сымдар

  • 4 модульдің схемасына сәйкес 50 модуль қосылды.
  • Әр модуль 50 тапсырмадан тұратын 10 жиынтыққа бөлініп, көп тапсырмаларды орындауға және нақты қосылымды қамтамасыз етуге мүмкіндік берді.
  • Жоғарыдағы 1 суретте көрсетілгендей, бес модуль бір ғана ардуиноға қосылды, ал қуат көзін қосу үшін неопиксельдің 5в түйреуіштері бірден байланды.
  • Неопиксельдер мен коммутаторлардың GND -і де бір -біріне байланған, және қабылдауды жеңілдету үшін қосқыштар 2, 3, 4, 5, 6 түйреуіштерге, ал неопиксельдер 9, 10, 11, 12, 13 түйреуіштерге қосылған..
  • Коммутаторлар мен неопиксельдер сәйкесінше 2-9, 3-10, 4-11, 5-12, 6-13 тәсілдермен қосылды.
  • Айта кету керек, желілердің қосылыстары күрделі болғандықтан және қысқа тұйықталу салдарынан өрт шығу қаупі бар, осал бөлшектері үзілмеу үшін қысқаратын түтік қыздырылды.

Неопиксельді көп функциялы кодтау жоғары тартқышпен

5 жарық анимациясы (жаңбыр түрі, душ түрі, ұшқын найзағай түрі, поп түрі, тұрақты емес түрі)

#қосу

/*사용 하고자 하는 패턴 을 추가 함*/

Enum үлгісі {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}; /*네오 픽셀 을 방향 을 설정 함*/ enum бағыты {АЛҒА, ҚАЙТЫРУ};

/*패턴 의 클래스 를 입력 함*/

сынып NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 하고 업데이트 위 위 함수 public* / public: үлгі ActivePattern; /*클레스 함수 에 패턴 의 방향 을 입력*/ бағыт Бағыт;

/*변수 Interval 을 추가*/ unsigned long Interval; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Color1, Color2 를 추가*/ uint32_t Color1, Color2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 Индекс 를 추가*/ uint16_t Индекс;

/*패턴 을 완료 했을 시 다시 불러오는 함수*/ void (*OnComplete) (); /*네오 패턴 에서 네오 픽샐 의 갯수, 핀 번호, 타입, 타입 을 불러오는 함수*/ NeoPatterns (uint16_t пиксель, uint8_t түйреуіш, uint8_t түрі, void (*кері шақыру) ()): Adafruit_NeoPixel (пиксель, түйреуіш, тип) { OnComplete = кері байланыс; }

/*패턴 을 업데이트 하기 위한 케이스 구문*/

void Update () { /*패턴 의 시간 설정. 멀티 태스킹 을 하는 하는/*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 의 스위치 구문*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*case RAINBOW_CYCLE 에서 나와라*/ break;

/*case THEATER_CHASE 에서는 TheaterChaseUpdate 를 실행 하라*/

case THEATER_CHASE: TheaterChaseUpdate (); /*case THEATER_CHASE 에서 나와라*/ break;

/*қап COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/

жағдай COLOR_WIPE: ColorWipeUpdate (); /*case COLOR_WIPE 에서 나와라*/ break; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate (); /*case SCANNER 에서 나와라*/ break;

/*case FADE 에서는 FadeUpdate 를 실행 하라*/

FADE жағдайы: FadeUpdate (); /*case FADE 에서 나와라*/ break;

/*case TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/

case TWINKLE: TwinkleUpdate (); /*case TWINKLE 에서 나와라*/ break;

/*жағдай STAR 에서는 StarUpdate 를 실행 하라*/

жағдай STAR: StarUpdate (); /*case STAR 에서 나와라*/ break;

/*case RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/

жағдай RAINBOWSPARKLE: RainbowsparkleUpdate (); /*case RAINBOWSPARKLE 에서 나와라*/ break; /*case METEOR 에서는 MeteorUpdate 를 실행 하라*/ case METEOR: MeteorUpdate (); /*case METEOR 에서 나와라*/ break;

/*case LIGHT 에서는 LightUpdate 를 실행 하라*/

case LIGHT: LightUpdate (); /*case LIGHT 에서 나와라*/ break;

/*жағдай BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/

жағдай BLOSSOM: BlossomUpdate (); /*case BLOSSOM 에서 나와라*/ break; }}}

/*패턴 의 방향 을 설정 하는 구문*/

/*Индекс 를 증가 시키고 초기화 하는 함수*//

void Increment () { /*만약 정방향 이면 인덱스 를 /* / if (Бағыт == АЛҒА) {Индекс ++; /*만약 인덱스 가 전체 네오 픽셀 구동 갯수 같 거나 거나 면 0 으로 초기화 시켜라*/ if (Индекс> = TotalSteps) {Индекс = 0; /*패턴 을 완료 시키는 함수*/ if (OnComplete! = NULL) {OnComplete (); }}}

/*만약 정방향 이 아니면 인덱스 를 감소 시켜라*/ else {--Index; /*만약 인덱스 가 전체 네오 픽셀 구동 갯수 같 같 거나 다면 전체 구동 갯수 1 을 빼라*/ if (Индекс <= 0) {Индекс = TotalSteps - 1; /*패턴 을 완료 시키는 함수*/ if (OnComplete! = NULL) {OnComplete (); }}}}

/*반대 방향 으로 움직이게 하는 함수*/

void Reverse () { /*애니메이션 함수 에 Reverse 를 썼을 시, 만약 방향 이 정방향 이면* / if (Бағыт == АЛҒА) { /*방향 은 그 와 반대 이며 구동 구동 갯수 에서 1 일 빼라* / Direction = REVERSE; Индекс = TotalSteps - 1; } /*그 외의 방향 이 정방향 이면 인덱스 를 0 으로 설정 해라* / else {Direction = FORWARD; Индекс = 0; }}

/*애니메이션 을 설정 하는 함수 들 들*

*Радуга циклы 의 시간 과 방향 을 입력*/

void RainbowCycle (uint8_t интервал, бағыт dir = АЛҒА) { /*실행 되는 패턴 은 RainbowCycle 임* / ActivePattern = RAINBOW_CYCLE; /*시간 은 void RainbowCycle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 255 임*/ TotalSteps = 255; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; /*방향 은 void RainbowCycle () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*RainbowCycle 를 업데이트 했을 경우*/

void RainbowCycleUpdate () { /*변수 i 가 네오 픽셀 보다 작 작 으면 를 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 증가 함 과 GB RGB 의 무지개 / 로 변화 작동 작동 / * / setPixelColor (i, Wheel (((i * 256 / numPixels ()) + Index) & 255))); } / *애니메이션 을 보여주는 함수 * / show (); Қосу (); }

/*TheaterChase 의 컬러 와 시간 방향 을 입력*/

void TheaterChase (uint32_t color1, uint32_t color2, uint8_t интервал, бағыт dir = АЛҒА) { /*실행 되는 패턴 은 RTHEATER_CHASE* / ActivePattern = THEATER_CHASE; /*시간 은 void TheaterChase () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1, 2 를 설정*/ Түс1 = түс1; Түс2 = түс2; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; /*방향 은 void TheaterChase () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*TheaterChase 를 업데이트 했을 경우*/

void TheaterChaseUpdate () { /*변수 i 가 네오 픽셀 개수 작 작 를 를 /* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 에 인덱스 를 더해서 3 으로 나눈 것이 0 과 같다 면 i 를 Түс 로 변환 시켜라*/ if ((i + Index) % 3 == 0) {setPixelColor (i, Color1); } /*그렇지 않다면 i 를 Color 로 변환 시켜라* / else {setPixelColor (i, Color2); }} / *애니메이션 을 보여주는 함수 * / show (); Қосу (); }

/*ColorWipe 의 컬러 와 시간 방향 을 입력/*/

void ColorWipe (uint32_t color, uint8_t интервал, бағыт dir = АЛҒА) { /*실행 되는 패턴 은 COLOR_WIPE* / ActivePattern = COLOR_WIPE; /*시간 은 void ColorWipe () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 을 설정*/ Color1 = түс; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; /*방향 은 void ColorWipe () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; }

/*ColorWipeUpdate 를 업데이트 했을 경우*/

void ColorWipeUpdate () { /*index 1 로 변환 시켜라 /* / setPixelColor (Индекс, Түс1); / *애니메이션 을 보여주는 함수 */ show (); Қосу (); }

/*Сканер 의 컬러 와 시간 을 입력*//

void Scanner (uint32_t color1, uint8_t интервал) { /*실행 되는 패턴 은 SCANNER* / ActivePattern = SCANNER; /*시간 은 void Scanner () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*구동 갯수 는 총 갯수 에서 1 을 빼고 2 를 곱 해라*/ TotalSteps = (numPixels () - 1)*2; /*컬러 1 을 설정*/ Түс1 = түс1; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; }

/*ScannerUpdate 를 업데이트 했을 경우*/

void ScannerUpdate () { /*변수 i 는 영 이고 총 갯수 보다 작을 경우 i 를 시켜라* /for (int i = 0; i <numPixels (); i ++) { /*만약 변수 i 가 인덱스 같다 면 면 i 를 color1 로 변환 시켜라*/ if (i == Index) {setPixelColor (i, Color1); } / *그렇지 않다면 변수 i 를 전체 구동 갯수 에서 인덱스 를 뺀값 같다 * / else if (i == TotalSteps - Index) {setPixelColor (i, Color1); } / *그 밖에는 i 를 디밍 시켜라 i 의 값 만큼 * / else {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Қосу (); }

/*Сканер 의 컬러 1, 2 와 스텝, 시간, 방향 을 입력*/

void Fade (uint32_t color1, uint32_t color2, uint16_t қадамдар, uint8_t интервал, dir dir = АЛҒА) { /*실행 되는 패턴 은 FADE* / ActivePattern = FADE; /*시간 은 void Fade () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*구동 갯수 는 스텝 스텝/*/ TotalSteps = қадамдар; /*컬러 1, 2 를 설정*/ Түс1 = түс1; Түс2 = түс2; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; /*방향 은 void Fade () 안에 입력 되는 dir = FORWARD 과 같음*/ Direction = dir; } /*FadeUpdate 를 업데이트 했을 경우* / void FadeUpdate () { /*변수 red 값 은 다음 과 같음* / uint8_t red = ((Қызыл (Түс1)*(TotalSteps - Индекс)) + (Қызыл (Түс2)*Индекс)) / TotalSteps; / * 변수 жасыл 값 은 다음 과 / * / uint8_t green = ((Жасыл (Түс1) * (TotalSteps - Индекс)) + (Жасыл (Түс2) * Индекс)) / TotalSteps; / * 변수 көк 값 은 다음 과 같음 * / uint8_t blue = ((Көк (Түс1) * (TotalSteps - Индекс)) + (Көк (Түс2) * Индекс)) / TotalSteps; /*위 의 қызыл, жасыл, көк 값 으로 컬러 를 셋팅 함*/ ColorSet (Түс (қызыл, жасыл, көк)); / *애니메이션 을 보여주는 함수 */ show (); Қосу (); }

/*모든 네오 픽셀 을 끄는 구문*/

void alloff () { /*총 네오 픽셀 갯수 는 74 개* / int NPIXEL = 74; /*변수 i 가 증가 하며 모든 네오 픽셀 의 컬러 값 을 0 으로 변환*/ for (int i = 0; i <NPIXEL; i ++) {setPixelColor (i, 0, 0, 0); }}

/*Twinkle 의 컬러 1 와 시간 을 입력*/

void Twinkle (uint32_t color1, uint8_t интервал) { /*실행 되는 패턴 은 TWINKLE* / ActivePattern = TWINKLE; /*시간 은 void Twinkle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*컬러 1 를 설정*/ Түс1 = түс1; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Индекс = 0; }

/*TwinkleUpdate 를 업데이트 했을 경우*/

void 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 (Pixel, 255, 255, 255); setPixelColor (Pixel, 250, 230, 250); setPixelColor (Pixel/2, 150, 200, 255); / *애니메이션 을 보여주는 함수 */ show (); / *랜덤 하게 끄는 함수 */ setPixelColor (пиксель, 0, 0, 0); / *애니메이션 을 보여주는 함수 */ show (); Қосу (); }

/*Жұлдызша 1 값 을 입력*/

void Star (uint32_t color1) { /*실행 되는 패턴 은 STAR* / ActivePattern = STAR; /*시간 은 void Star () 안에 입력 되는 интервал 과 같음*/ Interval = Interval; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); /*컬러 1 을 설정*/ Түс1 = түс1; Индекс = 0; }

/*StarUpdate 를 업데이트 했을 경우*/

void StarUpdate () { /*인덱스 와 컬러 를 /* / setPixelColor (Индекс, Түс1); көрсету (); /*변수 i 가 0 이고 구동 갯수 보다 으면 i 를 감소 = 한칸 씩 이동 애니메이션*/ for (int i = 0; i <numPixels (); i--) {setPixelColor (i, Түс (0, 0, 0)); } / *애니메이션 을 보여주는 함수 * / Өсу (); }

/*Rainbowsparkle 의 시간 과 방향 을 입력*/

void Rainbowsparkle (uint8_t интервал, бағыт dir = АЛҒА) { /*실행 되는 패턴 은 RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 void Rainbowsparkle () 안에 입력 되는 интервал 과 같음*/ Interval = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Индекс = 0; /*방향 은 void Rainbowsparkle () 안에 입력 되는 бағыт 과 같음*/ Direction = dir; }

/*RainbowsparkleUpdate 를 업데이트 했을 경우*/

void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 보다 작 작 으면 값 값 증가 /* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 보다 작 으면 i 값 을 증가 하는데*/ if ((i + Индекс) % 2 == 0) {uint32_t c = кездейсоқ (255); setPixelColor (i, c); } басқа {setPixelColor (i, кездейсоқ (255)); }} / *애니메이션 을 보여주는 함수 * / show (); Қосу (); } /*Meteor 의 시간 과 방향 을 입력* / void Meteor (uint32_t color1) { /*실행 되는 패턴 은 METEOR* / ActivePattern = METEOR; /*시간 설정*/ Interval = Аралық; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Түс1 = түс1; Индекс = 0; }

/*MeteorUpdate 를 업데이트 했을 경우*/

void MeteorUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == Index) {setPixelColor (i, 100, random (255), 255); } басқа {setPixelColor (i, DimColor (getPixelColor (i))))); }} / *애니메이션 을 보여주는 함수 * / show (); Қосу (); }

/*Жарық 의 시간 과 방향 을 입력*/

void Light (uint32_t color1) { /*실행 되는 패턴 은 LIGHT* / ActivePattern = LIGHT; /*시간 설정*/ Interval = Аралық; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Түс1 = түс1; Индекс = 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 (); Қосу (); }

/*Blossom 의 시간 과 방향 을 입력/*/

void Blossom (uint32_t color1) { /*실행 되는 패턴 은 BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Interval = Аралық; / *총 구동 갯수 는 numPixels 갯수 에서 1 일뺀 후, *2 한 한 것과 같음 */ TotalSteps = (numPixels ()-1) *2; /*컬러 1 을 설정*/ Түс1 = түс1; Индекс = 0; }

/*BlossomUpdate 를 업데이트 했을 경우*/

voss BlossomUpdate () {for (int i = 0; i <numPixels (); i ++) {if (i == TotalSteps - Index) {setPixelColor (i, 255, кездейсоқ (255), 100); } басқа {setPixelColor (i, DimColor (getPixelColor (i))))); }} / *애니메이션 을 보여주는 함수 * / show (); Қосу (); }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/ *네오 픽셀 의 켜지 는 위치 와 색 을 지정 해주는 함수 */ void setAll (байт қызыл, байт жасыл, байт көк) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, қызыл, жасыл, көк); } көрсету (); }

/*네오 픽셀 의 디밍, 즉 밝기 를 조절 하는 함수*/

uint32_t DimColor (uint32_t түсі) {// R, G және B компоненттерін бір аз оңға жылжытыңыз uint32_t dimColor = Түс (Қызыл (түс) >> 1, Жасыл (түс) >> 1, Көк (түс) >> 1); dimColor қайтару; }

/*모든 네오 픽셀 의 칼라 를 조절*/

void ColorSet (uint32_t color) {for (int i = 0; i <numPixels (); i ++) {setPixelColor (i, color); } көрсету (); }

/*레드 값 을 불러 옴*/

uint8_t Қызыл (uint32_t түс) {қайтару (түс >> 16) & 0xFF; } /*그린 값 을 불러 옴* / uint8_t Жасыл (uint32_t түсі) {қайтару (түс >> 8) & 0xFF; } /*블루 값 을 불러 옴* / uint8_t Көк (uint32_t түсі) {қайтару түсі & 0xFF; }

/*Радуга 컬러 를 불러 옴*/

uint32_t Wheel (байт WheelPos) {WheelPos = 255 - WheelPos; if (WheelPos <85) {return Color (255 - WheelPos * 3, 0, WheelPos * 3); } if if (WheelPos <170) {WheelPos -= 85; қайтару Түсі (0, WheelPos * 3, 255 - WheelPos * 3); } басқа {WheelPos -= 170; қайтару түсі (WheelPos * 3, 255 - WheelPos * 3, 0); }}};

/*strip 을 불러 오기 위한 함수 /*사용 하는 스트립 별로 모두 지정 해주어야 함* /

бос жолақ1Complete (); бос жолақ2Complete (); void strip3Complete (); бос жолақ4Complete (); бос жолақ5Complete ();

/*네오 픽셀 의 갯수 설정*/

#define NUMPIXELS 74 /*사용 하는 버튼 의 갯수 갯수* / #define B_NUM 5 /*Импорт жолағы1 ~ 5 까지, 는 74 74 개 연결 핀 은 жолақ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 strip4 (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 buttonState [B_NUM]; /*2 번핀 부터 6 번핀 까지 상태 는 순서 대로 LOW 임*/ int lastButtonState [B_NUM] = {LOW, LOW, LOW, LOW, LOW}; /*2 번핀 부터 6 번핀 까지 버튼 카운터 를 초기화/*/ int buttonCounter [B_NUM] = {0, 0, 0, 0, 0}; /*2 번핀 부터 6 번핀 까지 최대 버튼 카운터 는 5 임*/ int түймесі CounterMax = 5; /*모든 버튼 핀 을 읽 일수 있도록 변수/*/ int оқу [B_NUM]; белгісіз ұзақ lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 을 읽는 시간 간격 은 delay50 과 같음*/ unsigned long debounceDelay = 50;

жарамсыз орнату () {

/*복잡 하게 저항 연결 이 필요 없도록 인풋 풀업 방식 설정 G: GND - 5V (Pin нөміріне қосылу)*/ 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 ();

// жолақ1. ТеатрЧазасы (жолақ1. Түсі (255, 0, 255), жолағы1. Түсі (255, 50, 0), 20, АЛҒА);

}

/*버튼 카운터 변수 값 은 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 (); strip2. Update (); strip3. Update (); strip4. Update (); strip5. Update ();

///// SWITCH_2 /////////////////////////////////////////// /// /////////////////////////////////////////////////////////////////////////////////////////////////// //

/*버튼 배열 의 0 번째 즉. 2 번핀 에 연결된 버튼 을 활용 하여 애니메이션 이 구동 되도록 하는 스위치 케이스 구문*/ switch (buttonCounter [0]) {

/*첫번째 버튼 을 활동 시키면 구동 되는 애니메이션*/

0 жағдай: strip1. ActivePattern = BLOSSOM; /*해당 애니메이션 의 시간 을 설정*/ strip1. Аралық = 20; /*구동 되는 네오 픽셀 의 갯수 를 설정*/ strip1. TotalSteps = strip1.numPixels (); үзіліс; /*두번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ 1 -жағдай: strip1. ActivePattern = RAINBOWSPARKLE; жолақ 1. Аралық = 50; strip1. TotalSteps = strip1.numPixels (); үзіліс; /*세번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ 2 -жағдай: strip1. ActivePattern = SCANNER; жолақ 1. Аралық = 10; strip1. TotalSteps = (strip1.numPixels () - 1) * 2; үзіліс; /*네번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ 3 -жағдай: strip1. ActivePattern = TWINKLE; жолақ1. Аралық = 1; strip1. TotalSteps = strip1.numPixels (); үзіліс; /*다섯 번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ 4 -жағдай: strip1. ActivePattern = METEOR; жолақ 1. Аралық = 10; strip1. TotalSteps = strip1.numPixels (); үзіліс; } Serial.print (buttonCounter [0]); Serial.print («,»); Serial.println (buttonCounter [1]);

///// SWITCH_3 /////////////////////////////////////////// /// /////////////////////////////////////////////////////////////////////////////////////////////////// //

қосқыш (buttonCounter [1]) {0 жағдай: strip2. ActivePattern = STAR; жолақ 2. Аралық = 50; strip2. TotalSteps = strip2.numPixels (); үзіліс; 1 -жағдай: strip2. ActivePattern = RAINBOWSPARKLE; жолақ 2. Аралық = 100; strip2. TotalSteps = strip2.numPixels (); үзіліс; 2 -жағдай: strip2. ActivePattern = SCANNER; жолақ 2. Аралық = 20; strip2. TotalSteps = (strip2.numPixels () - 1) * 2; үзіліс; 3 -жағдай: strip2. ActivePattern = TWINKLE; жолақ 2. Аралық = 5; strip2. TotalSteps = strip2.numPixels (); үзіліс; 4 -жағдай: strip2. ActivePattern = METEOR; жолақ 2. Аралық = 40; strip2. TotalSteps = strip2.numPixels (); үзіліс; } Serial.print (buttonCounter [0]); Serial.print («,»); Serial.println (buttonCounter [1]);

///// SWITCH_4 /////////////////////////////////////////// /// /////////////////////////////////////////////////////////////////////////////////////////////////// //

қосқыш (buttonCounter [2]) {0 жағдай: strip3. ActivePattern = STAR; жолақ 3. Аралық = 50; strip3. TotalSteps = strip3.numPixels (); үзіліс; 1 -жағдай: strip3. ActivePattern = RAINBOWSPARKLE; жолақ 3. Аралық = 100; strip3. TotalSteps = strip3.numPixels (); үзіліс; 2 -жағдай: strip3. ActivePattern = SCANNER; жолақ 3. Аралық = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; үзіліс; 3 -жағдай: strip3. ActivePattern = TWINKLE; жолақ 3. Аралық = 5; strip3. TotalSteps = strip3.numPixels (); үзіліс; 4 -жағдай: strip3. ActivePattern = METEOR; жолақ 3. Аралық = 25; strip3. TotalSteps = strip3.numPixels (); үзіліс; } Serial.print (buttonCounter [0]); Serial.print («,»); Serial.println (buttonCounter [1]);

///// SWITCH_5 /////////////////////////////////////////// /// /////////////////////////////////////////////////////////////////////////////////////////////////// //

қосқыш (buttonCounter [3]) {0 жағдай: strip4. ActivePattern = STAR; жолақ 4. Аралық = 50; strip4. TotalSteps = strip4.numPixels (); үзіліс; 1 -жағдай: strip4. ActivePattern = RAINBOWSPARKLE; жолақ 4. интервал = 100; strip4. TotalSteps = strip4.numPixels (); үзіліс; 2 -жағдай: strip4. ActivePattern = SCANNER; жолақ 4. Аралық = 20; strip4. TotalSteps = (strip4.numPixels () - 1) * 2; үзіліс; 3 -жағдай: strip4. ActivePattern = TWINKLE; жолақ 4. Аралық = 5; strip4. TotalSteps = strip4.numPixels (); үзіліс; 4 -жағдай: strip4. ActivePattern = METEOR; жолақ 4. Аралық = 25; strip4. TotalSteps = strip4.numPixels (); үзіліс; } Serial.print (buttonCounter [0]); Serial.print («,»); Serial.println (buttonCounter [1]);

///// SWITCH_6 /////////////////////////////////////////// /// /////////////////////////////////////////////////////////////////////////////////////////////////// //

қосқыш (buttonCounter [4]) {0 жағдай: strip5. ActivePattern = STAR; жолақ5. Аралық = 50; strip5. TotalSteps = strip5.numPixels (); үзіліс; 1 -жағдай: strip5. ActivePattern = RAINBOWSPARKLE; жолақ5. Аралық = 100; strip5. TotalSteps = strip5.numPixels (); үзіліс; 2 -жағдай: strip5. ActivePattern = SCANNER; жолақ5. Аралық = 20; strip5. TotalSteps = (strip5.numPixels () - 1) * 2; үзіліс; 3 -жағдай: strip5. ActivePattern = TWINKLE; жолақ5. Аралық = 5; strip5. TotalSteps = strip5.numPixels (); үзіліс; 4 -жағдай: strip5. ActivePattern = METEOR; жолақ5. Аралық = 25; strip5. TotalSteps = strip5.numPixels (); үзіліс; } Serial.print (buttonCounter [0]); Serial.print («,»); Serial.println (buttonCounter [1]); }

// strip1 Қайта шақыруды аяқтау

void strip1Complete () {strip1. Color1 = strip1. Wheel (random (255)); жолақ1. Түс2 = жолақ1. Дөңгелек (кездейсоқ (255)); жолақ1. Индекс = 0; }

// strip2 Аяқтауды қайта шақыру

void strip2Complete () {strip2. Color1 = strip2. Wheel (random (255)); жолақ2. Түс2 = жолақ2. Дөңгелек (кездейсоқ (255)); strip2. Index = 0; }

// strip3 Аяқтауды қайта шақыру

void strip3Complete () {strip3. Color1 = strip3. Wheel (random (255)); жолақ3. Түс2 = жолақ 3. Дөңгелек (кездейсоқ (255)); strip3. Index = 0; }

// strip4 Қайта шақыруды аяқтау

void strip4Complete () {strip4. Color1 = strip4. Wheel (random (255)); жолақ4. Түс2 = жолақ4. Дөңгелек (кездейсоқ (255)); strip4. Index = 0; }

// strip5 Қайта шақыруды аяқтау

void strip5Complete () {strip5. Color1 = strip5. Wheel (random (255)); жолақ5. Түс2 = жолақ5. Дөңгелек (кездейсоқ (255)); жолақ5. Индекс = 0; }

6 -қадам: Нәтиже және фильм түсіру

Image
Image
Нәтиже және фильм түсіру
Нәтиже және фильм түсіру

Біздің жобаға қызығушылық танытқаныңыз үшін рахмет, бірақ бұл жеткіліксіз.

Ұсынылған: