Obsah:
Video: Zrkadlové hodiny s nekonečnom s potenciometrami: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:56
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
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
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:
Vytvorte zrkadlové hodiny s nekonečnom: 15 krokov (s obrázkami)
Make a Infinity Mirror Clock: V predchádzajúcom projekte som postavil zrkadlo s nekonečnom, kde mojím konečným cieľom bolo urobiť z nich hodiny. (Make a Colorful Infinity Mirror) Po zostavení som to nesledoval, pretože aj keď to vyzeralo super, bolo tu niekoľko vecí s
Jednoduché zrkadlové hodiny DIY Infinity: 3 kroky
Jednoduché zrkadlové hodiny pre domácich majstrov: Ak vás nudia vaše bežné hodiny, skúste si vyrobiť tieto skvelé zrkadlové hodiny pre domácich majstrov. Na vyrovnanie úrovne vašej miestnosti
Ovládanie 3 servomotorov s 3 potenciometrami a Arduino: 11 krokov (s obrázkami)
Ovládanie 3 servomotorov s 3 potenciometrami a Arduino: Dobrý deň. Toto je môj prvý pokyn, takže dúfam, že so mnou budete mať trpezlivosť, ak pri jeho vytváraní urobím chyby. Je napísaný pre začiatočníkov, takže pokročilejší z vás môžu veľa z toho preskočiť a začať ho zapojovať. Cieľ, ktorý som si stanovil
Zrkadlové hodiny nekonečna: 5 krokov (s obrázkami)
Zrkadlové hodiny Infinity: Jedná sa o ručne vyrobené hodiny hlavne na dekoráciu. V hodinách je niekoľko LED svetiel, keď sú zapnuté, je to krásna dekorácia do spálne. Keď je vypnutý, je to malé zrkadlo. Samozrejme, sú to samotné hodiny
Zrkadlové nástenné hodiny Infinity v rámiku obrazu IKEA: 4 kroky
Zrkadlové nástenné hodiny Infinity v rámiku obrazu IKEA: Dobrý deň, vždy som chcel postaviť nástenné hodiny. V obchodoch ako IKEA je veľa nádherných nástenných hodín. S týmito komerčnými hodinami som mal nejaké problémy. Sú na mňa príliš hlasné (nepretržitý tic-tac je nepríjemný), nevidím hodinové ručičky