Tartalomjegyzék:

Végtelen tüköróra potenciométerekkel: 3 lépés
Végtelen tüköróra potenciométerekkel: 3 lépés

Videó: Végtelen tüköróra potenciométerekkel: 3 lépés

Videó: Végtelen tüköróra potenciométerekkel: 3 lépés
Videó: Hobbielektronika - Potenciométer és analóg bement 2024, Július
Anonim
Végtelen tüköróra potenciométerekkel
Végtelen tüköróra potenciométerekkel

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

Vezeték
Vezeték
Vezeték
Vezeték

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

Az óra létrehozása
Az óra létrehozása
Az óra létrehozása
Az óra létrehozása
Az óra létrehozása
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: