Indholdsfortegnelse:
- Trin 1: Materialer
- Trin 2: Byggeplan
- Trin 3: Hardware: Kredsløbsdesign
- Trin 4: Hardware: Skæring i akryl
- Trin 5: Arduino -programmeringskode
- Trin 6: Et færdigt look
Video: Dot Light -mønster: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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
- Arduino UNO x 13
- WS2901 eller WS2811 pixel LED strip (130 LED)
- Knapkontakt x 1
- Snapkontakt x 65
- Potentionsmåler x 65
- Regnbue kabel
- Strøm nok SMPS
- Lederkabel
- Akryl gennemsigtig rundstang (30 mm diameter)
- Sort farve Akrylplade (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2
Trin 2: Byggeplan
Trin 3: Hardware: Kredsløbsdesign
-
Skær akrylpladen som ovenstående struktur. (se trin 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.
- Et par neo-pixel LED'er er forbundet til en enkelt Arduino-pin.
- Monter 65 potentiometer til potentialemålerhullerne. (Læg den på den modsatte side af en neo-pixeleret overflade.)
- Fastgør 65 snapkontakter, så de passer til switchhullerne.
- 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.
- 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)
- GND- og 5V -ben på flere Arduino UNO'er opsamles til kabeltråde og forbindes derefter til ekstern strøm. (se trin 2)
- Fjern støvet ved lufttryk.
Trin 4: Hardware: Skæring i akryl
-
Skær akrylstangen til en længde på 50 mm.
- Den ene side af akrylstangen er boret til størrelsen og dybden for at matche controller -delen af potentionsmåleren.
- Akrylstangen er trimmet lidt bredere end hullet for en frigang, der kan passe godt ind i potentionsmåleren.
- 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:
Mystery Light Box (Night Light): 4 trin
Mystery Light Box (Night Light): Og dette er et sjovt lille projekt, der er let at lave, Dette projekt er en reference fra https://www.instructables.com/id/Arduino-Traffic-L…, men jeg har allerede ændret meget struktur på det originale websted, .Jeg tilføjer mere led, og jeg bruger skokassen til at pakke den, s
Sådan laver du Super Bright Flash Light Med LED - DIY: Super Bright Light: 11 trin
Sådan laver du Super Bright Flash Light Med LED - DIY: Super Bright Light: Se videoen i starten
LED Light Drawing Pens: Værktøjer til at tegne Light Doodles: 6 trin (med billeder)
LED Light Drawing Pens: Værktøjer til at tegne Light Doodles: Min kone Lori er en uafbrudt doodler, og jeg har spillet med lang eksponering fotografering i årevis. Inspireret af PikaPika light artistry -gruppen og lethed med digitale kameraer tog vi lysformet kunstform for at se, hvad vi kunne gøre.Vi har en stor
Ikea Light Hack (flexin Your Light): 5 trin
Ikea Light Hack (flexin Your Light): Da jeg besluttede at forbedre belysningen på mit skrivebord, vendte jeg mig til Ikea. Jeg fik Ikea Jansjo (http://www.ikea.com/us/en/catalog/products/10128748) og Ikea Lack (http://www.ikea.com/us/en/catalog/products/60124272 ) og fejlagtigt smed kvitteringen
Led Light Cap / Safty Cap eller Light: 4 trin
Led Light Cap / Safty Cap eller Light: dette er en af mine indgange til konkurrencen, jeg havde fået denne idé fra en fabrikatblade i værktøjskassen, kaldet h2on its a cap light for nalgeen flasker, så jeg sagde toi myselft i stedet for at købe det for 22 bucks lavede jeg mine egne mindre end et par dollars