Sadržaj:

Beskonačni ogledalni sat sa potenciometrima: 3 koraka
Beskonačni ogledalni sat sa potenciometrima: 3 koraka
Anonim
Beskonačni ogledalni sat sa potenciometrima
Beskonačni ogledalni sat sa potenciometrima

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

Supplies

Zaronimo u ono što vam je potrebno da napravite ovu stvar!

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 od 5 metara WS2811

8) Žice kabela kratkospojnika

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: Kodeks

#include

#define PIN 6

#define NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#define A3 A3

// Parametar 1 = broj piksela u traci

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

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

// 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 strip = 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));

}

else {

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

}

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

if (analogRead (A1)> = 768) {

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

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

CylonBounce (nasumično (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));

}

else {

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

}

else {

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 (nasumično (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));

}

else {

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

}

}

} else {

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)

break;

}

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)

break;

}

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

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

}

showStrip ();

kašnjenje (SpeedDelay);

}

}

byte * Wheel (byte WheelPos) {

statički bajt 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;

} else {

WheelPos -= 170;

c [0] = 0;

c [1] = WheelPos * 3;

c [2] = 255 - WheelPos * 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;}

inače if (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}

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

else {SpeedDelay = 20; ReturnDelay = 60;}

for (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)

break;

}

setAll (0, 0, 0);

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

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

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

break;

}

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

}

setPixel (i+EyeSize+1, crveno/10, zeleno/10, plavo/10);

showStrip ();

kašnjenje (SpeedDelay);

}

kašnjenje (ReturnDelay);

for (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)

break;

}

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

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

break;

}

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

}

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

showStrip ();

kašnjenje (SpeedDelay);

}

kašnjenje (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)

break;

}

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

za (int i = 0; i

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

// plivajući nivo = sin (i + položaj) * 127 + 128;

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

// plivajući nivo = sin (i + položaj) * 127 + 128;

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

break;

}

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)

break;

}

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

break;

}

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

fadeToBlack (j, meteorTrailDecay);

}

}

// nacrtati meteor

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

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

break;

}

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

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED diode [ledNo].fadeToBlackBy (fadeValue);

#endif

}

// *** ZAMJENITE OVDJE ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

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

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

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

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

LED diode [Pixel].r = crveno;

LED diode [Pixel].g = zelena;

LED diode [Pixel].b = plava;

#endif

}

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

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

setPixel (i, crveno, zeleno, plavo);

}

showStrip ();

}

Korak 3: Kreiranje sata

Kreiranje sata
Kreiranje sata
Kreiranje sata
Kreiranje sata
Kreiranje sata
Kreiranje sata

Preporučio bih da nabavite stakleni sat koji je iznutra ravan. Kada sam nanosio fleksibilno ogledalo na unutrašnjost sata, došlo je do problema jer su brojevi unutar sata iskočili, ogledalo se savijalo pa se efekat beskonačnog ogledala nije dogodio. Morate imati fleksibilni zrcalni list i film za privatnost da budu što ravniji. Ako dobijate sat, uverite se da možete bez problema postaviti LED diodu 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 unutrašnjost sata (prije nego što 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 efekat beskonačnog ogledala

Korak 7: Kad završite sa svime, spojite sat i pustite žice da prođu do stražnje strane

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

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

Preporučuje se: