جدول المحتويات:

ساعة مرآة إنفينيتي مع مقاييس الجهد: 3 خطوات
ساعة مرآة إنفينيتي مع مقاييس الجهد: 3 خطوات

فيديو: ساعة مرآة إنفينيتي مع مقاييس الجهد: 3 خطوات

فيديو: ساعة مرآة إنفينيتي مع مقاييس الجهد: 3 خطوات
فيديو: شد البطن بعد العملية مباشرة ❤️❤️ 2024, يوليو
Anonim
ساعة مرآة إنفينيتي مع مقاييس الجهد
ساعة مرآة إنفينيتي مع مقاييس الجهد

صادفت مرآة لا متناهية ووجدتها رائعة حقًا. ألهمني هذا أن أصنع مرآة لا متناهية ، لكنني كنت بحاجة إليها ليكون لها هدف. لذلك ، قررت أن أصنع ساعة مرآة لا متناهية. هذه مرآة لا متناهية تتيح لك تغيير الأوضاع والسرعة والألوان باستخدام مقاييس الجهد. (ملاحظة: هذه هي المرة الأولى التي أصنع فيها شيئًا كهذا)

اللوازم

دعنا نتعمق في ما تحتاجه لصنع هذا الشيء!

سوف تحتاج…

1) 1 اردوينو أونو

3) 1 اللوح

4) 1 مفتاح منزلق

5) 3 مقاييس فرق الجهد

6) 1 بطارية 9V

7) 5 متر WS2811 LED قطاع

8) أسلاك كبل الطائر

9) ساعة (الساعة التي استخدمتها 12 بوصة ساعة حديثة كبيرة)

10) صفيحة المرآة المرنة (التي استخدمتها لصفيحة المرآة)

11) فيلم الخصوصية (الذي استخدمته One Way Mirror)

12) قد تكون هناك حاجة إلى لحام وهذا يعتمد على المواد التي لديك

الخطوة 1: الأسلاك

الأسلاك
الأسلاك
الأسلاك
الأسلاك

الأسلاك بسيطة للغاية

- يقوم مفتاح SPST بتشغيل وإيقاف تشغيل مصابيح LED (A0)

- يتحكم مقياس الجهد الأيسر في الضوء (A1)

- يتحكم مقياس الجهد الأوسط في الأوضاع (A2)

- يتحكم مقياس الجهد الصحيح في السرعة (A3)

الخطوة الثانية: الكود

#يشمل

#define PIN 6

# تعريف NUM_LEDS 54

#define A0 A0

#define A1 A1

#define A2 A2

#define A3 A3

// المعلمة 1 = عدد البكسل في الشريط

// المعلمة 2 = رقم التعريف الشخصي (معظمها صالح)

// المعلمة 3 = أعلام نوع البكسل ، أضف معًا حسب الحاجة:

// NEO_KHZ800 800 KHz bitstream (معظم منتجات NeoPixel w / WS2812 LEDs)

// NEO_KHZ400 400 كيلو هرتز (كلاسيكي 'v1' (وليس v2) FLORA بكسل ، برامج تشغيل WS2811)

// NEO_GRB Pixels سلكية لـ GRB bitstream (معظم منتجات NeoPixel)

// NEO_RGB Pixels سلكية لـ RGB bitstream (v1 FLORA pixels ، وليس v2)

شريط Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS ، PIN ، NEO_GRB + NEO_KHZ800) ؛

الإعداد باطل() {

strip.begin () ،

عرض الشريط()؛ // تهيئة جميع وحدات البكسل على "إيقاف"

}

حلقة فارغة() {

إذا (analogRead (A0)> = 512) {

إذا (analogRead (A2)> = 768) {

إذا (analogRead (A3)> = 768) {

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

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

قوس قزح (60 ، analogRead (A0) ، analogRead (A1) ، analogRead (A2) ، analogRead (A3)) ؛

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

قوس قزح (40، analogRead (A0)، analogRead (A1)، analogRead (A2)، analogRead (A3))؛

}

آخر{

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

}

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

إذا (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) {

إذا (analogRead (A1)> = 768) {

البايت ص ، ز ، ب ؛

ص = عشوائي (255) ؛

ز = عشوائي (255) ؛

ب = عشوائي (255) ؛

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

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

البايت ص ، ز ، ب ؛

ص = عشوائي (255) ؛

ز = 0 ؛

ب = 0 ؛

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

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

البايت ص ، ز ، ب ؛

ص = 0 ؛

ز = عشوائي (255) ؛

ب = 0 ؛

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

}

آخر{

البايت ص ، ز ، ب ؛

ص = 0 ؛

ز = 0 ؛

ب = عشوائي (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، random (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) {

بايت * ج ؛

uint16_t أنا ، ي ؛

لـ (j = 0؛ j <256 * 5؛ j ++) {// 5 دورات من كل الألوان على العجلة

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

استراحة؛

}

لـ (i = 0 ؛ i <NUM_LEDS ؛ i ++) {

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

استراحة؛

}

ج = العجلة (((i * 256 / NUM_LEDS) + j) & 255) ؛

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

}

showStrip () ،

تأخير (SpeedDelay) ؛

}

}

بايت * عجلة (بايت WheelPos) {

بايت ثابت ج [3] ؛

إذا (WheelPos <85) {

ج [0] = WheelPos * 3 ؛

ج [1] = 255 - WheelPos * 3 ؛

ج [2] = 0 ؛

} وإلا إذا (WheelPos <170) {

WheelPos - = 85 ؛

ج [0] = 255 - WheelPos * 3 ؛

ج [1] = 0 ؛

ج [2] = WheelPos * 3 ؛

} آخر {

WheelPos - = 170 ؛

ج [0] = 0 ؛

ج [1] = WheelPos * 3 ؛

ج [2] = 255 - WheelPos * 3 ؛

}

عودة ج ؛

}

void CylonBounce (بايت أحمر ، بايت أخضر ، بايت أزرق ، int EyeSize ، int oldA0 ، int oldA1 ، int oldA2 ، int oldA3) {

كثافة العمليات SpeedDelay.

Int ReturnDelay ؛

إذا (analogRead (A3)> = 768) {SpeedDelay = 80 ؛ ReturnDelay = 120 ؛}

وإلا إذا (analogRead (A3)> = 512) {SpeedDelay = 60 ؛ ReturnDelay = 100 ؛}

وإلا إذا (analogRead (A3)> = 256) {SpeedDelay = 40؛ ReturnDelay = 80؛}

آخر {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)) | | ((oldA3 + 256)

استراحة؛

}

setAll (0 ، 0 ، 0) ؛

setPixel (أنا ، أحمر / 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)) | | ((oldA3 + 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 (أنا ، أحمر / 10 ، أخضر / 10 ، أزرق / 10) ؛

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

استراحة؛

}

لـ (int j = 1 ؛ j <= EyeSize ؛ j ++) {

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

استراحة؛

}

setPixel (i + j ، أحمر ، أخضر ، أزرق) ؛

}

setPixel (i + EyeSize + 1 ، أحمر / 10 ، أخضر / 10 ، أزرق / 10) ؛

showStrip () ،

تأخير (SpeedDelay) ؛

}

تأخير (ReturnDelay) ؛

}

void RunningLights (بايت أحمر ، بايت أخضر ، بايت أزرق ، int oldA0 ، int oldA1 ، int oldA2 ، int oldA3) {

المركز الدولي = 0 ؛

int WaveDelay.

إذا (analogRead (A3)> = 768) {WaveDelay = 80 ؛}

وإلا إذا (analogRead (A3)> = 512) {WaveDelay = 60 ؛}

وإلا إذا (analogRead (A3)> = 256) {WaveDelay = 40 ؛}

آخر {WaveDelay = 20 ؛}

لـ (int j = 0 ؛ j

{

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

استراحة؛

}

المركز ++ ؛ // = 0 ؛ // المركز + المعدل ؛

لـ (int i = 0 ؛ i

// موجة جيبية ، 3 موجات تعويض تشكل قوس قزح!

// المستوى التعويم = الخطيئة (أنا + المركز) * 127 + 128 ؛

// setPixel (أنا ، مستوى ، 0 ، 0) ؛

// المستوى التعويم = الخطيئة (أنا + المركز) * 127 + 128 ؛

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

استراحة؛

}

setPixel (i، ((sin (i + Position) * 127 + 128) / 255) * أحمر ،

((sin (i + Position) * 127 + 128) / 255) * أخضر ،

((sin (i + Position) * 127 + 128) / 255) * أزرق) ؛

}

showStrip () ،

تأخير (WaveDelay) ؛

}

}

نيزك فارغ (بايت أحمر ، بايت أخضر ، بايت أزرق ، بايت نيزك ، بايت meteorTrailDecay ، boolean meteorRandomDecay ، int oldA0 ، int oldA1 ، int oldA2 ، int oldA3) {

setAll (0 ، 0 ، 0) ؛

كثافة العمليات SpeedDelay.

إذا (analogRead (A3)> = 768) {SpeedDelay = 80 ؛}

وإلا إذا (analogRead (A3)> = 512) {SpeedDelay = 60 ؛}

وإلا إذا (analogRead (A3)> = 256) {SpeedDelay = 40 ؛}

آخر {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)) | | ((oldA3 + 256)

استراحة؛

}

// تتلاشى سطوع جميع المصابيح خطوة واحدة

لـ (int j = 0 ؛ j

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

استراحة؛

}

إذا ((! 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)) | | ((oldA3 + 256)

استراحة؛

}

إذا ((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) ؛

ص = (oldColor & 0x00ff0000UL) >> 16 ؛

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

ب = (oldColor & 0x000000ffUL) ؛

ص = (ص <= 10)؟ 0: (int) r- (r * fadeValue / 256) ؛

ز = (ز <= 10)؟ 0: (int) g- (g * fadeValue / 256) ؛

ب = (ب <= 10)؟ 0: (int) b- (b * fadeValue / 256) ؛

strip.setPixelColor (ledNo ، r ، g ، b) ؛

#إنهاء إذا

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

المصابيح [ledNo].fadeToBlackBy (fadeValue) ؛

#إنهاء إذا

}

// *** استبدال هنا ***

عرض باطل () {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

عرض الشريط()؛

#إنهاء إذا

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

FastLED.show () ،

#إنهاء إذا

}

void setPixel (int Pixel ، byte red ، byte green ، byte blue) {

#ifdef ADAFRUIT_NEOPIXEL_H

// NeoPixel

strip.setPixelColor (بكسل ، شريط ، لون (أحمر ، أخضر ، أزرق)) ؛

#إنهاء إذا

#ifndef ADAFRUIT_NEOPIXEL_H

// FastLED

المصابيح [بكسل].r = أحمر ؛

المصابيح [بكسل].g = أخضر ؛

المصابيح [بكسل].b = أزرق ؛

#إنهاء إذا

}

setAll باطلة (أحمر بايت ، أخضر بايت ، أزرق بايت) {

لـ (int i = 0 ؛ i <NUM_LEDS ؛ i ++) {

setPixel (أنا ، أحمر ، أخضر ، أزرق) ؛

}

showStrip () ،

}

الخطوة 3: إنشاء الساعة

خلق الساعة
خلق الساعة
خلق الساعة
خلق الساعة
خلق الساعة
خلق الساعة

أوصي بالحصول على ساعة زجاجية مسطحة من الداخل. عندما كنت أقوم بتطبيق المرآة المرنة على داخل الساعة ، كانت هناك مشكلة بسبب ظهور الأرقام داخل الساعة ، كانت المرآة تنحني مما أدى إلى عدم حدوث تأثير المرآة اللانهائية. يجب أن يكون لديك ورقة المرآة المرنة وفيلم الخصوصية ليكونا مسطحين قدر الإمكان. إذا كنت تحصل على ساعة ، فتأكد من أنه يمكنك وضع LED بالداخل دون مشكلة.

الخطوة 1: افتح الساعة وقم بإزالة الزجاج الأمامي

الخطوة 2: ضع فيلم الخصوصية على الزجاج الأمامي (يوضح لك هذا الفيديو كيفية القيام بذلك)

الخطوة 3: ضع المرآة المرنة على الجزء الداخلي من الساعة (قم بإزالة عقارب الساعة قبل القيام بذلك)

الخطوة 4: قم بعمل ثقب في المنتصف حتى يتم إعادة عقارب الساعة

الخطوة 5: ضع شريط LED حول الجدران الداخلية للساعة (استخدمت مسدس الغراء الساخن لهذه الخطوة)

الخطوة 6: قم بتشغيل شريط LED وضع الزجاج أعلى الساعة لمعرفة ما إذا كان تأثير المرآة اللانهائية موجودًا

الخطوة 7: بمجرد الانتهاء من كل شيء ، ضع الساعة معًا واترك الأسلاك تمر عبر الخلف

الخطوة 8: تهانينا ، لقد أكملت المشروع وكل شيء يجب أن يعمل بشكل جيد

إذا كانت لديك أي أسئلة ، فيرجى التعليق عليها أدناه (اعلم أنني قد لا أتمكن من الرد ، لكنني سأبذل قصارى جهدي)

موصى به: