Mündəricat:

Potensiometrlərlə Sonsuzluq Güzgü Saatı: 3 addım
Potensiometrlərlə Sonsuzluq Güzgü Saatı: 3 addım

Video: Potensiometrlərlə Sonsuzluq Güzgü Saatı: 3 addım

Video: Potensiometrlərlə Sonsuzluq Güzgü Saatı: 3 addım
Video: Как связать промышленные датчики 4–20 мА с ПЛК Raspberry Pi Pico | ПЛК Мицубиси FX1N 2024, Iyul
Anonim
Potensiometrli Infinity Güzgü Saatı
Potensiometrli Infinity Güzgü Saatı

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ə

Kablolama
Kablolama
Kablolama
Kablolama

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ı

Saat Yaratmaq
Saat Yaratmaq
Saat Yaratmaq
Saat Yaratmaq
Saat Yaratmaq
Saat Yaratmaq

İçə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ə: