Мазмұны:

Потенциометрі бар шексіз айна сағаты: 3 қадам
Потенциометрі бар шексіз айна сағаты: 3 қадам

Бейне: Потенциометрі бар шексіз айна сағаты: 3 қадам

Бейне: Потенциометрі бар шексіз айна сағаты: 3 қадам
Бейне: Mando PS4 Control Playstation 4 DualShock 4 Aliexpress Chino Review y unboxing 2021 2024, Қараша
Anonim
Потенциометрі бар шексіз айна сағаты
Потенциометрі бар шексіз айна сағаты

Мен шексіз айнаны кездестірдім, мен оны керемет деп таптым. Бұл мені шексіз айна жасауға шабыттандырды, бірақ маған мақсат қажет болды. Сонымен, мен жұмыс істейтін шексіз айна сағатын жасауды шештім. Бұл потенциометрлердің көмегімен режимдерді, жылдамдық пен түстерді өзгертуге мүмкіндік беретін шексіздік айна. (Ескерту: Мен мұндай нәрсені бірінші рет жасап тұрмын)

Жабдықтар

Бұл нәрсені жасау үшін сізге не қажет екенін білейік!

Саған қажет болады…

1) 1 Arduino Uno

3) 1 нан тақтасы

4) 1 сырғытқыш

5) 3 потенциометр

6) 1 9В батарея

7) 5 метрлік WS2811 жарық диодты жолағы

8) Кабельдік сымдар

9) Сағат (мен 12 дюймдік заманауи үлкен сағатты қолдандым)

10) икемді айна парағы (мен айна парағын қолдандым)

11) Құпиялылық фильмі (Мен бір жақты айнаны қолдандым)

12) Дәнекерлеу қажет болуы мүмкін, бұл сізде бар материалға байланысты

1 -қадам: Сымдарды жалғау

Сымдар
Сымдар
Сымдар
Сымдар

Сымдар өте қарапайым

- SPST қосқышы жарық диодты қосады және өшіреді (A0)

- Сол жақ потенциометр жарықты басқарады (A1)

- Орташа потенциометр режимдерді басқарады (A2)

- Дұрыс потенциометр жылдамдықты басқарады (A3)

2 -қадам: Кодекс

#қосу

#PIN кодын анықтаңыз 6

#анықта NUM_LEDS 54

#анықтаңыз A0 A0

#A1 A1 анықтаңыз

#анықтаңыз A2 A2

#A3 A3 анықтаңыз

// Параметр 1 = жолақтағы пиксель саны

// 2 -параметр = пин нөмірі (көбі жарамды)

// 3 -параметр = пиксель түріндегі жалаушалар, қажет болғанда бірге қосыңыз:

// NEO_KHZ800 800 КГц бит ағыны (WS2812 светодиоды бар NeoPixel өнімдерінің көпшілігі)

// NEO_KHZ400 400 КГц (классикалық 'v1' (v2 емес) FLORA пиксельдері, WS2811 драйверлері)

// NEO_GRB пиксельдері GRB бит ағыны үшін сымды (NeoPixel өнімдерінің көпшілігі)

// NEO_RGB пиксельдері RGB бит ағыны үшін сымды (v2 емес, FLORA v1)

Adafruit_NeoPixel жолағы = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

жарамсыз орнату () {

strip.begin ();

strip.show (); // Барлық пикселдерді «өшіру» күйіне келтіріңіз

}

void loop () {

егер (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));

}

} егер басқа (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));

} егер басқа (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));

}

}

басқа {егер (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);

}

}

жарамсыз кемпірқосақ циклы (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

байт *c;

uint16_t i, j;

for (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) + j) & 255);

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

}

showStrip ();

кідіріс (SpeedDelay);

}

}

байт * Wheel (байт WheelPos) {

статикалық байт c [3];

егер (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - WheelPos * 3;

c [2] = 0;

} if if (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} басқа {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

қайтару c;

}

жарамсыз CylonBounce (байт қызыл, байт жасыл, байт көк, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

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

else if (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

else if (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}

басқа {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);

}

жарамсыз RunningLights (байт қызыл, байт жасыл, байт көк, int oldA0, int oldA1, int oldA2, int oldA3) {

int Position = 0;

int WaveDelay;

егер (analogRead (A3)> = 768) {WaveDelay = 80;}

else if (analogRead (A3)> = 512) {WaveDelay = 60;}

else if (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 ығысу толқыны кемпірқосақ жасайды!

// өзгермелі деңгей = sin (i + Позиция) * 127 + 128;

// setPixel (i, деңгей, 0, 0);

// өзгермелі деңгей = sin (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) * қызыл, ((sin (i + Position) * 127 + 128)/255) * жасыл, ((sin (i + Position) * 127 + 128)/255) * көк);

}

showStrip ();

кідіріс (WaveDelay);

}

}

жарамсыз метеор жауын (байт қызыл, байт жасыл, байт көк, байт метеориті, байт метеорTrailDecay, логикалық метеорRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

әйтпесе (analogRead (A3)> = 512) {SpeedDelay = 60;}

else if (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)

үзіліс;

}

// барлық жарық диодты жарықтылық бір сатыда жоғалады

үшін (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, байт 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);

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue);

#endif

}

// *** ОСЫНА ОРЫНДАНУ ***

жарамсыз showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

жарамсыз setPixel (int Pixel, байт қызыл, байт жасыл, байт көк) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (қызыл, жасыл, көк));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Pixel].r = қызыл;

leds [Pixel].g = жасыл;

leds [Pixel].b = көк;

#endif

}

void setAll (қызыл байт, жасыл байт, көк байт) {

үшін (int i = 0; i <NUM_LEDS; i ++) {

setPixel (i, қызыл, жасыл, көк);

}

showStrip ();

}

3 -қадам: Сағат құру

Сағат құру
Сағат құру
Сағат құру
Сағат құру
Сағат құру
Сағат құру

Мен ішкі жағынан тегіс шыны сағат алуды ұсынар едім. Мен икемді айнаны сағаттың ішкі жағына қолданған кезде сағат ішіндегі сандар шығып кететіндіктен мәселе болды, айна бүгіліп, шексіз айнаның әсері болмады. Мүмкіндігінше тегіс болу үшін сізге икемді айна парағы мен құпиялылық фильмі болуы керек. Егер сізде сағат болса, жарықдиодты ішіне еш қиындықсыз қоюға болатынына көз жеткізіңіз.

1 -қадам: сағатты ашып, алдыңғы әйнекті алыңыз

2 -қадам: Құпиялық фильмді алдыңғы әйнекке жабыстырыңыз (Бұл бейне сізге мұны қалай жасау керектігін көрсетеді)

3 -қадам: Иілгіш айнаны сағаттың ішкі жағына жағыңыз (мұны жасамас бұрын сағаттарды алыңыз)

4 -қадам: Сағат тілдерін орнына қою үшін ортасынан тесік жасаңыз

5 -қадам: Жарық диодты жолақты сағаттың ішкі қабырғаларына қойыңыз (мен бұл қадам үшін ыстық желім тапаншасын қолдандым)

6 -қадам: Жарық диодты жолақты қосыңыз және шексіз айнаның әсері бар -жоғын білу үшін әйнекті сағат үстіне қойыңыз

7 -қадам: Барлығын аяқтағаннан кейін сағатты біріктіріп, сымдардың артқы жағына өтуіне мүмкіндік беріңіз

8 -қадам: Сіз жобаны аяқтағаныңызбен құттықтаймын және бәрі жақсы жұмыс істеуі керек

Егер сізде қандай да бір сұрақтар туындаса, төменде оларға түсініктеме беріңіз (жауап бере алмайтынымды біліңіз, бірақ мен бар күшімді саламын)

Ұсынылған: