Sadržaj:

Uzorak svjetlosne točke: 6 koraka
Uzorak svjetlosne točke: 6 koraka

Video: Uzorak svjetlosne točke: 6 koraka

Video: Uzorak svjetlosne točke: 6 koraka
Video: Деньги и достаток: 5 секретов, которые знают только богатые люди. Как привлечь изобилие, процветание 2024, Srpanj
Anonim
Image
Image
Dot Light Pattern
Dot Light Pattern
Dot Light Pattern
Dot Light Pattern

Počeo sam s idejom "Mogu li vlastitim rukama kontrolirati svjetlo i izraziti svoju volju?"

To je 'Dot Light Pattern' koji vam omogućuje da sami stvorite vlastite boje, dizajnirate vlastite uzorke s tim bojama i doživite različite animacijske efekte.

Korak 1: Materijali

Materijali
Materijali
Materijali
Materijali
Materijali
Materijali
Materijali
Materijali
  1. Arduino UNO x 13
  2. WS2901 ili WS2811 piksela LED traka (130 LEDS)
  3. Gumbni prekidač x 1
  4. Snap prekidač x 65
  5. Mjerač potencijala x 65
  6. Dugin kabel
  7. Snaga dovoljna SMPS
  8. Provodnički kabel
  9. Akrilna prozirna okrugla šipka (promjer 30 mm)
  10. Akrilna ploča u crnoj boji (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2

Korak 2: Plan izgradnje

Plan izgradnje
Plan izgradnje
Plan izgradnje
Plan izgradnje
Plan izgradnje
Plan izgradnje
Plan izgradnje
Plan izgradnje

Korak 3: Hardver: Dizajn kruga

Hardver: Dizajn kruga
Hardver: Dizajn kruga
Hardver: Dizajn kruga
Hardver: Dizajn kruga
Hardver: Dizajn kruga
Hardver: Dizajn kruga
  1. Izrežite akrilnu ploču poput gornje strukture. (vidi korak 2)

  2. Jedan dio neopikselne LED diode stavlja se na gornju i donju rupu pokazivača, a ukupno je priključeno 65 parova neopikselnih LED dioda.
  3. Par LED dioda neo-piksela spojeni su zajedno kako bi formirali jedan Arduino pin.
  4. Postavite 65 mjerača potencijala na rupe mjerača napona. (Stavite ga na suprotnu stranu neo-pikselirane površine.)
  5. Pričvrstite 65 prekidača za zatvaranje tako da odgovaraju rupama za prekidače.
  6. Ukupno je trinaest Arduino UNO -ova spojeno na svaku od trinaest zona kako bi se povezalo pet komada od 65 komada hardvera u jedan Arduino UNO.
  7. Kao što je prikazano na priloženoj fotografiji, žicom spojite pokazivače snage, prekidače i neo-pikselne LED diode na pinove Arduino UNO-a. (vidi korak 2)
  8. GND i 5V pinovi nekoliko Arduino UNO -a prikupljaju se na kabelske žice, a zatim spajaju na vanjsko napajanje. (vidi korak 2)
  9. Uklonite prašinu pritiskom zraka.

Korak 4: Hardver: Akrilno rezanje

Hardver: Akrilno rezanje
Hardver: Akrilno rezanje
Hardver: Akrilno rezanje
Hardver: Akrilno rezanje
Okov: Akrilno rezanje
Okov: Akrilno rezanje
  1. Izrežite akrilnu šipku na duljinu od 50 mm.
  2. Jedna strana akrilne šipke izbušena je prema veličini i dubini kako bi odgovarala dijelu regulatora pokazivača napona.
  3. Akrilna šipka obrezana je nešto šire od rupe radi zazora koji se može dobro uklopiti u mjerač potencijala.
  4. Druga strana daje malo brusnog papira kako bi se svjetlo moglo uredno prenositi.

Korak 5: Arduino programski kod

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

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

#uključi

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

//픽셀 연결 핀 번호 선언

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

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

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

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

Adafruit_NeoPixel piksela = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN 2, 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 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 의 번호 바뀌는 zastava 세번째 인자 값 은 네오 의 타입 에 따라 바뀌는

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

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

const bajt 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 nijansa, int sat, int val, int boje [5] [3], int indeks) {

val = dim_kriva [val]; sat = 255 - dim_kriva [255 - sat];

// Pokretanje, spremanje datoteka (HSB /HSV) ili RGB datoteke

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

int r;

int g; int b; int baza;

if (sat == 0) {

boje [indeks] [0] = val; boje [indeks] [1] = val; boje [indeks] [2] = val; } else {

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

prekidač (nijansa / 60) {

slučaj 0: r = val; g = (((val - baza) * nijansa) / 60) + baza; b = baza; pauza;

slučaj 1:

r = (((val - baza) * (60 - (nijansa % 60))) / 60) + baza; g = val; b = baza; pauza;

slučaj 2:

r = baza; g = val; b = (((val - baza) * (nijansa % 60)) / 60) + baza; pauza;

slučaj 3:

r = baza; g = (((val - baza) * (60 - (nijansa % 60))) / 60) + baza; b = val; pauza;

slučaj 4:

r = (((val - baza) * (nijansa % 60)) / 60) + baza; g = baza; b = val; pauza;

slučaj 5:

r = val; g = baza; b = (((val - baza) * (60 - (nijansa % 60))) / 60) + baza; pauza; }

boje [indeks] [0] = r;

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

}

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

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

// 일반 변수 선언

int startSwitch = {8, 9, 10, 11, 12}; // uključeno/isključeno 버튼 핀 번호 boolean startState = {false, false, false, false, false}; // uključeno/isključeno 상태 변수

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

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

int animationButton = 7; // 모드 변환 버튼 핀 번호

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

// 애니메이션 모든 변환 변환 위한 버튼 디 바운싱 디 디 디 디 디? T 시간 내 많은 이벤트 가 발생 하는것 에 대한 에 대해서 지정된 t t 으로 함수 를 호출 t int buttonState; // int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 igned unsigned long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 unsigned long debounceDelay = 50; // in MOD 바운싱 타임 설정; int MODE = 0; // 애니메이션 모드 변수

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

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

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

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

// 멀티 테스 킹 킹 을 위한 시간 변수 선언

nepotpisana duga strujaMillis; // 현재 시간 변수

bez potpisa dugi B_prethodniMillis [5]; // 각 모듈 의 블 링킹 타이머 nepotpisani dugi DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) unsigned long R_previousMillis; // 레인보우 타이머 unsigned long D_previousMillis; // 디밍 타이머

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

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

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

void setup () {

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

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // uključeno/isključeno 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

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

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

}

void loop () {{100} {101}

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

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

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

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

slučaj 0: on (); // na 함수 실행 prekid; // 조건문 에서 빠져 나가라

slučaj 1:

duga(); // duga 함수 실행 prekid;

slučaj 2:

zatamnjivanje (); // zatamnjivanje 함수 실행 prekid;

slučaj 3:

trepćući (); // trepćući 함수 실행 prekid; }

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

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

if (čitanje! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 과 비교

buttonState = čitanje; // 판독 값 을 buttonState 에 대입

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

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

lastButtonState = čitanje; // 판독 값 을 을 의 버튼 상태 에 대입

return MODE; Način rada 함수 를 종료 하고 함수 로 값 을 리턴 하라}

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

// način rada animacije

//na

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

//Duga

void rainbow () {Serial.println ("kiša"); // 시리얼 모니터 에 kiša 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_prethodniMillis> R_Interval) {// 흐른 시간 값 값 이 레인보우 인터벌 값 보다 R_prethodniMillis = currentMillis; // RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}

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

}

// Zatamnjivanje

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

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

// Trepćući

void blinking () {Serial.println ("blink"); // 시리얼 모니터 에 treptaj 를 써라

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

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

}

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

// jezgrena funkcija

// skup boja

void color_set (int indeks, int colorSenser) {

if (startState [indeks]) {nijansa [indeks] = karta (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 slika 0 ~ 359 값 으로 매핑 한 값 을 가지고 color (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); za (int i = 0; i <NUMPIXELS; i ++) {piksela [indeks].setPixelColor (i, pikseli [indeks]. Boja (rgb_colors [indeks] [0], rgb_colors [indeks] [1], rgb_colors [indeks]) [2])); } // 픽셀 컬러 셋팅 을 rgb_boje 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}

////// noColor set

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

za (int i = 0; i <NUMPIXELS; i ++) {piksela [indeks].setPixelColor (i, pikseli [indeks]. Boja (0, 0, 0)); } // 픽셀 컬러 세팅 세팅, 0, 0, 0 으로 설정}

//// dimColor set

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

if (startState [indeks]) {nijansa [indeks] = karta (colorVal [indeks], 0, 1023, 0, 359); // 0 ~ 1023 slika 0 ~ 359 값 으로 매핑 한 값 을 가지고 color (colorVal 에) getRGB (nijansa [indeks], 255, BC, rgb_colors, indeks); za (int i = 0; i <NUMPIXELS; i ++) {piksela [indeks].setPixelColor (i, pikseli [indeks]. Boja (rgb_colors [indeks] [0], rgb_colors [indeks] [1], rgb_colors [indeks]) [2])); } /// 픽셀 컬러 셋팅 을 rgb_boje 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}

Korak 6: Gotov izgled

Preporučeni: