Obsah:

Zrkadlové hodiny s nekonečnom s potenciometrami: 3 kroky
Zrkadlové hodiny s nekonečnom s potenciometrami: 3 kroky

Video: Zrkadlové hodiny s nekonečnom s potenciometrami: 3 kroky

Video: Zrkadlové hodiny s nekonečnom s potenciometrami: 3 kroky
Video: Дочкина свадьба_Рассказ_Слушать 2024, November
Anonim
Zrkadlové hodiny s nekonečnom s potenciometrami
Zrkadlové hodiny s nekonečnom s potenciometrami

Narazil som na zrkadlo nekonečna a zistil som, že je to skutočne super. To ma inšpirovalo k vytvoreniu nekonečného zrkadla, ale potreboval som, aby to malo svoj účel. Rozhodol som sa teda vytvoriť funkčné zrkadlové hodiny s nekonečnom. Toto je zrkadlo s nekonečnom, ktoré vám umožňuje meniť režimy, rýchlosť a farby pomocou potenciometrov. (Poznámka: Niečo také robím prvýkrát)

Zásoby

Poďme sa ponoriť do toho, čo potrebujete na výrobu tejto veci!

Budete potrebovať…

1) 1 Arduino Uno

3) 1 Breadboard

4) 1 Posuvný prepínač

5) 3 potenciometre

6) 1 9V batéria

7) 5 -metrový LED pás WS2811

8) Drôty prepojovacích káblov

9) Hodiny (Hodiny, ktoré som použil 12 palcové veľké moderné hodiny)

10) Flexibilný zrkadlový list (ten, ktorý som použil zrkadlový list)

11) Film o súkromí (ten, ktorý som použil One Way Mirror)

12) Spájkovanie môže byť potrebné, závisí to od toho, aký materiál máte

Krok 1: Zapojenie

Elektrické vedenie
Elektrické vedenie
Elektrické vedenie
Elektrické vedenie

Zapojenie je celkom jednoduché

- Prepínač SPST zapína a vypína diódy LED (A0)

- Ľavý potenciometer ovláda svetlo (A1)

- Stredný potenciometer ovláda režimy (A2)

- Pravý potenciometer ovláda rýchlosť (A3)

Krok 2: Kód

#zahrnúť

#definujte PIN 6

#define NUM_LEDS 54

#definovať A0 A0

#definujte A1 A1

#definujte A2 A2

#definujte A3 A3

// Parameter 1 = počet pixelov v páse

// Parameter 2 = číslo PIN (väčšina je platných)

// Parameter 3 = vlajky typu pixelov, podľa potreby sčítajte:

// NEO_KHZ800 800 KHz bitstream (väčšina produktov NeoPixel s LED WS2812)

// NEO_KHZ400 400 KHz (klasický „v1“(nie v2) pixely FLORA, ovládače WS2811)

// Pixely NEO_GRB sú zapojené pre bitový tok GRB (väčšina produktov NeoPixel)

// Pixely NEO_RGB sú zapojené pre bitový tok RGB (pixely FLORA v1, nie v2)

Pásik Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

neplatné nastavenie () {

strip.begin ();

strip.show (); // Inicializácia všetkých pixelov na „vypnuté“

}

prázdna sluč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));

}

inak {

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 (náhodný (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

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

CylonBounce (0, náhodný (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

inak {

CylonBounce (0, 0, náhodný (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));

}

inak {

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

}

inak {

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

}

}

} else {

setAll (0, 0, 0);

}

}

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

bajt *c;

uint16_t i, j;

pre (j = 0; j <256*5; j ++) {// 5 cyklov všetkých farieb na kolese

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

prestávka;

}

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

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

prestávka;

}

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

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

}

showStrip ();

oneskorenie (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;

}

neplatné CylonBounce (bajtová červená, bajtová zelená, bajtová modrá, 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;}

pre (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)

prestávka;

}

setAll (0, 0, 0);

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

pre (int j = 1; j <= veľkosť oka; j ++) {

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

prestávka;

}

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

}

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

showStrip ();

oneskorenie (SpeedDelay);

}

oneskorenie (ReturnDelay);

pre (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)

prestávka;

}

pre (int j = 1; j <= veľkosť oka; j ++) {

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

prestávka;

}

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

}

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

showStrip ();

oneskorenie (SpeedDelay);

}

oneskorenie (ReturnDelay);

}

neplatné RunningLights (bajtová červená, bajtová zelená, bajtová modrá, int oldA0, int oldA1, int oldA2, int oldA3) {

int Pozícia = 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;}

pre (int j = 0; j

{

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

prestávka;

}

Poloha ++; // = 0; // Pozícia + rýchlosť;

pre (int i = 0; i

// sínusová vlna, 3 ofsetové vlny robia dúhu!

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

prestávka;

}

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

}

showStrip ();

oneskorenie (WaveDelay);

}

}

neplatný meteorRain (bajt červený, bajt zelený, bajt modrý, 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;}

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

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

else {SpeedDelay = 20;}

pre (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)

prestávka;

}

// zoslabenie jasu všetkých LED v jednom kroku

pre (int j = 0; j

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

prestávka;

}

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

fadeToBlack (j, meteorTrailDecay);

}

}

// nakresli 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)

prestávka;

}

if ((i-j = 0)) {

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

}

}

showStrip ();

oneskorenie (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 = (stará farba & 0x0000ff00ULUL) >> 8;

b = (oldColor & 0x000000ffULUL);

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

#koniec Ak

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue);

#koniec Ak

}

// *** VYMENIŤ TU ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#koniec Ak

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#koniec Ak

}

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

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

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

#koniec Ak

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED [Pixel].r = červená;

LED [Pixel].g = zelená;

LED [Pixel].b = modrá;

#koniec Ak

}

void setAll (bajt červený, bajt zelený, bajt modrý) {

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

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

}

showStrip ();

}

Krok 3: Vytvorenie hodín

Vytváranie hodín
Vytváranie hodín
Vytváranie hodín
Vytváranie hodín
Vytváranie hodín
Vytváranie hodín

Odporúčam zaobstarať si sklenené hodiny, ktoré sú vo vnútri ploché. Keď som nanášal flexibilné zrkadlo na vnútornú stranu hodín, nastal problém, pretože čísla vo vnútri hodín vyskočili von, zrkadlo sa ohýbalo, čo spôsobilo, že sa efekt nekonečného zrkadla nekonal. Musíte mať flexibilnú zrkadlovú fóliu a fóliu na ochranu osobných údajov, aby boli čo najrovnejšie. Ak získavate hodiny, uistite sa, že LED diódu môžete bez problémov umiestniť dovnútra.

Krok 1: Otvorte hodiny a odstráňte predné sklo

Krok 2: Nasaďte si na predné sklo ochranný film (Toto video vám ukáže, ako na to)

Krok 3: Naneste flexibilné zrkadlo na vnútornú stranu hodín (pred tým odstráňte ručičky hodín)

Krok 4: V strede urobte otvor, do ktorého budú ručičky s hodinami zasunuté späť

Krok 5: Umiestnite pásik LED okolo vnútorných stien hodín (na tento krok som použil horúcu lepiacu pištoľ)

Krok 6: Zapnite LED pásik a položte sklo na vrch hodín, aby ste zistili, či tam je efekt nekonečného zrkadla

Krok 7: Keď budete so všetkým hotoví, dajte hodiny dohromady a nechajte káble prechádzať dozadu

Krok 8: Blahoželáme, že ste dokončili projekt a všetko by malo fungovať dobre

Ak máte akékoľvek otázky, napíšte ich nižšie (vedzte, že možno nebudem môcť odpovedať, ale pokúsim sa urobiť maximum)

Odporúča: