Satura rādītājs:

Punkta gaismas modelis: 6 soļi
Punkta gaismas modelis: 6 soļi

Video: Punkta gaismas modelis: 6 soļi

Video: Punkta gaismas modelis: 6 soļi
Video: JŪS BŪSITE SUŽAVĖTI!Aš mezgu Angliškai. Jis susilieja su vienu kvėpavimu, labai greitai ir lengvai! 2024, Jūlijs
Anonim
Image
Image
Punkta gaismas modelis
Punkta gaismas modelis
Punkta gaismas modelis
Punkta gaismas modelis

Es sāku ar domu "Vai es varu kontrolēt gaismu ar savām rokām un izteikt savu gribu?"

Tas ir “punktveida gaismas modelis”, kas ļauj jums pašiem izveidot savas krāsas, noformēt savus modeļus ar šīm krāsām un piedzīvot dažādus animācijas efektus.

1. solis: materiāli

Materiāli
Materiāli
Materiāli
Materiāli
Materiāli
Materiāli
Materiāli
Materiāli
  1. Arduino UNO x 13
  2. WS2901 vai WS2811 pikseļu LED sloksne (130 LED)
  3. Pogas slēdzis x 1
  4. Slēdzis x 65
  5. Potences mērītājs x 65
  6. Varavīksnes kabelis
  7. Jauda pietiekami SMPS
  8. Diriģenta kabelis
  9. Akrila caurspīdīgs apaļš stienis (diametrs 30 mm)
  10. Melnas krāsas akrila tāfele (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2

2. solis: būvniecības plāns

Būvniecības plāns
Būvniecības plāns
Būvniecības plāns
Būvniecības plāns
Būvniecības plāns
Būvniecības plāns
Būvniecības plāns
Būvniecības plāns

3. solis: Aparatūra: shēmas dizains

Aparatūra: shēmas dizains
Aparatūra: shēmas dizains
Aparatūra: shēmas dizains
Aparatūra: shēmas dizains
Aparatūra: shēmas dizains
Aparatūra: shēmas dizains
  1. Izgrieziet akrila plāksni tāpat kā iepriekš minēto struktūru. (skat. 2. darbību)

  2. Potenciometra atveres augšpusē un apakšā ir uzlikts viens neo pikseļu gaismas diodes gabals, un kopā ir pievienoti 65 pāri neo pikseļu gaismas diodes.
  3. Pāris neo pikseļu gaismas diodes ir savienotas kopā, lai izveidotu vienu Arduino tapu.
  4. Uzstādiet 65 stiprības mērītājus caurumiem. (Novietojiet to neo-pikselētas virsmas pretējā pusē.)
  5. Pievienojiet 65 fiksējošos slēdžus, lai tie atbilstu slēdža caurumiem.
  6. Katrai no trīspadsmit zonām ir pievienoti trīspadsmit Arduino UNO, lai vienā Arduino UNO sasaistītu piecus 65 aparatūras gabalus.
  7. Kā parādīts pievienotajā fotoattēlā, pieslēdziet jaudas mērītājus, fiksācijas slēdžus un neo pikseļu gaismas diodes ar vadu Arduino UNO tapām. (skat. 2. darbību)
  8. Vairāku Arduino UNO GND un 5V tapas tiek savāktas kabeļu vados, pēc tam pievienotas ārējai barošanai. (skat. 2. darbību)
  9. Noņemiet putekļus ar gaisa spiedienu.

4. solis: Aparatūra: akrila griešana

Aparatūra: akrila griešana
Aparatūra: akrila griešana
Aparatūra: akrila griešana
Aparatūra: akrila griešana
Aparatūra: akrila griešana
Aparatūra: akrila griešana
  1. Izgrieziet akrila stieni 50 mm garumā.

  2. Viena akrila stieņa puse ir izurbta līdz izmēram un dziļumam, lai tas atbilstu potenciometra kontroliera daļai.
  3. Akrila stienis ir apgriezts nedaudz platāks par atveri, lai iegūtu atstarpi, kas labi iederas stiprības mērītājā.
  4. Otra puse dod nedaudz smilšpapīra, lai gaismu varētu kārtīgi pārraidīt.

5. darbība: Arduino programmēšanas kods

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

“hsb to rgb” kods 를 참고 한 사이트

#iekļaut

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

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

#definēt PIN1 2 #define PIN2 3 #define PIN3 4 #define PIN4 5 #define PIN5 6

#define NUMPIXELS 2 // 네오 픽셀 LED 갯수

#define NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

// 네오 픽셀 오브젝트 Array 선언

Adafruit_NeoPixel pikseļi = {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 baits 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 = blāva izliekums [val]; sat = 255 - dim_curve [255 - sat];

//, 채도, 및 및 (HSB /HSV), RGB

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

int r;

int g; int b; int bāze;

ja (sest = = 0) {

krāsas [indekss] [0] = val; krāsas [indekss] [1] = val; krāsas [indekss] [2] = val; } vēl {

bāze = ((255 - sat) * val) >> 8;

slēdzis (nokrāsa / 60) {

gadījums 0: r = val; g = ((((val - bāze) * nokrāsa) / 60) + bāze; b = bāze; pārtraukums;

1. gadījums:

r = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; g = val; b = bāze; pārtraukums;

2. gadījums:

r = bāze; g = val; b = ((((val - bāze) * (nokrāsa % 60)) / 60) + bāze; pārtraukums;

3. gadījums:

r = bāze; g = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; b = val; pārtraukums;

4. gadījums:

r = ((((val - bāze) * (nokrāsa % 60)) / 60) + bāze; g = bāze; b = val; pārtraukums;

5. gadījums:

r = val; g = bāze; b = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; pārtraukums; }

krāsas [indekss] [0] = r;

krāsas [indekss] [1] = g; krāsas [indekss] [2] = b; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb krāsa 선언

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

// 일반 변수 선언

int startsSlēdzis = {8, 9, 10, 11, 12}; // ieslēgts/izslēgts 버튼 핀 번호 Būla sākuma statuss = {false, false, false, false, false}; // ieslēgts/izslēgts 상태 변수

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; // 이전 의 판독 값 은 켜진 상태 로 neparakstīts long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 neparakstīts garš 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; // 디밍 속도 변수

Būla B_valsts [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수

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

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

neparakstīta garā strāvaMillis; // 현재 시간 변수

neparakstīts garš B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 neparakstīts garš DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) neparakstīts garš R_previousMillis; // 레인보우 타이머 neparakstīts garš D_previousMillis; // 디밍 타이머

Būla pirmaisRainbow = true; // 레인보우 색상 초기화 상태 변수

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

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

void setup () {

par (int i = 0; i <NUM_LIGHTS; i ++) {pikseļi .sākt (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

par (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // ieslēgts/izslēgts 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

par (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (nejauši (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 변수 생성}

Sērijas sākums (9600); // 통신 설정

}

void loop () {

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

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

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // ieslēgt/izslēgt 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

slēdzis (REŽĪMS) {// 애니메이션 함수 스위치 문

gadījums 0: ieslēgts (); // on 함수 실행 break; // 조건문 에서 빠져 나가라

1. gadījums:

varavīksne (); // varavīksne 함수 실행 pārtraukums;

2. gadījums:

aptumšošana (); // aptumšošana 함수 실행 pārtraukums;

3. gadījums:

mirgo (); // mirgo 함수 실행 pārtraukums; }

par (int i = 0; i <NUM_LIGHTS; i ++) {pikseļi .show (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

ja (lasot! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = lasīšana; // 판독 값 을 buttonState 에 대입

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

MODE ++; // 버튼 모드 1 씩 증가 ja (REŽĪMS> 3) {MODE = 0; firstRainbow = taisnība; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Spilgts = 15; // 밝기 는 15}}}}

lastButtonState = lasīšana; // 판독 값 을 이전 의 버튼 상태 에 대입

atgriezties MODE; 하고 를 종료 하고 režīms 함수 로 값 을 리턴 하라}

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

// animācijas režīma svārstības

// uz

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

// Varavīksne

void varavīksne () {Serial.println ("lietus"); // 시리얼 모니터 에 lietus 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}

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

}

// aptumšošana

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

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

// Mirgo

void mirgo () {Serial.println ("mirgot"); // 시리얼 모니터 에 mirgo 를 써라

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

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

}

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

// pamatfunkcijas

// krāsu komplekts

void color_set (int indekss, int colorSenser) {

ja (startState [indekss]) {nokrāsa [indekss] = karte (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (nokrāsa [indekss], 255, 255, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [indekss] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} cits noColor_set (indekss); // 컬러 셋팅 하지 않음}

////// noColor set

void noColor_set (int indekss) {// 컬러 셋팅 하지 않는 함수 설정

par (int i = 0; i <NUMPIXELS; i ++) {pikseļi [indekss].setPixelColor (i, pikseļi [indekss]. Krāsa (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor komplekts

void dim_color_set (int indekss, int BC) {// 디밍 컬러 셋팅 함수 설정

ja (startState [indekss]) {nokrāsa [indekss] = karte (colorVal [indekss], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (nokrāsa [indekss], 255, BC, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [indekss] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} cits noColor_set (indekss); // 컬러 셋팅 하지 않음}

6. solis: pabeigts izskats

Ieteicams: