Sisällysluettelo:

Ääretön peilikello potentiometreillä: 3 vaihetta
Ääretön peilikello potentiometreillä: 3 vaihetta

Video: Ääretön peilikello potentiometreillä: 3 vaihetta

Video: Ääretön peilikello potentiometreillä: 3 vaihetta
Video: L298N-askelmoottoriohjaimen käyttö 4-johdinisen askelmoottorin ohjaamiseksi 2024, Marraskuu
Anonim
Infinity -peilikello potentiometreillä
Infinity -peilikello potentiometreillä

Tulin ääretön peili ja huomasin sen olevan todella siistiä. Tämä inspiroi minua tekemään ääretön peili, mutta tarvitsin sitä tarkoitukselle. Joten päätin tehdä toimivan ääretön peilikello. Tämä on ääretön peili, jonka avulla voit muuttaa tiloja, nopeutta ja värejä potentiometreillä. (Huomaa: Tämä on ensimmäinen kerta, kun teen jotain tällaista)

Tarvikkeet

Katsotaanpa, mitä tarvitset tämän asian tekemiseen!

Tarvitset…

1) 1 Arduino Uno

3) 1 Leipälevy

4) 1 Liukukytkin

5) 3 potentiometriä

6) 1 9V akku

7) 5 metrin WS2811 LED -nauha

8) Jumper -kaapelijohdot

9) Kello (Kello, jota käytin 12 tuuman suuri moderni kello)

10) Joustava peililevy (jota käytin peililevyllä)

11) Yksityisyysfilmi (jota käytin One Way Mirror)

12) Juotos voidaan tarvita, tämä riippuu siitä, mitä materiaaleja sinulla on

Vaihe 1: Johdotus

Johdotus
Johdotus
Johdotus
Johdotus

Johdotus on melko yksinkertainen

- SPST -kytkin kytkee LED -valot päälle ja pois (A0)

- Vasen potentiometri ohjaa valoa (A1)

- Keskimmäinen potentiometri ohjaa tiloja (A2)

- Oikea potentiometri säätää nopeutta (A3)

Vaihe 2: Koodi

#sisältää

#määritä PIN 6

#määrittele NUM_LEDS 54

#määrittele A0 A0

#määrittele A1 A1

#määrittele A2 A2

#määrittele A3 A3

// Parametri 1 = pikselien lukumäärä nauhassa

// Parametri 2 = pin -numero (useimmat ovat kelvollisia)

// Parametri 3 = pikselityyppiset liput, lisää tarvittaessa:

// NEO_KHZ800 800 KHz: n bittivirta (useimmat NeoPixel -tuotteet ja WS2812 -LEDit)

// NEO_KHZ400 400 KHz (klassinen 'v1' (ei v2) FLORA -pikseliä, WS2811 -ohjaimet)

// NEO_GRB Pikselit on kytketty GRB -bittivirtaan (useimmat NeoPixel -tuotteet)

// NEO_RGB Pikselit on kytketty RGB -bittivirtaan (v1 FLORA -pikseliä, ei v2)

Adafruit_NeoPixel strip = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup () {

strip.begin ();

strip.show (); // Alusta kaikki pikselit pois päältä

}

void loop () {

if (analogRead (A0)> = 512) {

if (analogRead (A2)> = 768) {

if (analogRead (A3)> = 768) {

rainbowCycle (80, analoginen luku (A0), analoginen luku (A1), analoginen luku (A2), analoginen luku (A3));

} else if (analogRead (A3)> = 512) {

rainbowCycle (60, analoginen luku (A0), analoginen luku (A1), analoginen luku (A2), analoginen luku (A3));

} else if (analogRead (A3)> = 256) {

rainbowCycle (40, analoginen luku (A0), analoginen luku (A1), analoginen luku (A2), analoginen luku (A3));

}

muu{

rainbowCycle (20, analoginen luku (A0), analoginen luku (A1), analoginen luku (A2), analoginen luku (A3));

}

} else if (analogRead (A2)> = 512) {

jos (analoginenluku (A1)> = 768) {

CylonBounce (random (255), random (255), random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analoginenLue (A1)> = 512) {

CylonBounce (random (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analoginenLue (A1)> = 256) {

CylonBounce (0, random (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

muu{

CylonBounce (0, 0, random (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

} else if (analogRead (A2)> = 256) {

jos (analoginenluku (A1)> = 768) {

tavu r, g, b;

r = satunnainen (255);

g = satunnainen (255);

b = satunnainen (255);

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analoginenLue (A1)> = 512) {

tavu r, g, b;

r = satunnainen (255);

g = 0;

b = 0;

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} else if (analoginenLue (A1)> = 256) {

tavu r, g, b;

r = 0;

g = satunnainen (255);

b = 0;

meteorRain (r, g, b, 10, 20, true, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

muu{

tavu r, g, b;

r = 0;

g = 0;

b = satunnainen (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 (analoginenLue (A1)> = 512) {

RunningLights (satunnainen (255), 1, 1, analoginen luku (A0), analoginen luku (A1), analoginen luku (A2), analoginen luku (A3));

} else if (analoginenLue (A1)> = 256) {

RunningLights (1, random (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

muu{

RunningLights (1, 1, random (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

}muu{

setAll (0, 0, 0);

}

}

void rainbowCycle (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {

tavu *c;

uint16_t i, j;

(j = 0; j <256*5; j ++) {// 5 pyörän kaikkien värien sykliä

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) (((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

(i = 0; i <NUM_LEDS; i ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

c = Pyörä ((((i * 256 / NUM_LEDS) + j) & 255);

setPixel (i, *c, *(c+1), *(c+2));

}

showStrip ();

viive (SpeedDelay);

}

}

tavu * Pyörä (tavu WheelPos) {

staattinen tavu c [3];

jos (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - WheelPos * 3;

c [2] = 0;

} muu jos (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} muuta {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

paluu c;

}

void CylonBounce (tavun punainen, tavun vihreä, tavun sininen, 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 ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) (((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

setAll (0, 0, 0);

setPixel (i, punainen/10, vihreä/10, sininen/10);

for (int j = 1; j <= EyeSize; j ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

setPixel (i+j, punainen, vihreä, sininen);

}

setPixel (i+EyeSize+1, punainen/10, vihreä/10, sininen/10);

showStrip ();

viive (SpeedDelay);

}

viive (ReturnDelay);

for (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {

setAll (0, 0, 0);

setPixel (i, punainen/10, vihreä/10, sininen/10);

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) (((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

for (int j = 1; j <= EyeSize; j ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

setPixel (i+j, punainen, vihreä, sininen);

}

setPixel (i+EyeSize+1, punainen/10, vihreä/10, sininen/10);

showStrip ();

viive (SpeedDelay);

}

viive (ReturnDelay);

}

tyhjä RunningLights (tavun punainen, tavun vihreä, tavun sininen, int vanhaA0, int oldA1, int oldA2, int oldA3) {

int Asema = 0;

int WaveDelay;

if (analogRead (A3)> = 768) {WaveDelay = 80;}

muuten jos (analoginenluku (A3)> = 512) {WaveDelay = 60;}

else if (analogRead (A3)> = 256) {WaveDelay = 40;}

else {WaveDelay = 20;}

varten (int j = 0; j

{

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

Sijoitus ++; // = 0; // Sijainti + korko;

varten (int i = 0; i

// siniaalto, 3 offset -aaltoa tekevät sateenkaaren!

// float level = sin (i + Position) * 127 + 128;

// setPixel (i, taso, 0, 0);

// float level = sin (i + Position) * 127 + 128;

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) (((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

setPixel (i, ((sin (i + sijainti) * 127 + 128)/255) * punainen, ((sin (i + asento) * 127 + 128)/255) * vihreä, ((sin (i + asema) * 127 + 128)/255) * sininen);

}

showStrip ();

viive (WaveDelay);

}

}

mitätön meteorRain (tavun punainen, tavun vihreä, tavun sininen, tavu meteoriKoko, tavumeteori

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 ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

// häivytä kaikkien LEDien kirkkaus yhdellä askeleella

varten (int j = 0; j

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) (((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

jos ((! meteorRandomDecay) || (satunnainen (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// piirtää meteoriitti

for (int j = 0; j <meteorSize; j ++) {

jos (oldA0! = analoginenLue (A0) || ((vanhaA1-256)> analoginenLue (A1)) || ((vanhaA1+256) analoginenLue (A2)) || ((vanhaA2+256) analoginenLue (A3)) | | ((vanhaA3+256)

tauko;

}

jos ((i-j = 0)) {

setPixel (i-j, punainen, vihreä, sininen);

}

}

showStrip ();

viive (SpeedDelay);

}

}

void fadeToBlack (int ledNo, tavu fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int arvo;

oldColor = strip.getPixelColor (ledNo);

r = (oldColor & 0x00ff0000UL) >> 16;

g = (oldColor & 0x0000ff00UL) >> 8;

b = (vanha väri & 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);

#loppu Jos

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

ledit [ledNo].fadeToBlackBy (fadeValue);

#loppu Jos

}

// *** KORVAA TÄSTÄ ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#loppu Jos

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#loppu Jos

}

void setPixel (int Pixel, tavu punainen, tavu vihreä, tavu sininen) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (punainen, vihreä, sininen));

#loppu Jos

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

ledit [Pixel].r = punainen;

ledit [pikseli].g = vihreä;

ledit [Pixel].b = sininen;

#loppu Jos

}

void setAll (tavu punainen, tavu vihreä, tavu sininen) {

(int i = 0; i <NUM_LEDS; i ++) {

setPixel (i, punainen, vihreä, sininen);

}

showStrip ();

}

Vaihe 3: Kellon luominen

Kellon luominen
Kellon luominen
Kellon luominen
Kellon luominen
Kellon luominen
Kellon luominen

Suosittelen hankkimaan lasikellon, joka on litteä sisältä. Kun laitoin joustavaa peiliä kellon sisäpuolelle, oli ongelma, koska kellon sisällä olevat numerot ponnahtivat ulos, peili taipui, jolloin äärettömän peilin vaikutus ei tapahtunut. Sinun on oltava joustava peililevy ja tietosuojakalvo mahdollisimman tasainen. Jos saat kellon, varmista, että voit sijoittaa LEDin ilman ongelmia.

Vaihe 1: Avaa kello ja poista etulasi

Vaihe 2: Laita yksityisyysfilmi etulasiin (tämä video näyttää kuinka se tehdään)

Vaihe 3: Kiinnitä joustava peili kellon sisäpuolelle (Irrota kellot ennen kuin teet tämän)

Vaihe 4: Tee keskelle reikä kellon osoittimien asettamiseksi takaisin

Vaihe 5: Aseta LED -nauha kellon sisäseinien ympärille (tässä vaiheessa käytin kuumaliimapistoolia)

Vaihe 6: Kytke LED -nauha päälle ja aseta lasi kellon päälle nähdäksesi, onko ääretön peilitehoste olemassa

Vaihe 7: Kun olet tehnyt kaiken, laita kello yhteen ja anna johtojen kulkea taaksepäin

Vaihe 8: Onnittelut projektin suorittamisesta ja kaiken pitäisi toimia hyvin

Jos sinulla on kysyttävää, kommentoi niitä alla (tiedä, etten ehkä pysty vastaamaan, mutta yritän parhaani)

Suositeltava: