Kazalo:
Video: Zrcalna ura Infinity z potenciometri: 3 koraki
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:03
Naletel sem na neskončno ogledalo in ugotovil sem, da je res kul. To me je navdihnilo, da sem naredil neskončno ogledalo, vendar sem ga potreboval za namen. Odločil sem se, da naredim delujočo neskončno zrcalno uro. To je neskončno ogledalo, ki vam omogoča spreminjanje načinov, hitrosti in barv s potenciometri. (Opomba: prvič delam kaj takega)
Zaloge
Poglejmo, kaj potrebujete za to stvar!
Boste potrebovali…
1) 1 Arduino Uno
3) 1 Ogledna plošča
4) 1 Drsno stikalo
5) 3 potenciometra
6) 1 9V baterija
7) 5 -metrski LED trak WS2811
8) Premostitvene žice
9) Ura (ura, ki sem jo uporabil 12 -palčno veliko moderno uro)
10) Prilagodljiv zrcalni list (tisti, ki sem ga uporabil zrcalni list)
11) Film o zasebnosti (tisti, ki sem ga uporabil za enosmerno ogledalo)
12) Morda bo potrebno spajkanje, odvisno od materiala, ki ga imate
1. korak: Ožičenje
Ožičenje je precej preprosto
- Stikalo SPST vklopi in izklopi LED (A0)
- Levi potenciometer upravlja luč (A1)
- Srednji potenciometer nadzoruje načine (A2)
- Desni potenciometer nadzoruje hitrost (A3)
2. korak: Koda
#vključi
#define PIN 6
#define NUM_LEDS 54
#define A0 A0
#define A1 A1
#define A2 A2
#define A3 A3
// Parameter 1 = število slikovnih pik v traku
// Parameter 2 = številka pin (večina je veljavnih)
// Parameter 3 = zastavice tipa slikovnih pik, po potrebi seštejte:
// NEO_KHZ800 800 KHz bitni tok (večina izdelkov NeoPixel z LED diodami WS2812)
// NEO_KHZ400 400 KHz (klasični 'v1' (ne v2) FLORA slikovne pike, gonilniki WS2811)
// NEO_GRB Piksli so ožičeni za bitni tok GRB (večina izdelkov NeoPixel)
// NEO_RGB Piksli so povezani za RGB bitstream (v1 FLORA slikovnih pik, ne v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup () {
strip.begin ();
strip.show (); // Inicializirajte vse slikovne pike na "off"
}
void loop () {
if (analogRead (A0)> = 512) {
if (analogRead (A2)> = 768) {
if (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));
}
drugače {
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 512) {
if (analogRead (A1)> = 768) {
CylonBounce (naključno (255), naključno (255), naključno (255), 4, analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
} else if (analogRead (A1)> = 512) {
CylonBounce (naključno (255), 0, 0, 4, analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
} else if (analogRead (A1)> = 256) {
CylonBounce (0, naključno (255), 0, 4, analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
}
drugače {
CylonBounce (0, 0, naključno (255), 4, analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
}
} else if (analogRead (A2)> = 256) {
if (analogRead (A1)> = 768) {
bajt r, g, b;
r = naključno (255);
g = naključno (255);
b = naključno (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
bajt r, g, b;
r = naključno (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) {
bajt r, g, b;
r = 0;
g = naključno (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
drugače {
bajt r, g, b;
r = 0;
g = 0;
b = naključno (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
else {if (analogRead (A1)> = 768) {
RunningLights (naključno (255), naključno (255), naključno (255), analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
} else if (analogRead (A1)> = 512) {
RunningLights (naključno (255), 1, 1, analogno branje (A0), analogno branje (A1), analogno branje (A2), analogno branje (A3));
} else if (analogRead (A1)> = 256) {
RunningLights (1, naključno (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
drugače {
RunningLights (1, 1, naključno (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
} drugo {
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
bajt *c;
uint16_t i, j;
za (j = 0; j <256*5; j ++) {// 5 ciklov vseh barv na kolesu
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
za (i = 0; i <NUM_LEDS; i ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
c = kolo (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
zakasnitev (SpeedDelay);
}
}
byte * Wheel (byte WheelPos) {
statični bajt c [3];
if (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - Kolesa * 3;
c [2] = 0;
} else if (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - Kolesa * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} drugo {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
vrnitev c;
}
void CylonBounce (bajt rdeča, bajt zelena, bajt modra, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
sicer če (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
sicer če (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
else {SpeedDelay = 20; ReturnDelay = 60;}
for (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
setAll (0, 0, 0);
setPixel (i, rdeča/10, zelena/10, modra/10);
for (int j = 1; j <= velikost oči; j ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
setPixel (i+j, rdeča, zelena, modra);
}
setPixel (i+EyeSize+1, rdeča/10, zelena/10, modra/10);
showStrip ();
zakasnitev (SpeedDelay);
}
zakasnitev (ReturnDelay);
for (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, rdeča/10, zelena/10, modra/10);
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
for (int j = 1; j <= velikost oči; j ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
setPixel (i+j, rdeča, zelena, modra);
}
setPixel (i+EyeSize+1, rdeča/10, zelena/10, modra/10);
showStrip ();
zakasnitev (SpeedDelay);
}
zakasnitev (ReturnDelay);
}
void RunningLights (rdeča bajt, bajt zelena, bajt modra, int oldA0, int oldA1, int oldA2, int oldA3) {
int Položaj = 0;
int WaveDelay;
if (analogRead (A3)> = 768) {WaveDelay = 80;}
sicer če (analogRead (A3)> = 512) {WaveDelay = 60;}
sicer če (analogRead (A3)> = 256) {WaveDelay = 40;}
else {WaveDelay = 20;}
za (int j = 0; j
{
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
Položaj ++; // = 0; // Položaj + Stopnja;
za (int i = 0; i
// sinusni val, 3 offset valovi naredijo mavrico!
// plavajoča raven = sin (i + položaj) * 127 + 128;
// setPixel (i, raven, 0, 0);
// plavajoča raven = sin (i + položaj) * 127 + 128;
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
setPixel (i, ((sin (i + Položaj) * 127 + 128)/255) * rdeča, ((sin (i + Položaj) * 127 + 128)/255) * zelena, ((sin (i + položaj) * 127 + 128)/255) * modra);
}
showStrip ();
zamuda (WaveDelay);
}
}
void meteorRain (bajt rdeča, bajt zelena, bajt modra, bajt meteorSize, bajt meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80;}
sicer če (analogRead (A3)> = 512) {SpeedDelay = 60;}
sicer če (analogRead (A3)> = 256) {SpeedDelay = 40;}
else {SpeedDelay = 20;}
za (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
// zmanjša svetlost vseh LED v enem koraku
za (int j = 0; j
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
if ((! meteorRandomDecay) || (naključno (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// narisati meteor
for (int j = 0; j <meteorSize; j ++) {
če (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)
zlom;
}
če ((i-j = 0)) {
setPixel (i-j, rdeča, zelena, modra);
}
}
showStrip ();
zakasnitev (SpeedDelay);
}
}
void fadeToBlack (int ledNo, bajt fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int vrednost;
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
LED [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** MENJAVA TUKAJ ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
void setPixel (int Pixel, byte rdeča, byte green, byte blue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (rdeča, zelena, modra));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
LED diode [Pixel].r = rdeča;
LED diode [Pixel].g = zelena;
LED diode [Pixel].b = modra;
#endif
}
void setAll (bajt rdeča, bajt zelena, bajt modra) {
za (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, rdeča, zelena, modra);
}
showStrip ();
}
3. korak: Ustvarjanje ure
Priporočam, da si na notranji strani postavite ravno stekleno uro. Ko sem uporabljal prilagodljivo ogledalo na notranji strani ure, je prišlo do težave, ker so številke v uri izskočile, ogledalo se je upognilo, zaradi česar se učinek neskončnega ogledala ni pojavil. Prilagodljiv zrcalni list in film za zasebnost morata biti čim bolj ravna. Če imate uro, se prepričajte, da lahko LED brez težav postavite v notranjost.
1. korak: Odprite uro in odstranite sprednje steklo
2. korak: na sprednje steklo namestite film za zasebnost (ta videoposnetek prikazuje, kako to storiti)
3. korak: prilagodljivo ogledalo namestite na notranjo stran ure (pred tem odstranite kazalce na urah)
4. korak: Na sredini naredite luknjo za vstavljanje kazalcev ure
5. korak: LED trak postavite okoli notranjih sten ure (za ta korak sem uporabil pištolo za vroče lepilo)
Korak 6: Vklopite LED trak in postavite steklo na uro, da preverite, ali obstaja učinek neskončnega ogledala
7. korak: Ko končate z vsem, sestavite uro skupaj in pustite, da žice preidejo nazaj
8. korak: Čestitamo, da ste projekt zaključili in vse bi moralo delovati v redu
Če imate kakršna koli vprašanja, jih komentirajte spodaj (Vedite, da morda ne bom mogel odgovoriti, vendar se bom potrudil)
Priporočena:
Utripajoča LED z merilnikom časa 555 in potenciometri: 4 koraki
Utripajoča LED z merilnikom časa 555 in potenciometri: Pozdravljeni! V tem navodilu vam bomo pokazali, kako sestaviti vezje zatemnilnika LED, ki deluje na nastavljivi časovni zanki s pomočjo potenciometra, časovnika 555 in drugih osnovnih komponent vezja. Idejo za ta projekt smo prvič dobili od
Galaksija v vaših rokah! Neskončna zrcalna škatla: 3 koraki (s slikami)
Galaksija v vaših rokah! Infinity Mirror Box: Ta vadnica govori o oblikovanju majhne oblike, ki v notranjosti ustvari veliko odsevov. Z luknjami v vsakem kotu za svetlobo in majhnim okencem skozi, lahko gledate ta neskončni proces v roki! Ideja je prišla iz gledanja neskončnega ogledala
Zrcalna ura Easy DIY Infinity: 3 koraki
Easy DIY Infinity ogledalo Ura: Če vam je dolgčas z vašo normalno uro poskus da se ta ohladi DIY Neskončno ogledalo ure. Za poravnavo vaše sobe
Zrcalna ura Neskončnost: 5 korakov (s slikami)
Zrcalna ura Infinity: To je ročno izdelana ura predvsem za dekoracijo. V uri je več LED luči, ko je vklopljena, je lepa dekoracija za spalnico. Ko je izklopljen, je majhno ogledalo. Seveda je to sama ura
Neskončna zrcalna stenska ura v okvirju IKEA za slike: 4 koraki
Neskončna zrcalna stenska ura v okvirju IKEA za slike: Pozdravljeni, vedno sem si želel zgraditi stensko uro. V trgovinah, kot je IKEA, je veliko čudovitih stenskih ur. Imel sem nekaj težav s temi komercialnimi urami. Zame so preglasni (neprekinjen tic-tac je nadležen), urnih kazalcev ne vidim