תוכן עניינים:

מראה אינסוף עם LCD וחיישן IR: 5 שלבים
מראה אינסוף עם LCD וחיישן IR: 5 שלבים

וִידֵאוֹ: מראה אינסוף עם LCD וחיישן IR: 5 שלבים

וִידֵאוֹ: מראה אינסוף עם LCD וחיישן IR: 5 שלבים
וִידֵאוֹ: DSLR - זמן לעבור לחסרי מראה? 2024, יולי
Anonim
מראה אינסוף עם LCD וחיישן IR
מראה אינסוף עם LCD וחיישן IR
מראה אינסוף עם LCD וחיישן IR
מראה אינסוף עם LCD וחיישן IR
מראה אינסוף עם LCD וחיישן IR
מראה אינסוף עם LCD וחיישן IR

הפרויקט הזה יראה לך איך אתה יכול ליצור מראה אינסוף. הרעיון הבסיסי הוא שנוריות הלדים שנמצאות על המראה יוצרות אור שמקפיץ מהמראה האחורית למראה הקדמית שם קצת אור בורח כדי שנוכל לראות מבפנים וחלקן משתקפות בחזרה אל המראה האחורית ומייצרות את האפקט האינסופי. זה מבוסס על מראה אינפיניטי עם חיישנים אולטרה סוניק הניתנים להדרכה על ידי Hack Sioux Falls וכיצד לחבר את תצוגת I2C Lcd ל- Arduino Uno על ידי JunezRiyaz.

אספקה

1. קופסת צללים ($ 50)

2. סרט מראה חד כיווני (17 $)

3. רצועת אור RGB LED (30 $)

4. ארדואינו ($ 35)

5. מראה (10 $)

אופציונאלי:

1. חיישן IR ושלט ($ 20)

2. LCD (20 $)

3. 7 מחברים נקבה לזכר

4. 3 מחברים זכר לזכר

כלים

1. מלחם

2. חותך וחשפן חוטים

3. משהו לחתוך איתו את המראה

*שים לב שכל המחירים ב- CAD והגדלים יהיו תלויים בקופסה שבה אתה משתמש.

שלב 1: התקנת המראה וסרט המראה

התקנת המראה וסרט המראה
התקנת המראה וסרט המראה
התקנת המראה וסרט המראה
התקנת המראה וסרט המראה

הדבר הראשון שצריך לעשות הוא להתקין את המראה שתהיה בחלק האחורי של קופסת הצללים. אתה רוצה לקבל אחד בגודל הנכון או לקבל אחד שהוא גדול יותר ואז לחתוך אותו. אך לשם כך, עליך להשתמש במראה ולא בסרט כיוון שאנו רוצים שכל האור יוחזר לאחור, גם סרט המראה יכול לקבל את דפוס החומר עליו הוא נמצא אם אינו זכוכית.

כאשר אתה מתקין את המראה הקפד לאבטח אותו בקופסת הצללים, הייתי ממליץ להשתמש בחתיכות עץ קטנות ומסמרים כדי לוודא שהמראה לא זזה. לא הייתה לי מראה בזמן שהייתי צריך להשלים את הפרויקט הזה אז השתמשתי בסרט (אפשר לראות בתמונות). הקונספט מסתדר אבל לא כל כך טוב ונותן מראה זוויתי וכאוטי שלדעתי לא נראה טוב.

כל סרט מראה הולך להיות קצת שונה אבל זה שקיבלתי אמר לנקות את הזכוכית שאנו מניחים עליה את הסרט ואז להשתמש בקלטת כדי להסיר את הסרט המגן בצד אחד ולהשתמש במי סבון בתרסיס בקבוק הניח את הסרט על הזכוכית. לאחר מכן השתמש בכרטיס אשראי או במגב להיפטר מבועות אוויר ומים עודפים. שוב לא הייתה לי זכוכית אבל זה עדיין עובד אותו דבר. לאחר מכן השאירו את הכוס לייבוש למשך הלילה וזה צריך להיעשות.

שלב 2: הגדרת רצועת LED

הגדרת רצועת LED
הגדרת רצועת LED
הגדרת רצועת LED
הגדרת רצועת LED

עבור נוריות הלדים פשוט השתמשתי בקלטת הדו -צדדית הכלולה כדי להדביק אותה למסגרת ועשיתי חור שיצא החוט החוצה. בכל פינה הלחמתי מוליכים לחיבור לרצועה אחרת כדי לשמור על צורת הקופסה ללא קצוות מעוגלים. הקפד לחתוך את הרצועות רק בנקודות בהן יש מגעים שיאפשרו לזה לקרות ואל תשנה את הכיוון שהנוריות מתחברות זו לזו הידועה בשם היפוך הקוטביות. ברצועה שקיבלתי היו חיצים כדי לוודא שזה לא יקרה לכן הקפד לבדוק שכולם מצביעים לאותו כיוון.

עשיתי חור קטן כדי להעביר את הכבל אל הצד החיצוני של הקופסה, הנורות שהיו לי היו שלוש נוריות ניתנות להתייחסות כך שהיו לי מחברי חשמל, קרקע ונתונים. השתמשתי ב- Digital Pin 3 למחבר הנתונים, הקפד לבדוק את רצועות הלד שלך כדי לוודא שהן פועלות לפני הדבקתן למסגרת והקפד להשתמש רק במתח המומלץ עבור שלי שהוא 5 - 6 וולט.

שלב 3: הרכבת חיישן ה- IR וה- LCD (אופציונלי)

הרכבת חיישן ה- IR וה- LCD (אופציונלי)
הרכבת חיישן ה- IR וה- LCD (אופציונלי)
הרכבת חיישן ה- IR וה- LCD (אופציונלי)
הרכבת חיישן ה- IR וה- LCD (אופציונלי)
הרכבת חיישן ה- IR וה- LCD (אופציונלי)
הרכבת חיישן ה- IR וה- LCD (אופציונלי)

בחרתי להשתמש בחיישן IR ובשלט כדי לשנות את אפקטי התאורה ולהשתמש ו- LCD להראות למשתמש את האפשרויות שיש לו לאפקטים.

כדי להרכיב את חיישן ה- LCD וה- IR הייתי משתמש באקדח דבק חם ומדביק אותם לחלק העליון של המסגרת ומחבר הכל לחלק האחורי אבל לא רציתי שיתקנו אותם כי אולי אצטרך להוריד אותם לאחר הפרויקט נעשה.

כדי לחבר את מקלט ה- LCD וה- IR השתמשתי במחברים זכר לנקבה המתחברים לארדואינו עבור נתונים כמו גם קרקע והספק. כדי לחבר הכל השתמשתי בסיכה 12 עם הנגד של 2 kΩ על סיכת הנתונים של חיישן ה- IR, פין אנלוגי A4 עבור ה- SDA של ה- LCD והפין האנלוגי 5 עבור ה- SCL של ה- LCD.

שלב 4: קוד

לפרויקט זה אני משתמש בכמה ספריות שתצטרך להוריד כדי להשתמש בהן. אני הולך לשים אותם כאן, קח בחשבון שאני נמצא על חלונות כך שזה עשוי להשפיע אם אתה על Mac או Linux.

יהיה עליך לשנות את מספר הפיקסלים בהתאם למספר הלדים שיש לך. בניתי גם ממשק צג סידורי כך שתוכל להתממשק איתו כך אם אינך משתמש בחיישן IR.

// ספריות

#include Adafruit_NeoPixel.h> #include #include #include // סיכות וערכים קבועים // סיכות וערכים קבועים const RECV_PIN = 12; IRrecv irrecv (RECV_PIN); תוצאות decode_results; key_value ארוך ללא חתימה = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel פיקסלים = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // משתנים int IRNumb; int IRNumb2; int קשת = 0; uint32_t rainbowColor = פיקסלים.צבע (0, 0, 0); קלט char = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; הגדרת void () {// מאתחל רכיבים שאין צורך לחזור עליהם. lcd.begin (16, 2); // הגדרת 16 עמודות ושתי שורות של תצוגת lcd lcd.backlight (); // להפעלת התאורה האחורית Serial.begin (9600); פיקסלים.התחל (); irrecv.enableIRIn (); Serial.println ("הזן 0 כדי לכבות את האורות"); // הוראות התחלה Serial.println ("הזן 1 כדי להפוך את נוריות הלבן ללבן"); Serial.println ("הזן 2 כדי שהנוריות יסתובבו בצבעים שונים"); Serial.println ("הזן 3 כדי להתאים אישית את צבעי ה- LED באופן ידני"); } לולאת חלל () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// בודק אם תו זמין? קלט = (char) Serial.read (); } // בוחר את האפשרויות השונות אם (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // מעדכן את הנורות} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // מעדכן את הנורות} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("הזן כל דבר שאינו 2 ליציאה מהאפקט הזה, ואז כל אחת מהאפשרויות הטרפות לאפקט חדש.");

lcd.clear (); // נקה את המסך lcd.setCursor (0, 0); lcd.print ("צא באמצעות כל-"); lcd.setCursor (0, 1); lcd.print ("קהה את זה! = 2"); עבור (int i = 0; i = 48 && קלט <= 57) || breakCondition == 1 || IRNumb! = 2) {// בודק אם צריך לצאת מהאפקט rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; לשבור; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); עיכוב (100); } עבור (int i = 0; i = 48 && קלט <= 57) || breakCondition == 1 || IRNumb! = 2) {// בודק אם צריך לצאת מהאפקט rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; לשבור; } g ++; rainbowColor = colorChange (i, g, 0); setAll (rainbowColor); showStrip (); עיכוב (100); } עבור (int g = 0; g = 48 && קלט <= 57) || breakCondition == 1 || IRNumb! = 2) {// בודק אם צריך לצאת מהאפקט rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; לשבור; } r+= 2; rainbowColor = colorChange (r, g, 0); setAll (rainbowColor); showStrip (); עיכוב (100); } עבור (int b = 0; b = 48 && קלט <= 57) || breakCondition == 1 || IRNumb! = 2) {// בודק אם צריך לצאת מהאפקט rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; לשבור; } r+= 2; g+= 5; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); עיכוב (100); } mainOptions (); } אחרת אם (קלט == '3' || IRNumb == 3) {r = 0; g = 0; b = 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) {

לשבור; } אם (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } אחרת אם (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } אחרת אם (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); } אחרת אם (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }

אחרת אם (input2 == 'y' || IRNumb2 == 6) {

b+= 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }

אחרת אם (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colorChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }}} // הזן ערך 0 עד 255 כדי לקבל ערך צבע. uint32_t colorChange (int r, int g, int b) {פיקסלים חוזרים.צבע (r, g, b); } void mainOptions () {// בוחן את אפשרויות האפקט העיקרי lcd.clear (); // נקה את המסך 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); } בטל IRScan () {if (irrecv.decode (& תוצאות)) {

אם (results.value == 0XFFFFFFFF)

results.value = key_value; אחרת {//Serial.println(results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } אחרת אם (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } אחרת אם (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } אחרת אם (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } אחרת אם (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } אחרת אם (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } אחרת אם (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } אחרת אם (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } אחרת אם (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } אחרת אם (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }} בטל IRScan2 () {if (irrecv.decode (& תוצאות)) {

אם (results.value == 0XFFFFFFFF)

results.value = key_value; else {// Serial.println (results.value, HEX); if (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } אחרת אם (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } אחרת אם (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } אחרת אם (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } אחרת אם (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } אחרת אם (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } אחרת אם (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } אחרת אם (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } אחרת אם (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } אחרת אם (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} key_value = results.value; irrecv.resume (); }}

שלב 5: הרכבה

הַרכָּבָה
הַרכָּבָה

כדי להרכיב את הארדואינו למסגרת הייתי פשוט מדביק אותו ואת לוח הלחם שהשתמשתי בו בחלק האחורי של המסגרת ומנסה לכסות/להסתיר את הכבלים כדי שייראה טוב.

מוּמלָץ: