Мазмуну:
Video: Потенциометр менен Infinity Mirror Сааты: 3 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:38
Мен чексиздик күзгүсүнө туш келип, аны чындап эле сонун деп таптым. Бул мага чексиздик күзгүсүн жасоого шыктандырды, бирок мага максат керек болчу. Ошентип, мен иштеп жаткан чексиздик күзгү саатын жасоону чечтим. Бул потенциометрлердин жардамы менен режимдерди, ылдамдыкты жана түстөрдү өзгөртүүгө мүмкүнчүлүк берген чексиздик күзгүсү. (Эскертүү: Мен мындай нерсени биринчи жолу жасап жатам)
Жабдуулар
Келгиле, бул нерсени жасоо үчүн сизге эмне керек экенине көңүл буралы!
Сага керек болот…
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 -кадам: Куттуктайм, сиз долбоорду бүтүрдүңүз жана баары жакшы иштеши керек
Эгерде сизде кандайдыр бир суроолор болсо, аларды төмөндө комментарийге калтырыңыз (Мен жооп бере албасымды билиңиз, бирок мен колумдан келгендин баарын кылам)
Сунушталууда:
Easy Infinity Mirror Arduino Gemma & NeoPixels менен: 8 кадам (сүрөттөр менен)
Easy Infinity Mirror Arduino Gemma & NeoPixels менен: Мына! Сыйкырдуу жана алдамчы жөнөкөй чексиздик күзгүсүнө терең караңыз! Жарык диоддордун бир тилкеси чексиз чагылуу эффектин түзүү үчүн күзгү сэндвичтин ичине жаркырайт. Бул долбоор менин Ардуин интросунун көндүмдөрүн жана ыкмаларын колдонот
Vortex Watch: Infinity Mirror Кол сааты: 10 кадам (Сүрөттөр менен)
Vortex Watch: чексиз күзгү кол сааты: Бул долбоордун максаты чексиз күзгү сааттын эскилиги жеткен версиясын түзүү болгон. Ал RGB LED диоддорун колдонуп, убакытты көрсөтүү үчүн кызыл, жашыл жана көк чырактарга саат, мүнөт жана секунда коюп, бул түстөрдү бири -бирине жабыштырып коет
Easy DIY Infinity Mirror Сааты: 3 кадам
Easy DIY Infinity Mirror Clock: Эгерде сиз кадимки саатыңыздан тажап жатсаңыз, бул салкын DIY Infinity Mirror Clock кылып көрүңүз. Бөлмөнү түздөө үчүн
IKEA сүрөт алкагындагы Infinity Mirror дубал сааты: 4 кадам
IKEA сүрөт алкагындагы Infinity Mirror дубал сааты: Саламатсызбы, мен дайыма дубал саатын кургум келет. IKEA сыяктуу дүкөндөрдө сонун дубал сааттары көп. Мен бул соода сааттары менен кээ бир көйгөйлөргө туш болдум. Алар мен үчүн өтө катуу (үзгүлтүксүз тик-тажоо кыжырды келтирет), мен сааттын колун көрө албайм
Өз BT тиркемеси менен RGB Infinity сааты: 15 кадам (сүрөттөр менен)
Өздүк BT тиркемеси менен RGB Infinity Сааты: Кадимки Санарип жана Аналогдук сааттар кызыксыз, Андыктан Dial, Hour hand, Minute hand жана Second hand үчүн ыңгайлаштырылган түстөр менен кооз саатты иштеп чыгууну пландап жатасыз. Бул үчүн адегенде Addressable RGB LED тилкесин колдонуп саатты өнүктүргүңүз келет. Андан кийин А менен байланышуу үчүн