Përmbajtje:

Modeli i dritës së pikave: 6 hapa
Modeli i dritës së pikave: 6 hapa

Video: Modeli i dritës së pikave: 6 hapa

Video: Modeli i dritës së pikave: 6 hapa
Video: Milan, Italy Evening Walking Tour - 4K60fps with Captions - Prowalk Tours 2024, Korrik
Anonim
Image
Image
Modeli i dritës së pikave
Modeli i dritës së pikave
Modeli i dritës së pikave
Modeli i dritës së pikave

Fillova me idenë e "A mund ta kontrolloj dritën me duart e mia dhe të shpreh vullnetin tim?"

Shtë një 'Model Dot Light' që ju lejon të krijoni ngjyrat tuaja vetë, të hartoni modelet tuaja me ato ngjyra dhe të përjetoni efekte të ndryshme animacioni.

Hapi 1: Materialet

Materiale
Materiale
Materiale
Materiale
Materiale
Materiale
Materiale
Materiale
  1. Arduino UNO x 13
  2. Rrip LED WS2901 ose WS2811 pixel (130 LEDS)
  3. Çelësi i butonit x 1
  4. Çelësi i parakohshëm x 65
  5. Matësi i potencialit x 65
  6. Kabllo ylberi
  7. Fuqia e mjaftueshme SMPS
  8. Kabllo përcjellëse
  9. Shufër akrilike transparente e rrumbullakët (diametër 30 mm)
  10. Pllakë akrilike me ngjyrë të zezë (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2

Hapi 2: Plani i Ndërtimit

Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit
Plani i Ndërtimit

Hapi 3: Hardware: Dizajni i Qarkut

Hardware: Dizajni i Qarkut
Hardware: Dizajni i Qarkut
Hardware: Dizajni i Qarkut
Hardware: Dizajni i Qarkut
Hardware: Dizajni i Qarkut
Hardware: Dizajni i Qarkut
  1. Pritini pllakën akrilike si struktura e mësipërme. (shiko hapin 2)

  2. Një copë LED neo-piksel vendoset në pjesën e sipërme dhe të poshtme të vrimës së matësit të potencialit dhe janë bashkangjitur gjithsej 65 palë LED neo-pixel.
  3. Një palë LED neo-pixel janë lidhur së bashku për të formuar një kunj të vetëm Arduino.
  4. Vendosni 65 metra potenciale në vrimat e potenometrit. (Vendoseni në anën e kundërt të një sipërfaqeje neo-piksel.)
  5. Bashkangjitni 65 çelësa të parakohshëm që të përputhen me vrimat e ndërprerësit.
  6. Gjithsej trembëdhjetë UNO të Arduino janë bashkangjitur në secilën prej trembëdhjetë zonave në mënyrë që të lidhin pesë copë prej 65 copë pajisje në një Arduino UNO.
  7. Siç tregohet në foton e bashkangjitur, Lidhni matësit e potencialit, çelsat e parakohshëm dhe LED-të neo-piksel me kunjat e Arduino UNO me tela. (shiko hapin 2)
  8. Kunjat GND dhe 5V të disa UNO -ve Arduino mblidhen në telat e kabllove, pastaj lidhen me energjinë e jashtme. (shiko hapin 2)
  9. Hiqeni pluhurin nga presioni i ajrit.

Hapi 4: Hardware: Prerje akrilike

Hardware: Prerje akrilike
Hardware: Prerje akrilike
Hardware: Prerje akrilike
Hardware: Prerje akrilike
Hardware: Prerje akrilike
Hardware: Prerje akrilike
  1. Pritini shufrën akrilike në një gjatësi prej 50 mm.
  2. Njëra anë e shufrës akrilike është shpuar në madhësi dhe thellësi që të përputhet me pjesën kontrolluese të potencometrit.
  3. Shufra akrilike është e shkurtuar pak më e gjerë se vrima për një hapësirë që mund të përshtatet mirë në matësin e potencës.
  4. Ana tjetër jep pak letër zmerile në mënyrë që drita të transmetohet me kujdes.

Hapi 5: Kodi i Programimit Arduino

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

'hsb në rgb' kod 를 참고 한 사이트

#përfshi

// 'adafruit_neopixel' 헤더 파일 라는 라는 라이브러리 를

// 픽셀 연결 핀 번호

#përcakto PIN1 2 #përcakto PIN2 3 #përcakto PIN3 4 #përcakto PIN4 5 #përcakto PIN5 6

#përcaktoni NUMPIXELS 2 // 네오 픽셀 LED 갯수

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

// 네오 픽셀 ray 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_GRB + NEO_KHZ800) Adafruit_NeoPixel (NUMPIXELS, PIN4, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 위해 // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 번호 번호 번호 번호 번호 // 세번째 인자 값 은 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는 바뀌는

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

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

konst 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 - ul];

// 색조, 밝기 (HSB /HSV) 를 RGB 변환 변환

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

int r;

int g; int b; int bazë;

nëse (ul == 0) {

ngjyrat [indeksi] [0] = val; ngjyrat [indeksi] [1] = val; ngjyrat [indeksi] [2] = val; } tjetër {

bazë = ((255 - ul) * val) >> 8;

kaloni (nuancë / 60) {

rasti 0: r = val; g = (((val - bazë) * nuancë) / 60) + bazë; b = baza; pushim;

rasti 1:

r = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; g = val; b = baza; pushim;

rasti 2:

r = baza; g = val; b = (((val - bazë) * (nuanca % 60)) / 60) + bazë; pushim;

rasti 3:

r = bazë; g = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; b = val; pushim;

rasti 4:

r = (((val - bazë) * (nuanca % 60)) / 60) + bazë; g = bazë; b = val; pushim;

rasti 5:

r = val; g = bazë; b = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; pushim; }

ngjyrat [indeksi] [0] = r;

ngjyrat [indeksi] [1] = g; ngjyrat [indeksi] [2] = b; }

}

int rgb_ngjyrat [NUM_LIGHTS] [3]; // color 픽셀 오브젝트 갯수 마다 ngjyra rgb

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

// 일반 변수 선언

int fillonShprehje = {8, 9, 10, 11, 12}; // on/off 버튼 핀 St startState boolean = {false, false, false, false, false, false}; // ndez/fik 상태 변수

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

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

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

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

// 애니메이션 모든 변환 을 버튼 버튼 디 선언 디 // 디 바운싱? Button 시간 내 이벤트 가 발생 발생 button button button 대해서 지정된 지정된 시간 button button button button button 해결 button button button button button button int buttonState; // 핀 으로부터 의 현재 값 int lastButtonState = LART; // 이전 의 판독 값 은 켜진 로 로 pa shenjë longDebounceTime = 0; // 출력 핀 이 마지막 전환 전환 된 은 으로 0 deb debounce e gjatë e panënshkruarVonesë = 50; // 디 바운싱 타임 설정; 이 깜빡 한다 한다 në MODE = 0; // 애니메이션 모드 변수

int B_Intervali [5]; // 블 링킹 을 위한 각 모듈 모듈

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

shteti boolean B_ [5]; // 블 링킹 을 위한 모듈 모듈 모듈

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

// 멀티 테스 킹 애니메이션 위한 위한 위한

rrymë e gjatë e panënshkruarMillis; // 현재 시간 변수

i panënshkruar i gjatë B_paraprakMillis [5]; // 각 모듈 의 블 링킹 타이머 DR_Millis i gjatë i panënshkruar [5]; // 모듈 의 디밍 예비 (예비) pa shenjë e gjatë R_previousMillis; // 레인보우 타이머 pa shenjë e gjatë D_previousMillis; // 디밍 타이머

boolean firstRainbow = e vërtetë; // 레인보우 색상 초기화 상태

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

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

void setup () {

për (int i = 0; i <NUM_LIGHTS; i ++) {pixel .filloj (); // 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

për (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (fillon Ndërrimi , INPUT_PULLUP); // ndez/fik 버튼 인풋 설정} pinMode (animacionButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

për (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (rastësor (B_Min, B_Max)); // 모듈 별 블 링킹 속도 인터발 (인터발) 생성 생성}

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

}

lak void () {

MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 함수 함수 를

// 버튼 과 가변 저항 을 값 을.

për (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (fillonSwitch ); // ndezur/fikur 을 에서 읽은 값 의 St St startState 넣어 넣어 준다 // startState = digitalRead (fillonShpejtimi ); colorVal = analogRead (ngjyraPin ); // 저항 에서 읽은 값 을 가변 가변 값 에 넣는다 넣는다 넣는다

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

rasti 0: më (); // në pushim 함수 실행; // 조건문 에서 빠져 나가라

rasti 1:

ylber (); // ylber 실행 실행 thyerje;

rasti 2:

zbehje (); // zbehje 실행 실행 pushim;

rasti 3:

vezullim (); // ndezje ink 실행 pushim; }

për (int i = 0; i <NUM_LIGHTS; i ++) {pixel .shfaq (); // 픽셀 오브젝트 배열 켜라 켜라}

}

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

int CheckAnimMode () {

// 애니메이션 선택 버튼 을 읽어 모드 모드.

//////////////////////////////////////////////////////////////// /// aktualeMillis = millis (); // 시간 측정 int leximi = digitalRead (animacionButton); nëse (leximi! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 의 비교 비교 비교 비교 비교 lastDebounceTime = milis (); // 시간 을 출력 핀 이 마지막 마지막 으로

if ((aktualeMillis - lastDebounceTime)> debounceDelay) {

nëse (leximi! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 판독

buttonState = leximi; // 판독 값 을 buttonState 에 대입

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

MODE ++; // 버튼 모드 1 증가 증가 nëse (MODE> 3) {MODE = 0; firstRainbow = e vërtetë; // 레인보우 색상 초기화 상태 act BrightnessFactor = 1; // 디밍 증감 값 E ndritshme = 15; // 밝기 는 15}}}}

lastButtonState = lexim; // 판독 값 을 이전 버튼 버튼 버튼

kthimi MODE; Modaliteti 함수 를 하고 로 로 값 리턴 하라 하라}

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

// funksionimi i modalitetit të animacionit

// më

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

// Ylber

void ylber () {Serial.println ("shi"); // 시리얼 모니터 에 shi 을 써라 nëse (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 if} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 _ _ R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 라 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}

për (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 컬러 셋팅}

}

// Zbehja e dritës

void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 ial Serial.println (E ndritshme); // 시리얼 모니터 에 E ndritshme 써라 nëse (aktualMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 _ _ D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 라 ight ight Bright += BrightnessFactor; // 밝기 에 디밍 증감 씩 1 씩 올려라} nëse (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = kufizoj (Bright, 99, 254); // 변수 밝기 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정

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

// Pulsim

pavlefshëm pulsim () {Serial.println ("vezullim"); // ink 모니터 에 ndezje ink 써라

për (int i = 0; i B_Interval ) {// 흐른 시간 값 이 이 블링크 값 보다

B_paraprakMillis = aktualMillis; // 현재 시간 을 이전 의 _ _ _ B_stat =! Shteti B_ ; // 각 모듈 링킹 상태 상태 반대 값 을 을 을}}}} për (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 읽 Set vendosja e ngjyrave (i, colorVal ); // 가변 저항 값 에 따라 컬러 else} tjetër {noColor_set (i); // 않으면 컬러 하지 하지 않음}}}

}

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

// funksioni kryesor

// set ngjyrash

void color_set (indeksi int, int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 값 값 을 color color color color (colorSenser 에) getRGB (nuanca [indeksi], 255, 255, rgb_colors, index); për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} tjetër noColor_set (indeksi); // 컬러 셋팅 하지 않음}

////// noColor set

pavlefshmeNcolor_set (int index) {// 컬러 셋팅 하지 않는 함수

për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Ngjyra (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// set dimColor

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

if (startState [index]) {hue [index] = map (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 한 color color color color color color (colorVal) getRGB (nuanca [indeksi], 255, pes, rgb_colors, index); për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} tjetër noColor_set (indeksi); // 컬러 셋팅 하지 않음}

Hapi 6: Një vështrim i përfunduar

Recommended: