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

مرآة إنفينيتي مع جهاز استشعار LCD و IR: 5 خطوات
مرآة إنفينيتي مع جهاز استشعار LCD و IR: 5 خطوات

فيديو: مرآة إنفينيتي مع جهاز استشعار LCD و IR: 5 خطوات

فيديو: مرآة إنفينيتي مع جهاز استشعار LCD و IR: 5 خطوات
فيديو: إجعل عدسة الرسيفر ميني تعمل مع جميع الاجهزة بدون استعمال كاوية لحام 2024, شهر نوفمبر
Anonim
مرآة إنفينيتي مزودة بمستشعر LCD و IR
مرآة إنفينيتي مزودة بمستشعر LCD و IR
مرآة إنفينيتي مزودة بمستشعر LCD و IR
مرآة إنفينيتي مزودة بمستشعر LCD و IR
مرآة إنفينيتي مزودة بمستشعر LCD و IR
مرآة إنفينيتي مزودة بمستشعر LCD و IR

سيوضح لك هذا المشروع كيف يمكنك صنع مرآة إنفينيتي. المفهوم الأساسي هو أن مصابيح LED الموجودة على المرآة تخلق ضوءًا يرتد من المرآة الخلفية إلى المرآة الأمامية حيث يهرب بعض الضوء حتى نتمكن من رؤية الداخل وينعكس البعض مرة أخرى إلى المرآة الخلفية وينتج التأثير اللامتناهي. يعتمد هذا على المرآة اللامتناهية المزودة بمستشعرات فائقة الصوت قابلة للتوجيه بواسطة Hack Sioux Falls وكيفية توصيل شاشة I2C Lcd بـ Arduino Uno بواسطة JunezRiyaz.

اللوازم

1. A Shadow Box (50 دولارًا)

2.فيلم مرآة أحادي الاتجاه (17 دولارًا)

3. شريط إضاءة RGB LED (30 دولارًا)

4- Arduino (35 دولارًا)

5. مرآة (10 دولارات)

اختياري:

1. جهاز استشعار الأشعة تحت الحمراء وجهاز التحكم عن بعد (20 دولارًا)

2. شاشة LCD (20 دولارًا)

3. 7 موصلات أنثى إلى ذكر

4. 3 موصلات ذكر لذكر

أدوات

1. لحام الحديد

2. سلك القاطع والمتجرد

3. شيء لقطع المرآة به

* لاحظ أن جميع الأسعار بالدولار الكندي والأحجام ستعتمد على الصندوق الذي تستخدمه.

الخطوة 1: تركيب المرآة وغشاء المرآة

تركيب المرآة وغشاء المرآة
تركيب المرآة وغشاء المرآة
تركيب المرآة وغشاء المرآة
تركيب المرآة وغشاء المرآة

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

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

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

الخطوة 2: إعداد شريط LED

إعداد شريط LED
إعداد شريط LED
إعداد شريط LED
إعداد شريط LED

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

لقد صنعت ثقبًا صغيرًا لوضع الكبل في الخارج من الصندوق ، وكانت مصابيح LED التي أملكها عبارة عن 3 مصابيح LED قابلة للعنونة ، لذا كان لدي موصلات طاقة وأرضية وبيانات. لقد استخدمت Digital Pin 3 لموصل البيانات ، وتأكد من اختبار شرائط LED الخاصة بك للتأكد من أنها تعمل قبل إلصاقها بالإطار وتأكد من استخدام الجهد الموصى به فقط للجهد الذي يبلغ 5-6 فولت.

الخطوة 3: تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)

تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)
تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)
تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)
تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)
تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)
تركيب مستشعر الأشعة تحت الحمراء وشاشة LCD (اختياري)

اخترت استخدام مستشعر الأشعة تحت الحمراء وجهاز التحكم عن بعد لتغيير تأثيرات الإضاءة وللاستخدام وشاشة LCD لتظهر للمستخدم الخيارات المتاحة لديهم للتأثيرات.

لتركيب مستشعر LCD و IR ، كنت سأستخدم مسدس الغراء الساخن وألصقه بأعلى الإطار وسلك كل شيء في الخلف ، لكنني لم أرغب في إصلاحهما لأنني قد أضطر إلى خلعهما بعد المشروع تم.

لتوصيل شاشة LCD وجهاز استقبال الأشعة تحت الحمراء ، استخدمت موصلات Male to Female التي يتم توصيلها بـ Arduino للحصول على البيانات وكذلك الأرض والطاقة. لتوصيل كل شيء ، استخدمت الدبوس 12 بمقاوم 2 kΩ على دبوس البيانات لمستشعر الأشعة تحت الحمراء ، و Analog Pin A4 من أجل SDA لشاشة LCD و Analog Pin 5 لـ SCL لشاشة LCD.

الخطوة 4: الكود

بالنسبة لهذا المشروع ، أستخدم عددًا قليلاً من المكتبات التي يجب عليك تنزيلها لاستخدامها. سأضعها هنا ، ضع في اعتبارك أنني على windows لذلك قد يكون لذلك تأثير إذا كنت تستخدم نظام التشغيل Mac أو Linux.

سيتعين عليك تغيير عدد وحدات البكسل اعتمادًا على عدد مصابيح LED لديك. لقد قمت أيضًا ببناء واجهة Serial Monitor حتى تتمكن من التفاعل معها بهذه الطريقة إذا كنت لا تستخدم مستشعر الأشعة تحت الحمراء.

// المكتبات

# تضمين Adafruit_NeoPixel.h> # تضمين # تضمين # تضمين // دبابيس وقيم ثابتة // دبابيس وقيم ثابتةconst int RECV_PIN = 12 ؛ IRrecv irrecv (RECV_PIN) ؛ نتائج decode_results ؛ key_value طويل بدون توقيع = 0 ؛ const int NUMPIXELS = 27 ؛

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS، 3) ؛

LiquidCrystal_I2C lcd (0x27، 2، 1، 0، 4، 5، 6، 7، 3، POSITIVE)؛ // Variables int IRNumb؛ int IRNumb2 ؛ قوس قزح int = 0 ؛ uint32_t rainbowColor = بكسل ، لون (0 ، 0 ، 0) ؛ إدخال شار = 0 ؛ char input2 = 0 ؛ الباحث ص الباحث ز الباحث ب ؛ int breakCondition = 0 ؛ إعداد باطل () {// يهيئ العناصر التي لا يلزم تكرارها. lcd.begin (16 ، 2) ؛ // تحديد 16 عمودًا وصفين من شاشة عرض LCD lcd.backlight () ؛ // لتشغيل الإضاءة الخلفية Serial.begin (9600) ؛ pixels.begin () ، irrecv.enableIRIn () ، Serial.println ("أدخل 0 لإطفاء الأنوار") ؛ // تعليمات البداية Serial.println ("أدخل 1 لتحويل المصابيح إلى اللون الأبيض") ؛ Serial.println ("أدخل 2 لدورة مصابيح LED من خلال ألوان مختلفة") ؛ Serial.println ("أدخل 3 لتخصيص ألوان LED يدويًا") ؛ } حلقة باطلة () {IRNumb = 10 ؛ IRScan () ؛ mainOptions () ؛ if (Serial.available ()> 0) {// التحقق مما إذا كان الحرف متاحًا؟ المدخلات = (char) Serial.read () ؛ } // يختار الخيارات المختلفة إذا (المدخلات == '1' || IRNumb == 1) {rainbowColor = colourChange (255، 255، 255)؛ // أبيض setAll (لون قوس قزح) ؛ // يحدّث المصابيح} else if (المدخلات == '0' || IRNumb == 0) {rainbowColor = colourChange (0، 0، 0)؛ // Off setAll (لون قوس قزح) ؛ // يحدّث المصابيح} else if (input == '2' || IRNumb == 2) {breakCondition = 0 ؛ ص = 0 ؛ ز = 0 ؛ ب = 0 ؛

Serial.println ("أدخل أي شيء ليس 2 للخروج من هذا التأثير ، ثم أي من الخيارات السابقة لتأثير جديد.") ؛

lcd.clear () ؛ // تنظيف شاشة lcd.setCursor (0 ، 0) ؛ lcd.print ("الخروج باستخدام أي-") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("خدر ذلك! = 2") ؛ لـ (int i = 0 ؛ i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// للتحقق مما إذا كان التأثير بحاجة إلى الخروج rainbowColor = colourChange (0، 0، 0)؛ setAll (لون قوس قزح) ؛ BreakCondition = 1 ؛ استراحة؛ } rainbowColor = colourChange (i، 0، 0) ؛ setAll (لون قوس قزح) ؛ showStrip () ، تأخير (100) ؛ } لـ (int i = 0 ؛ i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// للتحقق مما إذا كان التأثير بحاجة إلى الخروج rainbowColor = colourChange (0، 0، 0)؛ setAll (لون قوس قزح) ؛ BreakCondition = 1 ؛ استراحة؛ } ز ++ ؛ قوس قزح لون = تغيير اللون (أنا ، ز ، 0) ؛ setAll (لون قوس قزح) ؛ showStrip () ، تأخير (100) ؛ } لـ (int g = 0 ؛ g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// للتحقق مما إذا كان التأثير بحاجة إلى الخروج rainbowColor = colourChange (0، 0، 0)؛ setAll (لون قوس قزح) ؛ BreakCondition = 1 ؛ استراحة؛ } ص + = 2 ؛ قوس قزح لون = تغيير اللون (ص ، ز ، 0) ؛ setAll (لون قوس قزح) ؛ showStrip () ، تأخير (100) ؛ } لـ (int b = 0 ؛ b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// للتحقق مما إذا كان التأثير بحاجة إلى الخروج rainbowColor = colourChange (0، 0، 0)؛ setAll (لون قوس قزح) ؛ BreakCondition = 1 ؛ استراحة؛ } ص + = 2 ؛ ز + = 5 ؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، تأخير (100) ؛ } mainOptions () ؛ } else if (input == '3' || IRNumb == 3) {r = 0 ؛ ز = 0 ؛ ب = 0 ؛

Serial.println ("أدخل n للخروج") ؛

Serial.println ("استخدم w و s لزيادة أو تقليل اللون الأحمر") ؛ Serial.println ("استخدم r و f لزيادة أو تقليل اللون الأخضر") ؛ Serial.println ("استخدم y و h لزيادة أو تقليل اللون الأزرق") ؛ lcd.clear () ؛ // تنظيف الشاشة lcd.setCursor (0 ، 0) ؛ lcd.print ("خروج: 0 ، 4/7: +/- أحمر") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("5/8: أخضر ، 6/9: أزرق") ؛

بينما (input2! = 'n' || IRNumb2! = 0) {

إذا (Serial.available ()> 0) {// هل الحرف متاح؟ input2 = (char) Serial.read () ، } //Serial.println(IRNumb2) ؛ IRNumb2 = 10 ؛ IRScan2 () ،

إذا (IRNumb2 == 0) {

استراحة؛ } if (input2 == 'w' || IRNumb2 == 4) {r + = 2؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، } else if (input2 == 's' || IRNumb2 == 7) {r- = 2؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، } else if (input2 == 'r' || IRNumb2 == 5) {g + = 2 ؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، }

else if (input2 == 'y' || IRNumb2 == 6) {

ب + = 2 ؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، }

else if (input2 == 'h' || IRNumb2 == 9) {

ب- = 2 ؛ قوس قزح لون = تغيير اللون (ص ، ز ، ب) ؛ setAll (لون قوس قزح) ؛ showStrip () ، }} mainOptions () ؛ } setAll (rainbowColor) ؛ showStrip () ، } void showStrip () {pixels.show ()؛ } باطل setAll (uint32_t color) {لـ (int i = 0؛ i <NUMPIXELS؛ i ++) {pixels.setPixelColor (i، color) ؛ }} // أدخل القيمة من 0 إلى 255 للحصول على قيمة اللون. uint32_t colourChange (int r، int g، int b) {return pixels. Color (r، g، b)؛ } void mainOptions () {// Sjows the main effect options lcd.clear ()؛ // Clean the screen lcd.setCursor (0، 0)؛ lcd.print ("0 لإطفاء الأنوار") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("1: الضوء الأبيض") ؛ تأخير (1000) ؛ lcd.clear () ؛ // تنظيف الشاشة lcd.setCursor (0 ، 0) ؛ lcd.print ("2: تأثير اللون") ؛ lcd.setCursor (0 ، 1) ؛ lcd.print ("3: يدوي") ؛ تأخير (1000) ؛ } void IRScan () {if (irrecv.decode (& results)) {

إذا كانت (results.value == 0XFFFFFFFFF)

results.value = key_value ؛ else {//Serial.println(results.value، HEX) ؛ إذا كانت (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0 ؛ //Serial.println("0 ") ؛ } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1؛ //Serial.println("1 ") ؛ } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2؛ //Serial.println("2 ") ؛ } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3 ؛ // Serial.println ("3") ؛ } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4 ؛ //Serial.println("4 ") ؛ } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5 ؛ // Serial.println ("5") ؛ } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6 ؛ // Serial.println ("6") ؛ } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7 ؛ //Serial.println("7 ") ؛ } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8 ؛ //Serial.println("8 ") ؛ } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9 ؛ // Serial.println ("9") ؛ }} key_value = results.value ؛ irrecv.resume () ؛ }} void IRScan2 () {if (irrecv.decode (& results)) {

إذا (results.value == 0XFFFFFFFF)

results.value = key_value ؛ آخر {// Serial.println (results.value، HEX) ؛ إذا كانت (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0 ؛ //Serial.println("0 ") ؛ } else if (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1؛ //Serial.println("1 ") ؛ } else if (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2 ؛ //Serial.println("2 ") ؛ } else if (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3 ؛ // Serial.println ("3") ؛ } else if (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4 ؛ //Serial.println("4 ") ؛ } else if (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5 ؛ // Serial.println ("5") ؛ } else if (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6 ؛ // Serial.println ("6") ؛ } else if (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7 ؛ //Serial.println("7 ") ؛ } else if (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8 ؛ //Serial.println("8 ") ؛ } else if (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9 ؛ // Serial.println ("9") ؛ }} key_value = results.value ؛ irrecv.resume () ؛ }}

الخطوة 5: التركيب

تصاعد
تصاعد

لتركيب Arduino على الإطار ، سأقوم فقط بلصقه واللوح الذي استخدمته في الجزء الخلفي من الإطار ومحاولة تغطية / إخفاء الكابلات لجعلها تبدو جيدة.

موصى به: