Мазмуну:

Потенциометр менен Infinity Mirror Сааты: 3 кадам
Потенциометр менен Infinity Mirror Сааты: 3 кадам

Video: Потенциометр менен Infinity Mirror Сааты: 3 кадам

Video: Потенциометр менен Infinity Mirror Сааты: 3 кадам
Video: Использование драйвера шагового двигателя L298N Для управления 4-проводным шаговым двигателем 2024, Июль
Anonim
Потенциометр менен Infinity Mirror Сааты
Потенциометр менен Infinity Mirror Сааты

Мен чексиздик күзгүсүнө туш келип, аны чындап эле сонун деп таптым. Бул мага чексиздик күзгүсүн жасоого шыктандырды, бирок мага максат керек болчу. Ошентип, мен иштеп жаткан чексиздик күзгү саатын жасоону чечтим. Бул потенциометрлердин жардамы менен режимдерди, ылдамдыкты жана түстөрдү өзгөртүүгө мүмкүнчүлүк берген чексиздик күзгүсү. (Эскертүү: Мен мындай нерсени биринчи жолу жасап жатам)

Жабдуулар

Келгиле, бул нерсени жасоо үчүн сизге эмне керек экенине көңүл буралы!

Сага керек болот…

1) 1 Arduino Uno

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

4) 1 Slide Switch

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

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

7) 5 метрлик WS2811 LED тилкеси

8) Jumper Cable Wires

9) Саат (12 дюймдук чоң заманбап саат колдонгон саат)

10) ийкемдүү күзгү барак (мен күзгү баракты колдонгон)

11) Купуялык тасмасы (Мен One Way Mirror колдонгон)

12) Лайкоо талап кылынышы мүмкүн, бул сизде бар материалдарга жараша болот

1 -кадам: Кабелдөө

Электр өткөргүчтөрү
Электр өткөргүчтөрү
Электр өткөргүчтөрү
Электр өткөргүчтөрү

Кабелдөө абдан жөнөкөй

- SPST Switch LED'лерди күйгүзөт жана өчүрөт (A0)

- Сол потенциометр жарыкты башкарат (A1)

- Орто потенциометр режимдерди башкарат (A2)

- Туура потенциометр ылдамдыкты көзөмөлдөйт (A3)

2 -кадам: Код

#кошуу

#аныктоо PIN 6

#аныктоо NUM_LEDS 54

#аныктоо A0 A0

#аныктоо A1 A1

#аныктоо A2 A2

#аныктоо A3 A3

// Параметр 1 = тилкедеги пикселдердин саны

// Параметр 2 = пин саны (көбү жарактуу)

// Параметр 3 = пикселдик типтеги желектер, керектүү учурда бирге кошуңуз:

// NEO_KHZ800 800 KHz бит агымы (көпчүлүк NeoPixel продуктылары w/WS2812 LED)

// NEO_KHZ400 400 KHz (классикалык 'v1' (v2 эмес) FLORA пикселдери, WS2811 драйверлери)

// NEO_GRB пикселдери GRB бит агымы үчүн зымдуу (көпчүлүк NeoPixel продуктылары)

// NEO_RGB пикселдери RGB бит агымы үчүн зымдуу (v2 FLORA пиксел, v2 эмес)

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));

} башка if (analogRead (A3)> = 512) {

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

} башка if (analogRead (A3)> = 256) {

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

}

башка {

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

}

} башка 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));

} башка 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));

}

} башка 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));

} башка 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));

} башка 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));

} башка if (analogRead (A1)> = 512) {

RunningLights (туш келди (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} башка 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) {

байт *в;

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)

тыныгуу;

}

с = Дөңгөлөк (((i * 256 / NUM_LEDS) + j) & 255);

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

}

showStrip ();

кечигүү (SpeedDelay);

}

}

байт * дөңгөлөк (байт 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;

}

return 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 (мен, кызыл/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 (мен, кызыл/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 + Position) * 127 + 128;

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

// сүзүү деңгээли = sin (i + Position) * 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) * жашыл, ((sin (i + Position) * 127 + 128)/255) * көк);

}

showStrip ();

кечигүү (WaveDelay);

}

}

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

setAll (0, 0, 0);

int SpeedDelay;

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

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

тыныгуу;

}

if ((! meteorRandomDecay) || (random (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);

}

}

vade fadeToBlack (int ledNo, bayt fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int value;

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 (Пиксел, strip. Color (кызыл, жашыл, көк));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Пиксел].r = кызыл;

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

leds [пиксел].b = көк;

#endif

}

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

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

setPixel (мен, кызыл, жашыл, көк);

}

showStrip ();

}

3 -кадам: Саатты түзүү

Саатты түзүү
Саатты түзүү
Саатты түзүү
Саатты түзүү
Саатты түзүү
Саатты түзүү

Мен ичи тегиз айнек саат алууну сунуштайт элем. Мен ийкемдүү күзгүнү сааттын ичине колдонгондо, сааттын ичиндеги сандар чыгып кеткендиктен, көйгөй пайда болду, күзгү ийилгендиктен чексиздик күзгү эффекти болгон жок. Мүмкүн болушунча жалпак болуу үчүн ийкемдүү күзгү баракчаңыз жана Privacy Film болушуңуз керек. Эгерде сиз саат ала турган болсоңуз, анда LEDди көйгөйсүз ичине коё аласыз.

1 -кадам: Саатты ачыңыз жана алдыңкы айнекти алып салыңыз

2 -кадам: Купуялык тасмасын алдыңкы айнекке тагыңыз (Бул видео муну кантип жасоону көрсөтөт)

3 -кадам: ийкемдүү күзгүнү сааттын ички жагына коюңуз (муну жасоодон мурун сааттардын колун алып салыңыз)

4 -кадам: сааттын жебелерин кайра ордуна коюу үчүн ортосуна тешик жасаңыз

5 -кадам: LED тилкесин сааттын ички дубалдарына коюңуз (мен бул кадам үчүн ысык клей тапанчасын колдондум)

6 -кадам: LED тилкесин күйгүзүңүз жана айнекти сааттын үстүнө коюп, чексиздик күзгү эффектинин бар же жок экенин билиңиз

7 -кадам: Баары бүткөндөн кийин саатты чогуу коюп, зымдарды артка өткөрүңүз

8 -кадам: Куттуктайм, сиз долбоорду бүтүрдүңүз жана баары жакшы иштеши керек

Эгерде сизде кандайдыр бир суроолор болсо, аларды төмөндө комментарийге калтырыңыз (Мен жооп бере албасымды билиңиз, бирок мен колумдан келгендин баарын кылам)

Сунушталууда: