Oneindige spieël met LCD en IR -sensor: 5 stappe
Oneindige spieël met LCD en IR -sensor: 5 stappe
Anonim
Oneindige spieël met LCD en IR -sensor
Oneindige spieël met LCD en IR -sensor
Oneindige spieël met LCD en IR -sensor
Oneindige spieël met LCD en IR -sensor
Oneindige spieël met LCD en IR -sensor
Oneindige spieël met LCD en IR -sensor

Hierdie projek gaan u wys hoe u 'n Infinity Mirror kan maak. Die basiese konsep is dat die LED's op die spieël lig skep wat van die agterste spieël na die voorste spieël spring, waar 'n bietjie lig ontsnap sodat ons binne kan sien en sommige weerkaats na die agterspieël en die oneindige effek kan veroorsaak. Dit is gebaseer op die Infinity Mirror With Ultra Sonic Sensors Instructable by Hack Sioux Falls en Hoe om I2C Lcd -skerm aan te sluit op Arduino Uno deur JunezRiyaz.

Voorrade

1. 'n Shadow Box ($ 50)

2. 1-rigting spieëlfilm ($ 17)

3. 'n RGB LED -ligstrook ($ 30)

4. Arduino ($ 35)

5. 'n Spieël ($ 10)

Opsioneel:

1. IR -sensor en afstandsbediening ($ 20)

2. 'n LCD ($ 20)

3. 7 Verbindings tussen vroulik en manlik

4. 3 Verbindings van man tot man

Gereedskap

1. Soldeerbout

2. Wire Cutter en Stripper

3. Iets om die spieël mee te sny

*Let op dat alle pryse in CAD en groottes afhang van die boks wat u gebruik.

Stap 1: Installeer die spieël en die spieëlfilm

Die installering van die spieël en die spieëlfilm
Die installering van die spieël en die spieëlfilm
Die installering van die spieël en die spieëlfilm
Die installering van die spieël en die spieëlfilm

Die eerste ding wat u moet doen, is om die spieël wat agter in die skaduwee sit, te installeer. U wil een van die regte grootte kry, of een wat groter is en dit dan afsny. Maar hiervoor moet u 'n spieël gebruik en nie die film nie, want ons wil hê dat al die lig weerkaats word; die spieëlfilm kan ook die patroon aanneem van die materiaal waarop dit is as dit nie glas is nie.

As u die spieël installeer, moet u dit in die skaduskas sit, ek beveel aan dat u klein stukke hout en spykers gebruik om seker te maak dat die spieël nie beweeg nie. Ek het nie 'n spieël gehad toe ek hierdie projek moes voltooi nie, en ek het die film gebruik (u kan sien op die foto's). Die konsep werk uit, maar nie baie goed nie en gee 'n hoekige en chaotiese voorkoms wat na my mening nie goed lyk nie.

Elke spieëlfilm gaan 'n bietjie anders wees, maar die een wat ek gekry het, het gesê dat ons die glas waarop ons die film sit, moet skoonmaak om band te gebruik om die beskermende film aan die een kant af te trek en met seepwater in 'n spuitmiddel te gebruik sit die film op die glas. Gebruik dan 'n kredietkaart of 'n wisser om van lugborrels en oortollige water ontslae te raak. Ek het weereens nie glas gehad nie, maar dit werk steeds dieselfde. Laat die glas dan oornag droog word en dit moet gedoen word.

Stap 2: Die opstel van die LED -strook

Die opstel van die LED -strook
Die opstel van die LED -strook
Die opstel van die LED -strook
Die opstel van die LED -strook

Vir die LED's het ek net die meegeleverde dubbelzijdige band gebruik om dit aan die raam te plak en 'n gaatjie gemaak om die draad uit te kom. Op elke hoek het ek leidings gesoldeer om aan 'n ander strook te koppel om die vorm sonder afgeronde rande te behou. Maak seker dat u slegs die stroke sny op plekke waar daar kontakte is wat dit moontlik maak, en moet nie die rigting verander wat die LED's met mekaar verbind nie, bekend as die polariteit. Die strook wat ek gekry het, het pyle om te verseker dat dit nie gebeur nie, dus kyk of hulle almal in dieselfde rigting wys.

Ek het 'n klein gaatjie gemaak om die kabel aan die buitekant van die boks deur te sit; die LED's wat ek gehad het, was 3 -pins adresbare LED's, sodat ek krag-, grond- en datakonnekteerders gehad het. Ek het Digital Pin 3 vir die data -aansluiting gebruik. Maak seker dat u u LED -stroke toets om seker te maak dat dit werk voordat u dit aan die raam plak, en gebruik slegs die aanbevole spanning vir my een van 5 - 6 V.

Stap 3: Monteer die IR -sensor en die LCD (opsioneel)

Montering van die IR -sensor en die LCD (opsioneel)
Montering van die IR -sensor en die LCD (opsioneel)
Montering van die IR -sensor en die LCD (opsioneel)
Montering van die IR -sensor en die LCD (opsioneel)
Montering van die IR -sensor en die LCD (opsioneel)
Montering van die IR -sensor en die LCD (opsioneel)

Ek het gekies om 'n IR -sensor en afstandsbediening te gebruik om die beligtingseffekte te verander en te gebruik en 'n LCD om die gebruiker die opsies te wys wat hulle vir die effekte het.

Om die LCD- en IR -sensor te monteer, gebruik ek 'n warm lijmpistool en plak dit aan die bokant van die raam vas. is klaar.

Om die LCD- en IR -ontvanger aan te sluit, gebruik ek mannetjie -na -vroulike aansluitings wat by die Arduino aansluit vir data sowel as grond en krag. Om alles op te sit, gebruik ek pen 12 met 'n 2 kΩ -weerstand op die data -pen vir die IR -sensor, Analoge pen A4 vir die SDA van die LCD en Analoog pen 5 vir die SCL van die LCD.

Stap 4: Kode

Vir hierdie projek gebruik ek 'n paar biblioteke wat u moet aflaai om te gebruik. Ek gaan dit hier plaas, onthou dat ek op Windows is, sodat dit 'n uitwerking kan hê as u op Mac of Linux is.

U moet die aantal pixels verander, afhangende van die aantal LED's wat u het. Ek het ook 'n Serial Monitor -koppelvlak ingebou, sodat u daarmee kan koppel as u nie 'n IR -sensor gebruik nie.

// Biblioteke

#include Adafruit_NeoPixel.h> #include #include #include // Pins and Constant values // Pins and Constant valuesconst int RECV_PIN = 12; IRrecv irrecv (RECV_PIN); resultate van dekode_resultate; ongetekende lang sleutelwaarde = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel pixels = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIEF); // Veranderlikes int IRNumb; int IRNumb2; int reënboog = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); char invoer = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; leemte -opstelling () {// Begin elemente wat nie herhaal hoef te word nie. lcd.begin (16, 2); // Definieer 16 kolomme en 2 rye lcd -skerm lcd.backlight (); // Om die agtergrond Serial.begin (9600) aan te skakel; pixels.begin (); irrecv.enableIRIn (); Serial.println ("Tik 'n 0 om die ligte af te skakel"); // Beginning Instructions Serial.println ("Voer 'n 1 in om die LED's wit te maak"); Serial.println ("Voer 'n 2 in om die LED's deur verskillende kleure te laat loop"); Serial.println ("Tik 'n 3 om die LED -kleure handmatig aan te pas"); } leemte lus () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Kontroleer of 'n karakter beskikbaar is? input = (char) Serial.read (); } // Kies die verskillende opsies as (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // White setAll (rainbowColor); // Dateer die LED's op} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // Off setAll (rainbowColor); // Dateer die LED's op} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Voer alles in wat nie 'n 2 is om hierdie effek te verlaat nie, dan enige van die voorwendige opsies vir 'n nuwe effek.");

lcd.clear (); // Maak die skerm lcd.setCursor (0, 0) skoon; lcd.print ("Verlaat met behulp van enige-"); lcd.setCursor (0, 1); lcd.print ("verdoof dit! = 2"); vir (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontroleer of die effek verlaat moet word rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; breek; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); vertraging (100); } vir (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontroleer of die effek verlaat moet word rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; breek; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); vertraging (100); } vir (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontroleer of die effek verlaat moet word rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; breek; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); vertraging (100); } vir (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Kontroleer of die effek verlaat moet word rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; breek; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); vertraging (100); } mainOptions (); } anders as (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Enter n to exit");

Serial.println ("Gebruik w en s om die rooi kleur te verhoog of te verlaag"); Serial.println ("Gebruik r en f om die groen kleur te verhoog of te verlaag"); Serial.println ("Gebruik y en h om die blou kleur te verhoog of te verlaag"); lcd.clear (); // Maak die skerm lcd.setCursor (0, 0) skoon; lcd.print ("afrit: 0, 4/7: +/- rooi"); lcd.setCursor (0, 1); lcd.print ("5/8: groen, 6/9: blou");

terwyl (input2! = 'n '|| IRNumb2! = 0) {

as (Serial.available ()> 0) {// 'n karakter beskikbaar is? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

as (IRNumb2 == 0) {

breek; } as (input2 == 'w' || IRNumb2 == 4) {r+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } anders as (input2 == 's' || IRNumb2 == 7) {r- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } anders as (input2 == 'r' || IRNumb2 == 5) {g+= 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); } anders as (input2 == 'f' || IRNumb2 == 8) {g- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }

anders as (input2 == 'y' || IRNumb2 == 6) {

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

anders as (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 color) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, color); }}} // Voer 'n waarde 0 tot 255 in om 'n kleurwaarde te kry. uint32_t colourChange (int r, int g, int b) {return pixels. Color (r, g, b); } void mainOptions () {// Sien die hoofeffekopsies lcd.clear (); // Maak die skerm lcd.setCursor (0, 0) skoon; lcd.print ("0 vir ligte af"); lcd.setCursor (0, 1); lcd.print ("1: Wit lig"); vertraging (1000); lcd.clear (); // Maak die skerm lcd.setCursor (0, 0) skoon; lcd.print ("2: Kleur effek"); lcd.setCursor (0, 1); lcd.print ("3: Handleiding"); vertraging (1000); } ongeldig IRScan () {if (irrecv.decode (& resultate)) {

as (result.value == 0XFFFFFFFF)

results.value = sleutelwaarde; anders {//Serial.println(results.value, HEX); as (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb = 0; //Serial.println("0 "); } anders as (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb = 1; //Serial.println("1 "); } anders as (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb = 2; //Serial.println("2 "); } anders as (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb = 3; // Serial.println ("3"); } anders as (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb = 4; //Serial.println("4 "); } anders as (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb = 5; // Serial.println ("5"); } anders as (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb = 6; // Serial.println ("6"); } anders as (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb = 7; //Serial.println("7 "); } anders as (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb = 8; //Serial.println("8 "); } anders as (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb = 9; // Serial.println ("9"); }} sleutelwaarde = resultate.waarde; irrecv.resume (); }} ongeldig IRScan2 () {if (irrecv.decode (& resultate)) {

as (result.value == 0XFFFFFFFF)

results.value = sleutelwaarde; anders {// Serial.println (results.value, HEX); as (results.value == 0xFF6897 || results.value == 0xC101E57B) {IRNumb2 = 0; //Serial.println("0 "); } anders as (results.value == 0x9716BE3F || results.value == 0xFF30CF) {IRNumb2 = 1; //Serial.println("1 "); } anders as (results.value == 0x3D9AE3F7 || results.value == 0xFF18E7) {IRNumb2 = 2; //Serial.println("2 "); } anders as (results.value == 0xFF7A85 || results.value == 0x6182021B) {IRNumb2 = 3; // Serial.println ("3"); } anders as (results.value == 0x8C22657B || results.value == 0xFF10EF) {IRNumb2 = 4; //Serial.println("4 "); } anders as (results.value == 0xFF38C7 || results.value == 0x488F3CBB) {IRNumb2 = 5; // Serial.println ("5"); } anders as (results.value == 0x449E79F || results.value == 0xFF5AA5) {IRNumb2 = 6; // Serial.println ("6"); } anders as (results.value == 0xFF42BD || results.value == 0x32C6FDF7) {IRNumb2 = 7; //Serial.println("7 "); } anders as (results.value == 0x1BC0157B || results.value == 0xFF4AB5) {IRNumb2 = 8; //Serial.println("8 "); } anders as (results.value == 0xFF52AD || results.value == 0x3EC3FC1B) {IRNumb2 = 9; // Serial.println ("9"); }} sleutelwaarde = resultate.waarde; irrecv.resume (); }}

Stap 5: Montering

Montering
Montering

Om die Arduino aan die raam te monteer, plak ek dit en die broodbord wat ek aan die agterkant van die raam gebruik het, vas om dit goed te laat lyk.