Indholdsfortegnelse:

Dot Light -mønster: 6 trin
Dot Light -mønster: 6 trin

Video: Dot Light -mønster: 6 trin

Video: Dot Light -mønster: 6 trin
Video: How to trim your cat`s claws 💅 2024, Juli
Anonim
Image
Image
Dot Light mønster
Dot Light mønster
Dot Light mønster
Dot Light mønster

Jeg startede med ideen om "Kan jeg styre lyset med egne hænder og udtrykke min egen vilje?"

Det er et 'Dot Light Pattern', der giver dig mulighed for at oprette dine egne farver selv, designe dine egne mønstre med disse farver og opleve forskellige animationseffekter.

Trin 1: Materialer

Materialer
Materialer
Materialer
Materialer
Materialer
Materialer
Materialer
Materialer
  1. Arduino UNO x 13
  2. WS2901 eller WS2811 pixel LED strip (130 LED)
  3. Knapkontakt x 1
  4. Snapkontakt x 65
  5. Potentionsmåler x 65
  6. Regnbue kabel
  7. Strøm nok SMPS
  8. Lederkabel
  9. Akryl gennemsigtig rundstang (30 mm diameter)
  10. Sort farve Akrylplade (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2

Trin 2: Byggeplan

Byggeplan
Byggeplan
Byggeplan
Byggeplan
Byggeplan
Byggeplan
Byggeplan
Byggeplan

Trin 3: Hardware: Kredsløbsdesign

Hardware: Kredsløbsdesign
Hardware: Kredsløbsdesign
Hardware: Kredsløbsdesign
Hardware: Kredsløbsdesign
Hardware: Kredsløbsdesign
Hardware: Kredsløbsdesign
  1. Skær akrylpladen som ovenstående struktur. (se trin 2)

  2. Et stykke neo-pixel LED sættes på toppen og bunden af potentialetmeterhullet, og i alt 65 par neo-pixel LED'er er fastgjort.
  3. Et par neo-pixel LED'er er forbundet til en enkelt Arduino-pin.
  4. Monter 65 potentiometer til potentialemålerhullerne. (Læg den på den modsatte side af en neo-pixeleret overflade.)
  5. Fastgør 65 snapkontakter, så de passer til switchhullerne.
  6. I alt er tretten Arduino UNO'er knyttet til hver af de tretten zoner for at binde fem stykker af 65 stykker hardware til en Arduino UNO.
  7. Som vist på det vedhæftede foto, Slut potensmålere, snapkontakter og neo-pixel LED'er til stifterne på Arduino UNO med ledning. (se trin 2)
  8. GND- og 5V -ben på flere Arduino UNO'er opsamles til kabeltråde og forbindes derefter til ekstern strøm. (se trin 2)
  9. Fjern støvet ved lufttryk.

Trin 4: Hardware: Skæring i akryl

Hardware: Skæring i akryl
Hardware: Skæring i akryl
Hardware: Skæring i akryl
Hardware: Skæring i akryl
Hardware: Skæring i akryl
Hardware: Skæring i akryl
  1. Skær akrylstangen til en længde på 50 mm.

  2. Den ene side af akrylstangen er boret til størrelsen og dybden for at matche controller -delen af potentionsmåleren.
  3. Akrylstangen er trimmet lidt bredere end hullet for en frigang, der kan passe godt ind i potentionsmåleren.
  4. Den anden side giver lidt sandpapir, så lyset kan overføres pænt.

Trin 5: Arduino -programmeringskode

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

'hsb til rgb' kode 를 참고 한 사이트

#omfatte

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

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

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

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

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

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

Adafruit_NeoPixel pixel = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, Ben3, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, Ben4, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 를 생성 한다. // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 의 핀 번호 // 세번째 인자 값 은 네오 픽셀 의 타입 에 따라 바뀌는 바뀌는 flag

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

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

const byte 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]; sat = 255 - dim_curve [255 - sat];

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

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

int r;

int g; int b; int base;

hvis (lør == 0) {

farver [indeks] [0] = val; farver [indeks] [1] = val; farver [indeks] [2] = val; } andet {

base = ((255 - lør) * val) >> 8;

switch (farvetone / 60) {

tilfælde 0: r = val; g = (((val - base) * nuance) / 60) + base; b = base; pause;

sag 1:

r = (((val - base) * (60 - (farvetone 60)))) / 60) + base; g = val; b = base; pause;

sag 2:

r = base; g = val; b = (((val - base) * (farvetone 60)) / 60) + base; pause;

sag 3:

r = base; g = (((val - base) * (60 - (farvetone 60))) / 60) + base; b = val; pause;

sag 4:

r = (((val - base) * (farvetone 60)) / 60) + base; g = base; b = val; pause;

sag 5:

r = val; g = base; b = (((val - base) * (60 - (farvetone 60)))) / 60) + base; pause; }

farver [indeks] [0] = r;

farver [indeks] [1] = g; farver [indeks] [2] = b; }

}

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

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

// 일반 변수 선언

int startsSwitch = {8, 9, 10, 11, 12}; // on/off 버튼 핀 번호 boolsk startState = {false, false, false, false, false}; // on/off 상태 변수

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

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

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

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

// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 변수 디 // 디 바운싱? 짧은 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 함수 를 호출 하여 해결 int -knapStat; // 입력 핀 으로부터 의 현재 판독 값 last int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 로 unsigned long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 usigneret lang debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 MOD int MODE = 0; // 애니메이션 모드 변수

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

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

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

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

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

usigneret langstrømMillis; // 현재 시간 변수

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

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

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

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

ugyldig opsætning () {

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

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startswitch , INPUT_PULLUP); // on/off 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

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

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

}

void loop () {

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

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

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

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

sag 0: på (); // på 함수 실행 pause; // 조건문 에서 빠져 나가라

sag 1:

regnbue(); // regnbue 함수 실행 pause;

sag 2:

dæmpning (); // dæmpning 함수 실행 pause;

sag 3:

blinker (); // blinkende 함수 실행 pause; }

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

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

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

buttonState = læsning; // 판독 값 을 knapStat 에 대입

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

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

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

returnere MODE; 함수 를 종료 하고 tilstand 함수 로 값 을 리턴 하라}

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

// animationstilstandsfunktion

//på

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

//Regnbue

void rainbow () {Serial.println ("regn"); // 시리얼 모니터 에 regn 을 써라 hvis (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} 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); // 레인보우 컬러 셋팅}

}

// Dæmpning

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

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

// Blinker

tomrum blinker () {Serial.println ("blink"); // 시리얼 모니터 에 blinke 를 써라

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

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

}

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

// kernefunktion

// farvesæt

void color_set (int index, int colorSenser) {

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

////// noColor set

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

for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor sæt

void 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 (farvetone [indeks], 255, BC, rgb_farver, indeks); for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_farver 의 r, g, b 으로 설정} ellers noColor_set (indeks); // 컬러 셋팅 하지 않음}

Trin 6: Et færdigt look

Anbefalede: