Sadržaj:

Beskonačni ogledalni sat s potenciometrima: 3 koraka
Beskonačni ogledalni sat s potenciometrima: 3 koraka

Video: Beskonačni ogledalni sat s potenciometrima: 3 koraka

Video: Beskonačni ogledalni sat s potenciometrima: 3 koraka
Video: ПОЛНОЛУНИЕ🌕 ИСПОЛНЕНИЕ ЖЕЛАНИЙ ЧЕРЕЗ БЛАГОДАРНОСТЬ. ГУРУ ПУРНИМА 2024, Srpanj
Anonim
Beskonačni ogledalni sat s potenciometrima
Beskonačni ogledalni sat s potenciometrima

Naišao sam na beskonačno ogledalo i otkrio sam da je stvarno cool. To me inspiriralo da napravim ogledalo beskonačnosti, ali trebalo mi je da ima svrhu. Odlučio sam napraviti funkcionalni beskonačni zrcalni sat. Ovo je beskonačno zrcalo koje vam omogućuje promjenu načina rada, brzine i boja pomoću potenciometara. (Napomena: Ovo je prvi put da radim ovako nešto)

Pribor

Zaronimo u ono što vam je potrebno za izradu ove stvari!

Trebat će vam…

1) 1 Arduino Uno

3) 1 Oglasna ploča

4) 1 Klizni prekidač

5) 3 potenciometra

6) 1 9V baterija

7) LED traka WS2811 od 5 metara

8) Žice za preskakanje kabela

9) Sat (Sat koji sam koristio 12 -inčni veliki moderni sat)

10) Fleksibilni zrcalni list (onaj koji sam koristio zrcalni list)

11) Film o privatnosti (onaj koji sam koristio jednosmjerno ogledalo)

12) Možda će biti potrebno lemljenje, ovisno o materijalu koji imate

Korak 1: Ožičenje

Ožičenje
Ožičenje
Ožičenje
Ožičenje

Ožičenje je vrlo jednostavno

- SPST prekidač uključuje i isključuje LED diode (A0)

- Lijevi potenciometar kontrolira svjetlo (A1)

- Srednji potenciometar kontrolira načine rada (A2)

- Desni potenciometar kontrolira brzinu (A3)

Korak 2: Kôd

#uključi

#definirajte PIN 6

#define NUM_LEDS 54

#definiraj A0 A0

#define A1 A1

#definiraj A2 A2

#definiraj A3 A3

// Parametar 1 = broj piksela u traci

// Parametar 2 = pin broj (većina je ispravna)

// Parametar 3 = zastavice tipa piksela, po potrebi zbrajajte:

// NEO_KHZ800 800 kHz bitstream (većina NeoPixel proizvoda sa LED diodama WS2812)

// NEO_KHZ400 400 KHz (klasični 'v1' (ne v2) FLORA pikseli, upravljački programi WS2811)

// NEO_GRB Pikseli su ožičeni za GRB bitstream (većina NeoPixel proizvoda)

// NEO_RGB Pikseli su ožičeni za RGB bitstream (v1 FLORA piksela, ne v2)

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

void setup () {

strip.begin ();

strip.show (); // Pokretanje svih piksela na "isključeno"

}

void loop () {{100} {101}

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

}

drugo{

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 (slučajno (255), 0, 0, 4, analogno čitanje (A0), analogno čitanje (A1), analogno čitanje (A2), analogno čitanje (A3));

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

CylonBounce (0, slučajno (255), 0, 4, analogno čitanje (A0), analogno čitanje (A1), analogno čitanje (A2), analogno čitanje (A3));

}

drugo{

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

}

} else if (analogRead (A2)> = 256) {

if (analogRead (A1)> = 768) {

bajt r, g, b;

r = slučajno (255);

g = slučajno (255);

b = slučajno (255);

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

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

bajt r, g, b;

r = slučajno (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) {

bajt r, g, b;

r = 0;

g = slučajno (255);

b = 0;

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

}

drugo{

bajt r, g, b;

r = 0;

g = 0;

b = slučajno (255);

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

}

}

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

RunningLights (slučajno (255), slučajno (255), slučajno (255), analogno čitanje (A0), analogno čitanje (A1), analogno čitanje (A2), analogno čitanje (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));

}

drugo{

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

}

}

}drugo{

setAll (0, 0, 0);

}

}

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

bajt *c;

uint16_t i, j;

za (j = 0; j <256*5; j ++) {// 5 ciklusa svih boja na kotaču

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

pauza;

}

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

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

pauza;

}

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

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

}

showStrip ();

kašnjenje (SpeedDelay);

}

}

byte * Kotač (byte WheelPos) {

statički bajt c [3];

if (WheelPos <85) {

c [0] = WheelPos * 3;

c [1] = 255 - Kotači * 3;

c [2] = 0;

} else if (WheelPos <170) {

WheelPos -= 85;

c [0] = 255 - Kotači * 3;

c [1] = 0;

c [2] = WheelPos * 3;

} else {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - Kotači * 3;

}

return c;

}

void CylonBounce (bajt crvena, bajt zelena, bajt plava, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {

int SpeedDelay;

int ReturnDelay;

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

inace if (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

inace if (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}

else {SpeedDelay = 20; ReturnDelay = 60;}

za (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)) | | ((oldA3+256)

pauza;

}

setAll (0, 0, 0);

setPixel (i, crveno/10, zeleno/10, plavo/10);

for (int j = 1; j <= Veličina očiju; j ++) {

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

pauza;

}

setPixel (i+j, crvena, zelena, plava);

}

setPixel (i+EyeSize+1, crvena/10, zelena/10, plava/10);

showStrip ();

kašnjenje (SpeedDelay);

}

odgoda (ReturnDelay);

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

setAll (0, 0, 0);

setPixel (i, crveno/10, zeleno/10, plavo/10);

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

pauza;

}

for (int j = 1; j <= Veličina očiju; j ++) {

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

pauza;

}

setPixel (i+j, crvena, zelena, plava);

}

setPixel (i+EyeSize+1, crvena/10, zelena/10, plava/10);

showStrip ();

kašnjenje (SpeedDelay);

}

odgoda (ReturnDelay);

}

void RunningLights (bajt crveno, bajt zeleno, bajt plavo, int oldA0, int oldA1, int oldA2, int oldA3) {

int Pozicija = 0;

int WaveDelay;

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

inace if (analogRead (A3)> = 512) {WaveDelay = 60;}

inace if (analogRead (A3)> = 256) {WaveDelay = 40;}

else {WaveDelay = 20;}

za (int j = 0; j

{

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

pauza;

}

Pozicija ++; // = 0; // Pozicija + stopa;

za (int i = 0; i

// sinusni val, 3 offset vala čine dugu!

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

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

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

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

pauza;

}

setPixel (i, ((sin (i + Pozicija) * 127 + 128)/255) * crveno, ((sin (i + Pozicija) * 127 + 128)/255) * zelena, ((sin (i + položaj) * 127 + 128)/255) * plavo);

}

showStrip ();

kašnjenje (WaveDelay);

}

}

void meteorRain (bajt crvena, bajt zelena, bajt plava, bajt meteorSize, bajt meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {

setAll (0, 0, 0);

int SpeedDelay;

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

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

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

else {SpeedDelay = 20;}

za (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)) | | ((oldA3+256)

pauza;

}

// smanjivanje svjetline svih LED dioda u jednom koraku

za (int j = 0; j

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

pauza;

}

if ((! meteorRandomDecay) || (slučajno (10)> 5)) {

fadeToBlack (j, meteorTrailDecay);

}

}

// izvući meteor

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

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

pauza;

}

ako ((i-j = 0)) {

setPixel (i-j, crvena, zelena, plava);

}

}

showStrip ();

kašnjenje (SpeedDelay);

}

}

void fadeToBlack (int ledNo, bajt fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor;

uint8_t r, g, b;

int vrijednost;

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

#završi ako

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED diode [ledNo].fadeToBlackBy (fadeValue);

#završi ako

}

// *** ZAMJENITE OVDJE ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#završi ako

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#završi ako

}

void setPixel (int Pixel, byte red, byte green, byte blue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (Pixel, strip. Color (crvena, zelena, plava));

#završi ako

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED diode [Pixel].r = crveno;

LED diode [Pixel].g = zelena;

LED diode [Pixel].b = plava;

#završi ako

}

void setAll (bajt crveno, bajt zeleno, bajt plavo) {

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

setPixel (i, crveno, zeleno, plavo);

}

showStrip ();

}

Korak 3: Stvaranje sata

Stvaranje sata
Stvaranje sata
Stvaranje sata
Stvaranje sata
Stvaranje sata
Stvaranje sata

Preporučio bih da nabavite stakleni sat koji je iznutra ravan. Kad sam nanosio fleksibilno ogledalo na unutarnju stranu sata, došlo je do problema zbog iskakanja brojeva unutar sata, zrcalo se savijalo što je rezultiralo efektom beskonačnog zrcala. Morate imati fleksibilni zrcalni list i film za privatnost da budu što ravniji. Ako kupujete sat, pobrinite se da LED diodu možete bez problema postaviti unutra.

Korak 1: Otvorite sat i uklonite prednje staklo

Korak 2: Stavite film o privatnosti na prednje staklo (ovaj video prikazuje kako to učiniti)

Korak 3: Nanesite fleksibilno ogledalo na unutarnju stranu sata (prije nego to učinite, uklonite kazaljke na satovima)

Korak 4: Napravite rupu u sredini za vraćanje kazaljki na satu

Korak 5: Postavite LED traku oko unutrašnjih zidova sata (za ovaj korak sam upotrijebio pištolj za vruće ljepilo)

Korak 6: Uključite LED traku i stavite staklo na vrh sata da vidite postoji li efekt beskonačnog zrcala

Korak 7: Kad sve završite, spojite sat i pustite žice da prođu straga

Korak 8: Čestitamo, završili ste projekt i sve bi trebalo funkcionirati

Ako imate pitanja, komentirajte ih u nastavku (znajte da možda neću moći odgovoriti, ali potrudit ću se)

Preporučeni: