Агуулгын хүснэгт:

Гэрлийг татах - Neopixel & Pull Up Switch ашиглан гэрэл модуль: 6 алхам (зурагтай)
Гэрлийг татах - Neopixel & Pull Up Switch ашиглан гэрэл модуль: 6 алхам (зурагтай)

Видео: Гэрлийг татах - Neopixel & Pull Up Switch ашиглан гэрэл модуль: 6 алхам (зурагтай)

Видео: Гэрлийг татах - Neopixel & Pull Up Switch ашиглан гэрэл модуль: 6 алхам (зурагтай)
Видео: MKS Gen L — Марлин 1 1 9 (configuration.h) 2024, Долдугаар сарын
Anonim
Image
Image
Neopixel & Pull Up Switch ашиглан гэрэл татах - Гэрлийн модуль
Neopixel & Pull Up Switch ашиглан гэрэл татах - Гэрлийн модуль

Гэрлийн модулийн онцлог шинж чанарууд

  • Ардуино Уно
  • Тоног төхөөрөмж, хавхлагыг интернетээс худалдаж авсан
  • Мэдээлэл зүй, бүтээгдэхүүний дизайны сургуулиас зээл авсан Neopixel & Цахилгаан хангамж
  • Цахилгаан хангамжаар хянагддаг гэрлийн модуль
  • Бүх функцийг хэрэглэгчийн харилцан үйлчлэлээр хянадаг
  • Неопиксел зурвасын хөдөлгөөнт төрлүүд: Борооны төрөл, Шүршүүрийн төрөл, Оддын аянгын төрөл, Поп төрөл, Тогтмол бус төрөл
  • Татах унтраалга нь Neopixel туузанд холбогдсон бөгөөд Neopixel туузыг татах үед хөдөлгөөнт дүрс өөрчлөгддөг

Алхам 1: Эхлэхээсээ өмнө

Бид эхлэхээс өмнө
Бид эхлэхээс өмнө

Сайн байцгаана уу, бүтээгчид ээ.

Бид гэрлийн анимацаар дамжуулан борооны сэтгэл хөдлөлийг мэдэрч чадвал юу болох талаар интерактив дизайны төслийг эхлүүлсэн. Гэрлийг шууд татдаг интерфейсээр дамжуулан хэрэглэгчийн мэдрэмжийг дээд зэргээр нэмэгдүүлэх болно гэж би бодсон.

Ажилдаа орохгүй байх

Алхам 2: Шаардлагатай эд анги

Шаардлагатай эд ангиуд
Шаардлагатай эд ангиуд
Шаардлагатай эд ангиуд
Шаардлагатай эд ангиуд
Шаардлагатай эд ангиуд
Шаардлагатай эд ангиуд

Нэг гэрлийн модульд суурилсан

*** Манай хэлтсийн дэмжлэгтэйгээр неопиксел, цахилгаан хангамжийг ашигласан.

Электроник:

  1. Ардуино Уно
  2. 3 өнгийн утас (Хар, Улаан, ямар ч өнгө)
  3. 3 зүү холбогч (Худалдан авах линк)
  4. Шилжүүлэгч 1 -ийг татаж ав (худалдан авах линк)
  5. агшилтын хоолой
  6. WS2812b нэмэлт LED тууз нь 74 LED (Neopixel зурвас)*2
  7. Цахилгаан хангамж (5V 350A) 1

*** Arduino, Pull Switch, NeoPixels -т 50 багц хэрэгтэй. ***

Техник хангамж:

  1. Нийлэг баар 2т (10мм*1000мм) 1
  2. Нийлэг хавтан 5т (60мм*60мм) 1
  3. Foemax 10t (1200мм*1800мм) 1
  4. Хар шүршигч
  5. Кабелийн зангиа
  6. Мөр
  7. Хатуу самбар
  8. Сүлжээний самбар

Алхам 3: Холболт ба техник хангамжийг бий болгох

Холболт ба техник хангамжийг бий болгох
Холболт ба техник хангамжийг бий болгох
Холболт ба техник хангамжийг бий болгох
Холболт ба техник хангамжийг бий болгох
Холболт ба техник хангамжийг бий болгох
Холболт ба техник хангамжийг бий болгох

Нэгдүгээрт, нэг гэрэлтүүлгийн модулийг хийхийн тулд бидэнд нийлэг хайчлах хэрэгтэй.

  • Гэрлийн анимацийг мэдрэхийн тулд 1M талбай бүхий 2 мм зузаантай нийлэг бааранд 74 LED -ийг неопиксел тууз хэлбэрээр бэхлэх замаар гэрэлтүүлгийн модулийг боловсруулна уу. Бид ердийн шугаман ба спираль гэсэн хоёр төрлийн гэрэлтүүлгийн модулийг үйлдвэрлэсэн.
  • Шугаман хэлбэрийн хувьд одоо байгаа неопиксел туузыг барьж, бэхлэх боломжтой боловч спираль хэлбэрийг гараар ажиллуулах шаардлагатай. 74 LED тус бүрийг хэсэг болгон хувааж, спираль нийлэгт наалдуулж, хар тугалгаар холбоно.

Неопикселийн туузыг нийлэг дээр бэхлээд, халуунд тархахгүйн тулд тууз бүрийг бэхлээрэй, эсвэл нимгэн загасны шугамаар уя. Шугаман хэлбэрийн хувьд модулийн төгсгөлд татах шаардлагатай бөмбөрцөгийг гоо зүйн дүр төрхийг бий болгохын тулд суурилуулсан бөгөөд бид ширээний теннисний бөмбөгийг хар шүршигчээр хийж дуусгасан. Дараа нь тэд ширээний теннисний бөмбөгийг жижиг нүх гаргаж, олсоор холбосон. Дараагийн хамгийн чухал хэсэг болох унтраалга ба неопикселийг зурагт үзүүлсэн шиг холбосон болно. Дараа нь унтраалга нь таазны тавиур дээр бэхлэгддэг.

Спираль хэлбэрийн хувьд спираль модулийг шууд татах нь даралтын дор акрилийг эвдэх эрсдэлтэй тул татах хэсэг (оролт) ба модулийг (гаралт) тусгаарлав. Гэрлийн уналтыг нэмэгдүүлэхийн тулд модулийг таазанд босоо байдлаар байрлуулж, шугаман модулийг агаарт, спиральийг шууд таазанд бэхлэв. Мөн бид ширээний теннисний бөмбөг, унтраалгыг загас барих шугамтай холбосон бөгөөд ингэснээр ажиллуулах боломжтой болно.

Дээрх зурагт үзүүлсэн шиг нийлэг зүслэгийг тавиур руу шилжүүлэхийн тулд бэхлэх шаардлагатай. 6см хэмжээтэй дөрвөлжин хэлбэртэй унтраалга нь ойролцоогоор 5мм зузаантай бөгөөд унтраалга нь төвд байх бөгөөд хоёр талын нүхээр кабелийн бэхэлгээ хийж, унтраалгыг найдвартай бэхлэнэ. Төвийн доод хэсэгт байрлах дугуй нүх нь унтраалгын таталтыг ил гаргадаг бөгөөд үүний доор гурван утастай кабелийг сугалж модулийн кабелийн терминал руу холбодог. Үүнтэй адилаар дөрвөн булан дахь нүхээр дамжуулан тавиур ба акрилийг кабелийн бэхэлгээгээр бэхлэв. Дээр тайлбарласны дагуу шугаман модулийг шууд татах хэсэгт холбосон боловч спираль модуль нь зүү болон унтраалгыг тусад нь холбодог.

Алхам 4: 50 гэрлийн модулийг ашиглан үүсгэх

50 гэрлийн модулийг ашиглан бүтээх
50 гэрлийн модулийг ашиглан бүтээх
50 гэрлийн модулийг ашиглан бүтээх
50 гэрлийн модулийг ашиглан бүтээх
50 гэрлийн модулийг ашиглан бүтээх
50 гэрлийн модулийг ашиглан бүтээх

Бид нийт 50 модулийг ашиглан илүү гэрэл гэгээтэй байхын тулд хэрэглэгчийн туршлагыг бий болгосон

Бид 1, 800мм өргөн, 1, 200мм хэмжээтэй тавиуртай байсан бөгөөд унтраалга, модуль бүрийг холбосон бөгөөд ингэснээр та бидний төлөвлөж байсан бороо, борооны орчныг мэдрэх боломжтой болсон бөгөөд модуль бүрийг дангаар нь байрлуулж, олон ажлыг гүйцэтгэх боломжтой болсон..

Загварын зургаас хамааран foemax -д дугуй нүх өрөмдөж, угсралтын ажлыг нууж, LED модулийн холбогдсон хэсэг харагдахгүй байгаа эсэхийг шалгаарай. Нийлэг хавтангаас LED модулийн холболт хүртэлх зай нь 1 см орчим байдаг тул 1 см зузаантай foemax ашигласан.

Металл дөрвөлжин хүрээ нь нийт жин, тэнцвэрийг хадгалахын зэрэгцээ угсралтыг шураг, кабелийн холболтоор бэхлэхэд ашигладаг байв. Хэрэв ил гарсан холболтын урт нь үйлдвэрлэгч оролдохоос илүү байвал зузаан хавтан нь үр ашиггүй бөгөөд бусад бүтцийг ашиглахыг зөвлөж байна.

Нүдний түвшинд хэрэглэгчийн туршлагыг хөнгөвчлөхийн тулд дууссан суулгацыг ойролцоогоор 2 м өндөрт тулгуур дээр байрлуулсан боловч анхаарах зүйл бол суулгагдсан LED модулийг унтраалгаар суулгах нь маш төвөгтэй тул бүх холболтыг хасах хэрэгтэй. Бид шатаар өгсөж модулийг тулгуур дээр суурилуулсан суулгацтай холбосон.

Энэхүү бүх үйл явцын хамгийн чухал хэсэг нь туршлагыг аюулгүй орчинд хийх боломжийг бүрдүүлэхийн тулд уг ажлыг найдвартай, бүрэн хамгаалалттай хийх явдал юм

Нийт 10 ардуино, 50 LED модулийг ашигласан бөгөөд илүү үр ашигтай, тасралтгүй олон ажлыг гүйцэтгэхийн тулд нэг ардуино тутамд таван LED модулийг холбосон байна. Дэлгэрэнгүй мэдээллийг хавсаргасан төлөвлөгөөг үзнэ үү. Дизайн схемийн дагуу бүрэн унтраалгыг ашиглан неопикселийн олон талт кодыг дараагийн алхамд нарийвчлан авч үзэх болно.

Алхам 5: Arduino кодлох ба утас холбох

Arduino кодчилол ба утас
Arduino кодчилол ба утас
Arduino кодлох ба утас холбох
Arduino кодлох ба утас холбох

Цахилгаан утас

  • 50 -р модулийг 4 -р шатны схемийн дагуу холбосон.
  • Модуль бүрийг 50 модулийн 10 багц болгон хувааж, олон ажлыг гүйцэтгэх, тодорхой холболт хийх боломжтой болсон.
  • Дээрх 1 -р зурагт үзүүлсэн шиг таван модулийг нэг ардуино руу холбосон бөгөөд 5V неопикселийн тээглүүрийг нэг дор холбож цахилгаан тэжээлийг холбосон байна.
  • Неопиксел болон унтраалгуудын GND -ийг мөн хооронд нь уясан бөгөөд ойлголтыг хөнгөвчлөх үүднээс унтраалгуудыг 2, 3, 4, 5, 6, 6 неопикселийг 9, 10, 11, 12, 13 тээглүүрт залгасан байна..
  • Шилжүүлэгч ба неопикселийг 2-9, 3-10, 4-11, 5-12, 6-13 аргаар холбосон.
  • Шугамуудын холболт нь нарийн төвөгтэй, богино холболтоос болж гал гарах эрсдэлтэй тул сул хэсгүүд нь тасрахгүйн тулд агшилтын хоолойг халааж байсныг тэмдэглэх нь зүйтэй.

Товчлууртай олон талт Neopixel кодчилол

5 гэрэл анимац (Борооны төрөл, Шүршүүрийн төрөл, Spark аянгын төрөл, Поп төрөл, Тогтмол бус хэлбэр)

#оруулах

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

enum загвар {NONE, RAINBOW_CYCLE, THEATER_CHASE, COLOR_WIPE, SCANNER, FADE, TWINKLE, STAR, RAINBOWSPARKLE, METEOR, LIGHT, BLOSSOM}; /*네오 픽셀 을 방향 을 설정 함*/ enum чиглэл {FORWARD, REVERSE};

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

class NeoPatterns: public Adafruit_NeoPixel { /* 패턴 을 추가 하고 업데이트 위 함수 함수* / public: pattern ActivePattern; /*클레스 함수 에 패턴 의 방향 을 입력*/ чиглэл Чиглэл;

/*변수 Интервал 을 추가*/ гарын үсэг зураагүй урт интервал; /*변수 lastUpdate 를 추가*/ unsigned long lastUpdate; /*변수 Өнгө1, Өнгө2 를 추가*/ uint32_t Өнгө1, Өнгө2; /*변수 TotalSteps 를 추가*/ uint16_t TotalSteps; /*변수 Индекс 를 추가*/ uint16_t Индекс;

/*패턴 을 완료 했을 시 다시 불러오는 함수*/ void (*OnComplete) (); /*네오 패턴 에서 네오 픽샐 의 갯수, 핀 번호, 타입, 콜백 을 불러오는 함수*/ NeoPatterns (uint16_t пиксел, uint8_t зүү, uint8_t төрөл, void (*callback) ()): Adafruit_NeoPixel (пиксел, зүү, төрөл) { OnComplete = буцааж залгах; }

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

void Update () { /*패턴 의 시간 설정. 멀티 태스킹 을 구현 하는 구문*/ if ((millis () - lastUpdate)> Interval) {lastUpdate = millis (); /*ActivePattern 의 스위치 구문*/ switch (ActivePattern) {/*case RAINBOW_CYCLE 에서는 RainbowCycleUpdate 를 실행 하라*/ case RAINBOW_CYCLE: RainbowCycleUpdate (); /*тохиолдол RAINBOW_CYCLE 에서 나와라*/ завсарлага;

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

case THEATER_CHASE: TheaterChaseUpdate (); /*case THEATER_CHASE 에서 나와라*/ завсарлага;

/*кейс COLOR_WIPE 에서는 ColorWipeUpdate 를 실행 하라*/

тохиолдолд COLOR_WIPE: ColorWipeUpdate (); /*кейс COLOR_WIPE 에서 나와라*/ завсарлага; /*case SCANNER 에서는 ScannerUpdate 를 실행 하라*/ case SCANNER: ScannerUpdate (); /*кейс сканнер 에서 나와라*/ завсарлага;

/*кейс FADE 에서는 FadeUpdate 를 실행 하라*/

тохиолдолд FADE: FadeUpdate (); /*кейс FADE 에서 나와라*/ завсарлага;

/*кейс TWINKLE 에서는 TwinkleUpdate 를 실행 하라*/

тохиолдолд TWINKLE: TwinkleUpdate (); /*кейс TWINKLE 에서 나와라*/ завсарлага;

/*кейс STAR 에서는 StarUpdate 를 실행 하라*/

тохиолдол STAR: StarUpdate (); /*тохиолдол STAR 에서 나와라*/ завсарлага;

/*кейс RAINBOWSPARKLE 에서는 RainbowsparkleUpdate 를 실행 하라*/

тохиолдол RAINBOWSPARKLE: RainbowsparkleUpdate (); /*case RAINBOWSPARKLE 에서 나와라*/ завсарлага; /*case METEOR 에서는 MeteorUpdate 를 실행 하라*/ case METEOR: MeteorUpdate (); /*case METEOR 에서 나와라*/ завсарлага;

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

case LIGHT: LightUpdate (); /*case LIGHT 에서 나와라*/ завсарлага;

/*кейс BLOSSOM 에서는 BlossomUpdate 를 실행 하라*/

тохиолдол BLOSSOM: BlossomUpdate (); /*тохиолдолд BLOSSOM 에서 나와라*/ завсарлага; }}}

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

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

void Increment () { /*만약 정방향 이면 인덱스 를 시켜라* / if (Direction == FORWARD) {Индекс ++; /*만약 인덱스 가 전체 네오 픽셀 구동 갯수 와 같 거나 많다 면 0 으로 초기화 시켜라*/ if (Индекс> = Нийт алхам) {Индекс = 0; /*패턴 을 완료 시키는 함수*/ if (OnComplete! = NULL) {OnComplete (); }}}

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

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

void Урвуу () { /*애니메이션 함수 에 Урвуу 를 썼을 시, 만약 방향 이 정방향 이면* / if (Чиглэл == УРААГД) { /*방향 은 그 와 반대 이며 전체 구동 갯수 에서 1 일 빼라* / Чиглэл = УВАХ; Индекс = Нийт алхам - 1; } /*그 외의 방향 이 정방향 이면 인덱스 를 0 으로 설정 해라* / else {Direction = FORWARD; Индекс = 0; }}

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

*Солонго тойрог 의 시간 과 방향 을 입력*/

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

/*Солонго тойрог 를 업데이트 했을 경우*/

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

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

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

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

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

/*Өнгө арчих 의 컬러 와 시간 방향 을 입력*/

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

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

void ColorWipeUpdate () { /*index 를 컬러 1 로 변환 시켜라* / setPixelColor (Индекс, Өнгө1); / *애니메이션 을 보여주는 함수 */ шоу (); Нэмэх (); }

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

void Scanner (uint32_t color1, uint8_t интервал) { /*실행 되는 패턴 은 SCANNER* / ActivePattern = SCANNER; /*시간 은 void Scanner () 안에 입력 되는 интервал 과 같음*/ Интервал = интервал; /*구동 갯수 는 총 갯수 에서 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 = FORWARD) { /*실행 되는 패턴 은 FADE* / ActivePattern = FADE; /*시간 은 void Fade () 안에 입력 되는 интервал 과 같음*/ Интервал = интервал; /*구동 갯수 는 스텝 값임*/ TotalSteps = алхам; /*컬러 1, 2 를 설정*/ Өнгө1 = өнгө1; Өнгө2 = өнгө2; /*인덱스 는 0 으로 설정 함*/ Индекс = 0; /*방향 은 void Fade () 안에 입력 되는 dir = FORWARD 과 같음*/ Чиглэл = 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 (Өнгө (улаан, ногоон, цэнхэр)); / *애니메이션 을 보여주는 함수 */ шоу (); Нэмэх (); }

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

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

/*Гялалзах 의 컬러 1 와 시간 을 입력*/

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

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

void TwinkleUpdate () { /*모든 네오 픽셀 의 컬러 를 0 으로 셋팅* / setAll (0, 0, 0); /*변수 Pixel 은 random 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); / *애니메이션 을 보여주는 함수 */ шоу (); / *랜덤 하게 끄는 함수 */ setPixelColor (Пиксел, 0, 0, 0); / *애니메이션 을 보여주는 함수 */ шоу (); Нэмэх (); }

/*Од 의 컬러 1 값 을 입력*/

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

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

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

/*Солонго гялалзана 의 시간 과 방향 을 입력*/

хоосон Rainbowsparkle (uint8_t интервал, чиглэл dir = FORWARD) { /*실행 되는 패턴 은 RAINBOWSPARKLE* / ActivePattern = RAINBOWSPARKLE; /*시간 은 void Rainbowsparkle () 안에 입력 되는 интервал 과 같음*/ Интервал = интервал; /*총 구동 갯수 는 numPixels 갯수 임*/ TotalSteps = numPixels (); Индекс = 0; /*방향 은 хоосон Rainbowsparkle () 안에 입력 되는 чиглэл 과 같음*/ Чиглэл = dir; }

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

void RainbowsparkleUpdate () { /*변수 i 가 0 이고 구동 갯수 보다 작 으면 i 값 을 증가 하는데* /for (int i = 0; i <numPixels (); i ++) { /*변수 i 가 0 이고 구동 갯수 보다 작 으면 i 값 을 증가 하는데*/ if ((i + Index) % 2 == 0) {uint32_t c = санамсаргүй (255); setPixelColor (i, c); } өөр {setPixelColor (i, санамсаргүй (255)); }} / *애니메이션 을 보여주는 함수 * / show (); Нэмэх (); } /*Meteor 의 시간 과 방향 을 입력* / void Meteor (uint32_t color1) { /*실행 되는 패턴 은 METEOR* / ActivePattern = METEOR; /*시간 설정*/ Интервал = Интервал; / *총 구동 갯수 는 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; /*시간 설정*/ Интервал = Интервал; / *총 구동 갯수 는 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); } өөр {setPixelColor (i, DimColor (getPixelColor (i)))); }} / *애니메이션 을 보여주는 함수 * / show (); Нэмэх (); }

/*Цэцэглэх 의 시간 과 방향 을 입력*/

void Blossom (uint32_t color1) { /*실행 되는 패턴 은 BLOSSOM* / ActivePattern = BLOSSOM; /*시간 설정*/ Интервал = Интервал; / *총 구동 갯수 는 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, random (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) {буцаах өнгө (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); }}};

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

void strip1Complete (); void strip2Complete (); void strip3Complete (); void strip4Complete (); void strip5Complete ();

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

#define NUMPIXELS 74 /*사용 하는 버튼 의 갯수 설정* / #define B_NUM 5 /*Импортын зурвас1 ~ 5 까지, 갯수 는 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, & strip5Бүрэн); /*배열 을 사용한 연결 버튼 핀 설정*/ 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 buttonCounterMax = 5; /*모든 버튼 핀 을 읽 일수 있도록 변수/*/ int унших [B_NUM]; гарын үсэг зураагүй long lastDebounceTime [B_NUM] = {0, 0, 0, 0, 0}; /*모든 버튼 핀 을 읽는 시간 간격 은 delay50 과 같음*/ unsigned long debounceDelay = 50;

хүчингүй тохиргоо () {

/*복잡 하게 저항 연결 이 필요 없도록 인풋 풀업 방식 의 설정: GND - 5V (Pin дугаар руу холбогдох)*/ for (int i = 0; i <B_NUM; i ++) {pinMode (buttonPin , INPUT_PULLUP); } Serial.begin (9600); /*스트립 1 ~ 5 를 셋팅*/ strip1.begin (); strip2.begin (); зурвас3.begin (); strip4.begin (); зурвас 5. эхлэл ();

// зурвас1. ТеатрChase(зурвас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 (); зурвас 2. Шинэчлэх (); зурвас 3. Шинэчлэх (); зурвас 4. Шинэчлэх (); зурвас 5. Шинэчлэх ();

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

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

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

тохиолдол 0: зурвас1. ActivePattern = BLOSSOM; /*해당 애니메이션 의 시간 을 설정*/ зурвас 1. Интервал = 20; /*구동 되는 네오 픽셀 의 갯수 를 설정*/ strip1. TotalSteps = strip1.numPixels (); завсарлага; /*두번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ кейс 1: зурвас1. ActivePattern = RAINBOWSPARKLE; тууз 1. интервал = 50; strip1. TotalSteps = strip1.numPixels (); завсарлага; /*세번째 버튼 을 활동 시키면 구동 되는 애니메이션*/ кейс 2: strip1. ActivePattern = SCANNER; тууз 1. интервал = 10; strip1. TotalSteps = (зурвас1.нумПиксел () - 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: зурвас3. ActivePattern = RAINBOWSPARKLE; зурвас 3. интервал = 100; strip3. TotalSteps = strip3.numPixels (); завсарлага; тохиолдол 2: strip3. ActivePattern = SCANNER; зурвас 3. Интервал = 20; strip3. TotalSteps = (strip3.numPixels () - 1) * 2; завсарлага; тохиолдол 3: зурвас3. 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: зурвас4. 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: зурвас5. ActivePattern = RAINBOWSPARKLE; зурвас 5. интервал = 100; strip5. TotalSteps = strip5.numPixels (); завсарлага; тохиолдол 2: зурвас5. ActivePattern = SCANNER; зурвас 5. интервал = 20; strip5. TotalSteps = (зурвас5.нумПиксел () - 1) * 2; завсарлага; тохиолдол 3: зурвас 5. ActivePattern = TWINKLE; зурвас 5. интервал = 5; strip5. TotalSteps = strip5.numPixels (); завсарлага; тохиолдол 4: зурвас 5. 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)); зурвас 2. Индекс = 0; }

// strip3 дуусгах дуудлага хийх

void strip3Complete () {strip3. Color1 = strip3. Wheel (random (255)); зурвас 3. Өнгө2 = тууз 3. Дугуй (санамсаргүй (255)); зурвас 3. Индекс = 0; }

// strip4 дуусгах дуудлага хийх

void strip4Complete () {strip4. Color1 = strip4. Wheel (random (255)); зурвас 4. Өнгө2 = тууз 4. Дугуй (санамсаргүй (255)); зурвас 4. Индекс = 0; }

// strip5 Дахин дуудлага хийх

void strip5Complete () {strip5. Color1 = strip5. Wheel (random (255)); зурвас 5. Өнгө2 = тууз 5. Дугуй (санамсаргүй (255)); зурвас 5. Индекс = 0; }

Алхам 6: Үр дүн ба кино хийх

Image
Image
Үр дүн ба кино хийх
Үр дүн ба кино хийх

Энэ нь хангалттай биш ч гэсэн манай төслийг сонирхож байгаад баярлалаа.

Зөвлөмж болгож буй: