Sadržaj:
Video: Beskonačni ogledalni sat s potenciometrima: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:33
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 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
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:
Napravite beskonačni zrcalni sat: 15 koraka (sa slikama)
Napravite beskonačni zrcalni sat: U prethodnom projektu izgradio sam beskonačno ogledalo, gdje mi je krajnji cilj bio pretvoriti ga u sat. (Napravite šareno ogledalo beskonačnosti) Nisam se time bavio nakon izgradnje jer, iako je izgledalo super, bilo je nekoliko stvari s tim
Beskonačni sat kontroliran pametnim telefonom: 5 koraka (sa slikama)
Beskonačni sat kontroliran pametnim telefonom: Vidio sam mnoge projekte beskonačnih ogledala i beskonačnih satova na Instructables, pa sam odlučio napraviti svoj. Možda se i ne razlikuje mnogo od ostalih … ali sam sam to učinio, tako je! U slučaju da to već ne znate: Što je beskonačnost
3D ispisani beskonačni sat: 3 koraka (sa slikama)
3D printani beskonačni sat: Dakle, ideja ovog sata je da ga napravi u obliku simbola beskonačnosti na kojoj će jedna strana oblika prikazivati kazaljke sata, a druga će prikazivati minute. Ako imate bilo kakvih prijedloga ili pitanja za dizajn ili bakalar
Jednostavan DIY beskonačni zrcalni sat: 3 koraka
Jednostavan DIY Infinity ogledalni sat: Ako vam je dosadno sa svojim normalnim satom, pokušajte napraviti ovaj cool DIY Infinity Mirror sat. Za poravnavanje vaše sobe
Beskonačni sat - Arduino - WS2813 i DS3231: 5 koraka (sa slikama)
Beskonačni sat - Arduino - WS2813 i DS3231: Beskonačni sat - Arduino - WS2813 i DS3231Želio sam izgraditi sat i svidjela mi se ideja da se okušam u izradi beskonačnog sata s Arduinom. Htio sam da ga napravim od uobičajenih stavki i da sam napišem program. Što je Infinity C