Sisukord:

Lõpmatuse peeglikell koos potentsiomeetritega: 3 sammu
Lõpmatuse peeglikell koos potentsiomeetritega: 3 sammu

Video: Lõpmatuse peeglikell koos potentsiomeetritega: 3 sammu

Video: Lõpmatuse peeglikell koos potentsiomeetritega: 3 sammu
Video: Бросьте щепотку сахара, избавьтесь от этого навсегда. Денежные народные приметы 2024, Juuli
Anonim
Infinity peeglikell koos potentsiomeetritega
Infinity peeglikell koos potentsiomeetritega

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
Juhtmestik
Juhtmestik
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

Kella loomine
Kella loomine
Kella loomine
Kella loomine
Kella loomine
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: