Obsah:

Zrcadlové hodiny s nekonečnem s potenciometry: 3 kroky
Zrcadlové hodiny s nekonečnem s potenciometry: 3 kroky

Video: Zrcadlové hodiny s nekonečnem s potenciometry: 3 kroky

Video: Zrcadlové hodiny s nekonečnem s potenciometry: 3 kroky
Video: El extraño Howard Phillip Lovecraft 2024, Červenec
Anonim
Zrcadlové hodiny s nekonečnem s potenciometry
Zrcadlové hodiny s nekonečnem s potenciometry

Narazil jsem na zrcadlo nekonečna a zjistil jsem, že je to opravdu skvělé. To mě inspirovalo k vytvoření zrcadla nekonečna, ale potřeboval jsem, aby to mělo svůj účel. Rozhodl jsem se tedy vytvořit funkční zrcadlové hodiny s nekonečnem. Toto je zrcadlo s nekonečnem, které vám umožňuje měnit režimy, rychlost a barvy pomocí potenciometrů. (Poznámka: Něco takového dělám poprvé)

Zásoby

Pojďme se ponořit do toho, co potřebujete k výrobě této věci!

Budete potřebovat…

1) 1 Arduino Uno

3) 1 prkénko

4) 1 Posuvný přepínač

5) 3 potenciometry

6) 1 9V baterie

7) 5 metrový LED pás WS2811

8) Drátové propojovací vodiče

9) Hodiny (Hodiny, které jsem použil 12 palcových velkých moderních hodin)

10) Flexibilní zrcadlový list (ten, který jsem použil zrcadlový list)

11) Privacy Film (Ten, který jsem použil One Way Mirror)

12) Může být vyžadováno pájení, to závisí na tom, jaké materiály máte

Krok 1: Zapojení

Elektrické vedení
Elektrické vedení
Elektrické vedení
Elektrické vedení

Zapojení je celkem jednoduché

- Přepínač SPST zapíná a vypíná diody LED (A0)

- Levý potenciometr ovládá světlo (A1)

- Prostřední potenciometr ovládá režimy (A2)

- Pravý potenciometr ovládá rychlost (A3)

Krok 2: Kód

#zahrnout

#definovat PIN 6

#define NUM_LEDS 54

#definovat A0 A0

#definovat A1 A1

#definujte A2 A2

#definujte A3 A3

// Parametr 1 = počet pixelů v pásu

// Parametr 2 = číslo PINu (většina je platných)

// Parametr 3 = příznaky typu pixelu, sčítejte podle potřeby:

// NEO_KHZ800 800 KHz bitstream (většina produktů NeoPixel s LED diodami WS2812)

// NEO_KHZ400 400 KHz (klasický 'v1' (ne v2) FLORA pixely, ovladače WS2811)

// Pixely NEO_GRB jsou zapojeny pro bitový tok GRB (většina produktů NeoPixel)

// Pixely NEO_RGB jsou zapojeny pro bitový tok RGB (pixely v1 FLORA, nikoli v2)

Proužek Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

neplatné nastavení () {

strip.begin ();

strip.show (); // Inicializace všech pixelů na 'vypnuto'

}

prázdná smyčka () {

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

}

jiný{

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

}

} else if (analogRead (A2)> = 512) {

if (analogRead (A1)> = 768) {

CylonBounce (random (255), random (255), random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 512) {

CylonBounce (random (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 256) {

CylonBounce (0, random (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

jiný{

CylonBounce (0, 0, random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

} else if (analogRead (A2)> = 256) {

if (analogRead (A1)> = 768) {

bajt r, g, b;

r = náhodný (255);

g = náhodný (255);

b = náhodný (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 = náhodný (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 = náhodný (255);

b = 0;

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

jiný{

bajt r, g, b;

r = 0;

g = 0;

b = náhodný (255);

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

else {if (analogRead (A1)> = 768) {

RunningLights (random (255), random (255), random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 512) {

RunningLights (random (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analogRead (A1)> = 256) {

RunningLights (1, random (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

jiný{

RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

}jiný{

setAll (0, 0, 0);

}

}

void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

byte *c;

uint16_t i, j;

for (j = 0; j <256*5; j ++) {// 5 cyklů všech barev na kole

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

pro (i = 0; i <NUM_LEDS; i ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

c = Kolo ((((i * 256 / NUM_LEDS) + j) & 255);

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

}

showStrip ();

zpoždění (SpeedDelay);

}

}

byte * Wheel (byte WheelPos) {

statický bajt c [3];

if (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - WheelPos * 3;

c [2] = 0;

} else if (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} else {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

návrat c;

}

void CylonBounce (byte red, byte green, byte blue, 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;}

else {SpeedDelay = 20; ReturnDelay = 60;}

pro (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

setAll (0, 0, 0);

setPixel (i, červená/10, zelená/10, modrá/10);

pro (int j = 1; j <= velikost oka; j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

setPixel (i+j, červená, zelená, modrá);

}

setPixel (i+EyeSize+1, červená/10, zelená/10, modrá/10);

showStrip ();

zpoždění (SpeedDelay);

}

zpoždění (ReturnDelay);

pro (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {

setAll (0, 0, 0);

setPixel (i, červená/10, zelená/10, modrá/10);

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

pro (int j = 1; j <= velikost oka; j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

setPixel (i+j, červená, zelená, modrá);

}

setPixel (i+EyeSize+1, červená/10, zelená/10, modrá/10);

showStrip ();

zpoždění (SpeedDelay);

}

zpoždění (ReturnDelay);

}

void RunningLights (byte red, byte green, byte blue, int oldA0, int oldA1, int oldA2, int oldA3) {

int Pozice = 0;

int WaveDelay;

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

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

else if (analogRead (A3)> = 256) {WaveDelay = 40;}

else {WaveDelay = 20;}

pro (int j = 0; j

{

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

Pozice ++; // = 0; // Pozice + Sazba;

pro (int i = 0; i

// sinusová vlna, 3 offsetové vlny dělají duhu!

// float level = sin (i + Position) * 127 + 128;

// setPixel (i, level, 0, 0);

// float level = sin (i + Position) * 127 + 128;

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

setPixel (i, ((sin (i + pozice) * 127 + 128)/255) * červená, ((sin (i + pozice) * 127 + 128)/255) * zelená, ((sin (i + pozice) * 127 + 128)/255) * modrá);

}

showStrip ();

zpoždění (WaveDelay);

}

}

void meteorRain (byte red, byte green, byte blue, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

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

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

else {SpeedDelay = 20;}

pro (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

// zeslabení jasu všech LED v jednom kroku

pro (int j = 0; j

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

if ((! meteorRandomDecay) || (random (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// nakreslete meteor

for (int j = 0; j <meteorSize; j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((oldA3+256)

přestávka;

}

if ((i-j = 0)) {

setPixel (i-j, červená, zelená, modrá);

}

}

showStrip ();

zpoždění (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int hodnota;

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

}

// *** VYMĚŇTE ZDE ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

void setPixel (int Pixel, byte red, byte green, byte blue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (červená, zelená, modrá));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED [Pixel].r = červená;

LED [Pixel].g = zelená;

LED [Pixel].b = modrá;

#endif

}

void setAll (byte red, byte green, byte blue) {

pro (int i = 0; i <NUM_LEDS; i ++) {

setPixel (i, červená, zelená, modrá);

}

showStrip ();

}

Krok 3: Vytvoření hodin

Vytvoření hodin
Vytvoření hodin
Vytvoření hodin
Vytvoření hodin
Vytvoření hodin
Vytvoření hodin

Doporučil bych pořídit skleněné hodiny, které jsou zevnitř ploché. Když jsem aplikoval pružné zrcátko na vnitřní stranu hodin, nastal problém, protože čísla uvnitř hodin vyskočila ven, zrcadlo se ohýbalo, což mělo za následek, že se efekt zrcadla nekonečna neděje. Musíte mít flexibilní zrcadlovou fólii a fólii na ochranu soukromí, aby byly co nejrovnější. Pokud dostáváte hodiny, ujistěte se, že můžete LED diodu bez problémů umístit dovnitř.

Krok 1: Otevřete hodiny a sejměte přední sklo

Krok 2: Nasaďte si na přední sklo ochrannou fólii (Toto video vám ukáže, jak na to)

Krok 3: Na vnitřní stranu hodin naneste pružné zrcátko (před tím odstraňte ručičky hodin)

Krok 4: Uprostřed vytvořte otvor, do kterého budou ručičky hodin zasunuty zpět

Krok 5: Umístěte pásek LED kolem vnitřních stěn hodin (pro tento krok jsem použil horkou lepicí pistoli)

Krok 6: Zapněte LED pásek a položte sklo na horní část hodin, abyste zjistili, zda existuje efekt nekonečného zrcadla

Krok 7: Jakmile budete se vším hotovi, dejte hodiny dohromady a nechte dráty projít dozadu

Krok 8: Blahopřejeme, že jste dokončili projekt a vše by mělo fungovat dobře

Pokud máte nějaké dotazy, napište je níže (vězte, že možná nebudu moci odpovědět, ale udělám vše, co bude v mých silách)

Doporučuje: