Բովանդակություն:

Dot Light օրինակը `6 քայլ
Dot Light օրինակը `6 քայլ

Video: Dot Light օրինակը `6 քայլ

Video: Dot Light օրինակը `6 քայլ
Video: 6 անվճար գովազդային ալիքներ ձեր սթարթափը տարածելու համար 2024, Նոյեմբեր
Anonim
Image
Image
Կետերի լույսի օրինակ
Կետերի լույսի օրինակ
Կետերի լույսի օրինակ
Կետերի լույսի օրինակ

Ես սկսեցի «Կարո՞ղ եմ իմ ձեռքերով կառավարել լույսը և արտահայտել իմ կամքը» գաղափարը:

Դա «Dot Light Pattern» է, որը թույլ է տալիս ինքներդ ստեղծել ձեր սեփական գույները, ձևավորել ձեր սեփական նախշերը այդ գույներով և զգալ տարբեր անիմացիոն էֆեկտներ:

Քայլ 1: Նյութեր

Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր
Նյութեր
  1. Arduino UNO x 13
  2. WS2901 կամ WS2811 պիքսելային LED շերտ (130 LEDS)
  3. Կոճակի անջատիչ x 1
  4. Կոտրիչ անջատիչ x 65
  5. Ուժի չափիչ x 65
  6. Ainիածան մալուխ
  7. Հզոր հոսանք SMPS
  8. Հաղորդիչ մալուխ
  9. Ակրիլային թափանցիկ կլոր ձող (30 մմ տրամագծով)
  10. Սև գույնի ակրիլային տախտակ (5T) (500 մմ*790 մմ) x 2, (500 մմ*35 մմ) x 2, (790 մմ*35 մմ) x 2

Քայլ 2: Շինարարության ծրագիր

Շինարարության պլան
Շինարարության պլան
Շինարարության պլան
Շինարարության պլան
Շինարարության պլան
Շինարարության պլան
Շինարարության պլան
Շինարարության պլան

Քայլ 3. Սարքաշար. Շղթայի ձևավորում

Սարքավորումներ. Շղթայի ձևավորում
Սարքավորումներ. Շղթայի ձևավորում
Սարքավորումներ. Շղթայի ձևավորում
Սարքավորումներ. Շղթայի ձևավորում
Սարքավորումներ. Շղթայի ձևավորում
Սարքավորումներ. Շղթայի ձևավորում
  1. Կտրեք ակրիլային ափսեը, ինչպես վերը նշված կառուցվածքը: (տես քայլ 2)

  2. Նեո-պիքսելային լուսադիոդի մեկ կտոր դրված է պոտենցիաչափաչափի անցքի վերևում և ներքևում, և ընդհանուր առմամբ ամրացված է 65 զույգ նեո-պիքսելային LED:
  3. Մի զույգ նեոպիքսելային լուսադիոդային լուսադիոդներ միացված են միասին ՝ կազմելով մեկ Arduino- ի քորոց:
  4. Տեղադրեք 65 հզորության չափիչ հզորության չափիչ անցքերին: (Դրեք այն նեոպիքսելավորված մակերեսի հակառակ կողմում):
  5. Կցեք 65 սեղմիչ անջատիչներ, որոնք կհամապատասխանեն անջատիչի անցքերին:
  6. Ընդհանուր առմամբ տասներեք Arduino UNO- ներ կցված են տասներեք գոտիներից յուրաքանչյուրին, որպեսզի միացնեն հինգ կտոր 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 #սահմանել PIN5 6

#սահմանել NUMPIXELS 2 // 네오 픽셀 LED 갯수

#սահմանել NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 갯수)

// 네오 픽셀 오브젝트 rayանգված 선언

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, }; //

void getRGB (int hue, int sat, int val, int colors [5] [3], int index) {

val = dim_curve [val]; նստել = 255 - dim_curve [255 - նստել];

// 색조, 및 밝기 (HSB /HSV) 를 RGB 로

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

int r;

int g; int բ; int բազա;

եթե (նստեց == 0) {

գույներ [ինդեքս] [0] = val; գույներ [ինդեքս] [1] = val; գույներ [ինդեքս] [2] = val; } ուրիշ {

հիմք = ((255 - նստած) * val) >> 8;

անջատիչ (երանգ / 60) {

գործ 0: r = val; g = (((val - բազա) * երանգ) / 60) + հիմք; b = հիմք; ընդմիջում;

դեպք 1:

r = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; g = val; b = հիմք; ընդմիջում;

դեպք 2:

r = հիմք; g = val; b = (((val - բազա) * (երանգ % 60)) / 60) + հիմք; ընդմիջում;

դեպք 3:

r = հիմք; g = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; b = val; ընդմիջում;

դեպք 4:

r = (((val - բազա) * (երանգ % 60)) / 60) + հիմք; g = հիմք; b = val; ընդմիջում;

դեպք 5:

r = val; g = հիմք; b = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; ընդմիջում; }

գույներ [ինդեքս] [0] = r;

գույներ [ինդեքս] [1] = գ; գույներ [ինդեքս] [2] = բ; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb գույն

int երանգ [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue երանգ 선언 int նստել [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기

// 일반 변수 선언

int startSwitch = {8, 9, 10, 11, 12}; // միացնել/անջատել 핀 ole բուլյան 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; // igned 의 판독 값 은 켜진 로 igned անստորագիր long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 անստորագիր երկար դեբունս Հետաձգում = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수

int B_Interval [5]; // 블 링킹 을 위한 각 모듈 의 의

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

բուլյան B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태

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

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

անստորագիր երկար ընթացիկ Միլիս; // 현재 시간 변수

անստորագիր երկար B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 անստորագիր երկար DR_Millis [5]; // 각 모듈 의 디밍 랜덤 예비 (예비) անստորագիր երկար R_previousMillis; // 레인보우 타이머 անստորագիր երկար D_previousMillis; // 디밍 타이머

բուլյան firstRainbow = ճշմարիտ; // 레인보우 색상 초기화 상태

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

int Պայծառ = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 //////////////////////////////////////////// ///////////////////////////////////////

void setup () {

համար (int i = 0; i <NUM_LIGHTS; i ++) {պիքսել .սկսել (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

(int i = 0; i <NUM_LIGHTS; i ++) {pinMode (սկսում է անցնել , INPUT_PULLUP); // միացնել/անջատել pin 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

համար (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (պատահական (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 생성 생성}

Serial.begin (9600); // 통신 설정

}

դատարկ շրջան () {

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

// 버튼 과 가변 저항 을 값 을 각각.

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (սկսում է անցնել ); // on/off 버튼 에서 읽은 값 의 반대 을 St startState 에 넣어 준다 // startState = digitalRead (սկսում է անցնել ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 넣는다 넣는다}

անջատիչ (MODE) {// 애니메이션 함수 스위치 문

գործ 0: միացված (); // 함수 on ընդմիջման վրա; // 조건문 에서 빠져 나가라

դեպք 1:

ծիածան (); // ծիածան 함수 실행 ընդմիջում;

դեպք 2:

dimming (); // թուլացում 실행 실행 ընդմիջում;

դեպք 3:

թարթում (); // թարթում 실행 실행 ընդմիջում; }

(int i = 0; i <NUM_LIGHTS; i ++) {պիքսել . ցուցադրում (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

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

/////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int ընթերցում = digitalRead (animationButton); եթե (կարդում! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 비교 비교 비교 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 으로 된 시간 넣음 넣음 넣음}

if ((currentMillis - lastDebounceTime)> debounceDelay) {

եթե (կարդում! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독

buttonState = ընթերցում; // 판독 값 을 buttonState 대입

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

ՌԵԴ ++; // 버튼 모드 1 증가 증가 եթե (ՊԵՏ> 3) {ԿԱՐD = 0; firstRainbow = ճշմարիտ; // ight 색상 초기화 상태 ight BrightnessFactor = 1; // 디밍 증감 ight Պայծառ = 15; // 는 는 15}}}}

lastButtonState = ընթերցում; // 판독 값 을 이전 의 버튼 상태 에

վերադարձի ռեժիմ; 함수 를 종료 하고 ռեժիմ 함수 로 값 을 리턴 하라}

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

// անիմացիոն ռեժիմի գործառույթ

//վրա

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

// Rիածան

դատարկ ծիածան () {Serial.println («անձրև»); // 시리얼 모니터 에 անձրև 을 써라 եթե (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = կեղծ; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 _ R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 넣어 라 RainbowSpeed += 10; // 변환 변수 에 10 을 더해라}

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

}

// Թուլացում

void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Պայծառ); // 시리얼 모니터 에 Պայծառ 써라 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 넣어 ight Bright += BrightnessFactor; // 에 디밍 증감 값 1 씩 올려라} եթե (Պայծառ 254) {BrightnessFactor = -1 * BrightnessFactor; } Պայծառ = սահմանափակում (Պայծառ, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정

համար (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 컬러 셋팅}}

// թարթում է

դատարկ թարթում () {Serial.println («թարթել»); // ink 모니터 에 թարթել 를 써라

համար (int i = 0; i B_Interval ) {// 흐른 시간 값 이 이 인터벌 값 보다

B_previousMillis = ընթացիկ Միլիս; // 현재 시간 을 이전 의 블링크 시간 _ _ B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 값 반대 값 을 대입 하라}}} (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 for 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} ուրիշ {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}}

}

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

// հիմնական ֆունկցիան

// գույնի հավաքածու

void color_set (int index, int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 color color (colorSenser) getRGB (երանգ [ինդեքս], 255, 255, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {պիքսել [ինդեքս].setPixelColor (i, պիքսել [ինդեքս]: Գույն [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} այլապես noColor_set (ցուցիչ); // 컬러 셋팅 하지 않음}

////// noColor հավաքածու

անվավեր noColor_set (int index) {// 컬러 셋팅 하지 함수 함수

(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 color (colorVal 에) getRGB (երանգ [ինդեքս], 255, մ.թ.ա., rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {պիքսել [ինդեքս].setPixelColor (i, պիքսել [ինդեքս]: Գույն [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} այլապես noColor_set (ինդեքս); // 컬러 셋팅 하지 않음}

Քայլ 6: Ավարտված հայացք

Խորհուրդ ենք տալիս: