فهرست مطالب:

ساعت آینه بی نهایت با پتانسیومتر: 3 مرحله
ساعت آینه بی نهایت با پتانسیومتر: 3 مرحله

تصویری: ساعت آینه بی نهایت با پتانسیومتر: 3 مرحله

تصویری: ساعت آینه بی نهایت با پتانسیومتر: 3 مرحله
تصویری: با یه دختر این کارو نکن😰 2024, جولای
Anonim
ساعت آینه بی نهایت با پتانسیومتر
ساعت آینه بی نهایت با پتانسیومتر

با آینه بی نهایت روبرو شدم و دیدم که واقعاً جالب است. این امر به من انگیزه داد تا آینه ای بی نهایت بسازم ، اما برای داشتن هدف به آن نیاز داشتم. بنابراین ، من تصمیم گرفتم یک ساعت آینه بی نهایت کارآمد بسازم. این یک آینه بی نهایت است که به شما امکان می دهد حالت ها ، سرعت و رنگ ها را با استفاده از پتانسیومتر تغییر دهید. (توجه: این اولین بار است که چنین چیزی را می سازم)

تدارکات

بیایید به آنچه شما برای ساختن این چیز نیاز دارید بپردازیم!

شما نیاز خواهید داشت…

1) 1 آردوینو اونو

3) 1 تخته نان

4) 1 سوئیچ اسلاید

5) 3 پتانسیومتر

6) 1 باتری 9 ولت

7) 5 متر نوار LED WS2811

8) سیم کشی بلوز

9) یک ساعت (ساعتی که من از ساعت بزرگ 12 اینچی مدرن استفاده کردم)

10) ورق آینه انعطاف پذیر (همان چیزی که من از ورق آینه استفاده کردم)

11) فیلم حریم خصوصی (فیلمی که من از آینه یک طرفه استفاده کردم)

12) لحیم کاری ممکن است لازم باشد ، این بستگی به مواد شما دارد

مرحله 1: سیم کشی

سیم کشی
سیم کشی
سیم کشی
سیم کشی

سیم کشی کاملاً ساده است

- سوئیچ SPST LED ها را روشن و خاموش می کند (A0)

- پتانسیومتر سمت چپ نور را کنترل می کند (A1)

- پتانسیومتر میانی حالت ها را کنترل می کند (A2)

- پتانسیومتر مناسب سرعت را کنترل می کند (A3)

مرحله 2: کد

#عبارتند از

#پین 6 را تعریف کنید

#تعریف NUM_LEDS 54

#A0 A0 را تعریف کنید

#A1 A1 را تعریف کنید

#A2 A2 را تعریف کنید

#A3 A3 را تعریف کنید

// پارامتر 1 = تعداد پیکسل در نوار

// پارامتر 2 = شماره پین (اکثر آنها معتبر هستند)

// پارامتر 3 = پرچم های نوع پیکسل ، در صورت نیاز به هم اضافه کنید:

// NEO_KHZ800 800 KHz bitstream (اکثر محصولات NeoPixel با LED های WS2812)

// NEO_KHZ400 400 کیلوهرتز (کلاسیک 'v1' (نه v2) پیکسل FLORA ، درایور WS2811)

// پیکسل های NEO_GRB برای جریان بیت GRB سیم کشی می شوند (بیشتر محصولات NeoPixel)

// پیکسل های NEO_RGB برای جریان بیت RGB (پیکسل های v1 FLORA ، نه v2)

نوار Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS ، PIN ، NEO_GRB + NEO_KHZ800) ؛

void setup () {

strip.begin ()؛

strip.show ()؛ // مقداردهی اولیه همه پیکسل ها به حالت "خاموش"

}

حلقه خالی () {

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

}

دیگری {

rainbowCycle (20 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

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

if (analogRead (A1)> = 768) {

CylonBounce (تصادفی (255) ، تصادفی (255) ، تصادفی (255) ، 4 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

CylonBounce (تصادفی (255) ، 0 ، 0 ، 4 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

CylonBounce (0 ، تصادفی (255) ، 0 ، 4 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

دیگری {

CylonBounce (0 ، 0 ، تصادفی (255) ، 4 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

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

if (analogRead (A1)> = 768) {

بایت r ، g ، b ؛

r = تصادفی (255) ؛

g = تصادفی (255) ؛

b = تصادفی (255) ؛

meteorRain (r، g، b، 10، 20، true، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

بایت r ، g ، b ؛

r = تصادفی (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) {

بایت r ، g ، b ؛

r = 0 ؛

g = تصادفی (255) ؛

b = 0 ؛

meteorRain (r، g، b، 10، 20، true، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

دیگری {

بایت r ، g ، b ؛

r = 0 ؛

g = 0 ؛

b = تصادفی (255) ؛

meteorRain (r، g، b، 10، 20، true، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

}

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

RunningLights (تصادفی (255) ، تصادفی (255) ، تصادفی (255) ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

RunningLights (تصادفی (255) ، 1 ، 1 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

RunningLights (1 ، تصادفی (255) ، 1 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

دیگری {

RunningLights (1 ، 1 ، تصادفی (255) ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

}

}

} دیگری {

setAll (0 ، 0 ، 0) ؛

}

}

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

بایت *c؛

uint16_t i، j؛

برای (j = 0 ؛ j <256*5 ؛ j ++) {// 5 چرخه از همه رنگها روی چرخ

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

برای (i = 0 ؛ i <NUM_LEDS ؛ i ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

c = چرخ (((i * 256 / NUM_LEDS) + j) و 255) ؛

setPixel (i ، *c ، *(c+1) ، *(c+2)) ؛

}

showStrip ()؛

تاخیر (SpeedDelay) ؛

}

}

byte * Wheel (byte WheelPos) {

بایت استاتیک 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 ؛

} دیگری {

WheelPos -= 170 ؛

c [0] = 0 ؛

c [1] = WheelPos * 3 ؛

c [2] = 255 - WheelPos * 3 ؛

}

بازگشت ج؛

}

void CylonBounce (بایت قرمز ، سبز بایت ، آبی بایت ، 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)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

setAll (0 ، 0 ، 0) ؛

setPixel (i ، قرمز/10 ، سبز/10 ، آبی/10) ؛

برای (int j = 1 ؛ j <= EyeSize ؛ j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

setPixel (i+j ، قرمز ، سبز ، آبی) ؛

}

setPixel (i+EyeSize+1 ، قرمز/10 ، سبز/10 ، آبی/10) ؛

showStrip ()؛

تاخیر (SpeedDelay) ؛

}

تأخیر (ReturnDelay) ؛

برای (int i = NUM_LEDS-EyeSize-2؛ i> 0؛ i--) {

setAll (0 ، 0 ، 0) ؛

setPixel (i ، قرمز/10 ، سبز/10 ، آبی/10) ؛

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

برای (int j = 1 ؛ j <= EyeSize ؛ j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

setPixel (i+j ، قرمز ، سبز ، آبی) ؛

}

setPixel (i+EyeSize+1 ، قرمز/10 ، سبز/10 ، آبی/10) ؛

showStrip ()؛

تاخیر (SpeedDelay) ؛

}

تأخیر (ReturnDelay) ؛

}

void RunningLights (بایت قرمز ، سبز بایت ، آبی بایت ، int oldA0 ، int oldA1 ، int oldA2 ، int oldA3) {

int موقعیت = 0 ؛

int WaveDelay؛

if (analogRead (A3)> = 768) {WaveDelay = 80؛}

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

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

else {WaveDelay = 20؛}

برای (int j = 0 ؛ j

{

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

موقعیت ++ ؛ // = 0 ؛ // موقعیت + نرخ ؛

برای (int i = 0 ؛ i

// موج سینوسی ، 3 موج افست رنگین کمان می سازد!

// سطح شناور = گناه (i + موقعیت) * 127 + 128؛

// setPixel (i ، سطح ، 0 ، 0) ؛

// سطح شناور = گناه (i + موقعیت) * 127 + 128؛

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

setPixel (i ، ((sin (i + Position) * 127 + 128)/255) * قرمز ،

((گناه (i + موقعیت) * 127 + 128)/255) * سبز ،

((گناه (i + موقعیت) * 127 + 128)/255) * آبی) ؛

}

showStrip ()؛

تاخیر (WaveDelay) ؛

}

}

شهاب سنگین

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

برای (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)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

// محو روشنایی همه LED ها در یک مرحله

برای (int j = 0 ؛ j

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

if ((! meteorRandomDecay) || (تصادفی (10)> 5)) {

fadeToBlack (j ، meteorTrailDecay) ؛

}

}

// رسم شهاب سنگ

برای (int j = 0؛ j <meteorSize؛ j ++) {

if (oldA0! = analogRead (A0) || ((oldA1-256)> analogRead (A1)) || ((oldA1+256) analogRead (A2)) || ((oldA2+256) analogRead (A3)) | | ((قدیمی A3+256)

زنگ تفريح؛

}

if ((i-j = 0)) {

setPixel (i-j ، قرمز ، سبز ، آبی) ؛

}

}

showStrip ()؛

تاخیر (SpeedDelay) ؛

}

}

void fadeToBlack (int ledNo ، byte fadeValue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

uint32_t oldColor؛

uint8_t r ، g ، b ؛

مقدار int ؛

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

#اندیف

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [ledNo].fadeToBlackBy (fadeValue) ؛

#اندیف

}

// *** جایگزینی اینجا ***

void showStrip () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.show ()؛

#اندیف

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show ()؛

#اندیف

}

void setPixel (int پیکسل ، بایت قرمز ، بایت سبز ، بایت آبی) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (پیکسل ، نوار. رنگ (قرمز ، سبز ، آبی)) ؛

#اندیف

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

leds [پیکسل].r = قرمز ؛

leds [پیکسل].g = سبز ؛

leds [پیکسل].b = آبی ؛

#اندیف

}

void set همه (بایت قرمز ، بایت سبز ، بایت آبی) {

برای (int i = 0 ؛ i <NUM_LEDS ؛ i ++) {

setPixel (i ، قرمز ، سبز ، آبی) ؛

}

showStrip ()؛

}

مرحله 3: ایجاد ساعت

ایجاد ساعت
ایجاد ساعت
ایجاد ساعت
ایجاد ساعت
ایجاد ساعت
ایجاد ساعت

توصیه می کنم یک ساعت شیشه ای تهیه کنید که از داخل مسطح باشد. هنگامی که من از آینه انعطاف پذیر به داخل ساعت استفاده می کردم ، به دلیل بیرون آمدن اعداد داخل ساعت ، مشکلی بوجود آمد ، آینه خم شد و در نتیجه اثر آینه بی نهایت اتفاق نیفتاد. شما باید ورق آینه انعطاف پذیر و فیلم Privacy را داشته باشید تا جایی که ممکن است صاف باشید. اگر ساعت دارید ، مطمئن شوید که می توانید LED را بدون مشکل داخل آن قرار دهید.

مرحله 1: ساعت را باز کرده و شیشه جلو را بردارید

مرحله 2: فیلم Privacy را روی شیشه جلو قرار دهید (این ویدیو نحوه انجام این کار را به شما نشان می دهد)

مرحله 3: آینه انعطاف پذیر را در قسمت داخلی ساعت قرار دهید (قبل از انجام این کار عقربه های ساعت را بردارید)

مرحله 4: یک سوراخ در وسط ایجاد کنید تا عقربه های ساعت دوباره در آن قرار گیرند

مرحله 5: نوار LED را در اطراف دیوارهای داخلی ساعت قرار دهید (من برای این مرحله از تفنگ چسب حرارتی استفاده کردم)

مرحله 6: نوار LED را روشن کرده و شیشه را در بالای ساعت قرار دهید تا ببینید آیا اثر آینه بینهایت وجود دارد یا خیر

مرحله 7: پس از اتمام کار ، ساعت را کنار هم بگذارید و اجازه دهید سیمها به پشت منتقل شوند

مرحله 8: تبریک می گوییم که پروژه را به پایان رسانده اید و همه چیز باید خوب کار کند

اگر س questionsالی دارید ، لطفاً آنها را در زیر کامنت کنید (بدانید که ممکن است نتوانم پاسخ دهم ، اما تمام تلاش خود را خواهم کرد)

توصیه شده: