Tartalomjegyzék:
Videó: Végtelen tüköróra potenciométerekkel: 3 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:40
Találkoztam a végtelen tükörrel, és nagyon klassznak találtam. Ez inspirált engem egy végtelen tükör készítésére, de szükségem volt rá, hogy legyen célja. Ezért úgy döntöttem, hogy készítek egy működő végtelen tükör órát. Ez egy végtelen tükör, amely lehetővé teszi az üzemmódok, a sebesség és a színek megváltoztatását potenciométerek segítségével. (Megjegyzés: most először készítek ilyesmit)
Kellékek
Merüljünk el, mi kell ehhez a dologhoz!
Szükséged lesz…
1) 1 Arduino Uno
3) 1 kenyeretábla
4) 1 Tolókapcsoló
5) 3 potenciométer
6) 1 9V -os elem
7) 5 méteres WS2811 LED csík
8) Jumper kábelvezetékek
9) Egy óra (Az óra, amelyet 12 hüvelykes, nagyméretű, modern órát használtam)
10) Rugalmas tükörlap (az egyik, amit tükörlapot használtam)
11) Adatvédelmi film (az egyirányú tükröt használtam)
12) Forrasztásra lehet szükség, ez attól függ, hogy milyen anyagokkal rendelkezik
1. lépés: Kábelezés
A huzalozás meglehetősen egyszerű
- Az SPST kapcsoló be- és kikapcsolja a LED -eket (A0)
- A bal oldali potenciométer szabályozza a fényt (A1)
- A középső potenciométer szabályozza az üzemmódokat (A2)
- A megfelelő potenciométer szabályozza a sebességet (A3)
2. lépés: A kód
#befoglalni
#define PIN 6
#define NUM_LEDS 54
#define A0 A0
#define A1 A1
#define A2 A2
#define A3 A3
// 1. paraméter = a képpontok száma a szalagon
// 2. paraméter = pin szám (a legtöbb érvényes)
// 3. paraméter = képpont típusú jelzők, szükség szerint összeadva:
// NEO_KHZ800 800 KHz bitfolyam (a legtöbb NeoPixel termék WS2812 LED -ekkel)
// NEO_KHZ400 400 KHz (klasszikus 'v1' (nem v2) FLORA pixelek, WS2811 illesztőprogramok)
// A NEO_GRB Pixelek GRB bitfolyamhoz vannak csatlakoztatva (a legtöbb NeoPixel termék)
// NEO_RGB Pixelek vezetékesek RGB bitfolyamhoz (v1 FLORA képpont, nem v2)
Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
void setup () {
strip.begin ();
strip.show (); // Inicializálja az összes képpontot "kikapcsolt" állapotba
}
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, analóg olvasás (A0), analóg olvasás (A1), analóg olvasat (A2), analóg olvasat (A3));
} else if (analogRead (A3)> = 256) {
rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
más{
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));
}
más{
CylonBounce (0, 0, random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} else if (analogRead (A2)> = 256) {
if (analogRead (A1)> = 768) {
bájt r, g, b;
r = véletlenszerű (255);
g = véletlenszerű (255);
b = véletlenszerű (255);
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} else if (analogRead (A1)> = 512) {
bájt r, g, b;
r = véletlenszerű (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) {
bájt r, g, b;
r = 0;
g = véletlenszerű (255);
b = 0;
meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
más{
bájt r, g, b;
r = 0;
g = 0;
b = véletlenszerű (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));
}
más{
RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
}más{
setAll (0, 0, 0);
}
}
void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
bájt *c;
uint16_t i, j;
mert (j = 0; j <256*5; j ++) {// 5 ciklus minden színben a keréken
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
for (i = 0; i <NUM_LEDS; i ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
c = Kerék ((((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
késleltetés (SpeedDelay);
}
}
byte * Kerék (byte WheelPos) {
statikus bájt c [3];
ha (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;
} más {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
visszatérés c;
}
void CylonBounce (bájt piros, bájt zöld, bájt kék, 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;}
for (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
setAll (0, 0, 0);
setPixel (i, piros/10, zöld/10, kék/10);
for (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
setPixel (i+j, piros, zöld, kék);
}
setPixel (i+EyeSize+1, piros/10, zöld/10, kék/10);
showStrip ();
késleltetés (SpeedDelay);
}
késleltetés (ReturnDelay);
for (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, piros/10, zöld/10, kék/10);
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
for (int j = 1; j <= EyeSize; j ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
setPixel (i+j, piros, zöld, kék);
}
setPixel (i+EyeSize+1, piros/10, zöld/10, kék/10);
showStrip ();
késleltetés (SpeedDelay);
}
késleltetés (ReturnDelay);
}
void RunningLights (bájt piros, bájt zöld, bájt kék, int oldA0, int oldA1, int oldA2, int oldA3) {
int Pozíció = 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;}
mert (int j = 0; j
{
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
Pozíció ++; // = 0; // Pozíció + arány;
mert (int i = 0; i
// szinuszhullám, 3 eltolt hullám szivárványt alkot!
// úszó szint = sin (i + Pozíció) * 127 + 128;
// setPixel (i, szint, 0, 0);
// úszó szint = sin (i + Pozíció) * 127 + 128;
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
setPixel (i, ((sin (i + pozíció) * 127 + 128)/255) * piros, ((sin (i + pozíció) * 127 + 128)/255) * zöld, ((sin (i + pozíció) * 127 + 128)/255) * kék);
}
showStrip ();
késleltetés (WaveDelay);
}
}
void meteorRain (bájt piros, bájt zöld, kék bájt, bájt meteorMéret, bájt 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;}
(int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
// az összes LED fényerejének halványítása egy lépésben
mert (int j = 0; j
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
if ((! meteorRandomDecay) || (véletlenszerű (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// rajzoljon meteort
for (int j = 0; j <meteorSize; j ++) {
if (oldA0! = analógOlvasás (A0) || ((régiA1-256)> analógOlvasás (A1)) || ((régiA1+256) analógOlvasás (A2)) || ((régiA2+256) analógOlvasás (A3)) | | ((régiA3+256)
szünet;
}
ha ((i-j = 0)) {
setPixel (i-j, piros, zöld, kék);
}
}
showStrip ();
késleltetés (SpeedDelay);
}
}
void fadeToBlack (int ledNo, byte fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int érték;
oldColor = szalag.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
ledek [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** CSERE ITT ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
void setPixel (int Pixel, bájt piros, bájt zöld, bájt kék) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Pixel, strip. Color (piros, zöld, kék));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
ledek [Pixel].r = piros;
ledek [Pixel].g = zöld;
ledek [Pixel].b = kék;
#endif
}
void setAll (bájt piros, bájt zöld, bájt kék) {
for (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, piros, zöld, kék);
}
showStrip ();
}
3. lépés: Az óra létrehozása
Azt javaslom, hogy vásároljon üveglapot, amely belülről lapos. Amikor a rugalmas tükröt az óra belsejére alkalmaztam, probléma merült fel az óra belsejében lévő számok kiugrása miatt, a tükör meghajlott, és a végtelen tükör hatása nem következett be. A rugalmas tükörlapnak és az adatvédelmi filmnek a lehető leglaposabbnak kell lennie. Ha órát kap, győződjön meg arról, hogy gond nélkül elhelyezheti a LED -et.
Lépés: Nyissa fel az órát, és vegye le az előlapot
2. lépés: Tegye fel az adatvédelmi filmet az előlapra (ez a videó bemutatja, hogyan kell csinálni)
3. lépés: Tegye fel a rugalmas tükröt az óra belsejére (ezt megelőzően vegye le az órákat)
4. lépés: Készítsen egy lyukat a közepébe, hogy visszahelyezze az óramutatókat
5. lépés: Helyezze a LED -csíkot az óra belső falai köré (ehhez a lépéshez forró ragasztópisztolyt használtam)
6. lépés: Kapcsolja be a LED szalagot, és tegye az üveget az óra tetejére, hogy megnézze, létezik -e a végtelen tükör hatása
7. lépés: Ha mindent elvégeztünk, tegyük össze az órát, és hagyjuk, hogy a vezetékek hátrafelé haladjanak
8. lépés: Gratulálunk, hogy befejezte a projektet, és mindennek jól kell működnie
Ha bármilyen kérdése van, kérjük, tegye meg megjegyzéseit az alábbiakban (Tudja, hogy nem tudok válaszolni, de mindent megteszek)
Ajánlott:
Készítsen végtelen tükör órát: 15 lépés (képekkel)
Készíts egy végtelen tükör órát: Egy korábbi projektemben építettem egy végtelen tükröt, ahol a végső célom az volt, hogy órává váljon. (Készíts egy színes végtelen tükröt) Az építés után nem folytattam ezt, mert bár jól nézett ki, volt néhány dolog a
Könnyű végtelen tükör Arduino Gemma és Neo Pixelekkel: 8 lépés (képekkel)
Könnyű végtelen tükör Arduino Gemma & NeoPixels -el: Íme! Nézzen mélyen a varázslatos és megtévesztően egyszerű végtelen tükörbe! A LED -ek egyetlen csíkja befelé ragyog a tükör szendvicsen, hogy a végtelen tükröződés hatását keltse. Ez a projekt az Arduin bevezetőm készségeit és technikáit fogja alkalmazni
Végtelen tükör LCD és IR érzékelővel: 5 lépés
Végtelen tükör LCD és IR érzékelővel: Ez a projekt megmutatja, hogyan készíthet végtelen tükröt. Az alapkoncepció az, hogy a tükrön lévő LED -ek olyan fényt hoznak létre, amely visszapattan a hátsó tükörről az első tükörre, ahol némi fény kiszökik, hogy beláthassuk a belsőt és így tovább
Egyszerű DIY végtelen tüköróra: 3 lépés
Egyszerű DIY Infinity Mirror Clock: Ha unatkozik a normál órájával, próbálja meg elkészíteni ezt a hűvös DIY Infinity Mirror Clock -ot. A szoba szintjének emelésére
Végtelen tüköróra: 5 lépés (képekkel)
Végtelen tüköróra: Ez egy kézzel készített óra, főleg dekorációként. Az órában több LED -lámpa található, amikor be van kapcsolva, ez egy gyönyörű dekoráció a hálószobához. Kikapcsolt állapotban egy kis tükör. Természetesen ez maga az óra