Բովանդակություն:

Անսահմանության հայելային ժամացույց պոտենցիոմետրերով `3 քայլ
Անսահմանության հայելային ժամացույց պոտենցիոմետրերով `3 քայլ

Video: Անսահմանության հայելային ժամացույց պոտենցիոմետրերով `3 քայլ

Video: Անսահմանության հայելային ժամացույց պոտենցիոմետրերով `3 քայլ
Video: Շրջագայություն հայտնի մարդկանց Բևերլի Հիլզի առանձնատանը Թաքնված պահոցով 2024, Հուլիսի
Anonim
Անսահմանության հայելային ժամացույց պոտենցիոմետրերով
Անսահմանության հայելային ժամացույց պոտենցիոմետրերով

Ես հանդիպեցի անսահմանության հայելուն և գտա, որ այն իսկապես զով է: Սա ինձ ոգեշնչեց անսահման հայելի պատրաստելու համար, բայց ես դրա կարիքն ունեի նպատակ ունենալու համար: Այսպիսով, ես որոշեցի պատրաստել անսահմանափակ հայելային ժամացույց: Սա անսահման հայելի է, որը թույլ է տալիս փոխել ռեժիմները, արագությունը և գույները ՝ օգտագործելով պոտենցիոմետրեր: (Նշում. Սա առաջին անգամն է, որ նման բան եմ պատրաստում)

Պարագաներ

Եկեք սուզվենք, թե ինչ է ձեզ հարկավոր այս բանը պատրաստելու համար:

Ձեզ հարկավոր կլինի…

1) 1 Arduino Uno

3) 1 գրատախտակ

4) 1 սլայդ անջատիչ

5) 3 պոտենցիոմետր

6) 1 9V մարտկոց

7) 5 մետր WS2811 LED ժապավեն

8) Jumper Cable լարերը

9) Clամացույց (Clամացույցը, որն օգտագործել եմ 12 դյույմ մեծ ժամանակակից ժամացույց)

10) ibleկուն հայելու թերթ (այն, ինչ ես օգտագործել եմ հայելային թերթ)

11) Գաղտնիության ֆիլմ (այն, ինչ ես օգտագործել եմ միակողմանի հայելին)

12) mightոդում կարող է պահանջվել, դա կախված է նրանից, թե ինչ նյութեր ունեք

Քայլ 1: Լարերի տեղադրում

Հաղորդալարեր
Հաղորդալարեր
Հաղորդալարեր
Հաղորդալարեր

Էլեկտրամոնտաժը բավականին պարզ է

- SPST անջատիչը միացնում և անջատում է LED- ները (A0)

- Ձախ պոտենցիոմետրը վերահսկում է լույսը (A1)

- Միջին պոտենցիոմետրը վերահսկում է ռեժիմները (A2)

- potիշտ պոտենցիոմետրը վերահսկում է արագությունը (A3)

Քայլ 2: Կոդ

#ներառում

#սահմանեք PIN 6

#սահմանել NUM_LEDS 54

#սահմանի A0 A0- ը

#սահմանեք A1 A1- ը

#սահմանի՛ր A2 A2- ը

#սահմանեք A3 A3- ը

// Պարամետր 1 = պիքսելների քանակը շերտում

// Պարամետր 2 = կապի համար (շատերը վավեր են)

// Պարամետր 3 = պիքսել տիպի դրոշներ, ըստ անհրաժեշտության ավելացնել.

// NEO_KHZ800 800 ԿՀց բիթսթրիմ (NeoPixel- ի արտադրանքների մեծ մասը WS2812 LED- ով)

// NEO_KHZ400 400 ԿՀց (դասական «v1» (ոչ v2) FLORA պիքսել, WS2811 վարորդ)

// NEO_GRB պիքսելները միացված են GRB բիթստրիմի համար (NeoPixel- ի արտադրանքի մեծ մասը)

// NEO_RGB պիքսելները միացված են RGB բիթստրիմի համար (v1 FLORA պիքսել, ոչ v2)

Adafruit_NeoPixel շերտ = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup () {

strip.begin ();

strip.show (); // Նախագծել բոլոր պիքսելները «անջատված»

}

դատարկ շրջան () {

եթե (analogRead (A0)> = 512) {

եթե (analogRead (A2)> = 768) {

եթե (analogRead (A3)> = 768) {

rainbowCycle (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A3)> = 512) {

rainbowCycle (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A3)> = 256) {

rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

ուրիշ {

rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

} else if (analogRead (A2)> = 512) {

եթե (analogRead (A1)> = 768) {

CylonBounce (պատահական (255), պատահական (255), պատահական (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 512) {

CylonBounce (պատահական (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 256) {

CylonBounce (0, պատահական (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

ուրիշ {

CylonBounce (0, 0, պատահական (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

} else if (analogRead (A2)> = 256) {

եթե (analogRead (A1)> = 768) {

բայթ r, g, b;

r = պատահական (255);

g = պատահական (255);

b = պատահական (255);

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 512) {

բայթ r, g, b;

r = պատահական (255);

g = 0;

b = 0;

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 256) {

բայթ r, g, b;

r = 0;

g = պատահական (255);

b = 0;

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

ուրիշ {

բայթ r, g, b;

r = 0;

g = 0;

b = պատահական (255);

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

այլ {if (analogRead (A1)> = 768) {

RunningLights (պատահական (255), պատահական (255), պատահական (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 512) {

RunningLights (պատահական (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 256) {

RunningLights (1, պատահական (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

ուրիշ {

RunningLights (1, 1, պատահական (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

} ուրիշ {

setAll (0, 0, 0);

}

}

void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

բայթ *գ;

uint16_t i, j;

(j = 0; j <256*5; j ++) {// անիվի վրա բոլոր գույների 5 ցիկլեր

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

համար (i = 0; i <NUM_LEDS; i ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

c = Անիվ (((i * 256 / NUM_LEDS) + ժ) & 255);

setPixel (i, *c, *(c+1), *(c+2));

}

showStrip ();

ուշացում (SpeedDelay);

}

}

բայթ * Անիվ (բայթ WheelPos) {

ստատիկ բայթ գ [3];

եթե (WheelPos <85) {

c [0] = WheelPos * 3;

գ [1] = 255 - անիվային տեղամաս * 3;

գ [2] = 0;

} else if (WheelPos <170) {

WheelPos -= 85;

գ [0] = 255 - անիվային տեղամաս * 3;

գ [1] = 0;

c [2] = WheelPos * 3;

} ուրիշ {

WheelPos -= 170;

գ [0] = 0;

c [1] = WheelPos * 3;

գ [2] = 255 - անիվային տեղամաս * 3;

}

վերադարձ գ;

}

դատարկ CylonBounce (բայթ կարմիր, բայտ կանաչ, բայտ կապույտ, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

եթե (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}

այլապես, եթե (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

այլապես, եթե (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}

else {SpeedDelay = 20; ReturnDelay = 60;}

համար (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

setAll (0, 0, 0);

setPixel (i, կարմիր/10, կանաչ/10, կապույտ/10);

համար (int j = 1; j <= EyeSize; j ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

setPixel (i+j, կարմիր, կանաչ, կապույտ);

}

setPixel (i+EyeSize+1, կարմիր/10, կանաչ/10, կապույտ/10);

showStrip ();

ուշացում (SpeedDelay);

}

հետաձգում (ReturnDelay);

համար (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {

setAll (0, 0, 0);

setPixel (i, կարմիր/10, կանաչ/10, կապույտ/10);

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

համար (int j = 1; j <= EyeSize; j ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

setPixel (i+j, կարմիր, կանաչ, կապույտ);

}

setPixel (i+EyeSize+1, կարմիր/10, կանաչ/10, կապույտ/10);

showStrip ();

ուշացում (SpeedDelay);

}

հետաձգում (ReturnDelay);

}

void RunningLights (բայթ կարմիր, բայտ կանաչ, բայտ կապույտ, int oldA0, int oldA1, int oldA2, int oldA3) {

int Դիրքը = 0;

int WaveDelay;

եթե (analogRead (A3)> = 768) {WaveDelay = 80;}

այլապես, եթե (analogRead (A3)> = 512) {WaveDelay = 60;}

այլապես, եթե (analogRead (A3)> = 256) {WaveDelay = 40;}

այլ {WaveDelay = 20;}

համար (int j = 0; j

{

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

Պաշտոն ++; // = 0; // պաշտոն + տոկոսադրույք;

համար (int i = 0; i

// սինուս ալիք, 3 օֆսեթ ալիք ծիածան են ստեղծում:

// բոց մակարդակ = մեղք (i + Դիրք) * 127 + 128;

// setPixel (i, մակարդակ, 0, 0);

// բոց մակարդակ = մեղք (i + Դիրք) * 127 + 128;

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

setPixel (i, ((sin (i + Position) * 127 + 128)/255) * կարմիր, ((մեղք (i + Դիրք) * 127 + 128)/255) * կանաչ, ((մեղք (i + Դիրք) * 127 + 128)/255) * կապույտ);

}

showStrip ();

ուշացում (WaveDelay);

}

}

դատարկ մետեոր անձրև (բայտ կարմիր, բայտ կանաչ, բայտ կապույտ, բայթ մետեոր Չափ, բայտ մետեոր TrailDecay, բուլյան մետեոր Պատահական խայտառակություն, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

եթե (analogRead (A3)> = 768) {SpeedDelay = 80;}

այլապես, եթե (analogRead (A3)> = 512) {SpeedDelay = 60;}

այլապես, եթե (analogRead (A3)> = 256) {SpeedDelay = 40;}

այլ {SpeedDelay = 20;}

համար (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

// մարել պայծառությունը բոլոր LED- ները մեկ քայլով

համար (int j = 0; j

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

եթե ((! meteorRandomDecay) || (պատահական (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// նկարել երկնաքար

համար (int j = 0; j <meteorSize; j ++) {

եթե (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((հին A3+256)

ընդմիջում;

}

եթե ((i-j = 0)) {

setPixel (i-j, կարմիր, կանաչ, կապույտ);

}

}

showStrip ();

ուշացում (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int արժեք;

oldColor = strip.getPixelColor (ledNo);

r = (oldColor & 0x00ff0000UL) >> 16;

g = (oldColor & 0x0000ff00UL) >> 8;

b = (oldColor & 0x000000ffUL);

r = (r <= 10)? 0: (int) r- (r*fadeValue/256);

g = (g <= 10)? 0: (int) g- (g*fadeValue/256);

b = (b <= 10)? 0: (int) b- (b*fadeValue/256);

strip.setPixelColor (ledNo, r, g, b);

#էնդիֆ

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue);

#էնդիֆ

}

// *** ՓՈՓՈԽԵԼ ԱՅՍՏԵ ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#էնդիֆ

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#էնդիֆ

}

void setPixel (int Pixel, բայտ կարմիր, բայտ կանաչ, բայթ կապույտ) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (կարմիր, կանաչ, կապույտ));

#էնդիֆ

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Pixel].r = կարմիր;

leds [Pixel].g = կանաչ;

leds [Pixel].b = կապույտ;

#էնդիֆ

}

դատարկ հավաքածու Բոլորը (բայթ կարմիր, բայթ կանաչ, բայտ կապույտ) {

համար (int i = 0; i <NUM_LEDS; i ++) {

setPixel (i, կարմիր, կանաչ, կապույտ);

}

showStrip ();

}

Քայլ 3: Creatամացույցի ստեղծում

Creatամացույցի ստեղծում
Creatամացույցի ստեղծում
Creatամացույցի ստեղծում
Creatամացույցի ստեղծում
Creatամացույցի ստեղծում
Creatամացույցի ստեղծում

Ես խորհուրդ կտայի ձեռք բերել ապակյա ժամացույց, որը ներսից հարթ է: Երբ ես ճկուն հայելին քսում էի ժամացույցի ներսում, խնդիր առաջացավ ժամացույցի ներսում թվերի դուրս գալու պատճառով, հայելին թեքվեց, ինչի արդյունքում անսահման հայելու էֆեկտը տեղի չունեցավ: Դուք պետք է ունենաք ճկուն հայելու թերթ և Գաղտնիության ֆիլմ, որպեսզի հնարավորինս հարթ լինեք: Եթե ժամացույց եք ստանում, համոզվեք, որ LED- ն կարող եք տեղադրել առանց ներսի:

Քայլ 1: Բացեք ժամացույցը և հանեք առջևի ապակին

Քայլ 2: Տեղադրեք գաղտնիության ֆիլմը առջևի ապակու վրա (այս տեսանյութը ցույց է տալիս, թե ինչպես դա անել)

Քայլ 3: Կիրառեք ճկուն հայելին ժամացույցի ներքին մասում (հեռացնել ժամացույցների սլաքները դա անելուց առաջ)

Քայլ 4: Կեսին անցք արեք, որպեսզի ժամացույցի սլաքները հետ տեղադրվեն

Քայլ 5: Տեղադրեք LED ժապավենը ժամացույցի ներքին պատերի շուրջ (այս քայլի համար ես օգտագործել եմ տաք սոսինձ ատրճանակ)

Քայլ 6: Միացրեք LED ժապավենը և ապակին դրեք ժամացույցի վերևում `տեսնելու, թե արդյոք կա անսահման հայելու էֆեկտ:

Քայլ 7: Երբ ամեն ինչ ավարտվի, միացրեք ժամացույցը և թողեք, որ լարերը անցնեն դեպի հետևը

Քայլ 8: Շնորհավորում եմ, որ ավարտեցիք նախագիծը, և ամեն ինչ պետք է լավ աշխատի

Եթե ունեք որևէ հարց, մեկնաբանեք դրանք ստորև (Իմացեք, որ գուցե չկարողանամ պատասխանել, բայց կանեմ ամեն ինչ)

Խորհուրդ ենք տալիս: