Infinity -spieëlhorlosie met potensiometers: 3 stappe
Infinity -spieëlhorlosie met potensiometers: 3 stappe
Anonim
Oneindige spieëlhorlosie met potensiometers
Oneindige spieëlhorlosie met potensiometers

Ek het die oneindige spieël raakgeloop en ek vind dit 'n wonderlike ding. Dit het my geïnspireer om 'n oneindige spieël te maak, maar ek het dit nodig gehad om 'n doel te hê. Daarom het ek besluit om 'n werkende oneindige spieëlhorlosie te maak. Dit is 'n oneindige spieël waarmee u die modi, spoed en kleure kan verander met behulp van potensiometers. (Let wel: dit is die eerste keer dat ek so iets maak)

Voorrade

Kom ons kyk na wat u nodig het om hierdie ding te maak!

Jy sal nodig hê…

1) 1 Arduino Uno

3) 1 broodbord

4) 1 Skyfskakelaar

5) 3 potensiometers

6) 1 9V battery

7) 5 meter WS2811 LED Strip

8) Kabeldraadsels

9) 'n Horlosie (die horlosie wat ek 'n groot moderne klok van 12 duim gebruik het)

10) Buigsame spieëlblad (die een wat ek spieëlblad gebruik het)

11) Privaatheidsfilm (die een wat ek One Way Mirror gebruik het)

12) Soldeer kan nodig wees, dit hang af van die materiaal wat u het

Stap 1: Bedrading

Bedrading
Bedrading
Bedrading
Bedrading

Die bedrading is redelik eenvoudig

- Die SPST -skakelaar skakel die LED's aan (A0)

- Die linker potensiometer beheer die lig (A1)

- Die middelste potensiometer beheer die modusse (A2)

- Die regte potensiometer beheer die spoed (A3)

Stap 2: Die kode

#insluit

#definieer PIN 6

#definieer NUM_LEDS 54

#definieer A0 A0

#definieer A1 A1

#definieer A2 A2

#definieer A3 A3

// Parameter 1 = aantal pixels in strook

// Parameter 2 = speldnommer (die meeste is geldig)

// Parameter 3 = pixeltipe vlae, voeg by indien nodig:

// NEO_KHZ800 800 KHz bitstroom (die meeste NeoPixel -produkte met WS2812 LED's)

// NEO_KHZ400 400 KHz (klassieke 'v1' (nie v2) FLORA -pixels, WS2811 -bestuurders)

// NEO_GRB Pixels word bedraad vir GRB -bitstroom (die meeste NeoPixel -produkte)

// NEO_RGB -pixels word bedraad vir RGB -bitstroom (v1 FLORA -pixels, nie v2)

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

ongeldige opstelling () {

strip.begin ();

strip.show (); // Initialiseer alle pixels na 'af'

}

leemte -lus () {

if (analogRead (A0)> = 512) {

if (analogRead (A2)> = 768) {

if (analogRead (A3)> = 768) {

rainbowCycle (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} anders as (analogRead (A3)> = 512) {

rainbowCycle (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} anders as (analogRead (A3)> = 256) {

rainbowCycle (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

anders {

rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

} anders as (analogRead (A2)> = 512) {

if (analogRead (A1)> = 768) {

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

} anders as (analogRead (A1)> = 512) {

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

} anders as (analogRead (A1)> = 256) {

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

}

anders {

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

}

} anders as (analogRead (A2)> = 256) {

if (analogRead (A1)> = 768) {

greep r, g, b;

r = ewekansig (255);

g = ewekansig (255);

b = ewekansig (255);

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

} anders as (analogRead (A1)> = 512) {

greep r, g, b;

r = ewekansig (255);

g = 0;

b = 0;

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

} anders as (analogRead (A1)> = 256) {

greep r, g, b;

r = 0;

g = ewekansig (255);

b = 0;

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

}

anders {

greep r, g, b;

r = 0;

g = 0;

b = ewekansig (255);

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

}

}

anders {if (analogRead (A1)> = 768) {

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

} anders as (analogRead (A1)> = 512) {

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

} anders as (analogRead (A1)> = 256) {

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

}

anders {

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

}

}

} anders {

setAll (0, 0, 0);

}

}

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

greep *c;

uint16_t i, j;

vir (j = 0; j <256*5; j ++) {// 5 siklusse van alle kleure op wiel

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

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

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

c = wiel (((i * 256 / NUM_LEDS) + j) & 255);

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

}

showStrip ();

vertraging (SpeedDelay);

}

}

byte * wiel (byte WheelPos) {

statiese greep c [3];

as (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - WheelPos * 3;

c [2] = 0;

} anders as (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} anders {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

terugkeer c;

}

void CylonBounce (byte rooi, byte groen, byte blou, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

if (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}

anders as (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

anders as (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}

anders {SpeedDelay = 20; ReturnDelay = 60;}

vir (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

setAll (0, 0, 0);

setPixel (i, rooi/10, groen/10, blou/10);

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

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

setPixel (i+j, rooi, groen, blou);

}

setPixel (i+EyeSize+1, rooi/10, groen/10, blou/10);

showStrip ();

vertraging (SpeedDelay);

}

vertraging (ReturnDelay);

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

setAll (0, 0, 0);

setPixel (i, rooi/10, groen/10, blou/10);

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

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

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

setPixel (i+j, rooi, groen, blou);

}

setPixel (i+EyeSize+1, rooi/10, groen/10, blou/10);

showStrip ();

vertraging (SpeedDelay);

}

vertraging (ReturnDelay);

}

void RunningLights (byte rooi, byte groen, byte blou, int oldA0, int oldA1, int oldA2, int oldA3) {

int Posisie = 0;

int WaveDelay;

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

anders as (analogRead (A3)> = 512) {WaveDelay = 60;}

anders as (analogRead (A3)> = 256) {WaveDelay = 40;}

anders {WaveDelay = 20;}

vir (int j = 0; j

{

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

Posisie ++; // = 0; // Posisie + koers;

vir (int i = 0; i

// sinusgolf, 3 offsetgolwe maak 'n reënboog!

// vlotvlak = sin (i + posisie) * 127 + 128;

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

// vlotvlak = sin (i + posisie) * 127 + 128;

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

setPixel (i, ((sin (i + posisie) * 127 + 128)/255) * rooi, ((sin (i + posisie) * 127 + 128)/255) * groen, ((sin (i + posisie) * 127 + 128)/255) * blou);

}

showStrip ();

vertraging (WaveDelay);

}

}

void meteorRain (byte rooi, byte groen, byte blou, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

anders as (analogRead (A3)> = 512) {SpeedDelay = 60;}

anders as (analogRead (A3)> = 256) {SpeedDelay = 40;}

anders {SpeedDelay = 20;}

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

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

// vervaag helderheid alle LED's een stap

vir (int j = 0; j

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

as ((! meteorRandomDecay) || (ewekansig (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// teken meteoor

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

as (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((ouA3+256)

breek;

}

as ((i-j = 0)) {

setPixel (i-j, rooi, groen, blou);

}

}

showStrip ();

vertraging (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int waarde;

oldColor = strip.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

leds [ledNo].fadeToBlackBy (fadeValue);

#endif

}

// *** VERVANG HIER ***

leegte showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

void setPixel (int Pixel, byte rooi, byte groen, byte blou) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (rooi, groen, blou));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Pixel].r = rooi;

leds [Pixel].g = groen;

leds [Pixel].b = blou;

#endif

}

void setAll (byte rooi, byte groen, byte blou) {

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

setPixel (i, rooi, groen, blou);

}

showStrip ();

}

Stap 3: Maak die klok

Die skep van die klok
Die skep van die klok
Die skep van die klok
Die skep van die klok
Die skep van die klok
Die skep van die klok

Ek beveel aan dat u 'n glashorlosie aan die binnekant plat kry. Toe ek die buigsame spieël aan die binnekant van die horlosie aanbring, was daar 'n probleem as gevolg van die getalle binne -in die horlosie wat buig, die spieël buig, wat veroorsaak dat die oneindige spieël -effek nie gebeur nie. Die buigsame spieëlblad en die privaatheidsfilm moet so plat as moontlik wees. As u 'n horlosie kry, moet u seker maak dat u die LED sonder probleme kan plaas.

Stap 1: Maak die horlosie oop en verwyder die voorste glas

Stap 2: Trek die privaatheidsfilm op die voorste glas aan (hierdie video wys hoe u dit moet doen)

Stap 3: Pas die buigsame spieël aan die binnekant van die horlosie toe (verwyder die horlosies voordat u dit doen)

Stap 4: Maak 'n gaatjie in die middel sodat die horlosies weer ingeplaas kan word

Stap 5: Plaas die LED -strook om die binnekant van die horlosie (ek het 'n warm lijmpistool gebruik vir hierdie stap)

Stap 6: Skakel die LED -strook aan en plaas die glas bo -op die horlosie om te sien of die oneindige spieëleffek daar is

Stap 7: Nadat u klaar is met alles, sit die horlosie bymekaar en laat die drade na agter toe gaan

Stap 8: Geluk dat u die projek voltooi het en alles behoort goed te werk

As u enige vrae het, lewer 'n opmerking hier onder (weet dat ek moontlik nie kan reageer nie, maar ek sal my bes doen)

Aanbeveel: