Sadržaj:

Beskonačno ogledalo sa LCD i IC senzorom: 5 koraka
Beskonačno ogledalo sa LCD i IC senzorom: 5 koraka

Video: Beskonačno ogledalo sa LCD i IC senzorom: 5 koraka

Video: Beskonačno ogledalo sa LCD i IC senzorom: 5 koraka
Video: Mirror touch sensor light |Mirror light|Mirror backlight|mirror led #mirrorwork #mirror #mirrordecor 2024, Novembar
Anonim
Beskonačno ogledalo sa LCD i IR senzorom
Beskonačno ogledalo sa LCD i IR senzorom
Beskonačno ogledalo sa LCD i IC senzorom
Beskonačno ogledalo sa LCD i IC senzorom
Beskonačno ogledalo sa LCD i IR senzorom
Beskonačno ogledalo sa LCD i IR senzorom

Ovaj će vam projekt pokazati kako možete napraviti beskonačno ogledalo. Osnovni koncept je da LED diode koje se nalaze na ogledalu stvaraju svjetlost koja se odbija od stražnjeg ogledala do prednjeg ogledala gdje nešto svjetlosti izlazi tako da možemo vidjeti unutra, a neke se reflektiraju natrag prema stražnjem ogledalu i stvaraju beskonačan efekt. Ovo je zasnovano na Infinity Mirror -u sa ultrasoničnim senzorima koje može uputiti Hack Sioux Falls i Kako povezati June2Riyaz LCD ekran I2C sa Arduino Uno.

Supplies

1. Shadow Box (50 USD)

2. Jednosmjerni zrcalni film (17 USD)

3. RGB LED svjetlosna traka (30 USD)

4. Arduino (35 USD)

5. Ogledalo (10 USD)

Opciono:

1. IC senzor i daljinski upravljač (20 USD)

2. LCD (20 USD)

3. 7 Konektori ženski na muški

4. 3 konektora muški na muški

Alati

1. Lemilica

2. Rezač žice i skidač žice

3. Nešto čime se može izrezati ogledalo

*Imajte na umu da sve cijene u CAD -ima i veličine ovise o kutiji koju koristite.

Korak 1: Ugradnja ogledala i ogledala

Ugradnja ogledala i ogledala
Ugradnja ogledala i ogledala
Ugradnja ogledala i ogledala
Ugradnja ogledala i ogledala

Prvo što trebate učiniti je instalirati ogledalo koje će se nalaziti na stražnjoj strani kutije sjena. Želite ili nabaviti onu odgovarajuće veličine ili veću, pa je izrezati. Ali za to morate koristiti ogledalo, a ne film jer želimo da se cijela svjetlost reflektira unatrag. Zrcalna folija također može uzeti uzorak materijala na kojem se nalazi ako nije staklo.

Kad instalirate ogledalo, obavezno ga pričvrstite u kutiju za sjene, preporučio bih vam da koristite male komade drveta i eksere kako biste bili sigurni da se ogledalo ne pomiče. Nisam imao ogledalo u vremenu koje mi je trebalo da završim ovaj projekat pa sam koristio film (možete vidjeti na slikama). Koncept funkcionira, ali ne baš dobro i daje ukošen i kaotičan izgled koji po mom mišljenju ne izgleda dobro.

Svaki zrcalni film bit će malo drugačiji, ali onaj za koji sam rekao rekao je da očistimo staklo na koje stavljamo film, a zatim da upotrebimo traku za skidanje zaštitnog filma koji se nalazi s jedne strane i koristeći vodu sa sapunom u spreju boca staviti film na staklo. Zatim upotrijebite kreditnu karticu ili brisač da biste se riješili mjehurića zraka i viška vode. Još jednom nisam imao staklo, ali i dalje radi isto. Zatim ostavite staklo da se osuši preko noći i to je potrebno učiniti.

Korak 2: Postavljanje LED trake

Postavljanje LED trake
Postavljanje LED trake
Postavljanje LED trake
Postavljanje LED trake

Za LED diode samo sam upotrijebio priloženu dvostranu traku da je zalijepim na okvir i napravio rupu za izlazak žice. Na svakom uglu sam lemio vodiče za spajanje na drugu traku kako bi oblik kutije ostao bez zaobljenih rubova. Pazite da režete trake samo na mjestima gdje postoje kontakti koji bi dopustili da se to dogodi i nemojte mijenjati smjer spajanja LED dioda, što je poznato kao mijenjanje polariteta. Traka koju sam dobio imala je strelice kako bi se osiguralo da se to ne dogodi, stoga provjerite jesu li sve usmjerene u istom smjeru.

Napravio sam malu rupu da provučem kabel sa vanjske strane kutije, LED diode koje sam imao bile su 3 pin adresirane LED diode, tako da sam imao priključke za napajanje, uzemljenje i podatke. Koristio sam Digital Pin 3 za konektor za podatke, provjerite rade li vaše LED trake kako bi se uvjerili da rade prije nego što ih zalijepite na okvir i upotrijebite samo preporučeni napon za moj napon od 5 - 6 V.

Korak 3: Montiranje IC senzora i LCD -a (opcionalno)

Montaža IC senzora i LCD -a (opcionalno)
Montaža IC senzora i LCD -a (opcionalno)
Montaža IC senzora i LCD -a (opcionalno)
Montaža IC senzora i LCD -a (opcionalno)
Montaža IC senzora i LCD -a (opcionalno)
Montaža IC senzora i LCD -a (opcionalno)

Odabrao sam korištenje IC senzora i daljinskog upravljača za promjenu svjetlosnih efekata te korištenje i LCD -a za prikazivanje korisniku mogućnosti za efekte.

Za montiranje LCD i IC senzora upotrijebio bih pištolj za vruće ljepilo i zalijepio ih na vrh okvira i sve spojio sa stražnje strane, ali nisam želio da se poprave jer ću ih možda morati skinuti nakon projekta je učinjeno.

Za povezivanje LCD i IC prijemnika koristio sam muški i ženski konektor koji se priključuju na Arduino radi prijenosa podataka, kao i uzemljenja i napajanja. Da bih sve povezao, koristio sam pin 12 sa 2 kΩ otpornikom na podatkovnom pinu za IC senzor, analogni pin A4 za SDA LCD i analogni pin 5 za SCL LCD -a.

Korak 4: Kodirajte

Za ovaj projekt koristim nekoliko biblioteka koje biste morali preuzeti da biste ih koristili. Stavit ću ih ovdje, imajte na umu da sam na Windowsima, pa bi to moglo imati efekta ako ste na Mac -u ili Linux -u.

Morat ćete promijeniti broj piksela ovisno o broju LED dioda koje imate. Ugradio sam i sučelje za serijski monitor tako da se na taj način možete povezati s njim ako ne koristite IC senzor.

// Knjižnice

#include Adafruit_NeoPixel.h> #include #include #include // Vrednosti pinova i konstanti // Vrednosti pinova i konstanticonst int RECV_PIN = 12; IRrecv unrecv (RECV_PIN); decode_results rezultati; unsigned long key_value = 0; const int NUMPIXELS = 27;

Adafruit_NeoPixel piksela = Adafruit_NeoPixel (NUMPIXELS, 3);

LiquidCrystal_I2C lcd (0x27, 2, 1, 0, 4, 5, 6, 7, 3, POZITIVNO); // Varijable int IRNumb; int IRNumb2; int duga = 0; uint32_t rainbowColor = pixels. Color (0, 0, 0); char ulaz = 0; char input2 = 0; int r; int g; int b; int breakCondition = 0; void setup () {// Poništava elemente koje nije potrebno ponavljati. lcd.begin (16, 2); // Definiranje 16 stupaca i 2 reda lcd prikaza lcd.backlight (); // Za uključivanje pozadinskog osvjetljenja Serial.begin (9600); pixels.begin (); unrecv.enableIRIn (); Serial.println ("Unesite 0 za gašenje svjetla"); // Uputstva za početak Serial.println ("Unesite 1 za okretanje LED dioda u bijelo"); Serial.println ("Unesite 2 da LED diode prolaze kroz različite boje"); Serial.println ("Unesite 3 za ručno prilagođavanje LED boja"); } void loop () {IRNumb = 10; IRScan (); mainOptions (); if (Serial.available ()> 0) {// Provjerava je li znak dostupan? input = (char) Serial.read (); } // Bira različite opcije if (input == '1' || IRNumb == 1) {rainbowColor = colourChange (255, 255, 255); // Bijela setAll (rainbowColor); // Ažurira LED diode} else if (input == '0' || IRNumb == 0) {rainbowColor = colourChange (0, 0, 0); // isključeno setAll (rainbowColor); // Ažurira LED diode} else if (input == '2' || IRNumb == 2) {breakCondition = 0; r = 0; g = 0; b = 0;

Serial.println ("Unesite sve što nije 2 za izlaz iz ovog efekta, zatim bilo koju od preventivnih opcija za novi efekat.");

lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("Izlaz pomoću bilo kojeg-"); lcd.setCursor (0, 1); lcd.print ("numb that! = 2"); for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } rainbowColor = colourChange (i, 0, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int i = 0; i = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } g ++; rainbowColor = colourChange (i, g, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int g = 0; g = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } r+= 2; rainbowColor = colourChange (r, g, 0); setAll (rainbowColor); showStrip (); kašnjenje (100); } for (int b = 0; b = 48 && input <= 57) || breakCondition == 1 || IRNumb! = 2) {// Provjerava treba li izaći iz efekta rainbowColor = colourChange (0, 0, 0); setAll (rainbowColor); breakCondition = 1; break; } r+= 2; g+= 5; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); kašnjenje (100); } mainOptions (); } else if (input == '3' || IRNumb == 3) {r = 0; g = 0; b = 0;

Serial.println ("Unesite n za izlaz");

Serial.println ("Koristite w i s za povećanje ili smanjenje crvene boje"); Serial.println ("Koristite r i f za povećanje ili smanjenje zelene boje"); Serial.println ("Koristite y i h za povećanje ili smanjenje plave boje"); lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("izlaz: 0, 4/7: +/- crveno"); lcd.setCursor (0, 1); lcd.print ("5/8: zelena, 6/9: plava");

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

if (Serial.available ()> 0) {// je li znak dostupan? input2 = (char) Serial.read (); } //Serial.println(IRNumb2); IRNumb2 = 10; IRScan2 ();

if (IRNumb2 == 0) {

break; } 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 (); }

inače if (input2 == 'y' || IRNumb2 == 6) {

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

inače if (input2 == 'h' || IRNumb2 == 9) {

b- = 2; rainbowColor = colourChange (r, g, b); setAll (rainbowColor); showStrip (); }} mainOptions (); } setAll (rainbowColor); showStrip (); } void showStrip () {pixels.show (); } void setAll (boja uint32_t) {for (int i = 0; i <NUMPIXELS; i ++) {pixels.setPixelColor (i, boja); }} // Unesite vrijednost od 0 do 255 da biste dobili vrijednost boje. uint32_t colourChange (int r, int g, int b) {povrat piksela. Boja (r, g, b); } void mainOptions () {// Prebacuje opcije glavnih efekata lcd.clear (); // Očisti ekran lcd.setCursor (0, 0); lcd.print ("0 za isključeno svjetlo"); lcd.setCursor (0, 1); lcd.print ("1: Bijelo svjetlo"); kašnjenje (1000); lcd.clear (); // Očistite ekran lcd.setCursor (0, 0); lcd.print ("2: Efekat boje"); lcd.setCursor (0, 1); lcd.print ("3: Priručnik"); kašnjenje (1000); } void IRScan () {if (unrecv.decode (& results)) {

if (results.value == 0XFFFFFFFF)

results.value = key_value; else {//Serial.println(results.value, HEX); if (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; unrecv.resume (); }} void IRScan2 () {if (unrecv.decode (& results)) {

if (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 "); } 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; unrecv.resume (); }}

Korak 5: Montiranje

Montaža
Montaža

Za montiranje Arduina na okvir samo bih ga zalijepio i ploču koju sam koristio na stražnju stranu okvira i pokušao pokriti/sakriti kabele kako bi izgledao dobro.

Preporučuje se: