Sisällysluettelo:

Pistevalokuvio: 6 vaihetta
Pistevalokuvio: 6 vaihetta

Video: Pistevalokuvio: 6 vaihetta

Video: Pistevalokuvio: 6 vaihetta
Video: Консультант от бога Tg: cadrolikk 2024, Marraskuu
Anonim
Image
Image
Pistevalokuvio
Pistevalokuvio
Pistevalokuvio
Pistevalokuvio

Aloitin ajatuksella "Voinko hallita valoa omin käsin ja ilmaista oman tahtoni?"

Se on "pistevalokuvio", jonka avulla voit luoda omia värejäsi itse, suunnitella omia kuvioita näillä väreillä ja kokea erilaisia animaatiotehosteita.

Vaihe 1: Materiaalit

Materiaalit
Materiaalit
Materiaalit
Materiaalit
Materiaalit
Materiaalit
Materiaalit
Materiaalit
  1. Arduino UNO x 13
  2. WS2901 tai WS2811 pikselin LED -nauha (130 LEDiä)
  3. Painike x 1
  4. Pikakytkin x 65
  5. Tarkkuusmittari x 65
  6. Rainbow -kaapeli
  7. Virtaa riittävästi SMPS
  8. Johtimen kaapeli
  9. Läpinäkyvä akryylipalkki (halkaisija 30 mm)
  10. Musta väri akryylilevy (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2

Vaihe 2: Rakennussuunnitelma

Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma
Rakennussuunnitelma

Vaihe 3: Laitteisto: piirin suunnittelu

Laitteisto: Piirisuunnittelu
Laitteisto: Piirisuunnittelu
Laitteisto: Piirisuunnittelu
Laitteisto: Piirisuunnittelu
Laitteisto: Piirisuunnittelu
Laitteisto: Piirisuunnittelu
  1. Leikkaa akryylilevy yllä olevan rakenteen mukaisesti. (katso vaihe 2)

  2. Yksi pala neo-pikselin LEDiä asetetaan potentiaalimittarin reiän ylä- ja alaosaan, ja niihin on kiinnitetty yhteensä 65 paria uuspikselin LED-valoja.
  3. Pari uuspikselin LED-valoja on kytketty yhteen muodostaen yhden Arduino-nastan.
  4. Asenna 65 potentiometriä potentiaalimittarin reikiin. (Aseta se uuspikselipinnan vastakkaiselle puolelle.)
  5. Kiinnitä 65 pikakytkintä kytkimen reikien mukaan.
  6. Yhteensä 13 Arduinon UNO: ta on liitetty kuhunkin kolmetoista vyöhykettä, jotta voidaan yhdistää viisi kappaletta 65 laitteistoa yhteen Arduino UNO: hon.
  7. Liitä potentiaalimittarit, pikakytkimet ja uuspikselin LEDit Arduino UNO: n nastoihin johtimella, kuten oheisesta kuvasta näkyy. (katso vaihe 2)
  8. Useiden Arduinon UNO -laitteiden GND- ja 5V -nastat kerätään kaapelijohtoihin ja kytketään sitten ulkoiseen virtalähteeseen. (katso vaihe 2)
  9. Poista pöly ilmanpaineella.

Vaihe 4: Laitteisto: Akryylileikkaus

Laitteisto: Akryylileikkaus
Laitteisto: Akryylileikkaus
Laitteisto: Akryylileikkaus
Laitteisto: Akryylileikkaus
Laitteisto: Akryylileikkaus
Laitteisto: Akryylileikkaus
  1. Leikkaa akryylitanko 50 mm: n pituiseksi.

  2. Akryylisauvan toinen puoli on porattu sopivan kokoiseksi ja syväksi potentiaalimittarin ohjainosan mukaan.
  3. Akryylitanko on leikattu hieman leveämmäksi kuin reikä, jotta se mahtuu hyvin potentiaalimittariin.
  4. Toisella puolella on pieni hiekkapaperi, jotta valo voidaan siirtää siististi.

Vaihe 5: Arduino -ohjelmointikoodi

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

'hsb - rgb' -koodi 를 참고 한 사이트

#sisältää

// '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 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

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

Adafruit_NeoPixel pikseliä = {Adafruit_NeoPixel (NUMPIXELS, PIN1, 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 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 의 의 번호 세번째 // 세번째 인자 값 은 네오 픽셀

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

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

const tavu 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 -indeksi) {

val = himmeä käyrä [val]; la = 255 - himmeä käyrä [255 - sat];

// 색조, 채도 및 밝기 (HSB /HSV) tai RGB

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

int r;

int g; int b; int pohja;

jos (la = = 0) {

värit [hakemisto] [0] = val; värit [hakemisto] [1] = val; värit [hakemisto] [2] = val; } muuta {

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

kytkin (hue / 60) {

tapaus 0: r = val; g = ((((val - emäs) * sävy) / 60) + emäs; b = emäs; tauko;

tapaus 1:

r = ((((val - emäs) * (60 - (sävy % 60))) / 60) + emäs; g = val; b = emäs; tauko;

tapaus 2:

r = emäs; g = val; b = ((((val - emäs) * * (sävy % 60)) / 60) + emäs; tauko;

tapaus 3:

r = emäs; g = ((((val - emäs) * (60 - (sävy % 60))) / 60) + emäs; b = val; tauko;

tapaus 4:

r = ((((val - emäs) * * (sävy % 60)) / 60) + emäs; g = emäs; b = val; tauko;

tapaus 5:

r = val; g = emäs; b = ((((val - emäs) * (60 - (sävy % 60))) / 60) + emäs; tauko; }

värit [hakemisto] [0] = r;

värit [hakemisto] [1] = g; värit [hakemisto] [2] = b; }

}

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

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

// 일반 변수 선언

int startsSwitch = {8, 9, 10, 11, 12}; // päälle/pois 버튼 핀 번호 boolean startState = {false, false, false, false, false}; // päälle/pois 상태 변수

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

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

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

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

// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 대한 에 대해서 지정된 시간 간격 으로 으로 함수 를 호출 하여 button int -painike Tila; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 로 unsigned long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 allekirjoittamaton pitkä debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수

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

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

boolen B_valtio [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수

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

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

allekirjoittamaton pitkä virtaMillis; // 현재 시간 변수

allekirjoittamaton pitkä B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 allekirjoittamaton pitkä DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) allekirjoittamaton pitkä R_previousMillis; // 레인보우 타이머 allekirjoittamaton pitkä D_previousMillis; // 디밍 타이머

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

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

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

void setup () {

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

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // päälle/pois 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

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

Sarja.alku (9600); // 통신 설정

}

void loop () {

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

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

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // päälle/pois 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analoginenLue (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

kytkin (TILA) {// 애니메이션 함수 스위치 문

tapaus 0: päällä (); // on 함수 실행 break; // 조건문 에서 빠져 나가라

tapaus 1:

sateenkaari(); // sateenkaari 함수 실행 tauko;

tapaus 2:

himmennys (); // himmennys 함수 실행 tauko;

tapaus 3:

vilkkuu (); // vilkkuva 함수 실행 tauko; }

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

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

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

buttonState = lukeminen; // 판독 값 을 -painike Tila 에 대입

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

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

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

paluu TILA; 함수 를 종료 하고 -tila 함수 로 값 을 리턴 하라}

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

// animaatiotilan vaihtelu

//päällä

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

//Sateenkaari

void sateenkaari () {Serial.println ("sade"); // 시리얼 모니터 에 sade 을 써라 if (ensimmäinenSateenkaari) {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); // 레인보우 컬러 셋팅}

}

// Himmennys

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

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

// Vilkkuu

void vilkkuva () {Serial.println ("vilkkua"); // 시리얼 모니터 에 vilkkuu 를 써라

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

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

}

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

// ydinfunktio

// värisarja

void color_set (int -indeksi, int colorSenser) {

if (startState [hakemisto]) {sävy [hakemisto] = kartta (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (värisävy [indeksi], 255, 255, rgb_colors, index); 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_colors 의 r, g, b 으로 설정} else noColor_set (indeksi); // 컬러 셋팅 하지 않음}

////// noColor set

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

for (int i = 0; i <NUMPIXELS; i ++) {pikseliä [indeksi].setPixelColor (i, pikseliä [indeksi]. Väri (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor set

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

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

Vaihe 6: Valmis ilme

Suositeltava: