Taula de continguts:

Rellotge Infinity Mirror amb potenciòmetres: 3 passos
Rellotge Infinity Mirror amb potenciòmetres: 3 passos

Vídeo: Rellotge Infinity Mirror amb potenciòmetres: 3 passos

Vídeo: Rellotge Infinity Mirror amb potenciòmetres: 3 passos
Vídeo: TAKEN ONBOARD A UFO: Five True Cases 2024, Desembre
Anonim
Rellotge de mirall infinit amb potenciòmetres
Rellotge de mirall infinit amb potenciòmetres

Em vaig trobar amb un mirall infinit i em va semblar molt divertit. Això em va inspirar a fer un mirall infinit, però el necessitava per tenir un propòsit. Per tant, vaig decidir crear un rellotge de mirall infinit que funcionés. Es tracta d’un mirall infinit que permet canviar els modes, la velocitat i els colors mitjançant potenciòmetres. (Nota: Aquesta és la meva primera vegada que faig alguna cosa així)

Subministraments

Aprofundim en el que necessiteu per fer això.

Necessitarà…

1) 1 Arduino Uno

3) 1 tauler de pa

4) 1 interruptor de lliscament

5) 3 Potenciómetres

6) 1 bateria de 9V

7) Tira LED de 5 metres WS2811

8) cables de cable de pont

9) Un rellotge (el rellotge que he utilitzat amb un rellotge modern gran de 12 polzades)

10) Full de mirall flexible (el que vaig utilitzar Mirror Sheet)

11) Pel·lícula de privadesa (la que he fet servir One Way Mirror)

12) Pot ser necessari soldar, això depèn del material que tingueu

Pas 1: cablejat

Cablejat
Cablejat
Cablejat
Cablejat

El cablejat és bastant senzill

- L'interruptor SPST encén i apaga els LED (A0)

- El potenciòmetre esquerre controla la llum (A1)

- El potenciòmetre central controla els modes (A2)

- El potenciòmetre dret controla la velocitat (A3)

Pas 2: el codi

#incloure

#defineix el PIN 6

#define NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#defineix A3 A3

// Paràmetre 1 = nombre de píxels a la tira

// Paràmetre 2 = número de pin (la majoria són vàlids)

// Paràmetre 3 = indicadors de tipus de píxel, afegiu-los si cal:

// NEO_KHZ800 800 KHz flux de bits (la majoria de productes NeoPixel amb LEDs WS2812)

// NEO_KHZ400 400 KHz (clàssic 'v1' (no v2) píxels FLORA, controladors WS2811)

// Els píxels NEO_GRB estan connectats per al flux de bits GRB (la majoria de productes NeoPixel)

// Els píxels NEO_RGB estan connectats per a flux de bits RGB (v1 píxels FLORA, no v2)

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

configuració nul·la () {

strip.begin ();

strip.show (); // Inicialitza tots els píxels a "off"

}

bucle buit () {

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, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (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 (aleatori (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) {

byte r, g, b;

r = aleatori (255);

g = aleatori (255);

b = aleatori (255);

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

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

byte r, g, b;

r = aleatori (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) {

byte r, g, b;

r = 0;

g = aleatori (255);

b = 0;

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

}

més {

byte r, g, b;

r = 0;

g = 0;

b = aleatori (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) {

byte * c;

uint16_t i, j;

per a (j = 0; j <256 * 5; j ++) {// 5 cicles de tots els colors de la roda

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

trencar;

}

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

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

trencar;

}

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

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

}

showStrip ();

retard (SpeedDelay);

}

}

byte * Wheel (byte WheelPos) {

byte estàtic c [3];

if (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;

}

retorn c;

}

void CylonBounce (byte vermell, byte verd, byte blau, 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;}

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

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

trencar;

}

setAll (0, 0, 0);

setPixel (i, vermell / 10, verd / 10, blau / 10);

per a (int j = 1; j <= EyeSize; j ++) {

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

trencar;

}

setPixel (i + j, vermell, verd, blau);

}

setPixel (i + EyeSize + 1, vermell / 10, verd / 10, blau / 10);

showStrip ();

retard (SpeedDelay);

}

demora (ReturnDelay);

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

setAll (0, 0, 0);

setPixel (i, vermell / 10, verd / 10, blau / 10);

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

trencar;

}

per a (int j = 1; j <= EyeSize; j ++) {

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

trencar;

}

setPixel (i + j, vermell, verd, blau);

}

setPixel (i + EyeSize + 1, vermell / 10, verd / 10, blau / 10);

showStrip ();

retard (SpeedDelay);

}

demora (ReturnDelay);

}

void RunningLights (byte vermell, byte verd, byte blau, int oldA0, int oldA1, int oldA2, int oldA3) {

int Posició = 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;}

per a (int j = 0; j

{

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

trencar;

}

Posició ++; // = 0; // Posició + Taxa;

per a (int i = 0; i

// ona sinusoïdal, 3 ones compensades fan un arc de Sant Martí!

// nivell flotant = sin (i + Posició) * 127 + 128;

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

// nivell flotant = sin (i + Posició) * 127 + 128;

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

trencar;

}

setPixel (i, ((sin (i + Posició) * 127 + 128) / 255) * vermell, ((sin (i + Posició) * 127 + 128) / 255) * verd, ((sin (i + Posició) * 127 + 128) / 255) * blau);

}

showStrip ();

endarreriment (WaveDelay);

}

}

void meteorRain (byte red, byte green, byte blue, 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;}

else if (analogRead (A3)> = 512) {SpeedDelay = 60;}

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

else {SpeedDelay = 20;}

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

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

trencar;

}

// esvaeix la brillantor de tots els LED en un pas

per a (int j = 0; j

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

trencar;

}

if ((! meteorRandomDecay) || (random (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// dibuixar meteor

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

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

trencar;

}

if ((i-j = 0)) {

setPixel (i-j, vermell, verd, blau);

}

}

showStrip ();

retard (SpeedDelay);

}

}

void fadeToBlack (int ledNo, byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_tColor vell;

uint8_t r, g, b;

valor int;

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

}

// *** REEMPLAÇA AQUÍ ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

void setPixel (int Pixel, byte vermell, byte verd, byte blau) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (vermell, verd, blau));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [Pixel].r = vermell;

leds [Pixel].g = verd;

leds [Pixel].b = blau;

#endif

}

void setAll (byte vermell, byte verd, byte blau) {

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

setPixel (i, vermell, verd, blau);

}

showStrip ();

}

Pas 3: creació del rellotge

Creació del rellotge
Creació del rellotge
Creació del rellotge
Creació del rellotge
Creació del rellotge
Creació del rellotge

Recomanaria aconseguir un rellotge de vidre pla a l'interior. Quan estava aplicant el mirall flexible a l'interior del rellotge, hi va haver un problema a causa que apareixien els números del rellotge, el mirall es doblegava, cosa que provocava que no es produís l'efecte mirall infinit. Cal que el full de mirall flexible i el film de privadesa siguin el més pla possible. Si rebeu un rellotge, assegureu-vos que podeu col·locar el LED a l'interior sense cap problema.

Pas 1: obriu el rellotge i traieu el vidre frontal

Pas 2: poseu la pel·lícula de privadesa al vidre frontal (Aquest vídeo us mostra com fer-ho)

Pas 3: apliqueu el mirall flexible a l'interior del rellotge (traieu les agulles dels rellotges abans de fer-ho)

Pas 4: Feu un forat al centre perquè es posin de nou les agulles del rellotge

Pas 5: col·loqueu la tira LED al voltant de les parets interiors del rellotge (he utilitzat una pistola de cola calenta per a aquest pas)

Pas 6: enceneu la tira LED i col·loqueu el vidre a sobre del rellotge per veure si hi ha l’efecte mirall infinit

Pas 7: un cop hàgiu acabat tot, ajunteu el rellotge i deixeu passar els cables cap a la part posterior

Pas 8: Enhorabona, heu acabat el projecte i tot hauria de funcionar bé

Si teniu alguna pregunta, comenteu-les a continuació (tingueu en compte que potser no puc respondre, però faré tot el possible)

Recomanat: