Բովանդակություն:

Անվերջության հայելի LCD և IR սենսորով ՝ 5 քայլ
Անվերջության հայելի LCD և IR սենսորով ՝ 5 քայլ

Video: Անվերջության հայելի LCD և IR սենսորով ՝ 5 քայլ

Video: Անվերջության հայելի LCD և IR սենսորով ՝ 5 քայլ
Video: Artistsuniversum : Infinity mirror 2024, Նոյեմբեր
Anonim
Անվերջության հայելի LCD և IR սենսորով
Անվերջության հայելի LCD և IR սենսորով
Անվերջության հայելի LCD և IR սենսորով
Անվերջության հայելի LCD և IR սենսորով
Անվերջության հայելի LCD և IR սենսորով
Անվերջության հայելի LCD և IR սենսորով

Այս նախագիծը ձեզ ցույց կտա, թե ինչպես կարող եք ստեղծել Infinity Mirror: Հիմնական հասկացությունն այն է, որ LED- ները, որոնք գտնվում են հայելու վրա, ստեղծում են լույս, որը ցատկում է հետևի հայելուց մինչև առջևի հայելին, որտեղից որոշ լույս է դուրս գալիս, որպեսզի մենք տեսնենք ներսը, իսկ ոմանք արտացոլվեն ետևի հայելուն և արտադրեն անսահման ազդեցություն: Սա հիմնված է Infinity Mirror With Ultra Sonic սենսորների վրա, որոնք ուսուցանվում են Hack Sioux Falls- ի կողմից և ինչպես միացնել I2C LCD էկրանը Arduino Uno- ին մինչև JunezRiyaz:

Պարագաներ

1. A Shadow Box (50 դոլար)

2. 1 ուղղությամբ հայելի ֆիլմ ($ 17)

3. RGB LED լուսարձակ (30 դոլար)

4. Arduino (35 դոլար)

5. Հայելի ($ 10)

Լրացուցիչ:

1. IR սենսոր և հեռակառավարիչ (20 դոլար)

2. LCD (20 դոլար)

3. 7 իգականից արական միակցիչներ

4. 3 Արականից արական միակցիչներ

Գործիքներ

1. oldոդման երկաթ

2. Մետաղալար և մերկացուցիչ

3. Ինչ -որ բան հայելին կտրելու համար

*Նշեք, որ CAD- ի և չափերի բոլոր գները կախված կլինեն ձեր օգտագործած տուփից:

Քայլ 1: Հայելիի և հայելային ֆիլմի տեղադրում

Տեղադրելով հայելին և հայելային ֆիլմը
Տեղադրելով հայելին և հայելային ֆիլմը
Տեղադրելով հայելին և հայելային ֆիլմը
Տեղադրելով հայելին և հայելային ֆիլմը

Առաջին բանը, որ պետք է անել, այն հայելին տեղադրելն է, որը լինելու է ստվերային տուփի հետևի մասում: Դուք կամ ցանկանում եք ստանալ այն, ինչ ճիշտ է, կամ ստանալ ավելի մեծը, այնուհետև կրճատել այն: Բայց դրա համար պետք է օգտագործել հայելին, այլ ոչ թե ֆիլմը, քանի որ մենք ցանկանում ենք, որ ամբողջ լույսը հետ արտացոլվի:

Երբ տեղադրում եք հայելին, համոզվեք, որ այն ամրացրեք ստվերային տուփի մեջ, խորհուրդ կտամ օգտագործել փոքր կտորներ և եղունգներ `համոզվելու համար, որ հայելին չի շարժվում: Ես չունեի հայելի այն ժամանակ, երբ ստիպված էի ավարտել այս նախագիծը, այնպես որ ես օգտագործեցի ֆիլմը (Դուք կարող եք տեսնել նկարներում): Հայեցակարգն աշխատում է, բայց ոչ այնքան լավ և տալիս է անկյունային և քաոսային տեսք, որն, իմ կարծիքով, լավ տեսք չունի:

Յուրաքանչյուր հայելային ֆիլմ մի փոքր տարբերվելու է, բայց այն, ինչ ես ասացի, մաքրեց ապակին, որի վրա մենք դնում ենք ֆիլմը, այնուհետև ժապավենով `հանելու մի կողմում գտնվող պաշտպանիչ ֆիլմը և օճառաջուր օգտագործելով լակի մեջ: շիշը ֆիլմը դրեց ապակու վրա: Այնուհետեւ օգտագործեք վարկային քարտ կամ քամիչ `օդային պղպջակներից եւ ավելորդ ջրից ազատվելու համար: Ես կրկին ապակի չունեի, բայց այն դեռ նույնն է աշխատում: Այնուհետեւ թողեք, որ ապակին չորանա ամբողջ գիշեր, եւ դա պետք է արվի:

Քայլ 2: LED շերտի տեղադրում

LED շերտի տեղադրում
LED շերտի տեղադրում
LED շերտի տեղադրում
LED շերտի տեղադրում

LED- ների համար ես պարզապես օգտագործեցի ներառված երկկողմանի ժապավենը `այն շրջանակին կպցնելու համար և մետաղալարից դուրս գալու համար անցք արեցի: Յուրաքանչյուր անկյունում ես կապում էի լարերը, որպեսզի միանամ մեկ այլ ժապավենի, որպեսզի տուփի ձևը մնա առանց կլորացված եզրերի: Համոզվեք, որ կտրեք շերտերը միայն այն վայրերում, որտեղ կան շփումներ, որոնք թույլ կտան նման բան տեղի ունենալ և մի փոխեք LED- ների միմյանց միացման ուղղությունը, որը հայտնի է որպես բևեռականություն հակադարձում: Շերտը, որը ես ստացել եմ, սլաքներ ուներ `համոզվելու համար, որ դա տեղի չի ունենում, այնպես որ համոզվեք, որ դրանք բոլորը նույն ուղղությամբ են ուղղված:

Ես մի փոքր անցք արեցի, որպեսզի մալուխը տուփի արտաքին մասի մեջ դնեմ: LED- ները, որոնք ունեի, 3 պին հասցեական լուսադիոդային լուսադիոդներ էին, այնպես որ ես ունեի հոսանքի, գրունտի և տվյալների միակցիչներ: Տվյալների միակցիչի համար ես օգտագործել եմ Digital Pin 3 -ը, համոզվեք, որ փորձարկեք ձեր LED շերտերը `համոզվելու համար, որ դրանք աշխատում են, նախքան դրանք շրջանակին ամրացնելը և համոզվեք, որ օգտագործեք միայն իմ առաջարկած լարումը` 5 - 6 Վ:

Քայլ 3: IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)

IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)
IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)
IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)
IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)
IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)
IR սենսորի և LCD- ի տեղադրում (ըստ ցանկության)

Ես ընտրեցի օգտագործել IR սենսոր և հեռակառավարիչ ՝ լուսավորման էֆեկտները փոխելու և օգտագործելու համար, և LCD ՝ օգտվողին ցուցադրելու համար էֆեկտների իրենց ունեցած տարբերակները:

LCD և IR սենսոր տեղադրելու համար ես օգտագործում էի տաք սոսինձ ատրճանակ և դրանք կպցնում էի շրջանակի վերևին և ամեն ինչ միացնում էի հետևի մասում, բայց չէի ուզում, որ դրանք շտկվեն, քանի որ նախագծից հետո գուցե ստիպված լինեմ դրանք հանել: կատարվում է:

LCD և IR ընդունիչ սարքը միացնելու համար ես օգտագործել եմ արական և իգական միակցիչներ, որոնք միանում են Arduino- ին տվյալների, ինչպես նաև գրունտի և հզորության համար: Ամեն ինչ լարելու համար ես օգտագործել եմ 12 -րդ կապը ՝ 2 կՄ ռեզիստորով, IR սենսորի տվյալների տվյալների վրա, անալոգային կապիչ A4 ՝ LCD- ի SDA- ի համար և անալոգային կապիչ 5 ՝ LCD- ի SCL- ի համար:

Քայլ 4: Կոդ

Այս նախագծի համար ես օգտագործում եմ մի քանի գրադարաններ, որոնք օգտագործելու համար դուք պետք է ներբեռնեք: Ես պատրաստվում եմ դրանք տեղադրել այստեղ, հիշեք, որ ես Windows- ում եմ, որպեսզի կարող է ազդեցություն ունենալ, եթե Mac- ում կամ Linux- ում եք:

Դուք ստիպված կլինեք փոխել պիքսելների քանակը ՝ կախված ձեր ունեցած LED- ների քանակից: Ես նաև ներկառուցել եմ Serial Monitor ինտերֆեյսը, որպեսզի կարողանաք այդ կերպ ինտերֆեյս անել դրա հետ, եթե չեք օգտագործում IR սենսոր:

// Գրադարաններ

#ներառել Adafruit_NeoPixel.h> #ներառել #ներառել #ներառել // կապում և հաստատուն արժեքներ // քորոցներ և մշտական արժեքներ < / b> ներառեք RECV_PIN = 12; IRrecv irrecv (RECV_PIN); decode_results 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, ԴՐԱԿԱՆ); // փոփոխականներ IRNumb; int IRNumb2; int ծիածան = 0; uint32_t rainbowColor = պիքսել: Գույն (0, 0, 0); char մուտքագրում = 0; ածխածնի մուտքագրում 2 = 0; int r; int g; int բ; int breakCondition = 0; void setup () {// Initallizes տարրեր, որոնք կրկնելու կարիք չունեն: lcd.begin (16, 2); // 16 սյուների և LCD տողերի 2 տողերի սահմանում lcd.backlight (); // Հետին լուսարձակը միացնելու համար Serial.begin (9600); pixels.begin (); irrecv.enableIRIn (); Serial.println («Մուտքագրեք 0 ՝ լույսերն անջատելու համար»); // Սկսելու հրահանգներ Serial.println («Մուտքագրեք 1 ՝ LED- ները սպիտակ դարձնելու համար»); Serial.println («Մուտքագրեք 2, որպեսզի LED- ները շրջվեն տարբեր գույներով»); Serial.println ("Մուտքագրեք 3 ՝ LED գույները ձեռքով հարմարեցնելու համար"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Ստուգում է, թե արդյոք կա՞ նիշ: մուտքագրում = (char) Serial.read (); } // Ընտրում է տարբեր տարբերակներ, եթե (մուտքագրում == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Թարմացնում է LED- ները} else if (մուտքագրում == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Անջատված setAll (rainbowColor); // Թարմացնում է LED- ները} else if (մուտքագրում == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Մուտքագրեք այն, ինչը 2 -ի համար չէ` այս էֆեկտից դուրս գալու համար, ապա նոր էֆեկտի գերադասելի տարբերակներից որևէ մեկը ");

lcd. հստակ (); // Մաքրել էկրանը lcd.setCursor (0, 0); lcd.print («Ելք ցանկացածի օգտագործմամբ»); lcd.setCursor (0, 1); lcd.print ("numb that! = 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; ընդմիջում; } գ ++; rainbowColor = colourChange (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 = colourChange (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 = colourChange (r, g, b); setAll (rainbowColor); showStrip (); ուշացում (100); } mainOptions (); } else if (մուտքագրում == '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 ("exit: 0, 4/7: +/- red"); lcd.setCursor (0, 1); lcd.print («5/8 ՝ կանաչ, 6/9 ՝ կապույտ»);

while (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; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } else if (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

այլապես եթե (input2 == 'y' || IRNumb2 == 6) {

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

այլապես եթե (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (uint32_t գույն) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, գույն); }} // Գույնի արժեք ստանալու համար մուտքագրեք 0 -ից 255 արժեք: uint32_t colourChange (int r, int g, int b) {վերադարձնել պիքսելները: Color (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); } void IRScan () {if (irrecv.decode (& results))) {

եթե (results.value == 0XFFFFFFFF)

results.value = key_value; այլ {//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; else {// 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- ն շրջանակին ամրացնելու համար ես պարզապես կպցրեի այն և այն տախտակը, որը ես օգտագործում էի շրջանակի հետևի մասում և փորձում էի ծածկել/թաքցնել մալուխները, որպեսզի այն լավ տեսք ունենա:

Խորհուրդ ենք տալիս: