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

Цэгийн гэрэл хэв маяг: 6 алхам
Цэгийн гэрэл хэв маяг: 6 алхам

Видео: Цэгийн гэрэл хэв маяг: 6 алхам

Видео: Цэгийн гэрэл хэв маяг: 6 алхам
Видео: 🎶 ДИМАШ "ОПЕРА 2". История выступления и анализ успеха | Dimash "Opera 2" 2024, Арваннэгдүгээр
Anonim
Image
Image
Цэгийн гэрэл хэв маяг
Цэгийн гэрэл хэв маяг
Цэгийн гэрэл хэв маяг
Цэгийн гэрэл хэв маяг

Би "Гэрлийг өөрийн гараар удирдаж, өөрийн хүслээ илэрхийлж чадах уу?" Гэсэн санаагаар эхэлсэн.

Энэ бол 'Dot Light Pattern' бөгөөд та өөрийн өнгийг өөрийн гараар бүтээх, эдгээр өнгөөр өөрийн загварыг зохиох, янз бүрийн хөдөлгөөнт эффектийг мэдрэх боломжийг олгодог.

Алхам 1: Материал

Материал
Материал
Материал
Материал
Материал
Материал
Материал
Материал
  1. Arduino UNO x 13
  2. WS2901 эсвэл WS2811 пикселийн LED зурвас (130 LED)
  3. Товчлуур x 1
  4. Шилжүүлэгч х 65
  5. Чадвар хэмжигч x 65
  6. Солонго кабель
  7. SMPS -ийн хүч чадал хангалттай
  8. Дамжуулагч кабель
  9. Нийлэг тунгалаг дугуй баар (30мм диаметртэй)
  10. Хар өнгийн нийлэг хавтан (5T) (500мм*790мм) х 2, (500мм*35мм) х 2, (790мм*35мм) х 2

Алхам 2: Барилгын төлөвлөгөө

Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө
Барилгын төлөвлөгөө

Алхам 3: Тоног төхөөрөмж: хэлхээний дизайн

Техник хангамж: хэлхээний дизайн
Техник хангамж: хэлхээний дизайн
Техник хангамж: хэлхээний дизайн
Техник хангамж: хэлхээний дизайн
Техник хангамж: хэлхээний дизайн
Техник хангамж: хэлхээний дизайн
  1. Нийлэг хавтанг дээрх бүтэц шиг хайчилж ав. (2 -р алхамыг үзнэ үү)

  2. Потенциометрийн нүхний дээд ба доод хэсэгт нэг ширхэг нео пикселийн LED байрлуулсан бөгөөд нийт 65 хос нео пикселийн LED холбосон байна.
  3. Хос нео пикселийн LED-ийг хооронд нь холбож нэг Arduino зүү үүсгэдэг.
  4. 65 потенциал хэмжигчийг нүхний нүхэнд суулгана. (Нео пикселжүүлсэн гадаргуугийн эсрэг талд байрлуулна уу.)
  5. Шилжүүлэгчийн нүхэнд тааруулахын тулд 65 товчлуурыг холбоно уу.
  6. Нийт арван гурван Ардуино НҮБ -ыг арван гурван бүс бүрт холбож, таван ширхэг 65 ширхэг тоног төхөөрөмжийг нэг Arduino UNO -той холбох боломжтой.
  7. Хавсаргасан зурган дээр харуулсны дагуу потенциал хэмжигч, унтраалга, нео пикселийн LED-ийг Arduino UNO-ийн голтой утсаар холбоно уу. (2 -р алхамыг үзнэ үү)
  8. Хэд хэдэн Arduino UNO -ийн GND ба 5V тээглүүрийг кабелийн утас руу цуглуулж, дараа нь гадаад тэжээлд холбодог. (2 -р алхамыг үзнэ үү)
  9. Тоосыг агаарын даралтаар зайлуулна.

Алхам 4: Тоног төхөөрөмж: нийлэг хайчлах

Техник хангамж: нийлэг хайчлах
Техник хангамж: нийлэг хайчлах
Техник хангамж: нийлэг хайчлах
Техник хангамж: нийлэг хайчлах
Техник хангамж: нийлэг хайчлах
Техник хангамж: нийлэг хайчлах
  1. Нийлэг саваа 50 мм урттай хайчилж ав.

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

Алхам 5: Arduino програмчлалын код

www.kasperkamperman.com/blog/arduino/ardui…

'hsb to rgb' код 를 참고 한 사이트

#оруулах

// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함

// 네오 픽셀 연결 핀 번호 선언

#PIN1 тодорхойлох 2 #PIN2 тодорхойлох 3 #PIN3 тодорхойлох 4 #PIN4 тодорхойлох 5 5 #PIN5 тодорхойлох 6

NUMPIXELS 2 -ийг #тодорхойлох // 픽셀 LED 갯수

#NUM_LIGHTS 5 -ийг тодорхойлох // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

// 네오 픽셀 오브젝트 Массив 선언

Adafruit_NeoPixel цэгээр = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN3, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN4, NEO_GRB + NEO_KHZ800) Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 하나 다 한 다. // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 연결된 아두 이노 의 핀 번호 // 세번째 인자 값 은 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 туг

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

////// HSV 를 RGB 로 변환 하는 함수 getRGB () 를 위한 변수 와 함수 선언

const байт dim_curve = {

0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35, 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109, 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144, 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190, 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255, }; //

хүчингүй getRGB (int hue, int sat, int val, int өнгө [5] [3], int индекс) {

val = бүдэг_ муруй [val]; sat = 255 - dim_curve [255 - суусан];

// 색조, 채도 및 밝기 (HSB /HSV), RGB 로 변환

// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.

int r;

int g; int b; int суурь;

хэрэв (суусан == 0) {

өнгө [индекс] [0] = үнэ; өнгө [индекс] [1] = үнэ; өнгө [индекс] [2] = үнэ; } өөр {

суурь = ((255 - суусан) * вал) >> 8;

солих (өнгө / 60) {

тохиолдол 0: r = val; g = (((вал - суурь) * өнгө) / 60) + суурь; b = суурь; завсарлага;

тохиолдол 1:

r = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; g = үнэ; b = суурь; завсарлага;

тохиолдол 2:

r = суурь; g = үнэ; b = (((val - суурь) * (өнгө % 60)) / 60) + суурь; завсарлага;

тохиолдол 3:

r = суурь; g = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; b = val; завсарлага;

тохиолдол 4:

r = (((val - суурь) * (өнгө % 60)) / 60) + суурь; g = суурь; b = val; завсарлага;

тохиолдол 5:

r = val; g = суурь; b = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; завсарлага; }

өнгө [индекс] [0] = r;

өнгө [индекс] [1] = g; өнгө [индекс] [2] = b; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb өнгө 선언

int hue [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언

// 일반 변수 선언

int startSwitch = {8, 9, 10, 11, 12}; // асаах/унтраах 버튼 핀 번호 boolean startState = {худал, худал, хуурамч, худал, худал}; // асаах/унтраах 상태 변수

const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호

int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값

int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 번호

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

// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 디 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 함수 를 호출 하여 button int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 로 гарын үсэг зураагүй long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 гарын үсэг зураагүй урт debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 다 한 다 int MODE = 0; // 애니메이션 모드 변수

int B_Interval [5]; // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수

int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수

boolean B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수

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

// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언

гарын үсэг зураагүй урт гүйдэл Миллис; // 현재 시간 변수

гарын үсэг зураагүй урт B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 гарын үсэггүй урт DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) гарын үсэг зураагүй урт R_previousMillis; // 레인보우 타이머 гарын үсэг зураагүй урт D_previousMillis; // 디밍 타이머

boolean firstRainbow = үнэн; // 레인보우 색상 초기화 상태 변수

int RainbowSpeed; // 레인보우 변환 변수

int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ////////////////////////////////////////////// /////////////////////////////////////////

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

for (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .begin (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // асаах/унтраах 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (санамсаргүй (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}

Цуваа эхлэх (9600); // 통신 설정

}

void loop () {

MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 를

// 버튼 과 가변 저항 을 값 을 읽 읽어 변수 에 다 한다.

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // асаах/унтраах St 에서 읽은 값 의 반대 값 St startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

унтраалга (MODE) {// 애니메이션 함수 스위치 문

тохиолдол 0: дээр (); // дээр 함수 실행 завсарлага; // 조건문 에서 빠져 나가라

тохиолдол 1:

солонго (); // солонго 함수 실행 завсарлага;

тохиолдол 2:

бүдэгрүүлэх (); // бүдэгрүүлэх 함수 실행 завсарлага;

тохиолдол 3:

анивчих (); // анивчих 함수 실행 завсарлага; }

for (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .show (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.

///////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int унших = digitalRead (animationButton); if (унших! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}

if ((currentMillis - lastDebounceTime)> debounceDelay) {

хэрэв (уншиж байна! = товч Төрийн) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = унших; // 판독 값 을 товч Төрийн төлөв 에 대입

if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면

MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = үнэн; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Bright = 15; // 밝기 는 15}}}}

lastButtonState = унших; // 판독 값 을 이전 의 버튼 상태 에 대입

буцах горим; 함수 를 종료 하고 горим 함수 로 값 을 리턴 하라}

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

// анимацийн горимын функц

// дээр

void on () {Serial.println ("on"); // 시리얼 모니터 에 дээр int 써라 (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}

// Солонго

хоосон солонго () {Serial.println ("бороо"); // 시리얼 모니터 에 бороо 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = худал; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}

for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}

}

// Бүдгэрүүлэх

void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Bright); // 시리얼 모니터 에 Bright 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣어 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = хязгаарлах (Bright, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 254 사이 의 값 으로 한정 한다

for (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}

// Нүдээ анивчдаг

void blinking () {Serial.println ("анивчих"); // 시리얼 모니터 에 анивчих 를 써라

for (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면

B_previousMillis = currentMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 의 값 의 반대 값 을 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 가 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} өөр {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}

}

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

// үндсэн чиг үүрэг

// өнгөний багц

хүчингүй color_set (int index, int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 ~ 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Өнгө (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} өөр noColor_set (индекс); // 컬러 셋팅 하지 않음}

////// noColor set

хүчингүй noColor_set (int index) {// 컬러 셋팅 하지 않는 함수 설정

for (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Өнгө (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor багц

хүчингүй dim_color_set (int index, int BC) {// 디밍 컬러 셋팅 함수 설정

if (startState [index]) {hue [index] = map (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (hue [index], 255, BC, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Өнгө (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} өөр noColor_set (индекс); // 컬러 셋팅 하지 않음}

Алхам 6: Дууссан харагдац

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