Daftar Isi:
- Langkah 1: Bahan
- Langkah 2: Rencana Konstruksi
- Langkah 3: Perangkat Keras: Desain Sirkuit
- Langkah 4: Perangkat Keras: Pemotongan Akrilik
- Langkah 5: Kode Pemrograman Arduino
- Langkah 6: Tampilan Selesai
Video: Pola Dot Light: 6 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:56
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
- Arduino UNO x 13
- Strip LED piksel WS2901 atau WS2811 (130 LED)
- Saklar tombol x 1
- Sakelar jepret x 65
- Pengukur Potensial x 65
- kabel pelangi
- SMPS yang cukup listrik
- kabel konduktor
- Batang bulat transparan akrilik (diameter 30mm)
- Papan akrilik warna hitam (5T) (500mm * 790mm) x 2, (500mm * 35mm) x 2, (790mm * 35mm) x 2
Langkah 2: Rencana Konstruksi
Langkah 3: Perangkat Keras: Desain Sirkuit
-
Potong pelat akrilik seperti struktur di atas. (lihat langkah2)
- Satu buah LED neo-piksel diletakkan di bagian atas dan bawah lubang potensiometer, dan total 65 pasang LED neo-piksel terpasang.
- Sepasang LED neo-piksel dihubungkan bersama untuk membentuk satu pin Arduino.
- Pasang 65 potensimeter ke lubang potensiometer. (Letakkan di sisi berlawanan dari permukaan neo-piksel.)
- Pasang 65 sakelar jepret agar sesuai dengan lubang sakelar.
- 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.
- Seperti yang ditunjukkan pada foto terlampir, Hubungkan potensiometer, sakelar jepret, dan LED neo-piksel ke pin Arduino UNO melalui kabel. (lihat langkah2)
- Pin GND dan 5V dari beberapa Arduino UNO dikumpulkan ke kabel kabel, kemudian dihubungkan ke daya eksternal. (lihat langkah2)
- Menghilangkan debu dengan tekanan Udara.
Langkah 4: Perangkat Keras: Pemotongan Akrilik
-
Potong batang akrilik dengan panjang 50mm.
- Satu sisi batang akrilik dibor dengan ukuran dan kedalaman agar sesuai dengan bagian pengontrol potensimeter.
- Batang akrilik dipangkas sedikit lebih lebar dari lubang untuk jarak yang dapat masuk dengan baik ke dalam potensiometer.
- 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:
Pola Radiasi ESP8266: 7 Langkah
Pola Radiasi ESP8266: ESP8266 adalah modul mikrokontroler yang populer karena dapat dihubungkan ke internet melalui WiFi onboard. Hal ini membuka banyak peluang bagi para penghobi untuk membuat gadget remote control dan perangkat IoT dengan har
Pola LED yang Memuaskan: 9 Langkah
Pola LED yang Memuaskan: Bagi banyak orang, tidur telah menjadi komoditas yang hampir tidak dapat dicapai, kemewahan yang disediakan bagi segelintir orang yang beruntung yang tidak merasakan berbagai tanggung jawab menarik mereka ke arah yang berbeda sekaligus. Tidur sangat penting dan dapat membantu Anda merasa segar
Pola LED (Pola Cahaya Berbeda): 3 Langkah
Pola LED (Pola Cahaya Berbeda): Ide: Proyek saya adalah pola warna LED. Proyek ini berisi 6 LED yang semuanya ditenagai dan berkomunikasi dengan Arduino. Ada 4 pola berbeda yang akan berputar dan akan dimainkan dalam satu lingkaran. Ketika satu pola berakhir, pola lainnya
D4E1 - Pembuat Seni: Pembuat Pola Kertas: 8 Langkah
D4E1 - Pembuat Seni: Pembuat Pola Kertas: Kami adalah 4 mahasiswa Desain Produk Industri dari Howest dan ini adalah pembuat seni kami. Apa itu pembuat seni dan mengapa. Pembuat seni adalah mesin sederhana yang memungkinkan anak-anak penyandang disabilitas kognitif membuat bahan kerajinan yang menyenangkan atau membentuk tugas sederhana yang
Cara Membuat Musik Reaktif WS2812B LED Dengan Multi-pola: 4 Langkah
Cara Membuat Musik Reaktif WS2812B LED Dengan Multi-pola: WS2812, WS2812B adalah sumber cahaya LED yang dikontrol secara cerdas. ia memiliki chip kontrol bawaan dan memiliki 4 pin. V+,V-,Makan & Dout.Untuk mengontrol LED ini kami ingin menggunakan MCU seperti Arduino, PIC atau Rasberry pie.Saya menggunakan Arduino UNO untuk proyek ini