Daftar Isi:

Pola Dot Light: 6 Langkah
Pola Dot Light: 6 Langkah

Video: Pola Dot Light: 6 Langkah

Video: Pola Dot Light: 6 Langkah
Video: Apam Polkadot Mudah dan Lembut 2024, November
Anonim
Image
Image
Pola Dot Light
Pola Dot Light
Pola Dot Light
Pola Dot Light

Saya mulai dengan ide "Dapatkah saya mengontrol cahaya dengan tangan saya sendiri dan mengekspresikan keinginan saya sendiri?"

Ini adalah 'Pola Cahaya Titik' yang memungkinkan Anda untuk membuat warna sendiri, mendesain pola Anda sendiri dengan warna tersebut, dan merasakan berbagai efek animasi.

Langkah 1: Bahan

Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
Bahan
  1. Arduino UNO x 13
  2. Strip LED piksel WS2901 atau WS2811 (130 LED)
  3. Saklar tombol x 1
  4. Sakelar jepret x 65
  5. Pengukur Potensial x 65
  6. kabel pelangi
  7. SMPS yang cukup listrik
  8. kabel konduktor
  9. Batang bulat transparan akrilik (diameter 30mm)
  10. Papan akrilik warna hitam (5T) (500mm * 790mm) x 2, (500mm * 35mm) x 2, (790mm * 35mm) x 2

Langkah 2: Rencana Konstruksi

Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi
Rencana Konstruksi

Langkah 3: Perangkat Keras: Desain Sirkuit

Perangkat Keras: Desain Sirkuit
Perangkat Keras: Desain Sirkuit
Perangkat Keras: Desain Sirkuit
Perangkat Keras: Desain Sirkuit
Perangkat Keras: Desain Sirkuit
Perangkat Keras: Desain Sirkuit
  1. Potong pelat akrilik seperti struktur di atas. (lihat langkah2)

  2. Satu buah LED neo-piksel diletakkan di bagian atas dan bawah lubang potensiometer, dan total 65 pasang LED neo-piksel terpasang.
  3. Sepasang LED neo-piksel dihubungkan bersama untuk membentuk satu pin Arduino.
  4. Pasang 65 potensimeter ke lubang potensiometer. (Letakkan di sisi berlawanan dari permukaan neo-piksel.)
  5. Pasang 65 sakelar jepret agar sesuai dengan lubang sakelar.
  6. Sebanyak tiga belas Arduino UNO terpasang ke masing-masing dari tiga belas zona untuk mengikat lima buah dari 65 buah perangkat keras menjadi satu Arduino UNO.
  7. Seperti yang ditunjukkan pada foto terlampir, Hubungkan potensiometer, sakelar jepret, dan LED neo-piksel ke pin Arduino UNO melalui kabel. (lihat langkah2)
  8. Pin GND dan 5V dari beberapa Arduino UNO dikumpulkan ke kabel kabel, kemudian dihubungkan ke daya eksternal. (lihat langkah2)
  9. Menghilangkan debu dengan tekanan Udara.

Langkah 4: Perangkat Keras: Pemotongan Akrilik

Perangkat Keras: Pemotongan Akrilik
Perangkat Keras: Pemotongan Akrilik
Perangkat Keras: Pemotongan Akrilik
Perangkat Keras: Pemotongan Akrilik
Perangkat Keras: Pemotongan Akrilik
Perangkat Keras: Pemotongan Akrilik
  1. Potong batang akrilik dengan panjang 50mm.

  2. Satu sisi batang akrilik dibor dengan ukuran dan kedalaman agar sesuai dengan bagian pengontrol potensimeter.
  3. Batang akrilik dipangkas sedikit lebih lebar dari lubang untuk jarak yang dapat masuk dengan baik ke dalam potensiometer.
  4. Sisi yang lain memberikan sedikit amplas agar cahaya dapat ditransmisikan dengan rapi.

Langkah 5: Kode Pemrograman Arduino

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

kode 'hsb ke rgb'를

#termasuk

//'adafruit_neopixel'헤더파일라는

//네오픽셀

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

#define NUMPIXELS 2 //네오픽셀 LED

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

//네오픽셀 Array

Adafruit_NeoPixel piksel = { Adafruit_NeoPixel(NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel(NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel(NUMPIXELS, PIN3, NEO_KHZ800, NEO_NU_GRB + NEOZEO,buah 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, }; //

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

val = dim_kurva[val]; sat = 255 - dim_curve[255 - sat];

//색조, (HSB / HSV)를 RGB로

//kurva_redup는 (반전)에서만. //이것은.

int r;

int g; int b; basis int;

jika (duduk == 0) {

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

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

beralih (warna / 60) {

kasus 0: r = val; g = (((val - basis) * rona) / 60) + basis; b = dasar; merusak;

kasus 1:

r = (((val - basis) * (60 - (warna % 60))) / 60) + basis; g = val; b = dasar; merusak;

kasus 2:

r = dasar; g = val; b = (((val - base) * (hue % 60)) / 60) + base; merusak;

kasus 3:

r = dasar; g = (((val - basis) * (60 - (warna % 60))) / 60) + basis; b = val; merusak;

kasus 4:

r = (((val - basis) * (warna % 60)) / 60) + basis; g = dasar; b = val; merusak;

kasus 5:

r = nilai; g = dasar; b = (((val - base) * (60 - (hue % 60))) / 60) + base; merusak; }

warna[indeks][0] = r;

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

}

int rgb_colors[NUM_LIGHTS][3]; //네오픽셀 warna rgb

int warna[NUM_LIGHTS]; //네오픽셀 rona int sat[NUM_LIGHTS]; //네오픽셀 int terang[NUM_LIGHTS]; //네오픽셀

//일반

int startSwitch = {8, 9, 10, 11, 12}; // hidup/mati 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 animasiButton = 7; //

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

//애니메이션 //디바운싱? 많은 시간 tombol intNegara; // int lastButtonState = TINGGI; // unsigned long lastDebounceTime = 0; // 0으로 unsigned long debounceDelay = 50; //;출력이 int MODE = 0; //애니메이션

int B_Interval[5]; //블링킹을

int B_Min = 100; //블링킹; int B_Maks = 500; //블링킹; int R_Interval = 50; //레인보우 int D_Interval = 10; //디밍

boolean B_state[5]; //블링킹을

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

//멀티테스킹

Milis arus panjang yang tidak ditandatangani; //현재시간

unsigned long B_previousMillis[5]; //각 모듈의 블링킹 unsigned long DR_Millis[5]; //각 모듈의 디밍 (예비) unsigned long R_previousMillis; //레인보우 unsigned long D_previousMillis; //디밍

boolean firstRainbow = benar; //레인보우

int Kecepatan Pelangi; //레인보우

int Terang = 100; //디밍 int Faktor Kecerahan = 1; //디밍 /////////////////////////////////////////////////////// /////////////////////////////////////////////////

batalkan pengaturan() {

for (int i = 0; i < NUM_LIGHTS; i++) { piksel.begin(); //네오픽셀 }

//버튼

for (int i = 0; i < NUM_LIGHTS; i++) { pinMode(startsSwitch, INPUT_PULLUP); //hidup/mati } pinMode(tombol animasi, INPUT_PULLUP); //애니메이션

for (int i = 0; i < NUM_LIGHTS; i++) { B_Interval = int(random(B_Min, B_Max)); //모듈별 (인터발) }

Serial.begin(9600); //통신

}

lingkaran kosong() {

MODE = PeriksaAnimMode(); //모드에

//버튼과.

for (int i = 0; i < NUM_LIGHTS; i++) { startState = !digitalRead(startsSwitch); //hidup/mati startState에 넣어준다 //startState = digitalRead(startsSwitch); colorVal = analogRead(colorPin); //가변저항에서 }

sakelar (MODE) { //애니메이션함수

kasus 0: pada(); //on함수 istirahat; //조건문에서

kasus 1:

Pelangi(); //pelangi함수 istirahat;

kasus 2:

peredupan(); // peredupan함수 istirahat;

kasus 3:

berkedip(); //berkedip함수 istirahat; }

for (int i = 0; i < NUM_LIGHTS; i++) { piksel.show(); //네오픽셀 }

}

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

int PeriksaAnimMode() {

//애니메이션.

//////////////////////////////////////////////////////////// /// saat iniMillis = mili(); // int membaca = digitalRead(tombol animasi); if (membaca != lastButtonState) { //입력핀으로부터 lastDebounceTime = milis(); //현재 }

if ((currentMillis - lastDebounceTime) > debounceDelay) {

if (membaca != buttonState) { //입력핀으로부터 받은

buttonState = membaca; //판독값을 status tombol에

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

MODUS++; //버튼모드 1씩 jika (MODE > 3) { MODE = 0; pertamaPelangi = benar; //레인보우 Faktor Kecerahan = 1; //디밍 Cerah = 15; //밝기는 15 } } } }

lastButtonState = membaca; //판독값을

kembali MODE; mode함수로 }

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

//fungsi mode animasi

//pada

void aktif() { Serial.println("pada"); //시리얼 on을 for (int i = 0; i < NUM_LIGHTS; i++) { color_set(i, colorVal); //가변저항 } }

//Pelangi

void pelangi() { Serial.println("hujan"); //시리얼 rain을 if (pelangi pertama) { RainbowSpeed = 0; //레인보우 pertamaPelangi = salah; //레인보우 색상 } } if (milis() - R_previousMillis > R_Interval) { //흐른 R_previousMillis = currentMillis; //현재시간을 RainbowSpeed += 10; //레인보우 10을 }

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

}

//peredupan

void peredupan() { Serial.println("redup"); //시리얼모니터에 redup을 Serial.println(Terang); //시리얼모니터에 Bright를 if (Millis saat ini - D_sebelumMillis > D_Interval) { //흐른 시간값이 D_sebelumMillis = saatMillis; //현재시간을 Terang += Faktor Kecerahan; //밝기에 증감값 1씩 } if (Bright 254) { Faktor Kecerahan = -1 * Faktor Kecerahan; } Cerah = kendala (Terang, 99, 254); //변수 99~최대값254

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

//berkedip

void berkedip() { Serial.println("berkedip"); //시리얼모니터에 berkedip를

untuk (int i = 0; i B_Interval) { //흐른 블링크

B_previousMillis = currentMillis; //현재시간을 이전의 B_state = !B_state; //각 모듈의 블링킹 상태변수의 반대값을 } } untuk (int i = 0; i < NUM_LIGHTS; i++) { if (B_state) { //모듈의 블링킹 읽 color_set(i, colorVal); //가변저항 값에 따라 } else { noColor_set(i); //읽히지 } }

}

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

//fungsi inti

//set warna

void color_set(int indeks, int colorSenser) {

if (startState[index]) { rona[index] = peta(colorSenser, 0, 1023, 0, 359); //0~1023값을 0~359값으로 (colorSenser에) getRGB(hue[index], 255, 255, rgb_colors, index); for (int i = 0; i < NUMPIXELS; i++) { piksel[indeks].setPixelColor(i, piksel[indeks]. Warna(rgb_colors[indeks][0], rgb_colors[indeks][1], rgb_colors[indeks] [2])); } //픽셀컬러 셋팅을 rgb_colors의 r, g, b으로 } else noColor_set(indeks); //컬러셋팅 }

//////tidak ada set warna

void noColor_set(int indeks) { //컬러셋팅

for (int i = 0; i < NUMPIXELS; i++) { piksel[indeks].setPixelColor(i, piksel[indeks]. Warna(0, 0, 0)); } //픽셀컬러 0, 0, 0으로 }

////redup Warna set

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

if (startState[index]) { rona[index] = peta(colorVal[index], 0, 1023, 0, 359); //0~1023값을 0~359값으로 (colorVal에) getRGB(hue[index], 255, BC, rgb_colors, index); for (int i = 0; i < NUMPIXELS; i++) { piksel[indeks].setPixelColor(i, piksel[indeks]. Warna(rgb_colors[indeks][0], rgb_colors[indeks][1], rgb_colors[indeks] [2])); } ///픽셀컬러 rgb_colors의 r, g, b으로 } else noColor_set(index); //컬러셋팅 }

Langkah 6: Tampilan Selesai

Direkomendasikan: