Orodha ya maudhui:

Mfano wa Nuru ya Nukta: Hatua 6
Mfano wa Nuru ya Nukta: Hatua 6

Video: Mfano wa Nuru ya Nukta: Hatua 6

Video: Mfano wa Nuru ya Nukta: Hatua 6
Video: ЗЛО ЕЩЕ ЗДЕСЬ ЖУТКАЯ НОЧЬ В СТРАШНОМ ДОМЕ / EVIL IS STILL HERE A TERRIBLE NIGHT IN A TERRIBLE HOUSE 2024, Julai
Anonim
Image
Image
Mfano wa Nuru ya Nukta
Mfano wa Nuru ya Nukta
Mfano wa Nuru ya Nukta
Mfano wa Nuru ya Nukta

Nilianza na wazo la "Je! Ninaweza kudhibiti nuru kwa mikono yangu mwenyewe na kuelezea mapenzi yangu mwenyewe?"

Ni 'Dot Light Pattern' ambayo hukuruhusu kuunda rangi zako mwenyewe, tengeneza muundo wako na rangi hizo, na upate athari anuwai za uhuishaji.

Hatua ya 1: Vifaa

Vifaa
Vifaa
Vifaa
Vifaa
Vifaa
Vifaa
Vifaa
Vifaa
  1. Arduino UNO x 13
  2. WS2901 au WS2811 pixel LED strip (130 LEDS)
  3. Kitufe kubadili x 1
  4. Kubadilisha snap x 65
  5. Kipimo cha nguvu x 65
  6. Cable ya upinde wa mvua
  7. Nguvu ya kutosha SMPS
  8. Cable ya kondakta
  9. Baa ya duru ya uwazi ya akriliki (kipenyo cha 30mm)
  10. Rangi nyeusi Akriliki bodi (5T) (500mm * 790mm) x 2, (500mm * 35mm) x 2, (790mm * 35mm) x 2

Hatua ya 2: Mpango wa Ujenzi

Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi
Mpango wa Ujenzi

Hatua ya 3: Vifaa: Vifaa vya Mzunguko

Vifaa: Uundaji wa Mzunguko
Vifaa: Uundaji wa Mzunguko
Vifaa: Uundaji wa Mzunguko
Vifaa: Uundaji wa Mzunguko
Vifaa: Uundaji wa Mzunguko
Vifaa: Uundaji wa Mzunguko
  1. Kata sahani ya akriliki kama muundo hapo juu. (tazama hatua2)

  2. Kipande kimoja cha pikseli ya LED imewekwa juu na chini ya shimo la mita, na jumla ya jozi 65 za LED za neo-pixel zimeambatanishwa.
  3. Jozi za LEDs mamboleo zimeunganishwa pamoja kuunda pini moja ya Arduino.
  4. Weka vipodozi 65 vya ufinyanzi kwenye mashimo ya mita. (Weka upande wa pikseli mamboleo.)
  5. Ambatisha swichi 65 za kufanana na mashimo ya kubadili.
  6. Jumla ya UNOs kumi na tatu za Arduino zimeambatanishwa kwa kila moja ya maeneo kumi na tatu ili kufunga vipande vitano vya vipande 65 vya vifaa katika Arduino UNO moja.
  7. Kama inavyoonyeshwa kwenye picha iliyoambatishwa, Unganisha viunga vya maji, swichi za snap na LED za neo-pixel kwenye pini za Arduino UNO kwa waya. (tazama hatua2)
  8. Pini za GND na 5V za UNO kadhaa za Arduino hukusanywa kwa waya za kebo, kisha kuunganishwa na nguvu ya nje. (tazama hatua2)
  9. Ondoa vumbi kwa shinikizo la Hewa.

Hatua ya 4: Vifaa: Kukata Acrylic

Vifaa: Kukata Acrylic
Vifaa: Kukata Acrylic
Vifaa: Kukata Acrylic
Vifaa: Kukata Acrylic
Vifaa: Kukata Acrylic
Vifaa: Kukata Acrylic
  1. Kata fimbo ya akriliki kwa urefu wa 50mm.

  2. Upande mmoja wa fimbo ya akriliki umepigwa kwa saizi na kina ili kufanana na sehemu ya mtawala wa mita ya maji.
  3. Fimbo ya akriliki imepunguzwa kwa upana kidogo kuliko shimo kwa kibali ambacho kinaweza kutoshea vizuri kwenye bomba la maji.
  4. Upande wa pili unatoa sandpaper kidogo ili taa iweze kupitishwa vizuri.

Hatua ya 5: Msimbo wa Programu ya Arduino

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

nambari 'hsb kwa rgb' 를 참고 한 사이트

# pamoja

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

// 네오 픽셀 연결 핀 번호 선언

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

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

#fafanua NURU NUM_T 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

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

Saizi za Adafruit_NeoPixel = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS), Adafruit_NeoPixel (NUMPIXELS) Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 를 다 한다. // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 연결된 연결된 아두 노 핀 핀 번호

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

////// 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, }; //

utupu GetRGB (int hue, int sat, int val, int rangi [5] [3], int index) {

val = dim_curve [val]; ameketi = 255 - dim_curve [255 - ameketi];

// 색조, 채도 및 밝기 (HSB / HSV) 를 RGB 로 변환

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

int r;

int g; int b; msingi;

ikiwa (ameketi == 0) {

rangi [index] [0] = val; rangi [index] [1] = val; rangi [index] [2] = val; } mwingine {

msingi = ((255 - kukaa) * val) >> 8;

kubadili (hue / 60) {

kesi 0: r = val; g = (((val - msingi) * hue) / 60) + msingi; b = msingi; kuvunja;

kesi 1:

r = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; g = val; b = msingi; kuvunja;

kesi 2:

r = msingi; g = val; b = (((val - msingi) * (hue% 60)) / 60) + msingi; kuvunja;

kesi ya 3:

r = msingi; g = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; b = val; kuvunja;

kesi ya 4:

r = (((val - msingi) * (hue% 60)) / 60) + msingi; g = msingi; b = val; kuvunja;

kesi 5:

r = val; g = msingi; b = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; kuvunja; }

rangi [index] [0] = r;

rangi [index] [1] = g; rangi [index] [2] = b; }

}

rangi rgb_color [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rangi ya rgb 선언

ndani ya rangi [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int ameketi [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언

// 일반 변수 선언

int startsSwitch = {8, 9, 10, 11, 12}; // on / off 버튼 핀 번호 boolean startState = {uongo, uwongo, uwongo, uwongo}; // kuwasha / kuzima 상태 변수

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

rangi ya rangi = {0, 0, 0, 0, 0}; // 가변 저항 초기 값

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

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

// Je, ni kwa nini? 짧은 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 으로 함수 를 호출 하여 해결 int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = JUU; // 이전 의 판독 값 은 켜진 상태 로 iliyosainiwa muda mrefu mwishoDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 unsigned muda mrefu 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; // 디밍 속도 변수

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

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

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

unsigned long longMillis; // 현재 시간 변수

isiyosainiwa B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 isiyosainiwa kwa muda mrefu DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) iliyosainiwa kwa muda mrefu R_previousMillis; // 레인보우 타이머 isiyosainiwa muda mrefu D_previousMillis; // 디밍 타이머

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

int Upinde wa mvua Speed; // 레인보우 변환 변수

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

usanidi batili () {

kwa (int i = 0; i <NUM_LIGHTS; i ++) saizi {{i]. anza (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

kwa (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (StartSwitch , INPUT_PULLUP); // kuwasha / kuzima 버튼 인풋 설정} pinMode (kifungo cha uhuishaji, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

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

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

}

kitanzi batili () {

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

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

kwa (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (StartSwitch ); // on / off 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (StartSwitch ); colorVal = AnalogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

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

kesi 0: on (); // kwenye 실행 실행 kuvunja; // 조건문 에서 빠져 나가라

kesi 1:

upinde wa mvua (); // upinde wa mvua 실행 실행 kuvunja;

kesi 2:

kupungua (); // kupunguka 실행 실행 kuvunja;

kesi ya 3:

kupepesa (); // kupepesa 실행 실행 kuvunja; }

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

}

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

int CheckAnimMode () {

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

/////////////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int kusoma = kusoma kwa dijiti (kifungo cha uhuishaji); ikiwa (kusoma! // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}

ikiwa ((currentMillis - lastDebounceTime)> debounceDelay) {

ikiwa (kusoma! = kifungoState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = kusoma; // kifungo 판독 값 을 Jimbo 에 대입

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

MODE ++; // 버튼 모드 1 씩 증가 ikiwa (MODE> 3) {MODE = 0; kwanzaRainbow = kweli; // 레인보우 색상 초기화 상태 켜짐 MwangazaFactor = 1; // 디밍 증감 값 Mkali = 15; // 밝기 는 15}}}}

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

kurudi MODE; 고 를 종료 하고 modi 함수 로 값 을 리턴 하라}

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

// uhuishaji wa hali ya uhuishaji

// juu

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

// Upinde wa mvua

upinde wa mvua utupu () {Serial.println ("mvua"); // 시리얼 모니터 에 mvua 을 써라 ikiwa (upinde wa mvua wa kwanza) {RainbowSpeed = 0; // 레인보우 속도 초기화 kwanza Rainbow = uongo; // 레인보우 색상 초기화 상태 꺼짐} ikiwa (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 Kasi ya Upinde wa mvua + = 10; // 레인보우 변환 변수 에 10 을 더해라}

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

}

// Kupunguza

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

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

// Kupepesa

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

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

B_previousMillis = sasaMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_state =! B_state ; // 각. Seti ya rangi (i, rangiVal ); // 가변 저항 값 에 따라 컬러 셋팅} mwingine {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}

}

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

// functuation ya msingi

// rangi iliyowekwa

color_set tupu (int index, int colorSenser) {

ikiwa (startState [index]) {hue [index] = ramani (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_color 의 r, g, b 으로 설정} mwingine noColor_set (index); // 컬러 셋팅 하지 않음}

////// noColor set

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

kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor imewekwa

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

ikiwa (startState [index]) {hue [index] = ramani (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 을 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorVal 에) getRGB (hue [index], 255, BC, rgb_colours, index); kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 g rgb_color 의 r, g, b 으로 설정} mwingine noColor_set (index); // 컬러 셋팅 하지 않음}

Hatua ya 6: Mwonekano Umekamilika

Ilipendekeza: