Innholdsfortegnelse:

Uendelig speilklokke med potensiometre: 3 trinn
Uendelig speilklokke med potensiometre: 3 trinn

Video: Uendelig speilklokke med potensiometre: 3 trinn

Video: Uendelig speilklokke med potensiometre: 3 trinn
Video: Лучший из ЛУЧШИХ???. Радиоприемник TECSUN PL680 ПОЛНЫЙ ОБЗОР!!! #tecsun 2024, November
Anonim
Infinity speilklokke med potensiometre
Infinity speilklokke med potensiometre

Jeg kom over uendelig speil, og jeg syntes det var veldig kult. Dette inspirerte meg til å lage et uendelig speil, men jeg trengte det for å ha en hensikt. Så jeg bestemte meg for å lage en fungerende uendelig speilklokke. Dette er et uendelig speil som lar deg endre moduser, hastighet og farger ved hjelp av potensiometre. (Merk: Dette er første gang jeg lager noe slikt)

Rekvisita

La oss dykke ned i hva du trenger for å lage denne tingen!

Du vil trenge…

1) 1 Arduino Uno

3) 1 brødbrett

4) 1 skyvebryter

5) 3 potensiometre

6) 1 9V batteri

7) 5 meter WS2811 LED -stripe

8) Jumper Cable Wires

9) En klokke (klokken jeg brukte 12 tommers stor moderne klokke)

10) Fleksibelt speilark (det jeg brukte speilark)

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

12) Lodding kan være nødvendig, dette avhenger av hvilke materialer du har

Trinn 1: Kabling

Kabling
Kabling
Kabling
Kabling

Ledningen er ganske enkel

- SPST -bryteren slår av og på lysdiodene (A0)

- Det venstre potensiometeret styrer lyset (A1)

- Det midtre potensiometeret styrer modusene (A2)

- Høyre potensiometer styrer hastigheten (A3)

Trinn 2: Koden

#inkludere

#definere PIN 6

#define NUM_LEDS 54

#definere A0 A0

#definere A1 A1

#definere A2 A2

#definere A3 A3

// Parameter 1 = antall piksler i stripen

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

// Parameter 3 = piksel type flagg, legg sammen etter behov:

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

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

// NEO_GRB Piksler er koblet til GRB -bitstrøm (de fleste NeoPixel -produkter)

// NEO_RGB -piksler er koblet til RGB -bitstrøm (v1 FLORA -piksler, ikke v2)

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

ugyldig oppsett () {

strip.begin ();

strip.show (); // Initialiser alle piksler til "av"

}

void loop () {

if (analogRead (A0)> = 512) {

hvis (analogRead (A2)> = 768) {

if (analogRead (A3)> = 768) {

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

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

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

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

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

}

ellers{

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

}

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

if (analogRead (A1)> = 768) {

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

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

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

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

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

}

ellers{

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

}

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

if (analogRead (A1)> = 768) {

byte r, g, b;

r = tilfeldig (255);

g = tilfeldig (255);

b = tilfeldig (255);

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

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

byte r, g, b;

r = tilfeldig (255);

g = 0;

b = 0;

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

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

byte r, g, b;

r = 0;

g = tilfeldig (255);

b = 0;

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

}

ellers{

byte r, g, b;

r = 0;

g = 0;

b = tilfeldig (255);

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

}

}

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

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

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

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

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

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

}

ellers{

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

}

}

}ellers{

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 sykluser med alle farger på hjulet

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

gå i stykker;

}

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)

gå i stykker;

}

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;

} annet hvis (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - WheelPos * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} annet {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 3;

}

returnere c;

}

void CylonBounce (byte rød, byte grønn, 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;}

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

gå i stykker;

}

setAll (0, 0, 0);

setPixel (i, rød/10, grønn/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)

gå i stykker;

}

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

}

setPixel (i+EyeSize+1, rød/10, grønn/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ønn/10, blå/10);

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

gå i stykker;

}

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)

gå i stykker;

}

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

}

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

showStrip ();

forsinkelse (SpeedDelay);

}

forsinkelse (ReturnDelay);

}

void RunningLights (byte rød, byte grønn, byte blå, int gammelA0, int gammelA1, int gammelA2, int gammelA3) {

int Posisjon = 0;

int WaveDelay;

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

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

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

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

gå i stykker;

}

Posisjon ++; // = 0; // Posisjon + Rate;

for (int i = 0; i

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

// flytnivå = sin (i + posisjon) * 127 + 128;

// setPixel (i, nivå, 0, 0);

// flytnivå = sin (i + posisjon) * 127 + 128;

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

gå i stykker;

}

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

}

showStrip ();

forsinkelse (WaveDelay);

}

}

void meteorRain (byte rød, byte grønn, byte blå, byte meteorSize, byte meteorTrailDecay, boolsk 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;}

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

gå i stykker;

}

// visne lysstyrke alle lysdioder ett trinn

for (int j = 0; j

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

gå i stykker;

}

hvis ((! meteorRandomDecay) || (tilfeldig (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)

gå i stykker;

}

hvis ((i-j = 0)) {

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

}

}

showStrip ();

forsinkelse (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int verdi;

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

#slutt om

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue);

#slutt om

}

// *** ERSTAT TIL HER ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#slutt om

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#slutt om

}

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

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

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

#slutt om

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

lysdioder [Pixel].r = rød;

lysdioder [Pixel].g = grønn;

lysdioder [Pixel].b = blå;

#slutt om

}

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

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

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

}

showStrip ();

}

Trinn 3: Opprette klokken

Opprette klokken
Opprette klokken
Opprette klokken
Opprette klokken
Opprette klokken
Opprette klokken

Jeg vil anbefale å få en glassklokke som er flat på innsiden. Da jeg påførte det fleksible speilet på innsiden av klokken, var det et problem på grunn av at tallene inne i klokken sprang ut, speilet bøyde og resulterte i at uendelig speileffekt ikke skjedde. Du må ha det fleksible speilarket og Privacy Film for å være så flatt som mulig. Hvis du får en klokke, må du sørge for å plassere LED -en inne uten problemer.

Trinn 1: Åpne klokken og fjern frontglasset

Trinn 2: Sett på personvernfilmen på frontglasset (Denne videoen viser deg hvordan du gjør det)

Trinn 3: Påfør det fleksible speilet på innsiden av klokken (Fjern klokkene før du gjør dette)

Trinn 4: Lag et hull i midten for at klokkeviserne skal settes inn igjen

Trinn 5: Plasser LED -stripen rundt klokkens innvendige vegger (jeg brukte en varm limpistol til dette trinnet)

Trinn 6: Slå på LED -stripen og legg glasset på toppen av klokken for å se om uendelig speileffekt er der

Trinn 7: Når du er ferdig med alt, sett klokken sammen og la ledningene passere til baksiden

Trinn 8: Gratulerer med at du har fullført prosjektet, og alt skal fungere fint

Hvis du har spørsmål, vennligst kommenter dem nedenfor (vet at jeg kanskje ikke kan svare, men jeg vil gjøre mitt beste)

Anbefalt: