Sisukord:

Punktvalguse muster: 6 sammu
Punktvalguse muster: 6 sammu

Video: Punktvalguse muster: 6 sammu

Video: Punktvalguse muster: 6 sammu
Video: Камеди Клаб «Экономика» Гарик Харламов, Демис Карибидис @ComedyClubRussia 2024, Juuli
Anonim
Image
Image
Punktvalguse muster
Punktvalguse muster
Punktvalguse muster
Punktvalguse muster

Alustasin ideega "Kas ma saan valgust oma kätega juhtida ja oma tahet väljendada?"

See on punktvalgusmuster, mis võimaldab teil ise oma värve luua, nende värvidega oma mustreid kujundada ja erinevaid animatsiooniefekte kogeda.

Samm: materjalid

Materjalid
Materjalid
Materjalid
Materjalid
Materjalid
Materjalid
Materjalid
Materjalid
  1. Arduino UNO x 13
  2. WS2901 või WS2811 piksliline LED -riba (130 LED -i)
  3. Nuppude lüliti x 1
  4. Lüliti x 65
  5. Potentsiameeter x 65
  6. Vikerkaabel
  7. Võimsus on piisav SMPS
  8. Juhi kaabel
  9. Akrüülist läbipaistev ümar riba (läbimõõt 30 mm)
  10. Musta värvi akrüülplaat (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2

2. etapp: ehitusplaan

Ehitusplaan
Ehitusplaan
Ehitusplaan
Ehitusplaan
Ehitusplaan
Ehitusplaan
Ehitusplaan
Ehitusplaan

3. samm: riistvara: vooluahela kujundus

Riistvara: vooluringi disain
Riistvara: vooluringi disain
Riistvara: vooluringi disain
Riistvara: vooluringi disain
Riistvara: vooluringi disain
Riistvara: vooluringi disain
  1. Lõika akrüülplaat nagu ülaltoodud struktuur. (vt 2. samm)

  2. Potentsusmõõtja augu üla- ja alaossa pannakse üks neopikslite LED-tükk ja kokku on kinnitatud 65 paari neopikslilisi LED-e.
  3. Paar neopikslit LED-i on ühendatud, moodustades ühe Arduino tihvti.
  4. Paigaldage 65 potentsiameetrit aukude mõõtmise aukudesse. (Asetage see neopiksliga pinna vastasküljele.)
  5. Kinnitage 65 lukustuslülitit, et need sobiksid lüliti avadega.
  6. Iga kolmeteistkümne tsooni külge on kinnitatud kokku kolmteist Arduino UNO -d, et siduda viis Arduino UNO -sse kuuluvat riistvara 65 tükki.
  7. Nagu on näidatud lisatud fotol, ühendage juhtme abil võimsusmõõturid, lukustuslülitid ja neopikslilised LED-id Arduino UNO tihvtidega. (vt 2. samm)
  8. Mitme Arduino UNO GND ja 5V tihvtid kogutakse kaablijuhtmetesse ja ühendatakse seejärel välise toiteallikaga. (vt 2. samm)
  9. Eemaldage tolm õhurõhu abil.

Samm: riistvara: akrüüli lõikamine

Riistvara: akrüüli lõikamine
Riistvara: akrüüli lõikamine
Riistvara: akrüüli lõikamine
Riistvara: akrüüli lõikamine
Riistvara: akrüüli lõikamine
Riistvara: akrüüli lõikamine
  1. Lõika akrüülvarda pikkuseks 50 mm.

  2. Akrüülvarda üks külg puuritakse suuruse ja sügavusega, et see vastaks potentsimeetri kontrolleri osale.
  3. Akrüülvarras on kärbitud aukust veidi laiemalt, et oleks piisavalt ruumi potentsusmõõdikusse.
  4. Teine pool annab veidi liivapaberit, et valgus saaks korralikult läbi lasta.

Samm: Arduino programmeerimiskood

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

'hsb kuni rgb' kood 를 참고 한 사이트

#kaasake

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

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

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

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

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

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

Adafruit_NeoPixel pikslit = {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 () 를 위한 변수 와 함수 선언

konst bait 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 toon, int sat, int val, int värvid [5] [3], int indeks) {

val = hämar_kõver [val]; sat = 255 - hämar_kõver [255 - laup];

// 색조, 채도 및 밝기 (HSB /HSV) või RGB

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

int r;

int g; int b; int alus;

kui (laupäev == 0) {

värvid [indeks] [0] = val; värvid [indeks] [1] = val; värvid [indeks] [2] = val; } muud {

alus = ((255 - laup) * val) >> 8;

lüliti (toon / 60) {

juhtum 0: r = val; g = ((((val - alus) * toon) / 60) + alus; b = alus; murda;

juhtum 1:

r = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; g = val; b = alus; murda;

juhtum 2:

r = alus; g = val; b = ((((val - alus) * (toon % 60)) / 60) + alus; murda;

juhtum 3:

r = alus; g = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; b = val; murda;

juhtum 4:

r = ((((val - alus) * (toon % 60)) / 60) + alus; g = alus; b = val; murda;

juhtum 5:

r = val; g = alus; b = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; murda; }

värvid [indeks] [0] = r;

värvid [indeks] [1] = g; värvid [indeks] [2] = b; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb värv 선언

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

// 일반 변수 선언

int startsSwitch = {8, 9, 10, 11, 12}; // sisse/välja 버튼 핀 번호 boolean startState = {false, false, false, false, false}; // sisse/välja 상태 변수

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; // 이전 의 판독 값 은 켜진 상태 로 allkirjastamata long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 allkirjata pikk debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수

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

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

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

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

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

allkirjastamata pikkvoolMillis; // 현재 시간 변수

allkirjastamata pikk B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 allkirjastamata pikk DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) allkirjata pikk R_previousMillis; // 레인보우 타이머 allkirjastamata pikk D_previousMillis; // 디밍 타이머

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

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

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

tühine seadistus () {

jaoks (int i = 0; i <NUM_LIGHTS; i ++) {pikslit .begin (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // sisse/välja 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

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

Seriaalne algus (9600); // 통신 설정

}

void loop () {

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

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

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

lüliti (MODE) {// 애니메이션 함수 스위치 문

juhtum 0: sees (); // on 함수 실행 break; // 조건문 에서 빠져 나가라

juhtum 1:

vikerkaar (); // vikerkaar 함수 실행 murda;

juhtum 2:

hämardamine (); // hämardamine 함수 실행 paus;

juhtum 3:

vilkuv (); // vilkuv 함수 실행 paus; }

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

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

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

buttonState = lugemine; // 판독 값 을 buttonState 에 대입

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

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

lastButtonState = lugemine; // 판독 값 을 이전 의 버튼 상태 에 대입

tagasi MODE; 함수 를 종료 하고 režiim 함수 로 값 을 리턴 하라}

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

// animatsioonirežiimi kõikumine

//peal

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

// Vikerkaar

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

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

}

// Hämardamine

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

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

// Vilkuv

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

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

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

}

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

// põhifunktsioon

// värvikomplekt

void color_set (int indeks, int colorSenser) {

if (startState [register]) {toon [indeks] = kaart (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (toon [indeks], 255, 255, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks].värv (rgb_colors [register] [0], rgb_colors [register] [1], rgb_colors [register] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}

////// noColor komplekt

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

jaoks (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks]. Värv (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor komplekt

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

if (stardiriik [indeks]) {toon [indeks] = kaart (colorVal [indeks], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (toon [indeks], 255, eKr, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks]. Värv (rgb_colors [register] [0], rgb_colors [register] [1], rgb_colors [register] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}

6. samm: viimistletud pilk

Soovitan: