Turinys:

Begalybės veidrodinis laikrodis su potenciometrais: 3 žingsniai
Begalybės veidrodinis laikrodis su potenciometrais: 3 žingsniai

Video: Begalybės veidrodinis laikrodis su potenciometrais: 3 žingsniai

Video: Begalybės veidrodinis laikrodis su potenciometrais: 3 žingsniai
Video: Infinity Mirror LED Clock - An Open sourc #computer #ambient #arduinoboard #arduino #time 2024, Liepa
Anonim
Begalybės veidrodinis laikrodis su potenciometrais
Begalybės veidrodinis laikrodis su potenciometrais

Susidūriau su begalybės veidrodžiu ir supratau, kad tai tikrai šaunu. Tai įkvėpė mane sukurti begalybės veidrodį, bet man reikėjo, kad turėčiau tikslą. Taigi, aš nusprendžiau padaryti veikiantį begalybės veidrodinį laikrodį. Tai begalybės veidrodis, leidžiantis keisti režimus, greitį ir spalvas naudojant potenciometrus. (Pastaba: aš pirmą kartą darau kažką panašaus)

Prekės

Pasinerkime, ko jums reikia norint tai padaryti!

Jums reikės…

1) 1 „Arduino Uno“

3) 1 duonos lenta

4) 1 stumdomas jungiklis

5) 3 potenciometrai

6) 1 9V baterija

7) 5 metrų WS2811 LED juostelė

8) jungiamieji kabelių laidai

9) Laikrodis (laikrodis, kurį naudoju 12 colių didelį šiuolaikinį laikrodį)

10) Lankstus veidrodžio lapas (tas, kurį naudoju veidrodinį lakštą)

11) Privatumo plėvelė (ta, kurią naudojau „One Way Mirror“)

12) Lituoti gali prireikti, tai priklauso nuo to, kokias medžiagas turite

1 žingsnis: laidų prijungimas

Laidai
Laidai
Laidai
Laidai

Elektros instaliacija yra gana paprasta

- SPST jungiklis įjungia ir išjungia šviesos diodus (A0)

- Kairysis potenciometras valdo šviesą (A1)

- Vidurinis potenciometras valdo režimus (A2)

- Tinkamas potenciometras valdo greitį (A3)

2 žingsnis: kodas

#įtraukti

#define PIN 6

#define NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#define A3 A3

// 1 parametras = pikselių skaičius juostelėje

// 2 parametras = PIN kodas (dauguma galioja)

// 3 parametras = pikselių tipo vėliavos, prireikus pridėkite:

// NEO_KHZ800 800 KHz bitų srautas (dauguma „NeoPixel“produktų su WS2812 šviesos diodais)

// NEO_KHZ400 400 KHz (klasikinis „v1“(ne v2) FLORA pikselių, WS2811 tvarkyklės)

// NEO_GRB pikseliai yra prijungti prie GRB bitų srauto (dauguma „NeoPixel“produktų)

// NEO_RGB pikseliai yra prijungti prie RGB bitų srauto (v1 FLORA pikseliai, o ne v2)

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

void setup () {

strip.begin ();

strip.show (); // Inicijuokite visus taškus į „išjungtą“

}

void loop () {

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

}

Kitas{

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

}

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

if (analogRead (A1)> = 768) {

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

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

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

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

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

}

Kitas{

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

}

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

if (analogRead (A1)> = 768) {

baitas r, g, b;

r = atsitiktinis (255);

g = atsitiktinis (255);

b = atsitiktinis (255);

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

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

baitas r, g, b;

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

baitas r, g, b;

r = 0;

g = atsitiktinis (255);

b = 0;

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

}

Kitas{

baitas r, g, b;

r = 0;

g = 0;

b = atsitiktinis (255);

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

}

}

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

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

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

„RunningLights“(atsitiktinis (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

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

„RunningLights“(1, atsitiktinis (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

Kitas{

„RunningLights“(1, 1, atsitiktinis (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));

}

}

}Kitas{

setAll (0, 0, 0);

}

}

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

baitas *c;

uint16_t i, j;

(j = 0; j <256*5; j ++) {// 5 visų rato spalvų ciklai

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

pertrauka;

}

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

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

pertrauka;

}

c = ratas (((i * 256 / NUM_LEDS) + j) ir 255);

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

}

showStrip ();

uždelsimas („SpeedDelay“);

}

}

baitas * ratas (baitas „WheelPos“) {

statinis baitas c [3];

jei („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;

} Kitas {

„WheelPos“-= 170;

c [0] = 0;

c [1] = „WheelPos“* 3;

c [2] = 255 - „WheelPos“* 3;

}

grįžti c;

}

void CylonBounce (baitas raudonas, baitas žalias, baitas mėlynas, 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;}

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

pertrauka;

}

setAll (0, 0, 0);

setPixel (i, raudona/10, žalia/10, mėlyna/10);

už (int j = 1; j <= EyeSize; j ++) {

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

pertrauka;

}

setPixel (i+j, raudona, žalia, mėlyna);

}

setPixel („i+EyeSize+1“, raudona/10, žalia/10, mėlyna/10);

showStrip ();

uždelsimas („SpeedDelay“);

}

uždelsimas (ReturnDelay);

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

setAll (0, 0, 0);

setPixel (i, raudona/10, žalia/10, mėlyna/10);

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

pertrauka;

}

už (int j = 1; j <= EyeSize; j ++) {

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

pertrauka;

}

setPixel (i+j, raudona, žalia, mėlyna);

}

setPixel („i+EyeSize+1“, raudona/10, žalia/10, mėlyna/10);

showStrip ();

uždelsimas („SpeedDelay“);

}

uždelsimas (ReturnDelay);

}

void RunningLights (baitų raudona, baitų žalia, baitų mėlyna, int oldA0, int oldA1, int oldA2, int oldA3) {

int Pozicija = 0;

int WaveDelay;

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

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

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

else {WaveDelay = 20;}

už (int j = 0; j

{

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

pertrauka;

}

Pozicija ++; // = 0; // Pozicija + norma;

už (int i = 0; i

// sinusinė banga, 3 poslinkio bangos daro vaivorykštę!

// plūdės lygis = sin (i + Pozicija) * 127 + 128;

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

// plūdės lygis = sin (i + Pozicija) * 127 + 128;

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

pertrauka;

}

setPixel (i, ((sin (i + padėtis) * 127 + 128)/255) * raudona, ((sin (i + padėtis) * 127 + 128)/255) * žalia, ((sin (i + padėtis) * 127 + 128)/255) * mėlyna);

}

showStrip ();

uždelsimas („WaveDelay“);

}

}

void meteorRain (baitas raudonas, baitas žalias, mėlynas, baitas meteorasDydis, baitas meteorasTrailDecay, loginis meteoras

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

už (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)) | | ((senasA3+256)

pertrauka;

}

// išnyks visų šviesos diodų ryškumas vienu žingsniu

už (int j = 0; j

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

pertrauka;

}

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

fadeToBlack (j, meteorTrailDecay);

}

}

// piešti meteorą

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

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

pertrauka;

}

jei ((i-j = 0)) {

setPixel (i-j, raudona, žalia, mėlyna);

}

}

showStrip ();

uždelsimas („SpeedDelay“);

}

}

void fadeToBlack (int ledNo, baitas fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// „NeoPixel“

uint32_t oldColor;

uint8_t r, g, b;

int vertė;

oldColor = strip.getPixelColor (ledNo);

r = (oldColor & 0x00ff0000UL) >> 16;

g = (oldColor & 0x0000ff00UL) >> 8;

b = (sena spalva & 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

}

// *** PAKEISTI ČIA ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// „NeoPixel“

strip.show ();

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ();

#endif

}

void setPixel (int Pixel, baitas raudonas, baitas žalias, baitas mėlynas) {

#ifdef ADAFRUIT_NEOPIXEL_H

// „NeoPixel“

strip.setPixelColor („Pixel“, „strip. Color“(raudona, žalia, mėlyna));

#endif

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

šviesos diodai [Pixel].r = raudona;

šviesos diodai [Pixel].g = žalia;

šviesos diodai [Pixel].b = mėlyna;

#endif

}

void setAll (baitas raudonas, baitas žalias, baitas mėlynas) {

už (int i = 0; i <NUM_LEDS; i ++) {

setPixel (i, raudona, žalia, mėlyna);

}

showStrip ();

}

3 žingsnis: Laikrodžio kūrimas

Laikrodžio kūrimas
Laikrodžio kūrimas
Laikrodžio kūrimas
Laikrodžio kūrimas
Laikrodžio kūrimas
Laikrodžio kūrimas

Aš rekomenduočiau įsigyti stiklinį laikrodį, kuris yra plokščias iš vidaus. Kai pritaikiau lankstų veidrodį laikrodžio vidui, iškilo problema dėl laikrodžio viduje iššokusių skaičių, veidrodis buvo sulenktas, todėl neįvyko begalybės veidrodžio efektas. Turite turėti lankstų veidrodinį lakštą ir privatumo plėvelę, kad jie būtų kuo plokštesni. Jei gaunate laikrodį, įsitikinkite, kad galite be problemų įdėti šviesos diodą.

1 žingsnis: atidarykite laikrodį ir nuimkite priekinį stiklą

2 veiksmas: uždėkite privatumo plėvelę ant priekinio stiklo (šiame vaizdo įraše parodyta, kaip tai padaryti)

3 žingsnis: uždėkite lankstų veidrodį laikrodžio vidinėje pusėje (prieš tai nuimkite laikrodžių rodykles)

4 žingsnis: Padarykite skylę viduryje, kad laikrodžio rodyklės būtų vėl įdėtos

5 žingsnis: padėkite šviesos diodų juostelę aplink vidines laikrodžio sienas (šiam žingsniui naudojau karšto klijų pistoletą)

6 veiksmas: įjunkite šviesos diodų juostą ir uždėkite stiklą ant laikrodžio viršaus, kad pamatytumėte, ar yra begalybės veidrodžio efektas

7 žingsnis: Baigę viską, sudėkite laikrodį ir leiskite laidams praeiti į nugarą

8 žingsnis: Sveikiname, kad baigėte projektą ir viskas turėtų veikti gerai

Jei turite klausimų, pakomentuokite juos žemiau (žinokite, kad galbūt negalėsiu atsakyti, bet aš padarysiu viską)

Rekomenduojamas: