2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-23 14:40
Sattusin lõpmatuspeeglisse ja leidsin, et see on tõesti lahe. See inspireeris mind tegema lõpmatuspeeglit, kuid mul oli seda vaja eesmärgi saavutamiseks. Niisiis, otsustasin teha toimiva lõpmatuse peeglikella. See on lõpmatuse peegel, mis võimaldab potentsiomeetrite abil režiime, kiirust ja värve muuta. (Märkus: see on minu esimene kord midagi sellist teha)
Tarvikud
Sukeldugem selle tegemiseks vajaminevasse!
Sa vajad…
1) 1 Arduino Uno
3) 1 leivalaud
4) 1 Lüliti
5) 3 potentsiomeetrit
6) 1 9V aku
7) 5 -meetrine WS2811 LED -riba
8) Jumper kaabli juhtmed
9) Kell (kell, mida kasutasin 12 -tollise suure kaasaegse kellaga)
10) Paindlik peegelleht (see, mida ma kasutasin peegellehte)
11) Privaatsusfilm (see, mida ma kasutasin ühesuunalist peeglit)
12) Jootmine võib olla vajalik, see sõltub sellest, millised materjalid teil on
Samm: juhtmestik
Juhtmestik on üsna lihtne
- SPST -lüliti lülitab LED -id sisse ja välja (A0)
- Vasakpoolne potentsiomeeter juhib valgust (A1)
- Keskmine potentsiomeeter juhib režiime (A2)
- Õige potentsiomeeter kontrollib kiirust (A3)
2. samm: kood
#kaasake
#defineeri PIN 6
#defineeri NUM_LEDS 54
#defineeri A0 A0
#defineeri A1 A1
#defineeri A2 A2
#defineeri A3 A3
// Parameeter 1 = pikslite arv ribas
// Parameeter 2 = pin -number (enamik on kehtivad)
// Parameeter 3 = pikslitüübi lipud, lisage vastavalt vajadusele:
// NEO_KHZ800 800 KHz bitivoog (enamik NeoPixeli tooteid koos WS2812 LED -idega)
// NEO_KHZ400 400 KHz (klassikaline 'v1' (mitte v2) FLORA pikslid, WS2811 draiverid)
// NEO_GRB pikslid on ühendatud GRB bitivooga (enamik NeoPixeli tooteid)
// NEO_RGB pikslid on ühendatud RGB bitivooga (v1 FLORA pikslit, mitte v2)
Adafruit_NeoPixel riba = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
tühine seadistus () {
riba.algus ();
strip.show (); // Initsialiseeri kõik pikslid olekusse „väljas”
}
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));
}
muu {
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 512) {
if (analogRead (A1)> = 768) {
CylonBounce (juhuslik (255), juhuslik (255), juhuslik (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
CylonBounce (juhuslik (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 256) {
CylonBounce (0, juhuslik (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
muu {
CylonBounce (0, 0, juhuslik (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 256) {
if (analogRead (A1)> = 768) {
bait r, g, b;
r = juhuslik (255);
g = juhuslik (255);
b = juhuslik (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
bait r, g, b;
r = juhuslik (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) {
bait r, g, b;
r = 0;
g = juhuslik (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
muu {
bait r, g, b;
r = 0;
g = 0;
b = juhuslik (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
else {if (analogRead (A1)> = 768) {
RunningLights (juhuslik (255), juhuslik (255), juhuslik (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
RunningLights (juhuslik (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 256) {
RunningLights (1, juhuslik (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
muu {
RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
} muud {
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
bait *c;
uint16_t i, j;
(j = 0; j <256*5; j ++) {// 5 ratta kõigi värvide tsüklit
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
jaoks (i = 0; i <NUM_LEDS; i ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
c = Ratas ((((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
viivitus (SpeedDelay);
}
}
bait * ratas (bait WheelPos) {
staatiline bait c [3];
kui (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} muu kui (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - WheelPos * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} muud {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
tagasitulek c;
}
tühine CylonBounce (bait punane, bait roheline, bait sinine, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
muidu kui (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
muidu kui (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
else {SpeedDelay = 20; ReturnDelay = 60;}
jaoks (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)) | | ((vanaA3+256)
murda;
}
setAll (0, 0, 0);
setPixel (i, punane/10, roheline/10, sinine/10);
jaoks (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
setPixel (i+j, punane, roheline, sinine);
}
setPixel (i+EyeSize+1, punane/10, roheline/10, sinine/10);
showStrip ();
viivitus (SpeedDelay);
}
viivitus (ReturnDelay);
jaoks (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, punane/10, roheline/10, sinine/10);
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
jaoks (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
setPixel (i+j, punane, roheline, sinine);
}
setPixel (i+EyeSize+1, punane/10, roheline/10, sinine/10);
showStrip ();
viivitus (SpeedDelay);
}
viivitus (ReturnDelay);
}
tühine RunningLights (bait punane, bait roheline, bait sinine, int oldA0, int oldA1, int oldA2, int oldA3) {
int Positsioon = 0;
int WaveDelay;
if (analogRead (A3)> = 768) {WaveDelay = 80;}
muidu kui (analogRead (A3)> = 512) {WaveDelay = 60;}
muidu kui (analogRead (A3)> = 256) {WaveDelay = 40;}
else {WaveDelay = 20;}
jaoks (int j = 0; j
{
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
Positsioon ++; // = 0; // Positsioon + määr;
jaoks (int i = 0; i
// siinuslaine, 3 nihkelainet teevad vikerkaare!
// ujukitase = sin (i + asend) * 127 + 128;
// setPixel (i, tase, 0, 0);
// ujukitase = sin (i + asend) * 127 + 128;
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
setPixel (i, ((sin (i + positsioon) * 127 + 128)/255) * punane, ((sin (i + asend) * 127 + 128)/255) * roheline, ((sin (i + positsioon) * 127 + 128)/255) * sinine);
}
showStrip ();
viivitus (WaveDelay);
}
}
void meteorRain (bait punane, bait roheline, bait sinine, bait meteoor
setAll (0, 0, 0);
int SpeedDelay;
if (analogRead (A3)> = 768) {SpeedDelay = 80;}
muidu kui (analogRead (A3)> = 512) {SpeedDelay = 60;}
muidu kui (analogRead (A3)> = 256) {SpeedDelay = 40;}
else {SpeedDelay = 20;}
jaoks (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)) | | ((vanaA3+256)
murda;
}
// kõigi LED -ide heleduse kustutamine ühe sammu võrra
jaoks (int j = 0; j
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
kui ((! meteorRandomDecay) || (juhuslik (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// joonista meteoor
jaoks (int j = 0; j <meteorSize; j ++) {
if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((vanaA3+256)
murda;
}
kui ((i-j = 0)) {
setPixel (i-j, punane, roheline, sinine);
}
}
showStrip ();
viivitus (SpeedDelay);
}
}
void fadeToBlack (int ledNo, bait fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int väärtus;
oldColor = riba.getPixelColor (ledNo);
r = (oldColor & 0x00ff0000UL) >> 16;
g = (oldColor & 0x0000ff00UL) >> 8;
b = (vana värv & 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
ledid [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** VAHETA SIIA ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
void setPixel (int piksel, bait punane, bait roheline, bait sinine) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (punane, roheline, sinine));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
ledid [Pixel].r = punane;
LEDid [Pixel].g = roheline;
ledid [Pixel].b = sinine;
#endif
}
void setAll (bait punane, bait roheline, bait sinine) {
jaoks (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, punane, roheline, sinine);
}
showStrip ();
}
3. samm: kella loomine
Soovitan hankida klaasist kell, mis on seest tasane. Kui ma elastset peeglit kella siseküljele rakendasin, tekkis probleem, kuna kella sees olevad numbrid hüppasid välja, peegel paindus, mille tagajärjel lõpmatuse peegli efekt ei toimu. Paindlik peegelleht ja privaatsuskile peavad olema võimalikult tasased. Kui saate kella, veenduge, et saaksite LED -i probleemideta paigutada.
Samm: avage kell ja eemaldage esiklaas
Samm: pange esiklaasile privaatsusfilm (see video näitab teile, kuidas seda teha)
Samm: paigaldage painduv peegel kella siseküljele (eemaldage kellad enne selle tegemist)
Samm: tehke keskele auk kellaosutite tagasi asetamiseks
Samm: asetage LED -riba kella siseseinte ümber (ma kasutasin selle sammu jaoks kuuma liimipüstolit)
6. samm: lülitage LED -riba sisse ja asetage klaas kella peale, et näha, kas lõpmatuse peegli efekt on olemas
Samm 7: Kui olete kõigega valmis, pange kell kokku ja laske juhtmetel tagurpidi läbida
Samm 8: Õnnitleme, et olete projekti lõpetanud ja kõik peaks hästi toimima
Kui teil on küsimusi, palun kommenteerige neid allpool (teadke, et ma ei pruugi vastata, kuid annan endast parima)
Soovitan:
Lõpmatuse peegel koos LCD- ja IR -anduriga: 5 sammu
Lõpmatuse peegel koos LCD- ja IR -anduriga: see projekt näitab teile, kuidas saate lõpmatuse peegli teha. Põhikontseptsioon on see, et peeglil olevad valgusdioodid loovad valguse, mis põrkab tagapeeglist esipeeglisse, kust valgus valgub välja, et saaksime näha sisemust ja nii
"Lihtne" lõpmatuse kuubik: 14 sammu (koos piltidega)
"Lihtne" Infinity Cube: Infinity kuubikud ja ikosaeedrid on asjad, mis on mulle alati silma jäänud. Neid oli aga suhteliselt keeruka raami tõttu alati üsna raske valmistada. Sellel lõpmatuse kuubikul on aga raam, mis on trükitud ühes tükis. Ehituse tegemine
Lihtne DIY lõpmatuse peeglikell: 3 sammu
Lihtne DIY Infinity Mirror Clock: Kui teil on oma tavalise kellaga igav, proovige seda lahedat DIY Infinity Mirror Clocki teha. Oma ruumi tasandamiseks
Lõpmatuse peeglikell: 5 sammu (piltidega)
Infinity Mirror Clock: See on käsitsi valmistatud kell peamiselt kaunistamiseks. Kellal on mitu LED -valgustit, kui see on sisse lülitatud, on see magamistoa kaunistuseks. Kui see on välja lülitatud, on see väike peegel. Muidugi on see kell ise
Lihtne lõpmatuse kuup: 7 sammu (koos piltidega)
Lihtne lõpmatuse kuubik: Ma tean, et seal on palju lõpmatuse gizmosid - nii et siin on veel üks !. Mulle tundus, et seda on lihtne valmistada ja tavaliselt saab hea " Vau! &Quot; Ma eeldan, et kõigil, kes teeseid teevad, on põhioskused (minu omad on üsna elementaarsed!) Infini põhivormis