2025 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2025-01-23 12:54
Sonsuzluq güzgüsünə rast gəldim və çox gözəl olduğunu gördüm. Bu mənə sonsuz güzgü düzəltmək üçün ilham verdi, amma bir məqsəd üçün buna ehtiyacım var idi. Beləliklə, işləyən bir sonsuz güzgü saatı düzəltmək qərarına gəldim. Potensiometrlərdən istifadə edərək rejimləri, sürəti və rəngləri dəyişməyə imkan verən sonsuz güzgüdür. (Qeyd: İlk dəfədir belə bir şey hazırlayıram)
Təchizat
Gəlin bu şeyi etmək üçün nəyə ehtiyacınız olduğunu araşdıraq!
Sizə lazım olacaq…
1) 1 Arduino Uno
3) 1 çörək paneli
4) 1 sürüşmə açarı
5) 3 potansiyometr
6) 1 9V batareya
7) 5 metrlik WS2811 LED şeridi
8) Jumper Kabel Telləri
9) Saat (12 düymlük Böyük Müasir Saat istifadə etdiyim Saat)
10) Çevik Güzgü Vərəqi (Güzgü Vərəqindən istifadə etdiyim)
11) Gizlilik Filmi (One Way Mirror istifadə etdiyim film)
12) Lehimləmə tələb oluna bilər, bu, əlinizdə olan materiallardan asılıdır
Addım 1: Kabel çəkmə
Kabel qurmaq olduqca sadədir
- SPST açarı LED -ləri yandırır və söndürür (A0)
- Sol potensiometr işığı idarə edir (A1)
- Orta potensiometr rejimi idarə edir (A2)
- Doğru potansiyometr sürəti idarə edir (A3)
Addım 2: Kod
#daxil edin
#PIN 6 təyin edin
#NUM_LEDS 54 təyin edin
#A0 A0 təyin edin
#A1 A1 təyin edin
#A2 A2 təyin edin
#A3 A3 təyin edin
// Parametr 1 = zolaqdakı piksellərin sayı
// Parametr 2 = pin nömrəsi (əksəriyyəti etibarlıdır)
// Parametr 3 = piksel tipli bayraqlar, lazım olduqda əlavə edin:
// NEO_KHZ800 800 KHz bit axını (WS2812 LEDli NeoPixel məhsullarının çoxu)
// NEO_KHZ400 400 KHz (klassik 'v1' (v2 deyil) FLORA pikselləri, WS2811 sürücüləri)
// NEO_GRB Pikselləri GRB bit axını üçün bağlanmışdır (əksər NeoPixel məhsulları)
// NEO_RGB Pikselləri RGB bit axını üçün bağlanmışdır (v1 FLORA pikselləri, v2 deyil)
Adafruit_NeoPixel şeridi = Adafruit_NeoPixel (NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
boş quraşdırma () {
strip.begin ();
strip.show (); // Bütün pikselləri "söndürmək" üçün başladın
}
boşluq döngəsi () {
əgər (analogRead (A0)> = 512) {
əgər (analogRead (A2)> = 768) {
əgər (analogRead (A3)> = 768) {
göy qurşağı dövrü (80, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A3)> = 512) {
göy qurşağı dövrü (60, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A3)> = 256) {
göy qurşağı dövrü (40, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
başqa {
rainbowCycle (20, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} başqa halda (analogRead (A2)> = 512) {
əgər (analogRead (A1)> = 768) {
CylonBounce (təsadüfi (255), təsadüfi (255), təsadüfi (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 512) {
CylonBounce (təsadüfi (255), 0, 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 256) {
CylonBounce (0, təsadüfi (255), 0, 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
başqa {
CylonBounce (0, 0, təsadüfi (255), 4, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
} başqa halda (analogRead (A2)> = 256) {
əgər (analogRead (A1)> = 768) {
bayt r, g, b;
r = təsadüfi (255);
g = təsadüfi (255);
b = təsadüfi (255);
meteorRain (r, g, b, 10, 20, doğru, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 512) {
bayt r, g, b;
r = təsadüfi (255);
g = 0;
b = 0;
meteorRain (r, g, b, 10, 20, doğru, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 256) {
bayt r, g, b;
r = 0;
g = təsadüfi (255);
b = 0;
meteorRain (r, g, b, 10, 20, doğru, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
başqa {
bayt r, g, b;
r = 0;
g = 0;
b = təsadüfi (255);
meteorRain (r, g, b, 10, 20, doğru, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
başqa {əgər (analogRead (A1)> = 768) {
RunningLights (təsadüfi (255), təsadüfi (255), təsadüfi (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 512) {
RunningLights (təsadüfi (255), 1, 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
} başqa halda (analogRead (A1)> = 256) {
RunningLights (1, təsadüfi (255), 1, analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
başqa {
RunningLights (1, 1, təsadüfi (255), analogRead (A0), analogRead (A1), analogRead (A2), analogRead (A3));
}
}
} başqa {
setAll (0, 0, 0);
}
}
boş göy qurşağı dövrü (int SpeedDelay, int oldA0, int oldA1, int oldA2, int oldA3) {
bayt *c;
uint16_t i, j;
for (j = 0; j <256*5; j ++) {// təkərdəki bütün rənglərin 5 dövrü
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
üçün (i = 0; i <NUM_LEDS; i ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
c = Təkər (((i * 256 / NUM_LEDS) + j) & 255);
setPixel (i, *c, *(c+1), *(c+2));
}
showStrip ();
gecikmə (SpeedDelay);
}
}
bayt * Təkər (WheelPos baytı) {
statik bayt c [3];
əgər (WheelPos <85) {
c [0] = WheelPos * 3;
c [1] = 255 - WheelPos * 3;
c [2] = 0;
} başqa əgər (WheelPos <170) {
WheelPos -= 85;
c [0] = 255 - WheelPos * 3;
c [1] = 0;
c [2] = WheelPos * 3;
} başqa {
WheelPos -= 170;
c [0] = 0;
c [1] = WheelPos * 3;
c [2] = 255 - WheelPos * 3;
}
qayıt c;
}
boş CylonBounce (bayt qırmızı, bayt yaşıl, mavi bayt, int EyeSize, int oldA0, int oldA1, int oldA2, int oldA3) {
int SpeedDelay;
int ReturnDelay;
əgər (analogRead (A3)> = 768) {SpeedDelay = 80; ReturnDelay = 120;}
başqa halda (analogRead (A3)> = 512) {SpeedDelay = 60; ReturnDelay = 100;}
başqa halda (analogRead (A3)> = 256) {SpeedDelay = 40; ReturnDelay = 80;}
başqa {SpeedDelay = 20; ReturnDelay = 60;}
üçün (int i = 0; i <NUM_LEDS-EyeSize-2; i ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
setAll (0, 0, 0);
setPixel (i, qırmızı/10, yaşıl/10, mavi/10);
üçün (int j = 1; j <= EyeSize; j ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
setPixel (i+j, qırmızı, yaşıl, mavi);
}
setPixel (i+EyeSize+1, qırmızı/10, yaşıl/10, mavi/10);
showStrip ();
gecikmə (SpeedDelay);
}
gecikmə (ReturnDelay);
üçün (int i = NUM_LEDS-EyeSize-2; i> 0; i--) {
setAll (0, 0, 0);
setPixel (i, qırmızı/10, yaşıl/10, mavi/10);
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
üçün (int j = 1; j <= EyeSize; j ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
setPixel (i+j, qırmızı, yaşıl, mavi);
}
setPixel (i+EyeSize+1, qırmızı/10, yaşıl/10, mavi/10);
showStrip ();
gecikmə (SpeedDelay);
}
gecikmə (ReturnDelay);
}
boş RunningLights (bayt qırmızı, bayt yaşıl, mavi bayt, int oldA0, int oldA1, int oldA2, int oldA3) {
int Vəzifə = 0;
int WaveDelay;
əgər (analogRead (A3)> = 768) {WaveDelay = 80;}
başqa halda (analogRead (A3)> = 512) {WaveDelay = 60;}
başqa halda (analogRead (A3)> = 256) {WaveDelay = 40;}
başqa {WaveDelay = 20;}
üçün (int j = 0; j
{
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
Vəzifə ++; // = 0; // Vəzifə + Qiymət;
üçün (int i = 0; i
// sinus dalğası, 3 ofset dalğası göy qurşağı yaradır!
// üzmə səviyyəsi = sin (i + Mövqe) * 127 + 128;
// setPixel (i, səviyyə, 0, 0);
// üzmə səviyyəsi = sin (i + Mövqe) * 127 + 128;
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
setPixel (i, ((günah (i + Mövqe) * 127 + 128)/255) * qırmızı, ((günah (i + Mövqe) * 127 + 128)/255) * yaşıl, ((günah (i + Mövqe) * 127 + 128)/255) * mavi);
}
showStrip ();
gecikmə (WaveDelay);
}
}
boş meteorRain (bayt qırmızı, bayt yaşıl, mavi bayt, bayt meteorSize, bayt meteorTrailDecay, boolean meteorRandomDecay, int oldA0, int oldA1, int oldA2, int oldA3) {
setAll (0, 0, 0);
int SpeedDelay;
əgər (analogRead (A3)> = 768) {SpeedDelay = 80;}
başqa halda (analogRead (A3)> = 512) {SpeedDelay = 60;}
başqa halda (analogRead (A3)> = 256) {SpeedDelay = 40;}
başqa {SpeedDelay = 20;}
üçün (int i = 0; i <NUM_LEDS+NUM_LEDS; i ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
// bütün LED -lərin parlaqlığını bir addım azaldır
üçün (int j = 0; j
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
if ((! meteorRandomDecay) || (təsadüfi (10)> 5)) {
fadeToBlack (j, meteorTrailDecay);
}
}
// meteor çək
üçün (int j = 0; j <meteorSize; j ++) {
əgər (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((köhnəA3+256)
fasilə;
}
əgər ((i-j = 0)) {
setPixel (i-j, qırmızı, yaşıl, mavi);
}
}
showStrip ();
gecikmə (SpeedDelay);
}
}
void fadeToBlack (int ledNo, bayt fadeValue) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
uint32_t oldColor;
uint8_t r, g, b;
int dəyəri;
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 [ledNo].fadeToBlackBy (fadeValue);
#endif
}
// *** BURADA DEĞİŞTİR ***
void showStrip () {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.show ();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
FastLED.show ();
#endif
}
boşluq setPixel (int Pixel, bayt qırmızı, bayt yaşıl, mavi bayt) {
#ifdef ADAFRUIT_NEOPIXEL_H
// NeoPixel
strip.setPixelColor (Piksel, zolaq Rəngi (qırmızı, yaşıl, mavi));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
// FastLED
led [Piksel].r = qırmızı;
led [Piksel].g = yaşıl;
led [Piksel]. b = mavi;
#endif
}
void setAll (bayt qırmızı, bayt yaşıl, mavi bayt) {
üçün (int i = 0; i <NUM_LEDS; i ++) {
setPixel (i, qırmızı, yaşıl, mavi);
}
showStrip ();
}
Addım 3: Saatın yaradılması
İçərisində düz bir şüşə saat almağı məsləhət görürəm. Saatın içərisinə çevik güzgü tətbiq edərkən saatın içindəki ədədlərin çıxması səbəbindən bir problem var idi, güzgü əyilməklə sonsuz güzgü effektinin baş verməməsinə səbəb olurdu. Mümkün qədər düz olmaq üçün çevik güzgü təbəqəsinə və Gizlilik Filminə sahib olmalısınız. Bir saat əldə edirsinizsə, LED -in içərisinə problemsiz yerləşdirə biləcəyinizə əmin olun.
Addım 1: Saatı açın və ön şüşəni çıxarın
Addım 2: Ön şüşəyə Gizlilik Filmi qoyun (Bu video bunu necə edəcəyinizi göstərir)
Addım 3: Çevik güzgünü saatın içərisinə çəkin (Bunu etməzdən əvvəl saatların əllərini çıxarın)
Addım 4: Saat əqrəblərinin geri yerləşdirilməsi üçün ortada bir delik açın
Addım 5: LED şeridini saatın daxili divarlarının ətrafına qoyun (bu addım üçün isti yapışqan tabancasından istifadə etdim)
Addım 6: LED şeridini yandırın və sonsuz güzgü effektinin olub olmadığını görmək üçün şüşəni saatın üstünə qoyun
Addım 7: Hər şeyi bitirdikdən sonra saatı bir araya gətirin və tellərin arxadan keçməsinə icazə verin
Adım 8: Təbrik edirəm, layihəni başa vurdunuz və hər şey yaxşı işləməlidir
Hər hansı bir sualınız varsa, bunları aşağıda qeyd edin (Bilin ki, cavab verə bilməyəcəyəm, amma əlimdən gələni edəcəyəm)
Tövsiyə:
Sonsuzluq güzgü saatı hazırlayın: 15 addım (şəkillərlə)
Sonsuzluq Güzgü Saatı yaradın: Əvvəlki bir layihədə sonsuzluq güzgüsü qurmuşdum, burada əsas məqsədim onu saata çevirmək idi. (Rəngarəng Sonsuzluq Güzgüsü düzəldin) Bunu qurduqdan sonra bunu davam etdirmədim, çünki sərin görünsə də, bir neçə şey var idi
LCD və IR Sensorlu Sonsuzluq Güzgü: 5 addım
LCD və İQ Sensorlu Sonsuzluq Güzgüsü: Bu layihə sizə Sonsuzluq Güzgüsünün necə yaradılacağını göstərəcək. Əsas konsepsiya, güzgüdə olan LED -lərin arxa güzgüdən ön güzgüyə doğru sıçrayan bir işıq yaratmasıdır ki, içəridən görə biləcəyimiz bir qədər işıq çıxır
Asan DIY Sonsuzluq Güzgü Saatı: 3 addım
Asan DIY Sonsuzluq Güzgü Saatı: Normal saatınızdan cansıxırsınızsa, bu sərin DIY Sonsuzluq Güzgü Saatı düzəltməyə çalışın. Otağınızı səviyyəyə qaldırmaq üçün
Sonsuzluq güzgü saatı: 5 addım (şəkillərlə)
Sonsuzluq Güzgü Saatı: Əsasən dekorasiya üçün əl işidir, saatda bir neçə LED işıq var, açıldıqda yataq otağı üçün gözəl bir bəzəkdir. Söndürüldükdə kiçik bir güzgüdür. Əlbəttə ki, bu bir saatdır
IKEA Şəkil Çərçivəsində Sonsuzluq Güzgü Divar Saatı: 4 addım
IKEA Şəkil Çərçivəsindəki Sonsuzluq Güzgü Divar Saatı: Salam, mən həmişə divar saatı qurmaq istəyirdim. IKEA kimi mağazalarda çox gözəl divar saatları var. Bu kommersiya saatları ilə bağlı bəzi problemlərim var idi. Mənim üçün çox yüksəkdirlər (davamlı tic-tac bezdiricidir), saat əqrəblərini görə bilmirəm