Indholdsfortegnelse:

Infinity -spejlur med potentiometre: 3 trin
Infinity -spejlur med potentiometre: 3 trin

Video: Infinity -spejlur med potentiometre: 3 trin

Video: Infinity -spejlur med potentiometre: 3 trin
Video: seeing wife face for first time #shorts 2024, Juli
Anonim
Infinity -spejlur med potentiometre
Infinity -spejlur med potentiometre

Jeg stødte på uendeligt spejl, og jeg syntes, det var en virkelig sej. Dette inspirerede mig til at lave et uendeligt spejl, men jeg havde brug for det for at have et formål. Så jeg besluttede mig for at lave et fungerende uendeligt spejlur. Dette er et uendeligt spejl, der giver dig mulighed for at ændre tilstande, hastighed og farver ved hjælp af potentiometre. (Bemærk: Det er første gang jeg laver sådan noget)

Forbrugsvarer

Lad os dykke ned i, hvad du har brug for for at lave denne ting!

Du får brug for…

1) 1 Arduino Uno

3) 1 brødbræt

4) 1 skydekontakt

5) 3 Potentiometre

6) 1 9V batteri

7) 5 meter WS2811 LED Strip

8) Jumper kabeltråde

9) Et ur (uret jeg brugte 12 tommer stort moderne ur)

10) Fleksibelt spejlark (det jeg brugte spejlark)

11) Privacy Film (den jeg brugte One Way Mirror)

12) Lodning kan være påkrævet, dette afhænger af, hvilke materialer du har

Trin 1: Ledningsføring

Ledninger
Ledninger
Ledninger
Ledninger

Ledningerne er ganske enkle

- SPST -kontakten tænder og slukker LED'erne (A0)

- Det venstre potentiometer styrer lyset (A1)

- Det midterste potentiometer styrer tilstande (A2)

- Det højre potentiometer styrer hastigheden (A3)

Trin 2: Koden

#omfatte

#definer PIN 6

#define NUM_LEDS 54

#definer A0 A0

#definer A1 A1

#definer A2 A2

#definer A3 A3

// Parameter 1 = antal pixels i strimmel

// Parameter 2 = pin -nummer (de fleste er gyldige)

// Parameter 3 = pixeltypeflag, tilføj efter behov:

// NEO_KHZ800 800 KHz bitstream (de fleste NeoPixel -produkter m/WS2812 lysdioder)

// NEO_KHZ400 400 KHz (klassisk 'v1' (ikke v2) FLORA -pixels, WS2811 -drivere)

// NEO_GRB Pixels er tilsluttet GRB bitstream (de fleste NeoPixel -produkter)

// NEO_RGB Pixels er forbundet til RGB -bitstrøm (v1 FLORA -pixels, ikke v2)

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

ugyldig opsætning () {

strip.begin ();

strip.show (); // Initialiser alle pixels til 'off'

}

void loop () {

hvis (analogRead (A0)> = 512) {

hvis (analogRead (A2)> = 768) {

hvis (analogRead (A3)> = 768) {

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

} ellers hvis (analogRead (A3)> = 512) {

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

} ellers hvis (analogRead (A3)> = 256) {

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

}

andet{

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

}

} ellers hvis (analogRead (A2)> = 512) {

hvis (analogRead (A1)> = 768) {

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

} ellers hvis (analogRead (A1)> = 512) {

CylonBounce (tilfældig (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

} ellers hvis (analogRead (A1)> = 256) {

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

}

andet{

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

}

} ellers hvis (analogRead (A2)> = 256) {

hvis (analogRead (A1)> = 768) {

byte r, g, b;

r = tilfældig (255);

g = tilfældig (255);

b = tilfældig (255);

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

} ellers hvis (analogRead (A1)> = 512) {

byte r, g, b;

r = tilfældig (255);

g = 0;

b = 0;

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

} ellers hvis (analogRead (A1)> = 256) {

byte r, g, b;

r = 0;

g = tilfældig (255);

b = 0;

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

}

andet{

byte r, g, b;

r = 0;

g = 0;

b = tilfældig (255);

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

}

}

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

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

} ellers hvis (analogRead (A1)> = 512) {

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

} ellers hvis (analogRead (A1)> = 256) {

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

}

andet{

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

}

}

}andet{

setAll (0, 0, 0);

}

}

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

byte *c;

uint16_t i, j;

for (j = 0; j <256*5; j ++) {// 5 cykler af alle farver på hjulet

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

pause;

}

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

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

pause;

}

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

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

}

showStrip ();

forsinkelse (SpeedDelay);

}

}

byte * Wheel (byte WheelPos) {

statisk byte c [3];

hvis (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - WheelPos * 3;

c [2] = 0;

} ellers hvis (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} andet {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

returnere c;

}

void CylonBounce (byte rød, byte grøn, byte blå, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

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

ellers hvis (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

ellers hvis (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}

ellers {SpeedDelay = 20; ReturnDelay = 60;}

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

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

pause;

}

setAll (0, 0, 0);

setPixel (i, rød/10, grøn/10, blå/10);

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

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

pause;

}

setPixel (i+j, rød, grøn, blå);

}

setPixel (i+EyeSize+1, rød/10, grøn/10, blå/10);

showStrip ();

forsinkelse (SpeedDelay);

}

forsinkelse (ReturnDelay);

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

setAll (0, 0, 0);

setPixel (i, rød/10, grøn/10, blå/10);

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

pause;

}

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

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

pause;

}

setPixel (i+j, rød, grøn, blå);

}

setPixel (i+EyeSize+1, rød/10, grøn/10, blå/10);

showStrip ();

forsinkelse (SpeedDelay);

}

forsinkelse (ReturnDelay);

}

void RunningLights (byte rød, byte grøn, byte blå, int oldA0, int oldA1, int oldA2, int oldA3) {

int Position = 0;

int WaveDelay;

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

ellers hvis (analogRead (A3)> = 512) {WaveDelay = 60;}

ellers hvis (analogRead (A3)> = 256) {WaveDelay = 40;}

ellers {WaveDelay = 20;}

for (int j = 0; j

{

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

pause;

}

Position ++; // = 0; // Position + sats;

for (int i = 0; i

// sinusbølge, 3 offsetbølger laver en regnbue!

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

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

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

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

pause;

}

setPixel (i, ((sin (i + Position) * 127 + 128)/255) * rød, ((sin (i + Position) * 127 + 128)/255) * grøn, ((sin (i + Position) * 127 + 128)/255) * blå);

}

showStrip ();

forsinkelse (WaveDelay);

}

}

void meteorRain (byte rød, byte grøn, byte blå, byte meteorSize, byte meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

ellers hvis (analogRead (A3)> = 512) {SpeedDelay = 60;}

ellers hvis (analogRead (A3)> = 256) {SpeedDelay = 40;}

ellers {SpeedDelay = 20;}

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

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

pause;

}

// fade lysstyrke alle lysdioder et trin

for (int j = 0; j

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

pause;

}

hvis ((! meteorRandomDecay) || (tilfældig (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// tegne meteor

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

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

pause;

}

hvis ((i-j = 0)) {

setPixel (i-j, rød, grøn, blå);

}

}

showStrip ();

forsinkelse (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int værdi;

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);

#Afslut Hvis

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue);

#Afslut Hvis

}

// *** ERSTAT TIL HER ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#Afslut Hvis

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#Afslut Hvis

}

void setPixel (int Pixel, byte rød, byte grøn, byte blå) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (rød, grøn, blå));

#Afslut Hvis

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Pixel].r = rød;

lysdioder [Pixel].g = grøn;

lysdioder [Pixel].b = blå;

#Afslut Hvis

}

void setAll (byte rød, byte grøn, byte blå) {

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

setPixel (i, rød, grøn, blå);

}

showStrip ();

}

Trin 3: Oprettelse af uret

Oprettelse af uret
Oprettelse af uret
Oprettelse af uret
Oprettelse af uret
Oprettelse af uret
Oprettelse af uret

Jeg vil anbefale at få et glasur, der er fladt indvendigt. Da jeg påførte det fleksible spejl på indersiden af uret, var der et problem på grund af, at tallene inde i uret sprang ud, spejlet bøjede, hvilket resulterede i, at uendelig spejleffekten ikke skete. Du skal have det fleksible spejlark og Privacy Film for at være så fladt som muligt. Hvis du får et ur, skal du sørge for at placere LED'en indeni uden problemer.

Trin 1: Åbn uret, og fjern det forreste glas

Trin 2: Tag Privacy Film på frontglaset (Denne video viser dig, hvordan du gør det)

Trin 3: Påfør det fleksible spejl på indersiden af uret (Fjern urets hænder, før du gør dette)

Trin 4: Lav et hul i midten, så urets hænder kan placeres tilbage

Trin 5: Placer LED -strimlen rundt om urets indvendige vægge (jeg brugte en varm limpistol til dette trin)

Trin 6: Tænd for LED -strimlen, og anbring glasset oven på uret for at se, om uendelig spejleffekten er der

Trin 7: Når du er færdig med alt, skal du sætte uret sammen og lade ledningerne passere til bagsiden

Trin 8: Tillykke, du har gennemført projektet, og alt skal fungere fint

Hvis du har spørgsmål, bedes du kommentere dem herunder (vide, at jeg muligvis ikke kan svare, men jeg vil gøre mit bedste)

Anbefalede: