2025 Autor: John Day | [email protected]. Naposledy změněno: 2025-01-23 14:38
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í
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
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:
Vytvořte zrcadlové hodiny nekonečna: 15 kroků (s obrázky)
Make a Infinity Mirror Clock: V předchozím projektu jsem postavil zrcadlo nekonečna, kde bylo mým konečným cílem udělat z něj hodiny. (Make a Colorful Infinity Mirror) Po jeho vybudování jsem se po tom nesnažil, protože, ačkoliv to vypadalo skvěle, bylo pár věcí s
Pulzující LED s časovačem 555 a potenciometry: 4 kroky
Pulzující LED pomocí časovače 555 a potenciometrů: Zdravím! V tomto návodu vám ukážeme, jak zkonstruovat obvod stmívače LED, který běží na nastavitelné časované smyčce pomocí potenciometru, časovače 555 a dalších základních obvodových komponent. Nápad na tento projekt jsme poprvé získali od
2 potenciometry a 2 serva: řízený pohyb s Arduino: 4 kroky
2 potenciometry a 2 serva: Řízený pohyb s Arduino: Nejprve musíte shromáždit příslušné materiály, abyste tento obvod spojili
Snadné DIY nekonečné zrcadlové hodiny: 3 kroky
Snadné DIY Infinity Mirror Clock: Pokud vás normální hodiny nudí, zkuste si vyrobit tyto skvělé DIY Infinity Mirror Clock. Chcete -li vyrovnat svůj pokoj
Zrcadlové hodiny nekonečna: 5 kroků (s obrázky)
Zrcadlové hodiny Infinity: Jedná se o ručně vyráběné hodiny hlavně pro dekoraci. V hodinách je několik LED světel, po zapnutí je to krásná dekorace do ložnice. Když je vypnutý, je to malé zrcátko. Samozřejmě jsou to samotné hodiny