Taula de continguts:
Vídeo: Rellotge Infinity Mirror amb potenciòmetres: 3 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:12
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
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
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:
2 potenciòmetres i 2 servos: moviment controlat amb Arduino: 4 passos
2 potenciòmetres i 2 servos: moviment controlat amb Arduino: primer heu de reunir materials rellevants per muntar aquest circuit
Fer un rellotge amb M5stick C mitjançant Arduino IDE - Rellotge RTC en temps real amb M5stack M5stick-C: 4 passos
Fer un rellotge amb M5stick C mitjançant Arduino IDE | Rellotge en temps real RTC amb M5stack M5stick-C: Hola, nois en aquest instructable, aprendrem a fer un rellotge amb la placa de desenvolupament m5stick-C de m5stack mitjançant Arduino IDE. Així, m5stick mostrarà data, hora i amp; setmana del mes a la pantalla
Control de 3 servomotors amb 3 potenciòmetres i un Arduino: 11 passos (amb imatges)
Control de 3 servomotors amb 3 potenciòmetres i un Arduino: Hola. Aquest és el meu primer instructiu, així que espero que tingueu paciència amb mi si cometo algun error en configurar-lo. Està escrit per a principiants, de manera que els més avançats entre vosaltres podeu ometre-ho molt i acabar de connectar-lo. L’objectiu que em vaig posar
Rellotge de paret Infinity Mirror en marc de fotos IKEA: 4 passos
Rellotge de paret Infinity Mirror al marc de fotos IKEA: hola, sempre he volgut construir un rellotge de paret. Hi ha molts rellotges de paret meravellosos a botigues com IKEA. Vaig tenir alguns problemes amb aquests rellotges comercials. Són massa forts per a mi (el tic-tac continu és molest), no puc veure les agulles de les hores
Rellotge RGB Infinity amb la seva pròpia aplicació BT: 15 passos (amb imatges)
Rellotge RGB Infinity amb la seva pròpia aplicació BT: els rellotges digitals i analògics normals són avorrits, així que teniu previst desenvolupar un rellotge fresc amb colors personalitzats per a Dial, Maneta d’hores, Maneta de minuts i Segona. Per a això primer voleu desenvolupar el rellotge utilitzant una banda LED RGB adreçable. Després, per a la comunicació amb A