Kazalo:

Zrcalna ura Infinity z potenciometri: 3 koraki
Zrcalna ura Infinity z potenciometri: 3 koraki

Video: Zrcalna ura Infinity z potenciometri: 3 koraki

Video: Zrcalna ura Infinity z potenciometri: 3 koraki
Video: Терренс Дикон раскрывает скрытую связь: сознание и энтропия 2024, Julij
Anonim
Neskončna zrcalna ura s potenciometri
Neskončna zrcalna ura s potenciometri

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
Ožičenje
Ožičenje
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

Ustvarjanje ure
Ustvarjanje ure
Ustvarjanje ure
Ustvarjanje ure
Ustvarjanje ure
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: