جدول المحتويات:
فيديو: ساعة مرآة إنفينيتي مع مقاييس الجهد: 3 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:37
صادفت مرآة لا متناهية ووجدتها رائعة حقًا. ألهمني هذا أن أصنع مرآة لا متناهية ، لكنني كنت بحاجة إليها ليكون لها هدف. لذلك ، قررت أن أصنع ساعة مرآة لا متناهية. هذه مرآة لا متناهية تتيح لك تغيير الأوضاع والسرعة والألوان باستخدام مقاييس الجهد. (ملاحظة: هذه هي المرة الأولى التي أصنع فيها شيئًا كهذا)
اللوازم
دعنا نتعمق في ما تحتاجه لصنع هذا الشيء!
سوف تحتاج…
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: تهانينا ، لقد أكملت المشروع وكل شيء يجب أن يعمل بشكل جيد
إذا كانت لديك أي أسئلة ، فيرجى التعليق عليها أدناه (اعلم أنني قد لا أتمكن من الرد ، لكنني سأبذل قصارى جهدي)
موصى به:
اصنع ساعة مرآة إنفينيتي: 15 خطوة (بالصور)
اصنع ساعة إنفينيتي ميرور: في مشروع سابق قمت ببناء مرآة لا متناهية ، حيث كان هدفي النهائي هو تحويلها إلى ساعة. (اصنع مرآة إنفينيتي ملونة) لم أتابع ذلك بعد بنائه لأنه ، على الرغم من أنه يبدو رائعًا ، إلا أنه كان هناك بعض الأشياء مع
Vortex Watch: ساعة يد ذات مرآة إنفينيتي: 10 خطوات (مع صور)
Vortex Watch: ساعة يد ذات مرآة إنفينيتي: كان الهدف من هذا المشروع هو إنشاء نسخة يمكن ارتداؤها من ساعة مرآة لا متناهية. تستخدم مصابيح RGB LED الخاصة بها للإشارة إلى الوقت من خلال تخصيص الساعات والدقائق والثواني للأضواء الحمراء والخضراء والأزرق على التوالي وتداخل هذه الأشكال مع
ساعة مرآة إنفينيتي سهلة الصنع: 3 خطوات
Easy DIY Infinity Mirror Clock: إذا كنت تشعر بالملل من ساعتك العادية ، فحاول صنع ساعة DIY Infinity Mirror Clock الرائعة. لرفع مستوى غرفتك
ساعة مرآة إنفينيتي: 5 خطوات (مع صور)
ساعة المرآة اللانهائية: هذه ساعة مصنوعة يدويًا بشكل أساسي للزينة. هناك العديد من مصابيح LED في الساعة ، عند تشغيلها ، إنها زخرفة جميلة لغرفة النوم. عند إيقاف تشغيلها ، تكون مرآة صغيرة. بالطبع ، إنها ساعة بحد ذاتها
ساعة حائط مرآة إنفينيتي بإطار صورة ايكيا: 4 خطوات
ساعة حائط ذات مرآة إنفينيتي في إطار صورة ايكيا: مرحبًا ، كنت أرغب دائمًا في صنع ساعة حائط. يوجد الكثير من ساعات الحائط الرائعة في متاجر مثل ايكيا. واجهت بعض المشاكل مع هذه الساعات التجارية. هم صاخبون جدًا بالنسبة لي (تيك تاك المستمر مزعج) ، لا أستطيع رؤية عقارب الساعة