Isi kandungan:

Corak Cahaya Dot: 6 Langkah
Corak Cahaya Dot: 6 Langkah

Video: Corak Cahaya Dot: 6 Langkah

Video: Corak Cahaya Dot: 6 Langkah
Video: Kerusakan Pada Layar Amoled ! Mengenal Burn In (DeadPixel) Pada Hp Vivo & Samsung 2024, November
Anonim
Image
Image
Corak Dot Light
Corak Dot Light
Corak Dot Light
Corak Dot Light

Saya bermula dengan idea "Bolehkah saya mengawal cahaya dengan tangan saya sendiri dan menyatakan kehendak saya sendiri?"

Ini adalah 'Dot Light Pattern' yang membolehkan anda membuat sendiri warna, merancang corak anda sendiri dengan warna tersebut, dan mengalami pelbagai kesan animasi.

Langkah 1: Bahan

Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
  1. Arduino UNO x 13
  2. Jalur LED piksel WS2901 atau WS2811 (130 LEDS)
  3. Suis butang x 1
  4. Suis snap x 65
  5. Potensi meter x 65
  6. Kabel pelangi
  7. Kuasa SMPS mencukupi
  8. Kabel konduktor
  9. Bar bulat lutsinar akrilik (diameter 30mm)
  10. Papan akrilik warna hitam (5T) (500mm * 790mm) x 2, (500mm * 35mm) x 2, (790mm * 35mm) x 2

Langkah 2: Pelan Pembinaan

Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan
Pelan Pembinaan

Langkah 3: Perkakasan: Reka Bentuk Litar

Perkakasan: Reka Bentuk Litar
Perkakasan: Reka Bentuk Litar
Perkakasan: Reka Bentuk Litar
Perkakasan: Reka Bentuk Litar
Perkakasan: Reka Bentuk Litar
Perkakasan: Reka Bentuk Litar
  1. Potong plat akrilik seperti struktur di atas. (lihat langkah2)

  2. Satu bahagian LED neo-pixel diletakkan di bahagian atas dan bawah lubang potentionmeter, dan sejumlah 65 pasang LED neo-pixel terpasang.
  3. Sepasang LED neo-pixel disatukan bersama untuk membentuk satu pin Arduino.
  4. Pasangkan 65 potentionmeters ke lubang potentionmeter. (Letakkannya di seberang permukaan neo-pixelated.)
  5. Pasang 65 suis snap agar sesuai dengan lubang suis.
  6. Sebanyak tiga belas UNO Arduino dilampirkan pada setiap tiga belas zon untuk mengikat lima kepingan 65 keping perkakasan ke dalam satu Arduino UNO.
  7. Seperti yang ditunjukkan dalam foto yang dilampirkan, Sambungkan potentionmeters, snap switch dan LED neo-pixel ke pin Arduino UNO melalui wayar. (lihat langkah2)
  8. Pin GND dan 5V dari beberapa Arduino UNO dikumpulkan ke wayar kabel, kemudian disambungkan ke kuasa luaran. (lihat langkah2)
  9. Buang habuk dengan tekanan Udara.

Langkah 4: Perkakasan: Keratan Akrilik

Perkakasan: Keratan Akrilik
Perkakasan: Keratan Akrilik
Perkakasan: Keratan Akrilik
Perkakasan: Keratan Akrilik
Perkakasan: Keratan Akrilik
Perkakasan: Keratan Akrilik
  1. Potong batang akrilik hingga panjang 50mm.

  2. Satu sisi batang akrilik digerudi dengan ukuran dan kedalaman agar sesuai dengan bahagian pengawal potentionmeter.
  3. Batang akrilik dipangkas sedikit lebih lebar daripada lubang untuk pelepasan yang dapat masuk dengan baik ke dalam potentionmeter.
  4. Bahagian lain memberikan sedikit kertas pasir sehingga cahaya dapat dipancarkan dengan kemas.

Langkah 5: Kod Pengaturcaraan Arduino

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

kod 'hsb to rgb' 를 참고 한 사이트

#sertakan

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

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

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

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

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

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

pixels Adafruit_NeoPixel = {Adafruit_NeoPixel (NUMPIXELS, pin.1, 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 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 의 핀 번호 // 세번째 인자 값 은 네오 픽셀 의 타입 에 따라 바뀌는 bendera

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

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

batal getRGB (int hue, int sat, int val, int colours [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; pangkalan int;

jika (sat == 0) {

warna [indeks] [0] = val; warna [indeks] [1] = val; warna [indeks] [2] = val; } lain {

asas = ((255 - sat) * val) >> 8;

tukar (rona / 60) {

kes 0: r = val; g = (((val - base) * hue) / 60) + asas; b = asas; rehat;

kes 1:

r = (((val - asas) * (60 - (hue% 60))) / 60) + asas; g = val; b = asas; rehat;

kes 2:

r = asas; g = val; b = (((val - asas) * (hue% 60)) / 60) + asas; rehat;

kes 3:

r = asas; g = (((val - asas) * (60 - (hue% 60))) / 60) + asas; b = val; rehat;

kes 4:

r = (((val - asas) * (hue% 60)) / 60) + asas; g = asas; b = val; rehat;

kes 5:

r = val; g = asas; b = (((val - asas) * (60 - (hue% 60))) / 60) + asas; rehat; }

warna [indeks] [0] = r;

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

}

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

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

// 일반 변수 선언

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

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

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

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

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

// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 함수 를 호출 하여 해결 int butangState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = TINGGI; // 이전 의 판독 값 은 켜진 상태 로 lama yang tidak ditandatanganiDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 debounce panjang yang tidak ditandatanganiDelay = 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 boolean [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수

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

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

arus panjang yang tidak ditandatanganiMillis; // 현재 시간 변수

panjang yang tidak ditandatangani B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 DR_Millis panjang yang tidak ditandatangani [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) panjang yang tidak ditandatangani R_pre sebelumnyaMillis; // 레인보우 타이머 D_previousMillis panjang yang tidak ditandatangani; // 디밍 타이머

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

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

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

batal persediaan () {

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

// 버튼 인풋 설정

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

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

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

}

gelung kosong () {

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

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

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

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

kes 0: pada (); // pada rehat 함수 실행; // 조건문 에서 빠져 나가라

kes 1:

pelangi (); // pelangi 실행 실행 rehat;

kes 2:

malap (); // redup 실행 실행 rehat;

kes 3:

berkelip (); // berkelip 실행 실행 rehat; }

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

}

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

int CheckAnimMode () {

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

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

jika ((currentMillis - lastDebounceTime)> debounceDelay) {

jika (membaca! = butangState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = membaca; // 을 값 을 butangState 에 대입

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

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

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

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

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

// fungsi fungsi animasi

// pada

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

// Pelangi

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

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

}

// Peredupan

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

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

// Berkelip

berkelip kosong () {Serial.println ("berkelip"); // 시리얼 모니터 에 berkedip 를 써라

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

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

}

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

// fungsi asas

// set warna

void color_set (int indeks, int colorSenser) {

if (startState [index]) {hue [index] = peta (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); untuk (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_colors 의 r, g, b 으로 설정} other noColor_set (indeks); // 컬러 셋팅 하지 않음}

////// noColor set

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

untuk (int i = 0; i <NUMPIXELS; i ++) {piksel [indeks].setPixelColor (i, piksel [indeks]. Warna (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// set warna

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

if (startState [index]) {hue [index] = peta (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorVal 에) getRGB (hue [index], 255, BC, rgb_colors, index); untuk (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_colors 의 r, g, b 으로 설정} other noColor_set (indeks); // 컬러 셋팅 하지 않음}

Langkah 6: Pandangan Selesai

Disyorkan: